Repository: mihonapp/mihon Branch: main Commit: b58d2a5d4bbb Files: 1232 Total size: 10.7 MB Directory structure: gitextract_77iowqz2/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── .java-version │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── 1_request_feature.yml │ │ ├── 2_report_issue.yml │ │ └── config.yml │ ├── pull_request_template.md │ ├── renovate.json5 │ └── workflows/ │ ├── build.yml │ ├── release.yml │ └── update_website.yml ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app/ │ ├── build.gradle.kts │ ├── google-services.json │ ├── proguard-android-optimize.txt │ ├── proguard-rules.pro │ ├── shortcuts.xml │ └── src/ │ ├── debug/ │ │ └── res/ │ │ └── drawable/ │ │ ├── ic_launcher_background.xml │ │ └── ic_launcher_foreground.xml │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── aidl/ │ │ │ └── mihon/ │ │ │ └── app/ │ │ │ └── shizuku/ │ │ │ └── IShellInterface.aidl │ │ ├── baseline-prof.txt │ │ ├── java/ │ │ │ ├── eu/ │ │ │ │ └── kanade/ │ │ │ │ ├── core/ │ │ │ │ │ ├── preference/ │ │ │ │ │ │ ├── CheckboxState.kt │ │ │ │ │ │ └── PreferenceMutableState.kt │ │ │ │ │ └── util/ │ │ │ │ │ ├── CollectionUtils.kt │ │ │ │ │ └── SourceUtil.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── DomainModule.kt │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── BasePreferences.kt │ │ │ │ │ │ └── ExtensionInstallerPreference.kt │ │ │ │ │ ├── chapter/ │ │ │ │ │ │ ├── interactor/ │ │ │ │ │ │ │ ├── GetAvailableScanlators.kt │ │ │ │ │ │ │ ├── SetReadStatus.kt │ │ │ │ │ │ │ └── SyncChaptersWithSource.kt │ │ │ │ │ │ └── model/ │ │ │ │ │ │ ├── Chapter.kt │ │ │ │ │ │ └── ChapterFilter.kt │ │ │ │ │ ├── download/ │ │ │ │ │ │ └── interactor/ │ │ │ │ │ │ └── DeleteDownload.kt │ │ │ │ │ ├── extension/ │ │ │ │ │ │ ├── interactor/ │ │ │ │ │ │ │ ├── GetExtensionLanguages.kt │ │ │ │ │ │ │ ├── GetExtensionSources.kt │ │ │ │ │ │ │ ├── GetExtensionsByType.kt │ │ │ │ │ │ │ └── TrustExtension.kt │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── Extensions.kt │ │ │ │ │ ├── manga/ │ │ │ │ │ │ ├── interactor/ │ │ │ │ │ │ │ ├── GetExcludedScanlators.kt │ │ │ │ │ │ │ ├── SetExcludedScanlators.kt │ │ │ │ │ │ │ ├── SetMangaViewerFlags.kt │ │ │ │ │ │ │ └── UpdateManga.kt │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── Manga.kt │ │ │ │ │ ├── source/ │ │ │ │ │ │ ├── interactor/ │ │ │ │ │ │ │ ├── GetEnabledSources.kt │ │ │ │ │ │ │ ├── GetIncognitoState.kt │ │ │ │ │ │ │ ├── GetLanguagesWithSources.kt │ │ │ │ │ │ │ ├── GetSourcesWithFavoriteCount.kt │ │ │ │ │ │ │ ├── SetMigrateSorting.kt │ │ │ │ │ │ │ ├── ToggleIncognito.kt │ │ │ │ │ │ │ ├── ToggleLanguage.kt │ │ │ │ │ │ │ ├── ToggleSource.kt │ │ │ │ │ │ │ └── ToggleSourcePin.kt │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ └── Source.kt │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── SourcePreferences.kt │ │ │ │ │ ├── track/ │ │ │ │ │ │ ├── interactor/ │ │ │ │ │ │ │ ├── AddTracks.kt │ │ │ │ │ │ │ ├── RefreshTracks.kt │ │ │ │ │ │ │ ├── SyncChapterProgressWithTrack.kt │ │ │ │ │ │ │ └── TrackChapter.kt │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── AutoTrackState.kt │ │ │ │ │ │ │ └── Track.kt │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ ├── DelayedTrackingUpdateJob.kt │ │ │ │ │ │ │ └── TrackPreferences.kt │ │ │ │ │ │ └── store/ │ │ │ │ │ │ └── DelayedTrackingStore.kt │ │ │ │ │ └── ui/ │ │ │ │ │ ├── UiPreferences.kt │ │ │ │ │ └── model/ │ │ │ │ │ ├── AppTheme.kt │ │ │ │ │ ├── TabletUiMode.kt │ │ │ │ │ └── ThemeMode.kt │ │ │ │ ├── presentation/ │ │ │ │ │ ├── browse/ │ │ │ │ │ │ ├── BrowseSourceScreen.kt │ │ │ │ │ │ ├── ExtensionDetailsScreen.kt │ │ │ │ │ │ ├── ExtensionFilterScreen.kt │ │ │ │ │ │ ├── ExtensionsScreen.kt │ │ │ │ │ │ ├── GlobalSearchScreen.kt │ │ │ │ │ │ ├── MigrateSearchScreen.kt │ │ │ │ │ │ ├── MigrateSourceScreen.kt │ │ │ │ │ │ ├── SourcesFilterScreen.kt │ │ │ │ │ │ ├── SourcesScreen.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── BaseBrowseItem.kt │ │ │ │ │ │ ├── BaseSourceItem.kt │ │ │ │ │ │ ├── BrowseBadges.kt │ │ │ │ │ │ ├── BrowseIcons.kt │ │ │ │ │ │ ├── BrowseSourceComfortableGrid.kt │ │ │ │ │ │ ├── BrowseSourceCompactGrid.kt │ │ │ │ │ │ ├── BrowseSourceDialogs.kt │ │ │ │ │ │ ├── BrowseSourceList.kt │ │ │ │ │ │ ├── BrowseSourceLoadingItem.kt │ │ │ │ │ │ ├── BrowseSourceToolbar.kt │ │ │ │ │ │ ├── GlobalSearchCardRow.kt │ │ │ │ │ │ ├── GlobalSearchResultItems.kt │ │ │ │ │ │ └── GlobalSearchToolbar.kt │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── CategoryExtensions.kt │ │ │ │ │ │ ├── CategoryScreen.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── CategoryDialogs.kt │ │ │ │ │ │ ├── CategoryFloatingActionButton.kt │ │ │ │ │ │ └── CategoryListItem.kt │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AdaptiveSheet.kt │ │ │ │ │ │ ├── AppBar.kt │ │ │ │ │ │ ├── Banners.kt │ │ │ │ │ │ ├── DateText.kt │ │ │ │ │ │ ├── DownloadDropdownMenu.kt │ │ │ │ │ │ ├── DropdownMenu.kt │ │ │ │ │ │ ├── EmptyScreen.kt │ │ │ │ │ │ ├── TabbedDialog.kt │ │ │ │ │ │ └── TabbedScreen.kt │ │ │ │ │ ├── crash/ │ │ │ │ │ │ └── CrashScreen.kt │ │ │ │ │ ├── history/ │ │ │ │ │ │ ├── HistoryScreen.kt │ │ │ │ │ │ ├── HistoryScreenModelStateProvider.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── HistoryDialogs.kt │ │ │ │ │ │ ├── HistoryItem.kt │ │ │ │ │ │ └── HistoryWithRelationsProvider.kt │ │ │ │ │ ├── library/ │ │ │ │ │ │ ├── DeleteLibraryMangaDialog.kt │ │ │ │ │ │ ├── LibrarySettingsDialog.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── CommonMangaItem.kt │ │ │ │ │ │ ├── GlobalSearchItem.kt │ │ │ │ │ │ ├── LazyLibraryGrid.kt │ │ │ │ │ │ ├── LibraryBadges.kt │ │ │ │ │ │ ├── LibraryComfortableGrid.kt │ │ │ │ │ │ ├── LibraryCompactGrid.kt │ │ │ │ │ │ ├── LibraryContent.kt │ │ │ │ │ │ ├── LibraryList.kt │ │ │ │ │ │ ├── LibraryPager.kt │ │ │ │ │ │ ├── LibraryTabs.kt │ │ │ │ │ │ └── LibraryToolbar.kt │ │ │ │ │ ├── manga/ │ │ │ │ │ │ ├── ChapterSettingsDialog.kt │ │ │ │ │ │ ├── DuplicateMangaDialog.kt │ │ │ │ │ │ ├── MangaNotesScreen.kt │ │ │ │ │ │ ├── MangaScreen.kt │ │ │ │ │ │ ├── MangaScreenConstants.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── BaseMangaListItem.kt │ │ │ │ │ │ ├── ChapterDownloadIndicator.kt │ │ │ │ │ │ ├── ChapterHeader.kt │ │ │ │ │ │ ├── DotSeparatorText.kt │ │ │ │ │ │ ├── MangaBottomActionMenu.kt │ │ │ │ │ │ ├── MangaChapterListItem.kt │ │ │ │ │ │ ├── MangaCover.kt │ │ │ │ │ │ ├── MangaCoverDialog.kt │ │ │ │ │ │ ├── MangaDialogs.kt │ │ │ │ │ │ ├── MangaInfoHeader.kt │ │ │ │ │ │ ├── MangaNotesDisplay.kt │ │ │ │ │ │ ├── MangaNotesSection.kt │ │ │ │ │ │ ├── MangaNotesTextArea.kt │ │ │ │ │ │ ├── MangaToolbar.kt │ │ │ │ │ │ ├── MarkdownRender.kt │ │ │ │ │ │ ├── MissingChapterCountListItem.kt │ │ │ │ │ │ └── ScanlatorFilterDialog.kt │ │ │ │ │ ├── more/ │ │ │ │ │ │ ├── LogoHeader.kt │ │ │ │ │ │ ├── MoreScreen.kt │ │ │ │ │ │ ├── NewUpdateScreen.kt │ │ │ │ │ │ ├── onboarding/ │ │ │ │ │ │ │ ├── GuidesStep.kt │ │ │ │ │ │ │ ├── OnboardingScreen.kt │ │ │ │ │ │ │ ├── OnboardingStep.kt │ │ │ │ │ │ │ ├── PermissionStep.kt │ │ │ │ │ │ │ ├── StorageStep.kt │ │ │ │ │ │ │ └── ThemeStep.kt │ │ │ │ │ │ ├── settings/ │ │ │ │ │ │ │ ├── Preference.kt │ │ │ │ │ │ │ ├── PreferenceItem.kt │ │ │ │ │ │ │ ├── PreferenceScaffold.kt │ │ │ │ │ │ │ ├── PreferenceScreen.kt │ │ │ │ │ │ │ ├── screen/ │ │ │ │ │ │ │ │ ├── Commons.kt │ │ │ │ │ │ │ │ ├── SearchableSettings.kt │ │ │ │ │ │ │ │ ├── SettingsAdvancedScreen.kt │ │ │ │ │ │ │ │ ├── SettingsAppearanceScreen.kt │ │ │ │ │ │ │ │ ├── SettingsBrowseScreen.kt │ │ │ │ │ │ │ │ ├── SettingsDataScreen.kt │ │ │ │ │ │ │ │ ├── SettingsDownloadScreen.kt │ │ │ │ │ │ │ │ ├── SettingsLibraryScreen.kt │ │ │ │ │ │ │ │ ├── SettingsMainScreen.kt │ │ │ │ │ │ │ │ ├── SettingsReaderScreen.kt │ │ │ │ │ │ │ │ ├── SettingsSearchScreen.kt │ │ │ │ │ │ │ │ ├── SettingsSecurityScreen.kt │ │ │ │ │ │ │ │ ├── SettingsTrackingScreen.kt │ │ │ │ │ │ │ │ ├── about/ │ │ │ │ │ │ │ │ │ ├── AboutScreen.kt │ │ │ │ │ │ │ │ │ ├── OpenSourceLibraryLicenseScreen.kt │ │ │ │ │ │ │ │ │ └── OpenSourceLicensesScreen.kt │ │ │ │ │ │ │ │ ├── advanced/ │ │ │ │ │ │ │ │ │ └── ClearDatabaseScreen.kt │ │ │ │ │ │ │ │ ├── appearance/ │ │ │ │ │ │ │ │ │ └── AppLanguageScreen.kt │ │ │ │ │ │ │ │ ├── browse/ │ │ │ │ │ │ │ │ │ ├── ExtensionReposScreen.kt │ │ │ │ │ │ │ │ │ ├── ExtensionReposScreenModel.kt │ │ │ │ │ │ │ │ │ └── components/ │ │ │ │ │ │ │ │ │ ├── ExtensionReposContent.kt │ │ │ │ │ │ │ │ │ ├── ExtensionReposDialogs.kt │ │ │ │ │ │ │ │ │ └── ExtensionReposScreen.kt │ │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ │ ├── CreateBackupScreen.kt │ │ │ │ │ │ │ │ │ ├── RestoreBackupScreen.kt │ │ │ │ │ │ │ │ │ └── StorageInfo.kt │ │ │ │ │ │ │ │ └── debug/ │ │ │ │ │ │ │ │ ├── BackupSchemaScreen.kt │ │ │ │ │ │ │ │ ├── DebugInfoScreen.kt │ │ │ │ │ │ │ │ └── WorkerInfoScreen.kt │ │ │ │ │ │ │ └── widget/ │ │ │ │ │ │ │ ├── AppThemeModePreferenceWidget.kt │ │ │ │ │ │ │ ├── AppThemePreferenceWidget.kt │ │ │ │ │ │ │ ├── BasePreferenceWidget.kt │ │ │ │ │ │ │ ├── EditTextPreferenceWidget.kt │ │ │ │ │ │ │ ├── InfoWidget.kt │ │ │ │ │ │ │ ├── ListPreferenceWidget.kt │ │ │ │ │ │ │ ├── MultiSelectListPreferenceWidget.kt │ │ │ │ │ │ │ ├── PreferenceGroupHeader.kt │ │ │ │ │ │ │ ├── SwitchPreferenceWidget.kt │ │ │ │ │ │ │ ├── TextPreferenceWidget.kt │ │ │ │ │ │ │ ├── TrackingPreferenceWidget.kt │ │ │ │ │ │ │ └── TriStateListDialog.kt │ │ │ │ │ │ └── stats/ │ │ │ │ │ │ ├── StatsScreenContent.kt │ │ │ │ │ │ ├── StatsScreenState.kt │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── StatsItem.kt │ │ │ │ │ │ └── data/ │ │ │ │ │ │ └── StatsData.kt │ │ │ │ │ ├── reader/ │ │ │ │ │ │ ├── ChapterTransition.kt │ │ │ │ │ │ ├── DisplayRefreshHost.kt │ │ │ │ │ │ ├── OrientationSelectDialog.kt │ │ │ │ │ │ ├── ReaderContentOverlay.kt │ │ │ │ │ │ ├── ReaderPageActionsDialog.kt │ │ │ │ │ │ ├── ReaderPageIndicator.kt │ │ │ │ │ │ ├── ReadingModeSelectDialog.kt │ │ │ │ │ │ ├── appbars/ │ │ │ │ │ │ │ ├── ReaderAppBars.kt │ │ │ │ │ │ │ ├── ReaderBottomBar.kt │ │ │ │ │ │ │ └── ReaderTopBar.kt │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── ChapterNavigator.kt │ │ │ │ │ │ │ └── ModeSelectionDialog.kt │ │ │ │ │ │ └── settings/ │ │ │ │ │ │ ├── ColorFilterPage.kt │ │ │ │ │ │ ├── GeneralSettingsPage.kt │ │ │ │ │ │ ├── ReaderSettingsDialog.kt │ │ │ │ │ │ └── ReadingModePage.kt │ │ │ │ │ ├── theme/ │ │ │ │ │ │ ├── TachiyomiTheme.kt │ │ │ │ │ │ └── colorscheme/ │ │ │ │ │ │ ├── BaseColorScheme.kt │ │ │ │ │ │ ├── CatppuccinColorScheme.kt │ │ │ │ │ │ ├── GreenAppleColorScheme.kt │ │ │ │ │ │ ├── LavenderColorScheme.kt │ │ │ │ │ │ ├── MidnightDuskColorScheme.kt │ │ │ │ │ │ ├── MonetColorScheme.kt │ │ │ │ │ │ ├── MonochromeColorScheme.kt │ │ │ │ │ │ ├── NordColorScheme.kt │ │ │ │ │ │ ├── StrawberryColorScheme.kt │ │ │ │ │ │ ├── TachiyomiColorScheme.kt │ │ │ │ │ │ ├── TakoColorScheme.kt │ │ │ │ │ │ ├── TealTurqoiseColorScheme.kt │ │ │ │ │ │ ├── TidalWaveColorScheme.kt │ │ │ │ │ │ ├── YinYangColorScheme.kt │ │ │ │ │ │ └── YotsubaColorScheme.kt │ │ │ │ │ ├── track/ │ │ │ │ │ │ ├── TrackInfoDialogHome.kt │ │ │ │ │ │ ├── TrackInfoDialogHomePreviewProvider.kt │ │ │ │ │ │ ├── TrackInfoDialogSelector.kt │ │ │ │ │ │ ├── TrackerSearch.kt │ │ │ │ │ │ ├── TrackerSearchPreviewProvider.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── TrackLogoIcon.kt │ │ │ │ │ │ └── TrackLogoIconPreviewProvider.kt │ │ │ │ │ ├── updates/ │ │ │ │ │ │ ├── UpdatesDeleteConfirmationDialog.kt │ │ │ │ │ │ ├── UpdatesFilterDialog.kt │ │ │ │ │ │ ├── UpdatesScreen.kt │ │ │ │ │ │ └── UpdatesUiItem.kt │ │ │ │ │ ├── util/ │ │ │ │ │ │ ├── ChapterNumberFormatter.kt │ │ │ │ │ │ ├── ExceptionFormatter.kt │ │ │ │ │ │ ├── FastScrollAnimateItem.kt │ │ │ │ │ │ ├── Navigator.kt │ │ │ │ │ │ ├── Permissions.kt │ │ │ │ │ │ ├── Resources.kt │ │ │ │ │ │ ├── TimeUtils.kt │ │ │ │ │ │ └── WindowSize.kt │ │ │ │ │ └── webview/ │ │ │ │ │ └── WebViewScreenContent.kt │ │ │ │ ├── tachiyomi/ │ │ │ │ │ ├── App.kt │ │ │ │ │ ├── AppInfo.kt │ │ │ │ │ ├── crash/ │ │ │ │ │ │ ├── CrashActivity.kt │ │ │ │ │ │ └── GlobalExceptionHandler.kt │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── backup/ │ │ │ │ │ │ │ ├── BackupDecoder.kt │ │ │ │ │ │ │ ├── BackupFileValidator.kt │ │ │ │ │ │ │ ├── BackupNotifier.kt │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── BackupCreateJob.kt │ │ │ │ │ │ │ │ ├── BackupCreator.kt │ │ │ │ │ │ │ │ ├── BackupOptions.kt │ │ │ │ │ │ │ │ └── creators/ │ │ │ │ │ │ │ │ ├── CategoriesBackupCreator.kt │ │ │ │ │ │ │ │ ├── ExtensionRepoBackupCreator.kt │ │ │ │ │ │ │ │ ├── MangaBackupCreator.kt │ │ │ │ │ │ │ │ ├── PreferenceBackupCreator.kt │ │ │ │ │ │ │ │ └── SourcesBackupCreator.kt │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ ├── Backup.kt │ │ │ │ │ │ │ │ ├── BackupCategory.kt │ │ │ │ │ │ │ │ ├── BackupChapter.kt │ │ │ │ │ │ │ │ ├── BackupExtensionRepos.kt │ │ │ │ │ │ │ │ ├── BackupHistory.kt │ │ │ │ │ │ │ │ ├── BackupManga.kt │ │ │ │ │ │ │ │ ├── BackupPreference.kt │ │ │ │ │ │ │ │ ├── BackupSource.kt │ │ │ │ │ │ │ │ └── BackupTracking.kt │ │ │ │ │ │ │ └── restore/ │ │ │ │ │ │ │ ├── BackupRestoreJob.kt │ │ │ │ │ │ │ ├── BackupRestorer.kt │ │ │ │ │ │ │ ├── RestoreOptions.kt │ │ │ │ │ │ │ └── restorers/ │ │ │ │ │ │ │ ├── CategoriesRestorer.kt │ │ │ │ │ │ │ ├── ExtensionRepoRestorer.kt │ │ │ │ │ │ │ ├── MangaRestorer.kt │ │ │ │ │ │ │ └── PreferenceRestorer.kt │ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ │ ├── ChapterCache.kt │ │ │ │ │ │ │ └── CoverCache.kt │ │ │ │ │ │ ├── coil/ │ │ │ │ │ │ │ ├── BufferedSourceFetcher.kt │ │ │ │ │ │ │ ├── MangaCoverFetcher.kt │ │ │ │ │ │ │ ├── MangaCoverKeyer.kt │ │ │ │ │ │ │ ├── TachiyomiImageDecoder.kt │ │ │ │ │ │ │ └── Utils.kt │ │ │ │ │ │ ├── database/ │ │ │ │ │ │ │ └── models/ │ │ │ │ │ │ │ ├── Chapter.kt │ │ │ │ │ │ │ ├── ChapterImpl.kt │ │ │ │ │ │ │ ├── Track.kt │ │ │ │ │ │ │ └── TrackImpl.kt │ │ │ │ │ │ ├── download/ │ │ │ │ │ │ │ ├── DownloadCache.kt │ │ │ │ │ │ │ ├── DownloadJob.kt │ │ │ │ │ │ │ ├── DownloadManager.kt │ │ │ │ │ │ │ ├── DownloadNotifier.kt │ │ │ │ │ │ │ ├── DownloadPendingDeleter.kt │ │ │ │ │ │ │ ├── DownloadProvider.kt │ │ │ │ │ │ │ ├── DownloadStore.kt │ │ │ │ │ │ │ ├── Downloader.kt │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ └── Download.kt │ │ │ │ │ │ ├── export/ │ │ │ │ │ │ │ └── LibraryExporter.kt │ │ │ │ │ │ ├── library/ │ │ │ │ │ │ │ ├── LibraryUpdateJob.kt │ │ │ │ │ │ │ ├── LibraryUpdateNotifier.kt │ │ │ │ │ │ │ └── MetadataUpdateJob.kt │ │ │ │ │ │ ├── notification/ │ │ │ │ │ │ │ ├── NotificationHandler.kt │ │ │ │ │ │ │ ├── NotificationReceiver.kt │ │ │ │ │ │ │ └── Notifications.kt │ │ │ │ │ │ ├── preference/ │ │ │ │ │ │ │ └── SharedPreferencesDataStore.kt │ │ │ │ │ │ ├── saver/ │ │ │ │ │ │ │ └── ImageSaver.kt │ │ │ │ │ │ ├── track/ │ │ │ │ │ │ │ ├── BaseTracker.kt │ │ │ │ │ │ │ ├── DeletableTracker.kt │ │ │ │ │ │ │ ├── EnhancedTracker.kt │ │ │ │ │ │ │ ├── Tracker.kt │ │ │ │ │ │ │ ├── TrackerManager.kt │ │ │ │ │ │ │ ├── anilist/ │ │ │ │ │ │ │ │ ├── Anilist.kt │ │ │ │ │ │ │ │ ├── AnilistApi.kt │ │ │ │ │ │ │ │ ├── AnilistInterceptor.kt │ │ │ │ │ │ │ │ ├── AnilistUtils.kt │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── ALAddManga.kt │ │ │ │ │ │ │ │ ├── ALFuzzyDate.kt │ │ │ │ │ │ │ │ ├── ALManga.kt │ │ │ │ │ │ │ │ ├── ALOAuth.kt │ │ │ │ │ │ │ │ ├── ALSearch.kt │ │ │ │ │ │ │ │ ├── ALSearchItem.kt │ │ │ │ │ │ │ │ ├── ALUser.kt │ │ │ │ │ │ │ │ └── ALUserList.kt │ │ │ │ │ │ │ ├── bangumi/ │ │ │ │ │ │ │ │ ├── Bangumi.kt │ │ │ │ │ │ │ │ ├── BangumiApi.kt │ │ │ │ │ │ │ │ ├── BangumiInterceptor.kt │ │ │ │ │ │ │ │ ├── BangumiUtils.kt │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── BGMCollectionResponse.kt │ │ │ │ │ │ │ │ ├── BGMOAuth.kt │ │ │ │ │ │ │ │ ├── BGMSearch.kt │ │ │ │ │ │ │ │ └── BGMUser.kt │ │ │ │ │ │ │ ├── kavita/ │ │ │ │ │ │ │ │ ├── Kavita.kt │ │ │ │ │ │ │ │ ├── KavitaApi.kt │ │ │ │ │ │ │ │ ├── KavitaInterceptor.kt │ │ │ │ │ │ │ │ └── KavitaModels.kt │ │ │ │ │ │ │ ├── kitsu/ │ │ │ │ │ │ │ │ ├── Kitsu.kt │ │ │ │ │ │ │ │ ├── KitsuApi.kt │ │ │ │ │ │ │ │ ├── KitsuDateHelper.kt │ │ │ │ │ │ │ │ ├── KitsuInterceptor.kt │ │ │ │ │ │ │ │ ├── KitsuUtils.kt │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── KitsuAddManga.kt │ │ │ │ │ │ │ │ ├── KitsuListSearch.kt │ │ │ │ │ │ │ │ ├── KitsuOAuth.kt │ │ │ │ │ │ │ │ ├── KitsuSearch.kt │ │ │ │ │ │ │ │ ├── KitsuSearchItemCover.kt │ │ │ │ │ │ │ │ └── KitsuUser.kt │ │ │ │ │ │ │ ├── komga/ │ │ │ │ │ │ │ │ ├── Komga.kt │ │ │ │ │ │ │ │ ├── KomgaApi.kt │ │ │ │ │ │ │ │ └── KomgaModels.kt │ │ │ │ │ │ │ ├── mangaupdates/ │ │ │ │ │ │ │ │ ├── MangaUpdates.kt │ │ │ │ │ │ │ │ ├── MangaUpdatesApi.kt │ │ │ │ │ │ │ │ ├── MangaUpdatesInterceptor.kt │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── MUContext.kt │ │ │ │ │ │ │ │ ├── MUImage.kt │ │ │ │ │ │ │ │ ├── MUListItem.kt │ │ │ │ │ │ │ │ ├── MULoginResponse.kt │ │ │ │ │ │ │ │ ├── MURating.kt │ │ │ │ │ │ │ │ ├── MURecord.kt │ │ │ │ │ │ │ │ ├── MUSearch.kt │ │ │ │ │ │ │ │ ├── MUSeries.kt │ │ │ │ │ │ │ │ ├── MUStatus.kt │ │ │ │ │ │ │ │ └── MUUrl.kt │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ └── TrackSearch.kt │ │ │ │ │ │ │ ├── myanimelist/ │ │ │ │ │ │ │ │ ├── MyAnimeList.kt │ │ │ │ │ │ │ │ ├── MyAnimeListApi.kt │ │ │ │ │ │ │ │ ├── MyAnimeListInterceptor.kt │ │ │ │ │ │ │ │ ├── MyAnimeListUtils.kt │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── MALList.kt │ │ │ │ │ │ │ │ ├── MALManga.kt │ │ │ │ │ │ │ │ ├── MALOAuth.kt │ │ │ │ │ │ │ │ ├── MALSearch.kt │ │ │ │ │ │ │ │ └── MALUser.kt │ │ │ │ │ │ │ ├── shikimori/ │ │ │ │ │ │ │ │ ├── Shikimori.kt │ │ │ │ │ │ │ │ ├── ShikimoriApi.kt │ │ │ │ │ │ │ │ ├── ShikimoriInterceptor.kt │ │ │ │ │ │ │ │ ├── ShikimoriUtils.kt │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── SMAddMangaResponse.kt │ │ │ │ │ │ │ │ ├── SMManga.kt │ │ │ │ │ │ │ │ ├── SMOAuth.kt │ │ │ │ │ │ │ │ ├── SMUser.kt │ │ │ │ │ │ │ │ └── SMUserListEntry.kt │ │ │ │ │ │ │ └── suwayomi/ │ │ │ │ │ │ │ ├── Suwayomi.kt │ │ │ │ │ │ │ ├── SuwayomiApi.kt │ │ │ │ │ │ │ └── SuwayomiModels.kt │ │ │ │ │ │ └── updater/ │ │ │ │ │ │ ├── AppUpdateChecker.kt │ │ │ │ │ │ ├── AppUpdateDownloadJob.kt │ │ │ │ │ │ └── AppUpdateNotifier.kt │ │ │ │ │ ├── di/ │ │ │ │ │ │ ├── AppModule.kt │ │ │ │ │ │ └── PreferenceModule.kt │ │ │ │ │ ├── extension/ │ │ │ │ │ │ ├── ExtensionManager.kt │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ ├── ExtensionApi.kt │ │ │ │ │ │ │ └── ExtensionUpdateNotifier.kt │ │ │ │ │ │ ├── installer/ │ │ │ │ │ │ │ ├── Installer.kt │ │ │ │ │ │ │ ├── PackageInstallerInstaller.kt │ │ │ │ │ │ │ └── ShizukuInstaller.kt │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── Extension.kt │ │ │ │ │ │ │ ├── InstallStep.kt │ │ │ │ │ │ │ └── LoadResult.kt │ │ │ │ │ │ └── util/ │ │ │ │ │ │ ├── ExtensionInstallActivity.kt │ │ │ │ │ │ ├── ExtensionInstallReceiver.kt │ │ │ │ │ │ ├── ExtensionInstallService.kt │ │ │ │ │ │ ├── ExtensionInstaller.kt │ │ │ │ │ │ └── ExtensionLoader.kt │ │ │ │ │ ├── source/ │ │ │ │ │ │ ├── AndroidSourceManager.kt │ │ │ │ │ │ └── SourceExtensions.kt │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ ├── activity/ │ │ │ │ │ │ │ │ └── BaseActivity.kt │ │ │ │ │ │ │ └── delegate/ │ │ │ │ │ │ │ ├── SecureActivityDelegate.kt │ │ │ │ │ │ │ └── ThemingDelegate.kt │ │ │ │ │ │ ├── browse/ │ │ │ │ │ │ │ ├── BrowseTab.kt │ │ │ │ │ │ │ ├── extension/ │ │ │ │ │ │ │ │ ├── ExtensionFilterScreen.kt │ │ │ │ │ │ │ │ ├── ExtensionFilterScreenModel.kt │ │ │ │ │ │ │ │ ├── ExtensionsScreenModel.kt │ │ │ │ │ │ │ │ ├── ExtensionsTab.kt │ │ │ │ │ │ │ │ └── details/ │ │ │ │ │ │ │ │ ├── ExtensionDetailsScreen.kt │ │ │ │ │ │ │ │ ├── ExtensionDetailsScreenModel.kt │ │ │ │ │ │ │ │ └── SourcePreferencesScreen.kt │ │ │ │ │ │ │ ├── migration/ │ │ │ │ │ │ │ │ ├── manga/ │ │ │ │ │ │ │ │ │ ├── MigrateMangaScreen.kt │ │ │ │ │ │ │ │ │ └── MigrateMangaScreenModel.kt │ │ │ │ │ │ │ │ ├── search/ │ │ │ │ │ │ │ │ │ ├── MigrateSearchScreen.kt │ │ │ │ │ │ │ │ │ ├── MigrateSearchScreenModel.kt │ │ │ │ │ │ │ │ │ └── MigrateSourceSearchScreen.kt │ │ │ │ │ │ │ │ └── sources/ │ │ │ │ │ │ │ │ ├── MigrateSourceScreenModel.kt │ │ │ │ │ │ │ │ └── MigrateSourceTab.kt │ │ │ │ │ │ │ └── source/ │ │ │ │ │ │ │ ├── SourcesFilterScreen.kt │ │ │ │ │ │ │ ├── SourcesFilterScreenModel.kt │ │ │ │ │ │ │ ├── SourcesScreenModel.kt │ │ │ │ │ │ │ ├── SourcesTab.kt │ │ │ │ │ │ │ ├── browse/ │ │ │ │ │ │ │ │ ├── BrowseSourceScreen.kt │ │ │ │ │ │ │ │ ├── BrowseSourceScreenModel.kt │ │ │ │ │ │ │ │ └── SourceFilterDialog.kt │ │ │ │ │ │ │ └── globalsearch/ │ │ │ │ │ │ │ ├── GlobalSearchScreen.kt │ │ │ │ │ │ │ ├── GlobalSearchScreenModel.kt │ │ │ │ │ │ │ └── SearchScreenModel.kt │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── CategoryScreen.kt │ │ │ │ │ │ │ └── CategoryScreenModel.kt │ │ │ │ │ │ ├── deeplink/ │ │ │ │ │ │ │ ├── DeepLinkActivity.kt │ │ │ │ │ │ │ ├── DeepLinkScreen.kt │ │ │ │ │ │ │ └── DeepLinkScreenModel.kt │ │ │ │ │ │ ├── download/ │ │ │ │ │ │ │ ├── DownloadAdapter.kt │ │ │ │ │ │ │ ├── DownloadHeaderHolder.kt │ │ │ │ │ │ │ ├── DownloadHeaderItem.kt │ │ │ │ │ │ │ ├── DownloadHolder.kt │ │ │ │ │ │ │ ├── DownloadItem.kt │ │ │ │ │ │ │ ├── DownloadQueueScreen.kt │ │ │ │ │ │ │ └── DownloadQueueScreenModel.kt │ │ │ │ │ │ ├── history/ │ │ │ │ │ │ │ ├── HistoryScreenModel.kt │ │ │ │ │ │ │ └── HistoryTab.kt │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ └── HomeScreen.kt │ │ │ │ │ │ ├── library/ │ │ │ │ │ │ │ ├── LibraryItem.kt │ │ │ │ │ │ │ ├── LibraryScreenModel.kt │ │ │ │ │ │ │ ├── LibrarySettingsScreenModel.kt │ │ │ │ │ │ │ └── LibraryTab.kt │ │ │ │ │ │ ├── main/ │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ │ ├── manga/ │ │ │ │ │ │ │ ├── MangaCoverScreenModel.kt │ │ │ │ │ │ │ ├── MangaScreen.kt │ │ │ │ │ │ │ ├── MangaScreenModel.kt │ │ │ │ │ │ │ ├── notes/ │ │ │ │ │ │ │ │ └── MangaNotesScreen.kt │ │ │ │ │ │ │ └── track/ │ │ │ │ │ │ │ ├── TrackInfoDialog.kt │ │ │ │ │ │ │ └── TrackItem.kt │ │ │ │ │ │ ├── more/ │ │ │ │ │ │ │ ├── MoreTab.kt │ │ │ │ │ │ │ ├── NewUpdateScreen.kt │ │ │ │ │ │ │ └── OnboardingScreen.kt │ │ │ │ │ │ ├── reader/ │ │ │ │ │ │ │ ├── ReaderActivity.kt │ │ │ │ │ │ │ ├── ReaderNavigationOverlayView.kt │ │ │ │ │ │ │ ├── ReaderViewModel.kt │ │ │ │ │ │ │ ├── SaveImageNotifier.kt │ │ │ │ │ │ │ ├── loader/ │ │ │ │ │ │ │ │ ├── ArchivePageLoader.kt │ │ │ │ │ │ │ │ ├── ChapterLoader.kt │ │ │ │ │ │ │ │ ├── DirectoryPageLoader.kt │ │ │ │ │ │ │ │ ├── DownloadPageLoader.kt │ │ │ │ │ │ │ │ ├── EpubPageLoader.kt │ │ │ │ │ │ │ │ ├── HttpPageLoader.kt │ │ │ │ │ │ │ │ └── PageLoader.kt │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── ChapterTransition.kt │ │ │ │ │ │ │ │ ├── InsertPage.kt │ │ │ │ │ │ │ │ ├── ReaderChapter.kt │ │ │ │ │ │ │ │ ├── ReaderPage.kt │ │ │ │ │ │ │ │ └── ViewerChapters.kt │ │ │ │ │ │ │ ├── setting/ │ │ │ │ │ │ │ │ ├── ReaderOrientation.kt │ │ │ │ │ │ │ │ ├── ReaderPreferences.kt │ │ │ │ │ │ │ │ ├── ReaderSettingsScreenModel.kt │ │ │ │ │ │ │ │ └── ReadingMode.kt │ │ │ │ │ │ │ └── viewer/ │ │ │ │ │ │ │ ├── GestureDetectorWithLongTap.kt │ │ │ │ │ │ │ ├── MissingChapters.kt │ │ │ │ │ │ │ ├── ReaderButton.kt │ │ │ │ │ │ │ ├── ReaderPageImageView.kt │ │ │ │ │ │ │ ├── ReaderProgressIndicator.kt │ │ │ │ │ │ │ ├── ReaderTransitionView.kt │ │ │ │ │ │ │ ├── Viewer.kt │ │ │ │ │ │ │ ├── ViewerConfig.kt │ │ │ │ │ │ │ ├── ViewerNavigation.kt │ │ │ │ │ │ │ ├── navigation/ │ │ │ │ │ │ │ │ ├── DisabledNavigation.kt │ │ │ │ │ │ │ │ ├── EdgeNavigation.kt │ │ │ │ │ │ │ │ ├── KindlishNavigation.kt │ │ │ │ │ │ │ │ ├── LNavigation.kt │ │ │ │ │ │ │ │ └── RightAndLeftNavigation.kt │ │ │ │ │ │ │ ├── pager/ │ │ │ │ │ │ │ │ ├── Pager.kt │ │ │ │ │ │ │ │ ├── PagerConfig.kt │ │ │ │ │ │ │ │ ├── PagerPageHolder.kt │ │ │ │ │ │ │ │ ├── PagerTransitionHolder.kt │ │ │ │ │ │ │ │ ├── PagerViewer.kt │ │ │ │ │ │ │ │ ├── PagerViewerAdapter.kt │ │ │ │ │ │ │ │ └── PagerViewers.kt │ │ │ │ │ │ │ └── webtoon/ │ │ │ │ │ │ │ ├── WebtoonAdapter.kt │ │ │ │ │ │ │ ├── WebtoonBaseHolder.kt │ │ │ │ │ │ │ ├── WebtoonConfig.kt │ │ │ │ │ │ │ ├── WebtoonFrame.kt │ │ │ │ │ │ │ ├── WebtoonLayoutManager.kt │ │ │ │ │ │ │ ├── WebtoonPageHolder.kt │ │ │ │ │ │ │ ├── WebtoonRecyclerView.kt │ │ │ │ │ │ │ ├── WebtoonSubsamplingImageView.kt │ │ │ │ │ │ │ ├── WebtoonTransitionHolder.kt │ │ │ │ │ │ │ └── WebtoonViewer.kt │ │ │ │ │ │ ├── security/ │ │ │ │ │ │ │ └── UnlockActivity.kt │ │ │ │ │ │ ├── setting/ │ │ │ │ │ │ │ ├── SettingsScreen.kt │ │ │ │ │ │ │ └── track/ │ │ │ │ │ │ │ ├── BaseOAuthLoginActivity.kt │ │ │ │ │ │ │ └── TrackLoginActivity.kt │ │ │ │ │ │ ├── stats/ │ │ │ │ │ │ │ ├── StatsScreen.kt │ │ │ │ │ │ │ └── StatsScreenModel.kt │ │ │ │ │ │ ├── updates/ │ │ │ │ │ │ │ ├── UpdatesScreenModel.kt │ │ │ │ │ │ │ ├── UpdatesSettingsScreenModel.kt │ │ │ │ │ │ │ └── UpdatesTab.kt │ │ │ │ │ │ └── webview/ │ │ │ │ │ │ ├── WebViewActivity.kt │ │ │ │ │ │ ├── WebViewScreen.kt │ │ │ │ │ │ └── WebViewScreenModel.kt │ │ │ │ │ ├── util/ │ │ │ │ │ │ ├── CrashLogUtil.kt │ │ │ │ │ │ ├── MangaExtensions.kt │ │ │ │ │ │ ├── PkceUtil.kt │ │ │ │ │ │ ├── chapter/ │ │ │ │ │ │ │ ├── ChapterFilterDownloaded.kt │ │ │ │ │ │ │ ├── ChapterGetNextUnread.kt │ │ │ │ │ │ │ └── ChapterRemoveDuplicates.kt │ │ │ │ │ │ ├── lang/ │ │ │ │ │ │ │ ├── CloseableExtensions.kt │ │ │ │ │ │ │ ├── DateExtensions.kt │ │ │ │ │ │ │ └── RectFExtensions.kt │ │ │ │ │ │ ├── storage/ │ │ │ │ │ │ │ ├── FileExtensions.kt │ │ │ │ │ │ │ └── OkioExtensions.kt │ │ │ │ │ │ ├── system/ │ │ │ │ │ │ │ ├── AnimationExtensions.kt │ │ │ │ │ │ │ ├── AuthenticatorUtil.kt │ │ │ │ │ │ │ ├── BuildConfig.kt │ │ │ │ │ │ │ ├── ChildFirstPathClassLoader.kt │ │ │ │ │ │ │ ├── ContextExtensions.kt │ │ │ │ │ │ │ ├── DeviceUtilExtensions.kt │ │ │ │ │ │ │ ├── DisplayExtensions.kt │ │ │ │ │ │ │ ├── DrawableExtensions.kt │ │ │ │ │ │ │ ├── IntentExtensions.kt │ │ │ │ │ │ │ ├── InternalResourceHelper.kt │ │ │ │ │ │ │ ├── LocaleHelper.kt │ │ │ │ │ │ │ ├── NetworkExtensions.kt │ │ │ │ │ │ │ ├── NetworkStateTracker.kt │ │ │ │ │ │ │ ├── NotificationExtensions.kt │ │ │ │ │ │ │ └── WorkManagerExtensions.kt │ │ │ │ │ │ └── view/ │ │ │ │ │ │ ├── EditTextPreferenceExtensions.kt │ │ │ │ │ │ ├── ViewExtensions.kt │ │ │ │ │ │ └── WindowExtensions.kt │ │ │ │ │ └── widget/ │ │ │ │ │ ├── TachiyomiTextInputEditText.kt │ │ │ │ │ └── ViewPagerAdapter.kt │ │ │ │ └── test/ │ │ │ │ └── DummyTracker.kt │ │ │ └── mihon/ │ │ │ ├── app/ │ │ │ │ └── shizuku/ │ │ │ │ └── ShellInterface.kt │ │ │ ├── core/ │ │ │ │ ├── designsystem/ │ │ │ │ │ └── utils/ │ │ │ │ │ └── WindowSize.kt │ │ │ │ └── migration/ │ │ │ │ ├── Migration.kt │ │ │ │ ├── MigrationCompletedListener.kt │ │ │ │ ├── MigrationContext.kt │ │ │ │ ├── MigrationJobFactory.kt │ │ │ │ ├── MigrationStrategy.kt │ │ │ │ ├── MigrationStrategyFactory.kt │ │ │ │ ├── Migrator.kt │ │ │ │ └── migrations/ │ │ │ │ ├── CategoryPreferencesCleanupMigration.kt │ │ │ │ ├── InstallationIdMigration.kt │ │ │ │ ├── Migrations.kt │ │ │ │ ├── SetupBackupCreateMigration.kt │ │ │ │ ├── SetupLibraryUpdateMigration.kt │ │ │ │ └── TrustExtensionRepositoryMigration.kt │ │ │ ├── domain/ │ │ │ │ └── migration/ │ │ │ │ ├── models/ │ │ │ │ │ └── MigrationFlag.kt │ │ │ │ └── usecases/ │ │ │ │ └── MigrateMangaUseCase.kt │ │ │ └── feature/ │ │ │ ├── common/ │ │ │ │ └── utils/ │ │ │ │ └── MigrationFlag.kt │ │ │ ├── migration/ │ │ │ │ ├── config/ │ │ │ │ │ ├── MigrationConfigScreen.kt │ │ │ │ │ └── MigrationConfigScreenSheet.kt │ │ │ │ ├── dialog/ │ │ │ │ │ └── MigrateMangaDialog.kt │ │ │ │ └── list/ │ │ │ │ ├── MigrationListScreen.kt │ │ │ │ ├── MigrationListScreenContent.kt │ │ │ │ ├── MigrationListScreenModel.kt │ │ │ │ ├── components/ │ │ │ │ │ ├── MigrationExitDialog.kt │ │ │ │ │ ├── MigrationMangaDialog.kt │ │ │ │ │ └── MigrationProgressDialog.kt │ │ │ │ ├── models/ │ │ │ │ │ └── MigratingManga.kt │ │ │ │ └── search/ │ │ │ │ ├── BaseSmartSearchEngine.kt │ │ │ │ └── SmartSourceSearchEngine.kt │ │ │ └── upcoming/ │ │ │ ├── UpcomingScreen.kt │ │ │ ├── UpcomingScreenContent.kt │ │ │ ├── UpcomingScreenModel.kt │ │ │ ├── UpcomingUIModel.kt │ │ │ └── components/ │ │ │ ├── UpcomingItem.kt │ │ │ └── calendar/ │ │ │ ├── Calendar.kt │ │ │ ├── CalendarDay.kt │ │ │ ├── CalendarHeader.kt │ │ │ └── CalendarIndicator.kt │ │ └── res/ │ │ ├── anim/ │ │ │ ├── shared_axis_x_pop_enter.xml │ │ │ ├── shared_axis_x_pop_exit.xml │ │ │ ├── shared_axis_x_push_enter.xml │ │ │ └── shared_axis_x_push_exit.xml │ │ ├── anim-v33/ │ │ │ ├── shared_axis_x_pop_enter.xml │ │ │ ├── shared_axis_x_pop_exit.xml │ │ │ ├── shared_axis_x_push_enter.xml │ │ │ └── shared_axis_x_push_exit.xml │ │ ├── color/ │ │ │ └── draggable_card_foreground.xml │ │ ├── drawable/ │ │ │ ├── anim_browse_enter.xml │ │ │ ├── anim_caret_down.xml │ │ │ ├── anim_history_enter.xml │ │ │ ├── anim_library_enter.xml │ │ │ ├── anim_more_enter.xml │ │ │ ├── anim_updates_enter.xml │ │ │ ├── brand_anilist.xml │ │ │ ├── brand_bangumi.xml │ │ │ ├── brand_kavita.xml │ │ │ ├── brand_kitsu.xml │ │ │ ├── brand_komga.xml │ │ │ ├── brand_mangaupdates.xml │ │ │ ├── brand_myanimelist.xml │ │ │ ├── brand_shikimori.xml │ │ │ ├── brand_suwayomi.xml │ │ │ ├── cover_error.xml │ │ │ ├── ic_book_24dp.xml │ │ │ ├── ic_close_24dp.xml │ │ │ ├── ic_crop_24dp.xml │ │ │ ├── ic_crop_off_24dp.xml │ │ │ ├── ic_done_24dp.xml │ │ │ ├── ic_done_prev_24dp.xml │ │ │ ├── ic_download_chapter_24dp.xml │ │ │ ├── ic_drag_handle_24dp.xml │ │ │ ├── ic_extension_24dp.xml │ │ │ ├── ic_folder_24dp.xml │ │ │ ├── ic_glasses_24dp.xml │ │ │ ├── ic_info_24dp.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── ic_launcher_monochrome.xml │ │ │ ├── ic_mihon.xml │ │ │ ├── ic_mihon_splash.xml │ │ │ ├── ic_overflow_24dp.xml │ │ │ ├── ic_pause_24dp.xml │ │ │ ├── ic_photo_24dp.xml │ │ │ ├── ic_play_arrow_24dp.xml │ │ │ ├── ic_reader_continuous_vertical_24dp.xml │ │ │ ├── ic_reader_default_24dp.xml │ │ │ ├── ic_reader_ltr_24dp.xml │ │ │ ├── ic_reader_rtl_24dp.xml │ │ │ ├── ic_reader_vertical_24dp.xml │ │ │ ├── ic_reader_webtoon_24dp.xml │ │ │ ├── ic_refresh_24dp.xml │ │ │ ├── ic_share_24dp.xml │ │ │ ├── ic_system_update_alt_white_24dp.xml │ │ │ ├── ic_tab_close_24px.xml │ │ │ ├── ic_warning_white_24dp.xml │ │ │ ├── line_divider.xml │ │ │ ├── material_popup_background.xml │ │ │ ├── sc_collections_bookmark_48dp.xml │ │ │ ├── sc_explore_48dp.xml │ │ │ ├── sc_history_48dp.xml │ │ │ └── sc_new_releases_48dp.xml │ │ ├── layout/ │ │ │ ├── download_header.xml │ │ │ ├── download_item.xml │ │ │ ├── download_list.xml │ │ │ ├── pref_widget_switch_material.xml │ │ │ ├── reader_activity.xml │ │ │ └── reader_error.xml │ │ ├── menu/ │ │ │ └── download_single.xml │ │ ├── mipmap/ │ │ │ └── ic_launcher.xml │ │ ├── values/ │ │ │ ├── bools.xml │ │ │ ├── dimens.xml │ │ │ ├── ids.xml │ │ │ ├── styles.xml │ │ │ └── themes.xml │ │ ├── values-night/ │ │ │ ├── bools.xml │ │ │ └── themes.xml │ │ ├── values-night-v31/ │ │ │ └── themes.xml │ │ ├── values-v27/ │ │ │ ├── bools.xml │ │ │ └── themes.xml │ │ ├── values-v31/ │ │ │ └── themes.xml │ │ └── xml/ │ │ ├── network_security_config.xml │ │ ├── provider_paths.xml │ │ ├── s_pen_actions.xml │ │ └── searchable.xml │ └── test/ │ └── java/ │ └── mihon/ │ └── core/ │ └── migration/ │ └── MigratorTest.kt ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ ├── mihon/ │ │ └── buildlogic/ │ │ ├── AndroidConfig.kt │ │ ├── BuildConfig.kt │ │ ├── Commands.kt │ │ ├── ProjectExtensions.kt │ │ └── tasks/ │ │ └── LocalesConfigTask.kt │ ├── mihon.android.application.compose.gradle.kts │ ├── mihon.android.application.gradle.kts │ ├── mihon.benchmark.gradle.kts │ ├── mihon.code.lint.gradle.kts │ ├── mihon.library.compose.gradle.kts │ └── mihon.library.gradle.kts ├── core/ │ ├── archive/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── mihon/ │ │ └── core/ │ │ └── archive/ │ │ ├── ArchiveEntry.kt │ │ ├── ArchiveInputStream.kt │ │ ├── ArchiveReader.kt │ │ ├── EpubReader.kt │ │ ├── UniFileExtensions.kt │ │ └── ZipWriter.kt │ └── common/ │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── kotlin/ │ ├── eu/ │ │ └── kanade/ │ │ └── tachiyomi/ │ │ ├── core/ │ │ │ └── security/ │ │ │ ├── PrivacyPreferences.kt │ │ │ └── SecurityPreferences.kt │ │ ├── network/ │ │ │ ├── AndroidCookieJar.kt │ │ │ ├── DohProviders.kt │ │ │ ├── JavaScriptEngine.kt │ │ │ ├── NetworkHelper.kt │ │ │ ├── NetworkPreferences.kt │ │ │ ├── OkHttpExtensions.kt │ │ │ ├── ProgressListener.kt │ │ │ ├── ProgressResponseBody.kt │ │ │ ├── Requests.kt │ │ │ └── interceptor/ │ │ │ ├── CloudflareInterceptor.kt │ │ │ ├── IgnoreGzipInterceptor.kt │ │ │ ├── RateLimitInterceptor.kt │ │ │ ├── SpecificHostRateLimitInterceptor.kt │ │ │ ├── UncaughtExceptionInterceptor.kt │ │ │ ├── UserAgentInterceptor.kt │ │ │ └── WebViewInterceptor.kt │ │ └── util/ │ │ ├── lang/ │ │ │ ├── Hash.kt │ │ │ └── StringExtensions.kt │ │ ├── storage/ │ │ │ └── DiskUtil.kt │ │ └── system/ │ │ ├── DensityExtensions.kt │ │ ├── DeviceUtil.kt │ │ ├── GLUtil.kt │ │ ├── ToastExtensions.kt │ │ └── WebViewUtil.kt │ ├── mihon/ │ │ └── core/ │ │ └── common/ │ │ ├── FeatureFlags.kt │ │ └── utils/ │ │ └── Set.kt │ └── tachiyomi/ │ └── core/ │ └── common/ │ ├── Constants.kt │ ├── i18n/ │ │ └── Localize.kt │ ├── preference/ │ │ ├── AndroidPreference.kt │ │ ├── AndroidPreferenceStore.kt │ │ ├── CheckboxState.kt │ │ ├── InMemoryPreferenceStore.kt │ │ ├── Preference.kt │ │ ├── PreferenceStore.kt │ │ └── TriState.kt │ ├── storage/ │ │ ├── AndroidStorageFolderProvider.kt │ │ ├── FolderProvider.kt │ │ └── UniFileExtensions.kt │ └── util/ │ ├── lang/ │ │ ├── BooleanExtensions.kt │ │ ├── CoroutinesExtensions.kt │ │ ├── RxCoroutineBridge.kt │ │ └── SortUtil.kt │ └── system/ │ ├── ImageUtil.kt │ └── LogcatExtensions.kt ├── core-metadata/ │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── tachiyomi/ │ └── core/ │ └── metadata/ │ ├── comicinfo/ │ │ └── ComicInfo.kt │ └── tachiyomi/ │ └── MangaDetails.kt ├── data/ │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ ├── mihon/ │ │ │ └── data/ │ │ │ └── repository/ │ │ │ └── ExtensionRepoRepositoryImpl.kt │ │ └── tachiyomi/ │ │ └── data/ │ │ ├── AndroidDatabaseHandler.kt │ │ ├── DatabaseAdapter.kt │ │ ├── DatabaseHandler.kt │ │ ├── QueryPagingSource.kt │ │ ├── TransactionContext.kt │ │ ├── category/ │ │ │ └── CategoryRepositoryImpl.kt │ │ ├── chapter/ │ │ │ ├── ChapterRepositoryImpl.kt │ │ │ └── ChapterSanitizer.kt │ │ ├── history/ │ │ │ ├── HistoryMapper.kt │ │ │ └── HistoryRepositoryImpl.kt │ │ ├── manga/ │ │ │ ├── MangaMapper.kt │ │ │ └── MangaRepositoryImpl.kt │ │ ├── release/ │ │ │ ├── GithubRelease.kt │ │ │ └── ReleaseServiceImpl.kt │ │ ├── source/ │ │ │ ├── SourcePagingSource.kt │ │ │ ├── SourceRepositoryImpl.kt │ │ │ └── StubSourceRepositoryImpl.kt │ │ ├── track/ │ │ │ ├── TrackMapper.kt │ │ │ └── TrackRepositoryImpl.kt │ │ └── updates/ │ │ └── UpdatesRepositoryImpl.kt │ └── sqldelight/ │ └── tachiyomi/ │ ├── data/ │ │ ├── categories.sq │ │ ├── chapters.sq │ │ ├── excluded_scanlators.sq │ │ ├── extension_repos.sq │ │ ├── history.sq │ │ ├── manga_sync.sq │ │ ├── mangas.sq │ │ ├── mangas_categories.sq │ │ └── sources.sq │ ├── migrations/ │ │ ├── 1.sqm │ │ ├── 10.sqm │ │ ├── 2.sqm │ │ ├── 3.sqm │ │ ├── 4.sqm │ │ ├── 5.sqm │ │ ├── 6.sqm │ │ ├── 7.sqm │ │ ├── 8.sqm │ │ └── 9.sqm │ └── view/ │ ├── historyView.sq │ ├── libraryView.sq │ └── updatesView.sq ├── domain/ │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ ├── mihon/ │ │ │ └── domain/ │ │ │ ├── chapter/ │ │ │ │ └── interactor/ │ │ │ │ └── FilterChaptersForDownload.kt │ │ │ ├── extensionrepo/ │ │ │ │ ├── exception/ │ │ │ │ │ └── SaveExtensionRepoException.kt │ │ │ │ ├── interactor/ │ │ │ │ │ ├── CreateExtensionRepo.kt │ │ │ │ │ ├── DeleteExtensionRepo.kt │ │ │ │ │ ├── GetExtensionRepo.kt │ │ │ │ │ ├── GetExtensionRepoCount.kt │ │ │ │ │ ├── ReplaceExtensionRepo.kt │ │ │ │ │ └── UpdateExtensionRepo.kt │ │ │ │ ├── model/ │ │ │ │ │ └── ExtensionRepo.kt │ │ │ │ ├── repository/ │ │ │ │ │ └── ExtensionRepoRepository.kt │ │ │ │ └── service/ │ │ │ │ ├── ExtensionRepoDto.kt │ │ │ │ └── ExtensionRepoService.kt │ │ │ ├── manga/ │ │ │ │ └── model/ │ │ │ │ └── SManga.kt │ │ │ └── upcoming/ │ │ │ └── interactor/ │ │ │ └── GetUpcomingManga.kt │ │ └── tachiyomi/ │ │ └── domain/ │ │ ├── backup/ │ │ │ └── service/ │ │ │ └── BackupPreferences.kt │ │ ├── category/ │ │ │ ├── interactor/ │ │ │ │ ├── CreateCategoryWithName.kt │ │ │ │ ├── DeleteCategory.kt │ │ │ │ ├── GetCategories.kt │ │ │ │ ├── RenameCategory.kt │ │ │ │ ├── ReorderCategory.kt │ │ │ │ ├── ResetCategoryFlags.kt │ │ │ │ ├── SetDisplayMode.kt │ │ │ │ ├── SetMangaCategories.kt │ │ │ │ ├── SetSortModeForCategory.kt │ │ │ │ └── UpdateCategory.kt │ │ │ ├── model/ │ │ │ │ ├── Category.kt │ │ │ │ └── CategoryUpdate.kt │ │ │ └── repository/ │ │ │ └── CategoryRepository.kt │ │ ├── chapter/ │ │ │ ├── interactor/ │ │ │ │ ├── GetBookmarkedChaptersByMangaId.kt │ │ │ │ ├── GetChapter.kt │ │ │ │ ├── GetChapterByUrlAndMangaId.kt │ │ │ │ ├── GetChaptersByMangaId.kt │ │ │ │ ├── SetMangaDefaultChapterFlags.kt │ │ │ │ ├── ShouldUpdateDbChapter.kt │ │ │ │ └── UpdateChapter.kt │ │ │ ├── model/ │ │ │ │ ├── Chapter.kt │ │ │ │ ├── ChapterUpdate.kt │ │ │ │ └── NoChaptersException.kt │ │ │ ├── repository/ │ │ │ │ └── ChapterRepository.kt │ │ │ └── service/ │ │ │ ├── ChapterRecognition.kt │ │ │ ├── ChapterSort.kt │ │ │ └── MissingChapters.kt │ │ ├── download/ │ │ │ └── service/ │ │ │ └── DownloadPreferences.kt │ │ ├── history/ │ │ │ ├── interactor/ │ │ │ │ ├── GetHistory.kt │ │ │ │ ├── GetNextChapters.kt │ │ │ │ ├── GetTotalReadDuration.kt │ │ │ │ ├── RemoveHistory.kt │ │ │ │ └── UpsertHistory.kt │ │ │ ├── model/ │ │ │ │ ├── History.kt │ │ │ │ ├── HistoryUpdate.kt │ │ │ │ └── HistoryWithRelations.kt │ │ │ └── repository/ │ │ │ └── HistoryRepository.kt │ │ ├── library/ │ │ │ ├── model/ │ │ │ │ ├── Flag.kt │ │ │ │ ├── LibraryDisplayMode.kt │ │ │ │ ├── LibraryManga.kt │ │ │ │ └── LibrarySortMode.kt │ │ │ └── service/ │ │ │ └── LibraryPreferences.kt │ │ ├── manga/ │ │ │ ├── interactor/ │ │ │ │ ├── FetchInterval.kt │ │ │ │ ├── GetDuplicateLibraryManga.kt │ │ │ │ ├── GetFavorites.kt │ │ │ │ ├── GetLibraryManga.kt │ │ │ │ ├── GetManga.kt │ │ │ │ ├── GetMangaByUrlAndSourceId.kt │ │ │ │ ├── GetMangaWithChapters.kt │ │ │ │ ├── NetworkToLocalManga.kt │ │ │ │ ├── ResetViewerFlags.kt │ │ │ │ ├── SetMangaChapterFlags.kt │ │ │ │ └── UpdateMangaNotes.kt │ │ │ ├── model/ │ │ │ │ ├── Manga.kt │ │ │ │ ├── MangaCover.kt │ │ │ │ ├── MangaUpdate.kt │ │ │ │ ├── MangaWithChapterCount.kt │ │ │ │ └── TriState.kt │ │ │ └── repository/ │ │ │ └── MangaRepository.kt │ │ ├── release/ │ │ │ ├── interactor/ │ │ │ │ └── GetApplicationRelease.kt │ │ │ ├── model/ │ │ │ │ └── Release.kt │ │ │ └── service/ │ │ │ └── ReleaseService.kt │ │ ├── source/ │ │ │ ├── interactor/ │ │ │ │ ├── GetRemoteManga.kt │ │ │ │ └── GetSourcesWithNonLibraryManga.kt │ │ │ ├── model/ │ │ │ │ ├── Pin.kt │ │ │ │ ├── Source.kt │ │ │ │ ├── SourceWithCount.kt │ │ │ │ └── StubSource.kt │ │ │ ├── repository/ │ │ │ │ ├── SourceRepository.kt │ │ │ │ └── StubSourceRepository.kt │ │ │ └── service/ │ │ │ └── SourceManager.kt │ │ ├── storage/ │ │ │ └── service/ │ │ │ ├── StorageManager.kt │ │ │ └── StoragePreferences.kt │ │ ├── track/ │ │ │ ├── interactor/ │ │ │ │ ├── DeleteTrack.kt │ │ │ │ ├── GetTracks.kt │ │ │ │ ├── GetTracksPerManga.kt │ │ │ │ └── InsertTrack.kt │ │ │ ├── model/ │ │ │ │ └── Track.kt │ │ │ └── repository/ │ │ │ └── TrackRepository.kt │ │ └── updates/ │ │ ├── interactor/ │ │ │ └── GetUpdates.kt │ │ ├── model/ │ │ │ └── UpdatesWithRelations.kt │ │ ├── repository/ │ │ │ └── UpdatesRepository.kt │ │ └── service/ │ │ └── UpdatesPreferences.kt │ └── test/ │ └── java/ │ └── tachiyomi/ │ └── domain/ │ ├── chapter/ │ │ └── service/ │ │ ├── ChapterRecognitionTest.kt │ │ └── MissingChaptersTest.kt │ ├── library/ │ │ └── model/ │ │ └── LibraryFlagsTest.kt │ ├── manga/ │ │ └── interactor/ │ │ └── FetchIntervalTest.kt │ └── release/ │ └── interactor/ │ └── GetApplicationReleaseTest.kt ├── gradle/ │ ├── androidx.versions.toml │ ├── compose.versions.toml │ ├── kotlinx.versions.toml │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── i18n/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ ├── androidMain/ │ │ └── AndroidManifest.xml │ └── commonMain/ │ └── moko-resources/ │ ├── am/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ar/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── as/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── base/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── be/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── bg/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── bn/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ca/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ceb/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── cs/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── cv/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── da/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── de/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── el/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── eo/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── es/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── eu/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── fa/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── fi/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── fil/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── fr/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── gl/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── he/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── hi/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── hr/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── hu/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── in/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── it/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ja/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── jv/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ka-rGE/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── kk/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── km/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── kn/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ko/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── lt/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── lv/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ml/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── mr/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ms/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── my/ │ │ └── strings.xml │ ├── nb-rNO/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ne/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── nl/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── nn/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── pl/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── pt/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── pt-rBR/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ro/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ru/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sa/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sah/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sc/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sdh/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sk/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sq/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sr/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── sv/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── ta/ │ │ └── strings.xml │ ├── te/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── th/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── tr/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── tt/ │ │ └── strings.xml │ ├── uk/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── uz/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── vi/ │ │ ├── plurals.xml │ │ └── strings.xml │ ├── zh-rCN/ │ │ ├── plurals.xml │ │ └── strings.xml │ └── zh-rTW/ │ ├── plurals.xml │ └── strings.xml ├── macrobenchmark/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── tachiyomi/ │ └── macrobenchmark/ │ ├── BaselineProfileGenerator.kt │ └── StartupBenchmark.kt ├── presentation-core/ │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ ├── mihon/ │ │ │ └── presentation/ │ │ │ └── core/ │ │ │ └── util/ │ │ │ └── PagingDataUtil.kt │ │ └── tachiyomi/ │ │ └── presentation/ │ │ └── core/ │ │ ├── components/ │ │ │ ├── ActionButton.kt │ │ │ ├── AdaptiveSheet.kt │ │ │ ├── Badges.kt │ │ │ ├── CircularProgressIndicator.kt │ │ │ ├── CollapsibleBox.kt │ │ │ ├── LabeledCheckbox.kt │ │ │ ├── LazyColumnWithAction.kt │ │ │ ├── LazyGrid.kt │ │ │ ├── LazyList.kt │ │ │ ├── LinkIcon.kt │ │ │ ├── ListGroupHeader.kt │ │ │ ├── Pill.kt │ │ │ ├── SectionCard.kt │ │ │ ├── SettingsItems.kt │ │ │ ├── TwoPanelBox.kt │ │ │ ├── VerticalFastScroller.kt │ │ │ ├── WheelPicker.kt │ │ │ └── material/ │ │ │ ├── AlertDialog.kt │ │ │ ├── Button.kt │ │ │ ├── Constants.kt │ │ │ ├── IconButtonTokens.kt │ │ │ ├── IconToggleButton.kt │ │ │ ├── NavigationBar.kt │ │ │ ├── NavigationRail.kt │ │ │ ├── PullRefresh.kt │ │ │ ├── Scaffold.kt │ │ │ ├── Slider.kt │ │ │ ├── Surface.kt │ │ │ └── Tabs.kt │ │ ├── i18n/ │ │ │ └── Localize.kt │ │ ├── icons/ │ │ │ ├── CustomIcons.kt │ │ │ ├── Discord.kt │ │ │ ├── Facebook.kt │ │ │ ├── Github.kt │ │ │ ├── Reddit.kt │ │ │ └── X.kt │ │ ├── screens/ │ │ │ ├── EmptyScreen.kt │ │ │ ├── InfoScreen.kt │ │ │ └── LoadingScreen.kt │ │ ├── theme/ │ │ │ ├── Color.kt │ │ │ └── Typography.kt │ │ └── util/ │ │ ├── Elevation.kt │ │ ├── LazyListState.kt │ │ ├── Modifier.kt │ │ ├── PaddingValues.kt │ │ ├── Preference.kt │ │ └── Scrollbar.kt │ └── res/ │ ├── values/ │ │ ├── colors.xml │ │ ├── colors_catppuccin.xml │ │ ├── colors_greenapple.xml │ │ ├── colors_lavender.xml │ │ ├── colors_midnightdusk.xml │ │ ├── colors_monochrome.xml │ │ ├── colors_nord.xml │ │ ├── colors_strawberry.xml │ │ ├── colors_tachiyomi.xml │ │ ├── colors_tako.xml │ │ ├── colors_tealturqoise.xml │ │ ├── colors_tidalwave.xml │ │ ├── colors_yinyang.xml │ │ └── colors_yotsuba.xml │ └── values-night/ │ ├── colors.xml │ ├── colors_catppuccin.xml │ ├── colors_greenapple.xml │ ├── colors_lavender.xml │ ├── colors_midnightdusk.xml │ ├── colors_monochrome.xml │ ├── colors_nord.xml │ ├── colors_strawberry.xml │ ├── colors_tachiyomi.xml │ ├── colors_tako.xml │ ├── colors_tealturqoise.xml │ ├── colors_tidalwave.xml │ ├── colors_yinyang.xml │ └── colors_yotsuba.xml ├── presentation-widget/ │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── tachiyomi/ │ │ └── presentation/ │ │ └── widget/ │ │ ├── BaseUpdatesGridGlanceWidget.kt │ │ ├── UpdatesGridCoverScreenGlanceReceiver.kt │ │ ├── UpdatesGridCoverScreenGlanceWidget.kt │ │ ├── UpdatesGridGlanceReceiver.kt │ │ ├── UpdatesGridGlanceWidget.kt │ │ ├── WidgetManager.kt │ │ ├── components/ │ │ │ ├── LockedWidget.kt │ │ │ ├── UpdatesMangaCover.kt │ │ │ └── UpdatesWidget.kt │ │ └── util/ │ │ └── GlanceUtils.kt │ └── res/ │ ├── drawable/ │ │ ├── appwidget_background.xml │ │ ├── appwidget_cover_error.xml │ │ └── appwidget_coverscreen_background.xml │ ├── layout/ │ │ ├── appwidget_coverscreen_loading.xml │ │ └── appwidget_loading.xml │ ├── values/ │ │ ├── colors_appwidget.xml │ │ └── dimens.xml │ ├── values-night-v31/ │ │ └── colors_appwidget.xml │ ├── values-v31/ │ │ ├── colors_appwidget.xml │ │ └── dimens.xml │ └── xml/ │ ├── updates_grid_homescreen_widget_info.xml │ ├── updates_grid_lockscreen_widget_info.xml │ └── updates_grid_samsung_cover_widget_info.xml ├── settings.gradle.kts ├── source-api/ │ ├── build.gradle.kts │ ├── consumer-proguard.pro │ └── src/ │ ├── androidMain/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── eu/ │ │ └── kanade/ │ │ └── tachiyomi/ │ │ ├── source/ │ │ │ └── PreferenceScreen.kt │ │ └── util/ │ │ └── RxExtension.kt │ └── commonMain/ │ └── kotlin/ │ └── eu/ │ └── kanade/ │ └── tachiyomi/ │ ├── source/ │ │ ├── CatalogueSource.kt │ │ ├── ConfigurableSource.kt │ │ ├── PreferenceScreen.kt │ │ ├── Source.kt │ │ ├── SourceFactory.kt │ │ ├── UnmeteredSource.kt │ │ ├── model/ │ │ │ ├── Filter.kt │ │ │ ├── FilterList.kt │ │ │ ├── MangasPage.kt │ │ │ ├── Page.kt │ │ │ ├── SChapter.kt │ │ │ ├── SChapterImpl.kt │ │ │ ├── SManga.kt │ │ │ ├── SMangaImpl.kt │ │ │ └── UpdateStrategy.kt │ │ └── online/ │ │ ├── HttpSource.kt │ │ ├── ParsedHttpSource.kt │ │ └── ResolvableSource.kt │ └── util/ │ ├── JsoupExtensions.kt │ └── RxExtension.kt ├── source-local/ │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ ├── androidMain/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── tachiyomi/ │ │ └── source/ │ │ └── local/ │ │ ├── LocalSource.kt │ │ ├── filter/ │ │ │ └── OrderBy.kt │ │ ├── image/ │ │ │ └── LocalCoverManager.kt │ │ ├── io/ │ │ │ └── LocalSourceFileSystem.kt │ │ └── metadata/ │ │ └── EpubReaderExtensions.kt │ └── commonMain/ │ └── kotlin/ │ └── tachiyomi/ │ └── source/ │ └── local/ │ ├── LocalSource.kt │ ├── image/ │ │ └── LocalCoverManager.kt │ └── io/ │ ├── Archive.kt │ ├── Format.kt │ └── LocalSourceFileSystem.kt └── telemetry/ ├── build.gradle.kts └── src/ ├── firebase/ │ └── kotlin/ │ └── mihon/ │ └── telemetry/ │ ├── PackageInfo.kt │ └── TelemetryConfig.kt ├── main/ │ └── AndroidManifest.xml └── noop/ ├── AndroidManifest.xml └── kotlin/ └── mihon/ └── telemetry/ └── TelemetryConfig.kt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 indent_size = 2 indent_style = space insert_final_newline = true trim_trailing_whitespace = true [*.{xml,sq,sqm,aidl}] indent_size = 4 # noinspection EditorConfigKeyCorrectness [*.{kt,kts}] indent_size = 4 max_line_length = 120 ij_kotlin_allow_trailing_comma = true ij_kotlin_allow_trailing_comma_on_call_site = true ij_kotlin_name_count_to_use_star_import = 2147483647 ij_kotlin_name_count_to_use_star_import_for_members = 2147483647 ktlint_code_style = intellij_idea ktlint_function_naming_ignore_when_annotated_with = Composable ktlint_standard_class-signature = disabled ktlint_standard_comment-wrapping = disabled ktlint_standard_discouraged-comment-location = disabled ktlint_standard_function-expression-body = disabled ktlint_standard_function-signature = disabled ktlint_standard_type-argument-comment = disabled ktlint_standard_type-parameter-comment = disabled ktlint_standard_blank-line-between-when-conditions = disabled ================================================ FILE: .gitattributes ================================================ * text=auto * text eol=lf # Windows forced line-endings /.idea/* text eol=crlf # Gradle wrapper *.jar binary # Images *.webp binary *.png binary *.jpg binary *.jpeg binary *.gif binary *.ico binary *.gz binary *.zip binary *.7z binary *.ttf binary *.eot binary *.woff binary *.pyc binary *.swp binary ================================================ FILE: .github/.java-version ================================================ 21 ================================================ FILE: .github/FUNDING.yml ================================================ patreon: mihon ================================================ FILE: .github/ISSUE_TEMPLATE/1_request_feature.yml ================================================ name: ⭐ Feature request description: Suggest a feature to improve Mihon labels: [feature request] body: - type: textarea id: feature-description attributes: label: Describe your suggested feature description: How can Mihon be improved? placeholder: | Example: "It should work like this..." validations: required: true - type: textarea id: other-details attributes: label: Other details placeholder: | Additional details and attachments. - type: checkboxes id: acknowledgements attributes: label: Acknowledgements description: Read this carefully, we will close and ignore your issue if you skimmed through this. options: - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. required: true - label: I have written a short but informative title. required: true - label: I have updated the app to version **[0.19.5](https://github.com/mihonapp/mihon/releases/latest)**. required: true - label: I will fill out all of the requested information in this form. required: true ================================================ FILE: .github/ISSUE_TEMPLATE/2_report_issue.yml ================================================ name: 🐞 Issue report description: Report an issue in Mihon labels: [bug] body: - type: textarea id: reproduce-steps attributes: label: Steps to reproduce description: Provide an example of the issue. placeholder: | Example: 1. First step 2. Second step 3. Issue here validations: required: true - type: textarea id: expected-behavior attributes: label: Expected behavior description: Explain what you should expect to happen. placeholder: | Example: "This should happen..." validations: required: true - type: textarea id: actual-behavior attributes: label: Actual behavior description: Explain what actually happens. placeholder: | Example: "This happened instead..." validations: required: true - type: textarea id: crash-logs attributes: label: Crash logs description: | If you're experiencing crashes, if possible, go to the app's **More → Settings → Advanced** page, press **Dump crash logs** and share the crash logs here. placeholder: | You can upload the crash log file as an attachment, or paste the crash logs in plain text if needed. - type: input id: mihon-version attributes: label: Mihon version description: You can find your Mihon version in **More → About**. placeholder: | Example: "0.19.5" validations: required: true - type: input id: android-version attributes: label: Android version description: You can find this somewhere in your Android settings. placeholder: | Example: "Android 11" validations: required: true - type: input id: device attributes: label: Device description: List your device and model. placeholder: | Example: "Google Pixel 5" validations: required: true - type: textarea id: other-details attributes: label: Other details placeholder: | Additional details and attachments. - type: checkboxes id: acknowledgements attributes: label: Acknowledgements description: Read this carefully, we will close and ignore your issue if you skimmed through this. options: - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. required: true - label: I have written a short but informative title. required: true - label: I have gone through the [FAQ](https://mihon.app/docs/faq/general) and [troubleshooting guide](https://mihon.app/docs/guides/troubleshooting/). required: true - label: I have updated the app to version **[0.19.5](https://github.com/mihonapp/mihon/releases/latest)**. required: true - label: I have filled out all of the requested information in this form, including specific version numbers. required: true - label: I understand that **Mihon does not have or fix any extensions**, and I **will not receive help** for any issues related to sources or extensions. required: true ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: ❌ Help with Extensions url: https://mihon.app/docs/faq/browse/extensions about: For extension-related questions/issues - name: 🖥️ Mihon website url: https://mihon.app/ about: Guides, troubleshooting, and answers to common questions ================================================ FILE: .github/pull_request_template.md ================================================ ================================================ FILE: .github/renovate.json5 ================================================ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": ["config:recommended"], "labels": ["Dependencies"], "semanticCommits": "disabled", "packageRules": [ { "groupName": "GitHub Actions", "matchManagers": ["github-actions"], "pinDigests": true, }, ], } ================================================ FILE: .github/workflows/build.yml ================================================ name: Build & Test on: pull_request: paths: - '**' - '!**.md' - '!i18n/src/commonMain/moko-resources/**/strings.xml' - '!i18n/src/commonMain/moko-resources/**/plurals.xml' - 'i18n/src/commonMain/moko-resources/base/strings.xml' - 'i18n/src/commonMain/moko-resources/base/plurals.xml' push: branches: - main concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: contents: read jobs: build: name: Build & Test App runs-on: 'ubuntu-24.04' steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Dependency Review if: github.event_name == 'pull_request' uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 - name: Set up JDK uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version-file: .github/.java-version distribution: temurin - name: Set up Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 - name: Check code format run: ./gradlew spotlessCheck - name: Build app run: ./gradlew assembleRelease -Pinclude-telemetry -Penable-updater - name: Run unit tests id: unit_tests run: ./gradlew testReleaseUnitTest - name: Upload test report if: steps.unit_tests.outcome == 'failure' uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: test-report-${{ github.sha }} path: app/build/reports/tests/testReleaseUnitTest - name: Upload APK uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: arm64-v8a-${{ github.sha }} path: app/build/outputs/apk/release/app-arm64-v8a-release-unsigned.apk - name: Upload mapping uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: mapping-${{ github.sha }} path: app/build/outputs/mapping/release ================================================ FILE: .github/workflows/release.yml ================================================ name: Release on: push: tags: - v* concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: get_tag: if: github.repository == 'mihonapp/mihon' name: Extract tag name runs-on: 'ubuntu-24.04' outputs: tag: ${{ steps.extract.outputs.tag }} steps: - name: Get tag name id: extract run: echo "tag=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT build: if: github.repository == 'mihonapp/mihon' name: Build runs-on: 'ubuntu-24.04' needs: get_tag steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up JDK uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version-file: .github/.java-version distribution: temurin - name: Set up Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 - name: Build run: ./gradlew assembleRelease -Pinclude-telemetry -Penable-updater - name: Sign APK uses: r0adkll/sign-android-release@f30bdd30588842ac76044ecdbd4b6d0e3e813478 with: releaseDirectory: app/build/outputs/apk/release signingKeyBase64: ${{ secrets.SIGNING_KEY }} alias: ${{ secrets.ALIAS }} keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} env: BUILD_TOOLS_VERSION: '35.0.1' - name: Rename APK run: | set -e mv app/build/outputs/apk/release/app-universal-release-unsigned-signed.apk mihon-${{ needs.get_tag.outputs.tag }}.apk mv app/build/outputs/apk/release/app-arm64-v8a-release-unsigned-signed.apk mihon-arm64-v8a-${{ needs.get_tag.outputs.tag }}.apk mv app/build/outputs/apk/release/app-armeabi-v7a-release-unsigned-signed.apk mihon-armeabi-v7a-${{ needs.get_tag.outputs.tag }}.apk mv app/build/outputs/apk/release/app-x86-release-unsigned-signed.apk mihon-x86-${{ needs.get_tag.outputs.tag }}.apk mv app/build/outputs/apk/release/app-x86_64-release-unsigned-signed.apk mihon-x86_64-${{ needs.get_tag.outputs.tag }}.apk - name: Upload APK uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: mihon path: | mihon-${{ needs.get_tag.outputs.tag }}.apk mihon-arm64-v8a-${{ needs.get_tag.outputs.tag }}.apk mihon-armeabi-v7a-${{ needs.get_tag.outputs.tag }}.apk mihon-x86-${{ needs.get_tag.outputs.tag }}.apk mihon-x86_64-${{ needs.get_tag.outputs.tag }}.apk build_foss: if: github.repository == 'mihonapp/mihon' name: Build (FOSS) runs-on: ubuntu-24.04 needs: get_tag steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up JDK uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version-file: .github/.java-version distribution: temurin - name: Set up Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: cache-disabled: true - name: Build run: ./gradlew assembleFoss -Penable-updater - name: Sign APK uses: r0adkll/sign-android-release@f30bdd30588842ac76044ecdbd4b6d0e3e813478 with: releaseDirectory: app/build/outputs/apk/foss signingKeyBase64: ${{ secrets.SIGNING_KEY }} alias: ${{ secrets.ALIAS }} keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} env: BUILD_TOOLS_VERSION: '35.0.1' - name: Rename APK run: | set -e mv app/build/outputs/apk/foss/app-universal-foss-unsigned-signed.apk mihon-${{ needs.get_tag.outputs.tag }}-foss.apk - name: Upload APK uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: mihon-foss path: mihon-${{ needs.get_tag.outputs.tag }}-foss.apk release: if: github.repository == 'mihonapp/mihon' name: Create GitHub Release runs-on: ubuntu-24.04 needs: [get_tag, build, build_foss] steps: - name: Download all artifacts uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: merge-multiple: true - name: Delete all artifacts uses: geekyeggo/delete-artifact@f275313e70c08f6120db482d7a6b98377786765b # v5.1.0 with: failOnError: false name: | mihon mihon-foss - name: Create GitHub Release uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 with: tag_name: ${{ needs.get_tag.outputs.tag }} name: Mihon ${{ needs.get_tag.outputs.tag }} body: | Check out the [past release notes](https://github.com/mihonapp/mihon/releases) if you're upgrading from an earlier version. Consider [becoming a patron](https://www.patreon.com/mihon/membership) to help keep Mihon improving! > [!TIP] > > ### If you are unsure which version to download then go with `mihon-${{ needs.get_tag.outputs.tag }}.apk` files: | mihon-${{ needs.get_tag.outputs.tag }}.apk mihon-${{ needs.get_tag.outputs.tag }}-foss.apk mihon-arm64-v8a-${{ needs.get_tag.outputs.tag }}.apk mihon-armeabi-v7a-${{ needs.get_tag.outputs.tag }}.apk mihon-x86-${{ needs.get_tag.outputs.tag }}.apk mihon-x86_64-${{ needs.get_tag.outputs.tag }}.apk draft: true prerelease: false token: ${{ secrets.MIHON_BOT_TOKEN }} ================================================ FILE: .github/workflows/update_website.yml ================================================ name: Update website on: release: types: - published - deleted - edited jobs: update_website: runs-on: 'ubuntu-24.04' steps: - name: Update website run: | curl --fail-with-body -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer ${{ secrets.MIHON_BOT_TOKEN }}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/mihonapp/website/dispatches \ -d '{"event_type":"app_release"}' ================================================ FILE: .gitignore ================================================ # Build files .gradle .kotlin build # IDE files *.iml .idea/* !.idea/icon.svg /captures # Configuration files local.properties # macOS specific files .DS_Store ================================================ FILE: CHANGELOG.md ================================================ # Changelog All notable changes to this project will be documented in this file. The format is a modified version of [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - `Added` - for new features. - `Changed ` - for changes in existing functionality. - `Improved` - for enhancement or optimization in existing functionality. - `Removed` - for now removed features. - `Fixed` - for any bug fixes. - `Other` - for technical stuff. ## [Unreleased] ## [v0.19.5] - 2026-03-20 ### Changed - Retry in reader now redownloads image ([@AntsyLich](https://github.com/AntsyLich)) ([#3089](https://github.com/mihonapp/mihon/pull/3089)) ### Fixed - Fix performance regression introduced in v0.19.4 ([@AntsyLich](https://github.com/AntsyLich)) ([#3082](https://github.com/mihonapp/mihon/pull/3082)) - Fix duplicate key crash in duplicate detection ([@leodyversemilla07](https://github.com/leodyversemilla07)) ([#3040](https://github.com/mihonapp/mihon/pull/3040)) - Fix MangaUpdates HTTP 4XX errors ([@leodyversemilla07](https://github.com/leodyversemilla07)) ([#3021](https://github.com/mihonapp/mihon/pull/3021)) - Fix WebView JavaScript dialogs popup after screen is closed ([@leodyversemilla07](https://github.com/leodyversemilla07)) ([#3041](https://github.com/mihonapp/mihon/pull/3041)) - Fix extension actions disappearing after installing and uninstalling in same session ([@leodyversemilla07](https://github.com/leodyversemilla07)) ([#3049](https://github.com/mihonapp/mihon/pull/3049)) ## [v0.19.4] - 2026-02-25 ### Added - Automatically remove downloads on Suwayomi after reading, configurable via extension settings ([@cpiber](https://github.com/cpiber)) ([#2673](https://github.com/mihonapp/mihon/pull/2673)) - Display author & artist name in MAL search results ([@MajorTanya](https://github.com/MajorTanya)) ([#2833](https://github.com/mihonapp/mihon/pull/2833)) - Add filter options to Updates tab ([@MajorTanya](https://github.com/MajorTanya)) ([#2851](https://github.com/mihonapp/mihon/pull/2851)) - Add bookmarked chapters to chapter download options ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#2891](https://github.com/mihonapp/mihon/pull/2891)) - Add `src:` prefix to search the library by source ID ([@MajorTanya](https://github.com/MajorTanya)) ([#2927](https://github.com/mihonapp/mihon/pull/2927)) - Add `src:local` as a way to search for Local Source entries ([@MajorTanya](https://github.com/MajorTanya)) ([#2928](https://github.com/mihonapp/mihon/pull/2928)) ### Improved - Minimize memory usage by reducing in-memory cover cache size ([@Lolle2000la](https://github.com/Lolle2000la)) ([#2266](https://github.com/mihonapp/mihon/pull/2266)) - Optimize MAL search queries ([@MajorTanya](https://github.com/MajorTanya)) ([#2832](https://github.com/mihonapp/mihon/pull/2832)) - Reword download reindexing message to avoid confusion ([@MajorTanya](https://github.com/MajorTanya)) ([#2874](https://github.com/mihonapp/mihon/pull/2874)) - Optimize tracked library filter ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#2977](https://github.com/mihonapp/mihon/pull/2977)) - Utilize tracker for library duplicate detection ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#2978](https://github.com/mihonapp/mihon/pull/2978)) ### Changed - Update tracker icons ([@AntsyLich](https://github.com/AntsyLich)) ([#2773](https://github.com/mihonapp/mihon/pull/2773)) - Add a small increment to chapter number before comparison to fix progress sync issues for Suwayomi ([@cpiber](https://github.com/cpiber)) ([#2657](https://github.com/mihonapp/mihon/pull/2675)) - Add all pages of adjacent chapters in the UI instead of only the first or last three ([@AntsyLich](https://github.com/AntsyLich)) ([#2995](https://github.com/mihonapp/mihon/pull/2995)) - Going back now first clears search query on browse extension tab ([@cuong-tran](https://github.com/cuong-tran)) ([#2906](https://github.com/mihonapp/mihon/pull/2906)) - Automatic library updates now run even when connected to a VPN ([@AntsyLich](https://github.com/AntsyLich)) ([#2773](https://github.com/mihonapp/mihon/pull/2773)) ### Fixed - Fix reader tap zones triggering after scrolling is stopped by tapping ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2680](https://github.com/mihonapp/mihon/pull/2680)) - Fix shizuku installer not updating installed extensions ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2697](https://github.com/mihonapp/mihon/pull/2697)) - Fix mass migration not using the same search queries as individual migration ([@AntsyLich](https://github.com/AntsyLich)) ([#2736](https://github.com/mihonapp/mihon/pull/2736)) - Fix reader not saving read duration when changing chapter ([@AntsyLich](https://github.com/AntsyLich), [@KotlinHero](https://github.com/KotlinHero)) ([#2784](https://github.com/mihonapp/mihon/pull/2784)) - Fix pre-1970 upload date display in chapter list ([@MajorTanya](https://github.com/MajorTanya)) ([#2779](https://github.com/mihonapp/mihon/pull/2779)) - Fix crash when trying to install/update extensions while shizuku is not running ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2837](https://github.com/mihonapp/mihon/pull/2837)) - Fix Add Repo input not taking up the full dialog width ([@cuong-tran](https://github.com/cuong-tran)) ([#2816](https://github.com/mihonapp/mihon/pull/2816)) - Fix migration's selected sources order not preserved ([@AntsyLich](https://github.com/AntsyLich)) ([#2993](https://github.com/mihonapp/mihon/pull/2993)) - Fix migration dialog not showing for consecutive prompts from the same screen ([@AntsyLich](https://github.com/AntsyLich)) ([#2994](https://github.com/mihonapp/mihon/pull/2994)) - Fix extension install/update stuck at pending ([@AntsyLich](https://github.com/AntsyLich)) ([#3000](https://github.com/mihonapp/mihon/pull/3000)) - Fix crash when downloading multiple chapters with Arabic locale ([@MajorTanya](https://github.com/MajorTanya)) ([#2676](https://github.com/mihonapp/mihon/pull/2676)) ### Other - Enable logcat logging on stable and debug builds without enabling verbose logging ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2836](https://github.com/mihonapp/mihon/pull/2836)) ## [v0.19.3] - 2025-11-07 ### Improved - Improved various aspects of the WebView multi window support ([@TheUnlocked](https://github.com/TheUnlocked)) ([#2662](https://github.com/mihonapp/mihon/pull/2662)) ### Removed - Revert "Fix reader tap zones triggering after scrolling was stopped by the user" due to introduction of regression ([@AntsyLich](https://github.com/AntsyLich)) ([#2670](https://github.com/mihonapp/mihon/pull/2670)) ### Fixed - Fix WebView crash introduced in 0.19.2 ([@bapeey](https://github.com/bapeey)) ([#2649](https://github.com/mihonapp/mihon/pull/2649)) - Fix extra padding appearing in reader after user interactions ([@AntsyLich](https://github.com/AntsyLich)) ([#2669](https://github.com/mihonapp/mihon/pull/2669)) - Fix long strip reader not scrolling on consecutive taps ([@AntsyLich](https://github.com/AntsyLich)) ([#2670](https://github.com/mihonapp/mihon/pull/2670)) ## [v0.19.2] - 2025-11-02 ### Added - Advanced setting to limit download filenames to ASCII characters. This is provided only as a workaround for OSes that do not properly handle standard Unicode filenames. This setting is generally not recommended and should only be used as a last resort ([@raxod502](https://github.com/radian-software)) ([#2305](https://github.com/mihonapp/mihon/pull/2305)) - Option to customize the number of concurrent source and page downloads ([@AntsyLich](https://github.com/AntsyLich)) ([#2637](https://github.com/mihonapp/mihon/pull/2637)) ### Changed - Increased default concurrent page downloads to 5 ([@AntsyLich](https://github.com/AntsyLich)) ([#2637](https://github.com/mihonapp/mihon/pull/2637)) ### Improved - Spoofing of `X-Requested-With` header to support newer WebView versions ([@Guzmazow](https://github.com/Guzmazow)) ([#2491](https://github.com/mihonapp/mihon/pull/2491)) - Download support for chapters with the same metadata. Now a hash based on chapter's url is appended to download filename to tell them apart, letting you download both. Existing downloaded chapters will continue to work normally ([@raxod502](https://github.com/radian-software)) ([#2305](https://github.com/mihonapp/mihon/pull/2305)) - Auto refresh extension list whenever a repository is added or removed ([@c2y5](https://github.com/c2y5)) ([#2483](https://github.com/mihonapp/mihon/pull/2483)) - Added proper multi window support in WebView instead of treating everything as a redirect ([@TheUnlocked](https://github.com/TheUnlocked)) ([#2584](https://github.com/mihonapp/mihon/pull/2584)) ### Fixed - Fix height of description not being calculated correctly if images are present ([@Secozzi](https://github.com/Secozzi)) ([#2382](https://github.com/mihonapp/mihon/pull/2382)) - Fix migration progress not updating after manual search ([@Secozzi](https://github.com/Secozzi)) ([#2484](https://github.com/mihonapp/mihon/pull/2484)) - Fix category migration flag being ignored due to incorrect check against chapter flag ([@Secozzi](https://github.com/Secozzi)) ([#2484](https://github.com/mihonapp/mihon/pull/2484)) - Fix disabling incognito mode from notification ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2512](https://github.com/mihonapp/mihon/pull/2512)) - Fix mass migration advanced search query building ([@AntsyLich](https://github.com/AntsyLich)) ([#2629](https://github.com/mihonapp/mihon/pull/2629)) - Fix migration dialog migrating to wrong entry ([@AntsyLich](https://github.com/AntsyLich)) ([#2631](https://github.com/mihonapp/mihon/pull/2631)) - Fix migration "Attempt to invoke virtual method" crash ([@AntsyLich](https://github.com/AntsyLich)) ([#2632](https://github.com/mihonapp/mihon/pull/2632)) - Fix reader "Unable to edit key" error ([@AntsyLich](https://github.com/AntsyLich)) ([#2634](https://github.com/mihonapp/mihon/pull/2634)) - Fix extension download stuck in pending state in some cases ([@c2y5](https://github.com/c2y5)) ([#2483](https://github.com/mihonapp/mihon/pull/2483)) - Fix scrollbar not showing when animator duration scale animation is turned off ([@anirudhsnayak](https://github.com/anirudhsnayak)) ([#2398](https://github.com/mihonapp/mihon/pull/2398)) - Fix date picker not allowing the same start and finish date in negative time zones ([@AntsyLich](https://github.com/AntsyLich), [@kashish-aggarwal21](https://github.com/kashish-aggarwal21)) ([#2617](https://github.com/mihonapp/mihon/pull/2617)) - Fix reader tap zones triggering after scrolling was stopped by the user ([@Naputt1](https://github.com/Naputt1), [@AntsyLich](https://github.com/AntsyLich)) ([#2518](https://github.com/mihonapp/mihon/pull/2518)) - Fix reader page indicator being partially visible on some devices ([@AntsyLich](https://github.com/AntsyLich)) ([#1908](https://github.com/mihonapp/mihon/pull/1908)) - Fix inconsistent system bar and reader app bar background ([@AntsyLich](https://github.com/AntsyLich)) ([#1908](https://github.com/mihonapp/mihon/pull/1908)) - Fix transparent system bar background in reader on Android 15+ ([@AntsyLich](https://github.com/AntsyLich)) ([#1908](https://github.com/mihonapp/mihon/pull/1908)) ### Other - Delegate Suwayomi tracker authentication to extension ([@cpiber](https://github.com/cpiber)) ([#2476](https://github.com/mihonapp/mihon/pull/2476)) - Fix Kitsu tracker to conform to tracker data structure properly ([@cpiber](https://github.com/cpiber)) ([#2609](https://github.com/mihonapp/mihon/pull/2609)) - Update Suwayomi tracker to use GraphQL API instead of REST API ([@cpiber](https://github.com/cpiber)) ([#2585](https://github.com/mihonapp/mihon/pull/2585)) ## [v0.19.1] - 2025-08-07 ### Changed - LocalSource now reads ComicInfo.xml file for chapter (if available) to display chapter title, number and scanlator ([@raxod502](https://github.com/radian-software)) ([#2332](https://github.com/mihonapp/mihon/pull/2332)) ### Removed - Predictive back support ([@AntsyLich](https://github.com/AntsyLich)) ([#2362](https://github.com/mihonapp/mihon/pull/2362)) ### Fixed - Fix scrollbar sometimes not showing during scroll or not reaching the bottom with few items ([@anirudhsnayak](https://github.com/anirudhsnayak)) ([#2304](https://github.com/mihonapp/mihon/pull/2304)) - Fix local source EPUB files not loading ([@AntsyLich](https://github.com/AntsyLich)) ([#2369](https://github.com/mihonapp/mihon/pull/2369)) - Fix title text color in light mode on mass migration list ([@AntsyLich](https://github.com/AntsyLich)) ([#2370](https://github.com/mihonapp/mihon/pull/2370)) - Fix 'Default' category showing in library with no user-added categories ([@AntsyLich](https://github.com/AntsyLich)) ([#2371](https://github.com/mihonapp/mihon/pull/2371)) - Fix crash when opening filter sheet with an empty library ([@krysanify](https://github.com/krysanify/)) ([#2355](https://github.com/mihonapp/mihon/pull/2355)) - Fix mark as read/unread not working for selected library items ([@krysanify](https://github.com/krysanify/)) ([#2355](https://github.com/mihonapp/mihon/pull/2355)) ## [v0.19.0] - 2025-08-04 ### Added - Add more Kaomoji for empty/error screens ([@ianfhunter](https://github.com/ianfhunter/)) ([#1909](https://github.com/mihonapp/mihon/pull/1909)) - Add user manga notes ([@imkunet](https://github.com/imkunet), [@AntsyLich](https://github.com/AntsyLich)) ([#428](https://github.com/mihonapp/mihon/pull/428)) - Fix user notes not restoring when manga doesn't exist in DB ([@AntsyLich](https://github.com/AntsyLich)) ([#1945](https://github.com/mihonapp/mihon/pull/1945)) - Add markdown support for manga descriptions ([@Secozzi](https://github.com/Secozzi)) ([#1948](https://github.com/mihonapp/mihon/pull/1948)) - Use simpler markdown flavour ([@Secozzi](https://github.com/Secozzi)) ([#2000](https://github.com/mihonapp/mihon/pull/2000)) - Use Github markdown flavour for Github releases & fix bullet list alignment ([@Secozzi](https://github.com/Secozzi)) ([#2024](https://github.com/mihonapp/mihon/pull/2024)) - Add option to toggle image loading ([@Secozzi](https://github.com/Secozzi)) ([#2076](https://github.com/mihonapp/mihon/pull/2076)) - Add Nord Theme ([@Riztard](https://github.com/Riztard)) ([#1951](https://github.com/mihonapp/mihon/pull/1951)) - Option to keep read manga when clearing database ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#1979](https://github.com/mihonapp/mihon/pull/1979)) - Add advanced option to always update manga title from source ([@FlaminSarge](https://github.com/FlaminSarge)) ([#1182](https://github.com/mihonapp/mihon/pull/1182)) - Full predictive back support ([@AntsyLich](https://github.com/AntsyLich)) ([#2085](https://github.com/mihonapp/mihon/pull/2085)) - Add Catppuccin theme (mocha for dark and latte for light, mauve accent) ([@claymorwan](https://github.com/claymorwan/)) ([#2117](https://github.com/mihonapp/mihon/pull/2117)) - Manga mass migration ([@AntsyLich](https://github.com/AntsyLich), [@jobobby04](https://github.com/jobobby04)) ([#2110](https://github.com/mihonapp/mihon/pull/2110), [#2336](https://github.com/mihonapp/mihon/pull/2336), [#2338](https://github.com/mihonapp/mihon/pull/2338), [`f119386`](https://github.com/mihonapp/mihon/commit/f119386)) ### Improved - Significantly improve browsing speed (near instantaneous) ([@AntsyLich](https://github.com/AntsyLich)) ([#1946](https://github.com/mihonapp/mihon/pull/1946)) - Deduplicate entries when browsing ([@AntsyLich](https://github.com/AntsyLich)) ([#1957](https://github.com/mihonapp/mihon/pull/1957)) - Update non-library manga data when browsing ([@AntsyLich](https://github.com/AntsyLich)) ([#1967](https://github.com/mihonapp/mihon/pull/1967)) - Surface image loading error in Reader ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#1981](https://github.com/mihonapp/mihon/pull/1981)) - Include source headers when opening failed images from reader ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2004](https://github.com/mihonapp/mihon/pull/2004)) - Added autofill support to tracker login dialog ([@AntsyLich](https://github.com/AntsyLich)) ([#2069](https://github.com/mihonapp/mihon/pull/2069)) - Added option to hide missing chapter count ([@User826](https://github.com/User826), [@AntsyLich](https://github.com/AntsyLich)) ([#2108](https://github.com/mihonapp/mihon/pull/2108)) - Use median to determine smart update interval, making it more resilient to long hiatuses ([@Kladki](https://github.com/Kladki)) ([#2251](https://github.com/mihonapp/mihon/pull/2251)) - Optimize library code to potentially better handle big user libraries ([@AntsyLich](https://github.com/AntsyLich)) ([#2329](https://github.com/mihonapp/mihon/pull/2329), [#2341](https://github.com/mihonapp/mihon/pull/2341)) ### Changed - Display all similarly named duplicates in duplicate manga dialogue ([@NarwhalHorns](https://github.com/NarwhalHorns), [@AntsyLich](https://github.com/AntsyLich)) ([#1861](https://github.com/mihonapp/mihon/pull/1861)) - Display chapter count on items in duplicate manga dialogue ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#1963](https://github.com/mihonapp/mihon/pull/1963)) - Update Facebook and Reddit icons ([@Joehuu](https://github.com/Joehuu)) ([#1994](https://github.com/mihonapp/mihon/pull/1994)) - Switch default user agent to Android Chrome ([@AntsyLich](https://github.com/AntsyLich)) ([#2048](https://github.com/mihonapp/mihon/pull/2048)) - Changed log in button text when processing tracker login ([@AntsyLich](https://github.com/AntsyLich)) ([#2069](https://github.com/mihonapp/mihon/pull/2069)) - Disable reader's 'Keep screen on' setting by default ([@AntsyLich](https://github.com/AntsyLich)) ([#2095](https://github.com/mihonapp/mihon/pull/2095)) - Update manga without chapters even if restricted by source ([@AntsyLich](https://github.com/AntsyLich)) ([#2224](https://github.com/mihonapp/mihon/pull/224)) - Make local source default chapter sorting match file explorer behavior ([@AntsyLich](https://github.com/AntsyLich)) ([#2224](https://github.com/mihonapp/mihon/pull/224)) - Include Manga `initialized` status in backup ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2285](https://github.com/mihonapp/mihon/pull/2285)) ### Fixed - Fix Bangumi search results including novels ([@MajorTanya](https://github.com/MajorTanya)) ([#1885](https://github.com/mihonapp/mihon/pull/1885)) - Fix next chapter button occasionally jumping to the last page of the current chapter ([@perokhe](https://github.com/perokhe)) ([#1920](https://github.com/mihonapp/mihon/pull/1920)) - Fix page number not appearing when opening chapter ([@perokhe](https://github.com/perokhe)) ([#1936](https://github.com/mihonapp/mihon/pull/1936)) - Fix backup sharing from notifications not working when app is in background ([@JaymanR](https://github.com/JaymanR))([#1929](https://github.com/mihonapp/mihon/pull/1929)) - Fix mark existing duplicate read chapters as read option not working in some cases ([@AntsyLich](https://github.com/AntsyLich)) ([#1944](https://github.com/mihonapp/mihon/pull/1944)) - Fix app bar action tooltips blocking clicks ([@Bartuzen](https://github.com/Bartuzen)) ([#1928](https://github.com/mihonapp/mihon/pull/1928)) - Fix unintended app permissions due to Firebase misconfiguration ([@AntsyLich](https://github.com/AntsyLich)) ([#1960](https://github.com/mihonapp/mihon/pull/1960)) - Fix navigation issue after migrating a duplicated entry from History tab ([@cuong-tran](https://github.com/cuong-tran)) ([#1980](https://github.com/mihonapp/mihon/pull/1980)) - Fix duplicate requests in WebView due to empty reasonPhrase ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2003](https://github.com/mihonapp/mihon/pull/2003)) - Fix content under source browse screen top appbar is interactable ([@AntsyLich](https://github.com/AntsyLich)) ([#2026](https://github.com/mihonapp/mihon/pull/2026)) - Fix crash when trying use source sort filter without a pre-selection ([@AntsyLich](https://github.com/AntsyLich)) ([#2036](https://github.com/mihonapp/mihon/pull/2036)) - Fix empty layout not appearing in browse source screen in some cases ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#2043](https://github.com/mihonapp/mihon/pull/2043)) - Fix Pill not following the local text style ([@AntsyLich](https://github.com/AntsyLich)) ([`f8cb506`](https://github.com/mihonapp/mihon/commit/f8cb506)) - Fix downloader stopping after failing to create download directory of a manga ([@AntsyLich](https://github.com/AntsyLich)) ([#2068](https://github.com/mihonapp/mihon/pull/2068)) - Fix pressing `Enter` while searching also triggering navigation back on physical keyboards ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2077](https://github.com/mihonapp/mihon/pull/2077)) - Ensure app waits for Cloudflare challenge to complete before continuing ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2200](https://github.com/mihonapp/mihon/pull/2200)) ### Removed - Remove Okhttp networking from WebView Screen ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#2020](https://github.com/mihonapp/mihon/pull/2020)) ## [v0.18.0] - 2025-03-20 ### Added - Add option to always decode long strip images with SSIV ([@AntsyLich](https://github.com/AntsyLich)) ([`c5655e8`](https://github.com/mihonapp/mihon/commit/c5655e8803bc32d0931657f0b7bc6afeab70feaf)) - Change option label ([@AntsyLich](https://github.com/AntsyLich)) ([#1835](https://github.com/mihonapp/mihon/pull/1835)) - Added option to enable incognito per extension ([@sdaqo](https://github.com/sdaqo), [@AntsyLich](https://github.com/AntsyLich)) ([#157](https://github.com/mihonapp/mihon/pull/157)) - Add button to favorite manga from history screen ([@Animeboynz](https://github.com/Animeboynz)) ([#1733](https://github.com/mihonapp/mihon/pull/1733)) - Add Monochrome theme (made with e-ink displays in mind) ([@MajorTanya](https://github.com/MajorTanya)) ([#1752](https://github.com/mihonapp/mihon/pull/1752)) - Support for private tracking with AniList and Bangumi ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#1736](https://github.com/mihonapp/mihon/pull/1736)) - Add private tracking support for Kitsu ([@MajorTanya](https://github.com/MajorTanya)) ([#1774](https://github.com/mihonapp/mihon/pull/1774)) - Add option to export minimal library information to a CSV file ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1161](https://github.com/mihonapp/mihon/pull/1161)) - Add back support for drag-and-drop category reordering ([@cuong-tran](https://github.com/cuong-tran)) ([#1427](https://github.com/mihonapp/mihon/pull/1427)) - Add option to mark duplicate read chapters as read after library update or while reading ([@AntsyLich](https://github.com/AntsyLich)) ([#1785](https://github.com/mihonapp/mihon/pull/1785), [#1791](https://github.com/mihonapp/mihon/pull/1791), [#1870](https://github.com/mihonapp/mihon/pull/1870)) - Display staff information on Anilist tracker search results ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#1810](https://github.com/mihonapp/mihon/pull/1810)) - Add `id:` prefix search to library to search by internal DB ID ([@MajorTanya](https://github.com/MajorTanya)) ([#1856](https://github.com/mihonapp/mihon/pull/1856)) - Add back option to disable unread chapter badge in library ([@AntsyLich](https://github.com/AntsyLich)) ([#1871](https://github.com/mihonapp/mihon/pull/1871)) ### Changed - Sliders UI ([@AntsyLich](https://github.com/AntsyLich)) ([#1840](https://github.com/mihonapp/mihon/pull/1840)) - Apply "Downloaded only" filter to all entries regardless of favourite status ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#1603](https://github.com/mihonapp/mihon/pull/1603)) - Ignore hidden files/folders for Local Source chapter list ([@BrutuZ](https://github.com/BrutuZ)) ([#1763](https://github.com/mihonapp/mihon/pull/1763)) - Migrate to newer Bangumi API ([@MajorTanya](https://github.com/MajorTanya)) ([#1748](https://github.com/mihonapp/mihon/pull/1748)) - Now showing manga starting dates in search - Reduced request load by 2-4x in certain situations - Bump default user agent ([@AntsyLich](https://github.com/AntsyLich)) ([#1833](https://github.com/mihonapp/mihon/pull/1833)) - Changed the label of chapter swipe settings and renamed the group to "Behavior" ([@AntsyLich](https://github.com/AntsyLich)) ([#1870](https://github.com/mihonapp/mihon/pull/1870)) ### Fixed - Fix MAL `main_picture` nullability breaking search if a result doesn't have a cover set ([@MajorTanya](https://github.com/MajorTanya)) ([#1618](https://github.com/mihonapp/mihon/pull/1618)) - Fix Bangumi and MAL tracking 401 errors due to Mihon sending expired credentials ([@MajorTanya](https://github.com/MajorTanya)) ([#1681](https://github.com/mihonapp/mihon/pull/1681), [#1682](https://github.com/mihonapp/mihon/pull/1682)) - Fix certain Infinix, Xiaomi devices being unable to use any "Open link in browser" actions, including tracker setup ([@MajorTanya](https://github.com/MajorTanya)) ([#1684](https://github.com/mihonapp/mihon/pull/1684)) ([#1776](https://github.com/mihonapp/mihon/pull/1776)) - Fix App's preferences referencing deleted categories ([@cuong-tran](https://github.com/cuong-tran)) ([#1734](https://github.com/mihonapp/mihon/pull/1734)) - Fix backup/restore of category related preferences ([@cuong-tran](https://github.com/cuong-tran)) ([#1726](https://github.com/mihonapp/mihon/pull/1726)) - Fix WebView sending app's package name in `X-Requested-With` header, which led to sources blocking access ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#1812](https://github.com/mihonapp/mihon/pull/1812)) - Fix an issue where tracker reading progress is changed to a lower value ([@Animeboynz](https://github.com/Animeboynz)) ([#1795](https://github.com/mihonapp/mihon/pull/1795)) - Attempt to fix crash when migrating or removing entries from library ([@FlaminSarge](https://github.com/FlaminSarge)) ([#1828](https://github.com/mihonapp/mihon/pull/1828)) ### Removed - Remove alphabetical category sort option ([@AntsyLich](https://github.com/AntsyLich)) ([#1781](https://github.com/mihonapp/mihon/pull/1781)) ### Other - Add zoned "Current time" to debug info and include year & timezone in logcat output ([@MajorTanya](https://github.com/MajorTanya)) ([#1672](https://github.com/mihonapp/mihon/pull/1672)) - Add application package ID to debug info ([@MajorTanya](https://github.com/MajorTanya)) ([#1847](https://github.com/mihonapp/mihon/pull/1847)) ## [v0.17.1] - 2024-12-06 ### Changed - Bump default user agent ([@AntsyLich](https://github.com/AntsyLich)) ([`76dcf90`](https://github.com/mihonapp/mihon/commit/76dcf903403d565056f44c66d965c1ea8affffc3)) ### Improved - Bangumi search now shows the score and summary of a search result ([@MajorTanya](https://github.com/MajorTanya)) ([#1396](https://github.com/mihonapp/mihon/pull/1396)) - Extension repo URLs are now auto-formatted ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) ([`22d8aad`](https://github.com/mihonapp/mihon/commit/22d8aad598bea8f00f2831779e45a6645392ca0f)) ### Fixed - Fix "currentTab was used multiple times" ([@AntsyLich](https://github.com/AntsyLich)) ([`371c143`](https://github.com/mihonapp/mihon/commit/371c1432e218f6dcf129f05405dceb2cd351c647)) - Fix a rare crash when invoking "Mark previous as read" action ([@AntsyLich](https://github.com/AntsyLich)) ([`f508d10`](https://github.com/mihonapp/mihon/commit/f508d10ad13560d7316df8642bc93fe66c05b9a8)) - Fix long strip images not loading in some old devices ([@AntsyLich](https://github.com/AntsyLich)) ([`06efc3b`](https://github.com/mihonapp/mihon/commit/06efc3b25c5af51f42448af27a269ee459d9093d)) - Switch to hardware bitmap in reader only if device can handle it ([@AntsyLich](https://github.com/AntsyLich)) ([`e6d96bd`](https://github.com/mihonapp/mihon/commit/e6d96bd348ea5d18a005d6465222ad5f5123103e)) - Add option to lower the threshold for hardware bitmaps ([@AntsyLich](https://github.com/AntsyLich)) ([`dcddac5`](https://github.com/mihonapp/mihon/commit/dcddac5daaff3ec89c8507c35dc13d345ffdb6d7)) - Improve hardware bitmap threshold option ([@AntsyLich](https://github.com/AntsyLich)) ([`d6dfd24`](https://github.com/mihonapp/mihon/commit/d6dfd24548eaa05a8c3e478068fe2e08f2ee4473)) - Always use software bitmap on certain devices ([@MajorTanya](https://github.com/MajorTanya)) ([#1543](https://github.com/mihonapp/mihon/pull/1543)) - Fix crash after removing last category while it's active in library ([@cuong-tran](https://github.com/cuong-tran)) ([#1450](https://github.com/mihonapp/mihon/pull/1450)) - Fix reader transition color scheme in auto background mode ([@cuong-tran](https://github.com/cuong-tran)) ([#1487](https://github.com/mihonapp/mihon/pull/1487)) - Fix app update error notification disappearing ([@cuong-tran](https://github.com/cuong-tran)) ([#1476](https://github.com/mihonapp/mihon/pull/1476)) - Fix browser not opening in some cases in Honor devices ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) ([#1520](https://github.com/mihonapp/mihon/pull/1520)) ## [v0.17.0] - 2024-10-26 ### Added - Option to disable reader zoom out ([@Splintorien](https://github.com/Splintorien)) ([#302](https://github.com/mihonapp/mihon/pull/302)) - Source name and tracker urls to app generated `ComicInfo.xml` file ([@Shamicen](https://github.com/Shamicen)) ([#459](https://github.com/mihonapp/mihon/pull/459)) - Option to migrate in Duplicate entry dialog ([@sirlag](https://github.com/sirlag)) ([#492](https://github.com/mihonapp/mihon/pull/492)) - Upcoming screen to visualize expected update dates ([@sirlag](https://github.com/sirlag)) ([#420](https://github.com/mihonapp/mihon/pull/420)) - Only show upcoming updates in the future ([@sirlag](https://github.com/sirlag)) ([#606](https://github.com/mihonapp/mihon/pull/606)) - Add Quantity Badge to Upcoming Screen ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1250](https://github.com/mihonapp/mihon/pull/1250)) - Crash screen error message to the top of the crash log generated from that screen ([@FooIbar](https://github.com/FooIbar)) ([#742](https://github.com/mihonapp/mihon/pull/742)) - Support for 7Zip and RAR5 archives ([@FooIbar](https://github.com/FooIbar)) ([#949](https://github.com/mihonapp/mihon/pull/949)) - Extra configuration options to e-ink page flashes ([@sirlag](https://github.com/sirlag)) ([#625](https://github.com/mihonapp/mihon/pull/625)) - 8-bit+ AVIF image support ([@WerctFourth](https://github.com/WerctFourth)) ([#971](https://github.com/mihonapp/mihon/pull/971)) - Smart update dialog message when no predicted released date exists ([@Animeboynz](https://github.com/Animeboynz)) ([#977](https://github.com/mihonapp/mihon/pull/977)) - Option to copy reader panel to clipboard ([@Animeboynz](https://github.com/Animeboynz)) ([#1003](https://github.com/mihonapp/mihon/pull/1003)) - Copy Tracker URL option to tracker sheet ([@mm12](https://github.com/mm12)) ([#1101](https://github.com/mihonapp/mihon/pull/1101)) - A button to exclude all scanlators in exclude scanlators dialog ([@AntsyLich](https://github.com/AntsyLich)) ([`84b2164`](https://github.com/mihonapp/mihon/commit/84b2164787a795f3fd757c325cbfb6ef660ac3a3)) - Open in browser option to reader menu ([@mm12](https://github.com/mm12)) ([#1110](https://github.com/mihonapp/mihon/pull/1110)) - Reorder reader menu overflow items ([@AntsyLich](https://github.com/AntsyLich)) ([`788235f`](https://github.com/mihonapp/mihon/commit/788235feeca241228eac0561339dd07b5ea0b77d)) - Option to skip downloading duplicate read chapters ([@shabnix](https://github.com/shabnix)) ([#1125](https://github.com/mihonapp/mihon/pull/1125)) - Add confirmation dialog when adding repo via URI ([@Animeboynz](https://github.com/Animeboynz)) ([#1158](https://github.com/mihonapp/mihon/pull/1158)) - Add "show entry" action to download notifications ([@mm12](https://github.com/mm12), [@AntsyLich](https://github.com/AntsyLich)) ([#1159](https://github.com/mihonapp/mihon/pull/1159)) - Option to update trackers when chapter marked as read ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1177](https://github.com/mihonapp/mihon/pull/1177), [#1365](https://github.com/mihonapp/mihon/pull/1365), [#1374](https://github.com/mihonapp/mihon/pull/1374)) - Toast to restart app when User-Agent is changed ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#1204](https://github.com/mihonapp/mihon/pull/1204)) - Added more profile compilation status (p) ([`c8bb78d`](https://github.com/mihonapp/mihon/commit/c8bb78d91afc2824baaca999f0095559c49d1306)) - Add option to opt out of Analytics and Crashlytics ([@Animeboynz](https://github.com/Animeboynz)) ([#1237](https://github.com/mihonapp/mihon/pull/1237)) - Rework Firebase setup ([@AntsyLich](https://github.com/AntsyLich)) ([`15e3f28`](https://github.com/mihonapp/mihon/commit/15e3f28aa36bec3c31f212c572ab57ce960cc862)) - Added random library sort ([@jackhamilton](https://github.com/jackhamilton)) ([#1317](https://github.com/mihonapp/mihon/pull/1317)) - Make sure random library sort is at the bottom ([@AntsyLich](https://github.com/AntsyLich)) ([`2e2c8d3`](https://github.com/mihonapp/mihon/commit/2e2c8d36c1e23bf274c7c19f1242e14b0c7afbc1)) - Confirmation dialog when removing privately installed extensions ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1320](https://github.com/mihonapp/mihon/pull/1320)) - Option to backup non-library read entries ([@Animeboynz](https://github.com/Animeboynz), [@jobobby04](https://github.com/jobobby04), [@AntsyLich](https://github.com/AntsyLich)) ([#1324](https://github.com/mihonapp/mihon/pull/1324)) ### Changed - Read archive files from memory instead of temporarily extracting to internal storage ([@FooIbar](https://github.com/FooIbar)) ([#326](https://github.com/mihonapp/mihon/pull/326)) - Fix dual page split ([@FooIbar](https://github.com/FooIbar)) ([#485](https://github.com/mihonapp/mihon/pull/485)) - Bump default user agent ([@AntsyLich](https://github.com/AntsyLich)) ([`8160b47`](https://github.com/mihonapp/mihon/commit/8160b47ff5fbbd9b32caeb462b5be881fabd3449)) - Wait for sources to be initialized before performing source related tasks ([@jobobby04](https://github.com/jobobby04)) ([`a08e03f`](https://github.com/mihonapp/mihon/commit/a08e03f5cbf3f4e6be1de35f97ef8ebb26a1210e)) - Duplicate entry dialog UI ([@sirlag](https://github.com/sirlag)) ([#492](https://github.com/mihonapp/mihon/pull/492)) - Extension trust system - Store extension repo details from `repo.json` in database ([@sirlag](https://github.com/sirlag)) ([#506](https://github.com/mihonapp/mihon/pull/506)) - Fix extension repo migration not triggering ([@AntsyLich](https://github.com/AntsyLich)) ([`9672ea8`](https://github.com/mihonapp/mihon/commit/9672ea8b1b06f464800e310c96e060ead182f7ca)) - Refactor the ExtensionRepoService to use DTOs ([@MajorTanya](https://github.com/MajorTanya)) ([#573](https://github.com/mihonapp/mihon/pull/573)) - Fix extension repo name is used to construct URL instead of baseUrl ([@MajorTanya](https://github.com/MajorTanya)) ([#572](https://github.com/mihonapp/mihon/pull/572)) - Fix crash with `TypeReference` issue when creating extension repo ([@AntsyLich](https://github.com/AntsyLich)) ([#574](https://github.com/mihonapp/mihon/pull/574), [`e020ae5`](https://github.com/mihonapp/mihon/commit/e020ae5ed558e80742ef0ad8bfa0f69af0959d5a)) - Fix mishap in [`e020ae5`](https://github.com/mihonapp/mihon/commit/e020ae5ed558e80742ef0ad8bfa0f69af0959d5a) ([@AntsyLich](https://github.com/AntsyLich)) ([`6965e59`](https://github.com/mihonapp/mihon/commit/6965e59a643c67a2bf81b3c69ec70268e5da5797)) - Backup and Restore ([@Animeboynz](https://github.com/Animeboynz)) ([#1057](https://github.com/mihonapp/mihon/pull/1057)) - Trust extension by repo ([@AntsyLich](https://github.com/AntsyLich)) ([#570](https://github.com/mihonapp/mihon/pull/570)) - From M2 ripple to M3 ([@FooIbar](https://github.com/FooIbar)) ([#675](https://github.com/mihonapp/mihon/pull/675)) - Increased continue reading button size ([@AntsyLich](https://github.com/AntsyLich), [@Animeboynz](https://github.com/Animeboynz)) ([`e17f70f`](https://github.com/mihonapp/mihon/commit/e17f70f7226ea031fc1f962c9dfea3e404ba53ad)) - Global search "Has result" choice is now sticky ([@AntsyLich](https://github.com/AntsyLich)) ([`5a61ca5`](https://github.com/mihonapp/mihon/commit/5a61ca5535fe0d9e8e7bcb9e665ba2f9cb0cf649)) - Make category backup/restore not dependant on library backup ([@AntsyLich](https://github.com/AntsyLich)) ([`56fb4f6`](https://github.com/mihonapp/mihon/commit/56fb4f62a152e87a71892aa68c78cac51a2c8596)) - Rename backup restore error log file ([@AntsyLich](https://github.com/AntsyLich)) ([`2858ef8`](https://github.com/mihonapp/mihon/commit/2858ef835fec8d7278b1d0cad1b5664104d1e4b0)) - Keyboard type in add extension repo dialog ([@xbjfk](https://github.com/xbjfk)) ([#764](https://github.com/mihonapp/mihon/pull/764)) - Adjust collapse/open animation on manga description ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`1c16fc7`](https://github.com/mihonapp/mihon/commit/1c16fc79c2ac4c4be30308fed84ffb371dab5902)) - Kitsu domain to `kitsu.app` ([@MajorTanya](https://github.com/MajorTanya)) ([#1106](https://github.com/mihonapp/mihon/pull/1106)) - Respect privacy settings in extension update notification ([@Animeboynz](https://github.com/Animeboynz)) ([#1156](https://github.com/mihonapp/mihon/pull/1156)) - Hide keyboard when a Tracker SearchResultItem is clicked ([@Animeboynz](https://github.com/Animeboynz)) ([#1168](https://github.com/mihonapp/mihon/pull/1168)) - Enable 'Split Tall Images' by default ([@Smol-Ame](https://github.com/Smol-Ame)) ([#1185](https://github.com/mihonapp/mihon/pull/1185)) - Ignore "intent://" urls on webview ([@bapeey](https://github.com/bapeey)) ([#1193](https://github.com/mihonapp/mihon/pull/1193)) - Make reader chapter navigator slightly wider on small screens (p) ([#1202](https://github.com/mihonapp/mihon/pull/1202)) - Re-enable fetching chapters list for entries with licenced status ([@Animeboynz](https://github.com/Animeboynz)) ([#1230](https://github.com/mihonapp/mihon/pull/1230)) - Change casing for Extention Repos String ([@Animeboynz](https://github.com/Animeboynz)) ([#1248](https://github.com/mihonapp/mihon/pull/1248)) - Retain remote last chapter read if it's higher than the local one for EnhancedTracker ([@brewkunz](https://github.com/brewkunz)) ([#1301](https://github.com/mihonapp/mihon/pull/1301)) - Adjust expandable fab animation (p) ([`eb6092b`](https://github.com/mihonapp/mihon/commit/eb6092bd0cfa09694985a8bafdd8bbf2815190a1)) - "Invalidate downloads index" to "Reindex downloads" ([@AntsyLich](https://github.com/AntsyLich)) ([`d2afbfe`](https://github.com/mihonapp/mihon/commit/d2afbfe4ede283076aae40633c79c3f90b4390e7)) ### Improved - Reader performance - Avoid unnecessary copying when processing reader image ([@FooIbar](https://github.com/FooIbar)) ([#691](https://github.com/mihonapp/mihon/pull/691)) - Significantly improve performance when loading extremely long images in long strip mode ([@FooIbar](https://github.com/FooIbar)) ([#692](https://github.com/mihonapp/mihon/pull/692)) - Use `Bitmap.Config.HARDWARE` if possible to improve image loading speed ([@wwww-wwww](https://github.com/wwww-wwww)) ([#687](https://github.com/mihonapp/mihon/pull/687)) - Improve preloading in long strip mode ([@FooIbar](https://github.com/FooIbar)) ([#1076](https://github.com/mihonapp/mihon/pull/1076)) - Performance when looking up specific files ([@raxod502](https://github.com/raxod502)) ([#728](https://github.com/mihonapp/mihon/pull/728)) - Chapter number parsing ([@Naputt1](https://github.com/Naputt1)) ([`6a80305`](https://github.com/mihonapp/mihon/commit/6a80305d6c572da6c08c0c69f5c25ff26ecf7383)) - Error message on restoring if backup decoding fails ([@vetleledaal](https://github.com/vetleledaal)) ([#1056](https://github.com/mihonapp/mihon/pull/1056)) ### Removed - Legacy download folder names no longer supported ([@AntsyLich](https://github.com/AntsyLich)) ([`e55e5f6`](https://github.com/mihonapp/mihon/commit/e55e5f6f64f872475d370d6ce0c186e2601776e4)) - Remove legacy broken source and history backup ([@AntsyLich](https://github.com/AntsyLich)) ([`518abf0`](https://github.com/mihonapp/mihon/commit/518abf032ccb9bb45d197927be2a5faca4167d29)) - Remove more unnecessary permissions from Firebase dependency ([@AntsyLich](https://github.com/AntsyLich)) ([`02af9b1`](https://github.com/mihonapp/mihon/commit/02af9b1acf9f590d29560bc3fc90d206e8e6e1af)) - Fix mishap in `02af9b1` ([@AntsyLich](https://github.com/AntsyLich)) ([`f22767d`](https://github.com/mihonapp/mihon/commit/f22767d863a0fa001f93f24092cd5ade87350502)) ### Fixed - Extracting `ComicInfo.xml` from local source archives ([@FooIbar](https://github.com/FooIbar)) ([#325](https://github.com/mihonapp/mihon/pull/325)) - Chapter download indicator ([@ivaniskandar](https://github.com/ivaniskandar)) ([`d8b9a9f`](https://github.com/mihonapp/mihon/commit/d8b9a9f593911569ff2bceb49b4f020978d0d2e1)) - Issues with shizuku in a multi user setup ([@Redjard](https://github.com/Redjard)) ([#494](https://github.com/mihonapp/mihon/pull/494)) - Fix reader page image not being decoded until it's visible ([@FooIbar](https://github.com/FooIbar)) ([#563](https://github.com/mihonapp/mihon/pull/563)) - Reader chapter progress slider visuals ([@FooIbar](https://github.com/FooIbar)) ([#674](https://github.com/mihonapp/mihon/pull/674)) - Extension being marked as not installed instead of untrusted after updating with private installer ([@AntsyLich](https://github.com/AntsyLich)) ([`2114514`](https://github.com/mihonapp/mihon/commit/21145144cdf550aa775047603e06e261951ebc42)) - Extension update counter not updating due to extension being marked as untrusted ([@AntsyLich](https://github.com/AntsyLich)) ([`2114514`](https://github.com/mihonapp/mihon/commit/21145144cdf550aa775047603e06e261951ebc42)) - `Key "extension-XXX-YYY" was already used` crash ([@AntsyLich](https://github.com/AntsyLich)) ([`2114514`](https://github.com/mihonapp/mihon/commit/21145144cdf550aa775047603e06e261951ebc42)) - Navigation layout tap zones shifting after zooming out in webtoon readers ([@FooIbar](https://github.com/FooIbar)) ([#767](https://github.com/mihonapp/mihon/pull/767)) - Some extension not loading due to missing classes ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#783](https://github.com/mihonapp/mihon/pull/783)) - Theme colors in accordance to upstream changes ([@CrepeTF](https://github.com/CrepeTF), [@AntsyLich](https://github.com/AntsyLich)) ([#766](https://github.com/mihonapp/mihon/pull/766), [#963](https://github.com/mihonapp/mihon/pull/963), [#976](https://github.com/mihonapp/mihon/pull/976), [9a34ace](https://github.com/mihonapp/mihon/commit/9a34ace09c66274e6c2b3f9446058a0fa99d4bd0)) - Crash when requesting folder access on non-conforming devices ([@mainrs](https://github.com/mainrs)) ([#726](https://github.com/mihonapp/mihon/pull/726)) - Fix unexpected skips in strong skipping mode ([@FooIbar](https://github.com/FooIbar)) ([#940](https://github.com/mihonapp/mihon/pull/940)) - Bugged color for Date/Scanlator in chapter list for read chapters ([@ivaniskandar](https://github.com/ivaniskandar)) ([`15d9992`](https://github.com/mihonapp/mihon/commit/15d999229fcce865001d5fa77d0163e6e80e38db)) - Categories having same `order` after restoring backup ([@Cologler](https://github.com/Cologler)) ([`119bcbf`](https://github.com/mihonapp/mihon/commit/119bcbf8ed2415664922ea77fadf0da1165d1732)) - Filter by "Tracking" temporarily stuck after signing out of tracker ([@AntsyLich](https://github.com/AntsyLich)) ([#987](https://github.com/mihonapp/mihon/pull/987)) - Fix login prompts despite being logged in to trackers in Manga screen ([@AntsyLich](https://github.com/AntsyLich)) ([`cbcd8bd`](https://github.com/mihonapp/mihon/commit/cbcd8bd6682023f728568f2b44da26124618aed7)) - JXL image downloading and loading ([@FooIbar](https://github.com/FooIbar)) ([#993](https://github.com/mihonapp/mihon/pull/993)) - Crash when using `%` in category name ([@Animeboynz](https://github.com/Animeboynz), [@FooIbar](https://github.com/FooIbar)) ([#1030](https://github.com/mihonapp/mihon/pull/1030)) - Fix item disappearing when fast scrolling ([@cuong-tran](https://github.com/cuong-tran)) ([#1035](https://github.com/mihonapp/mihon/pull/1035)) - Library is backed up while being disabled ([@AntsyLich](https://github.com/AntsyLich)) ([`56fb4f6`](https://github.com/mihonapp/mihon/commit/56fb4f62a152e87a71892aa68c78cac51a2c8596)) - Crash on list with only sticky header ([@cuong-tran](https://github.com/cuong-tran)) ([#1083](https://github.com/mihonapp/mihon/pull/1083)) - Crash when trying to clear cookies of some source ([@FooIbar](https://github.com/FooIbar)) ([#1084](https://github.com/mihonapp/mihon/pull/1084)) - MAL search results not showing start dates ([@MajorTanya](https://github.com/MajorTanya)) ([#1098](https://github.com/mihonapp/mihon/pull/1098)) - Android SDK 35 API collision ([@AntsyLich](https://github.com/AntsyLich)) ([`fdb9617`](https://github.com/mihonapp/mihon/commit/fdb96179c6373eb0a8e7d6daea671a315d5ce5f0)) - Manga next update calculation when considering custom fetch interval ([@cuong-tran](https://github.com/cuong-tran)) ([#1206](https://github.com/mihonapp/mihon/pull/1206)) - WheelPicker Manual Input ([@Animeboynz](https://github.com/Animeboynz)) ([#1209](https://github.com/mihonapp/mihon/pull/1209)) - EnhancedTracker not auto binding when adding manga to library ([@brewkunz](https://github.com/brewkunz)) ([#1298](https://github.com/mihonapp/mihon/pull/1298)) - Step count in settings slider ([@abdurisaq](https://github.com/abdurisaq)) ([#1356](https://github.com/mihonapp/mihon/pull/1356)) - Freezing in some screens due to blocking call ([@cuong-tran](https://github.com/cuong-tran)) ([#1364](https://github.com/mihonapp/mihon/pull/1364)) - Crash when removing non-existent tracked entry from tracker ([@cuong-tran](https://github.com/cuong-tran)) ([#1380](https://github.com/mihonapp/mihon/pull/1380)) ### Other - Code cleanup - Minor refactor of theming when expressions ([@MajorTanya](https://github.com/MajorTanya)) ([#396](https://github.com/mihonapp/mihon/pull/396)) - Inside `WorkerInfoScreen` ([@AntsyLich](https://github.com/AntsyLich)) ([`5aec8f8`](https://github.com/mihonapp/mihon/commit/5aec8f8018236a38106483da08f9cbc28261ac9b)) - Inside `ChapterDownloadIndicator`, `MangaChapterListItem` ([@AntsyLich](https://github.com/AntsyLich)) ([`b7e091d`](https://github.com/mihonapp/mihon/commit/b7e091d5d039e00cababc7daf555280df6cf9c03)) - MangaCoverFetcher ([@ivaniskandar](https://github.com/ivaniskandar)) ([`1365695`](https://github.com/mihonapp/mihon/commit/13656959ae0606736f6ca9eb62699dc23e467c2f)) - Cleanup `LibraryScreenModel` `LibraryMap.applySort` and some more ([@AntsyLich](https://github.com/AntsyLich)) ([`2beb89d`](https://github.com/mihonapp/mihon/commit/2beb89d53163a6d288f8acdebe0f5d26fea8ab3e)) - Address `overridePendingTransition` deprecation ([@MajorTanya](https://github.com/MajorTanya)) ([#410](https://github.com/mihonapp/mihon/pull/410)) - Prioritize extension classes and files over app ([@beer-psi](https://github.com/beer-psi)) ([#433](https://github.com/mihonapp/mihon/pull/433)) - Use compose pager implementation ([@ivaniskandar](https://github.com/ivaniskandar)) ([`84984ef`](https://github.com/mihonapp/mihon/commit/84984ef7e1d7242924120cd2f171cb9dd75bc916)) - Switch to coil3 from coil2 ([@ivaniskandar](https://github.com/ivaniskandar)) ([`f72b6e4`](https://github.com/mihonapp/mihon/commit/f72b6e4d7c1f2f93d705402e4d80c94160bef54d)) - Fix GIF not playing ([@jobobby04](https://github.com/jobobby04)) ([`59bedb3`](https://github.com/mihonapp/mihon/commit/59bedb33ff59ad5db1df2e93567a2266fb63eacc)) - Accommodate db for sync support ([@kaiserbh](https://github.com/kaiserbh)) ([#450](https://github.com/mihonapp/mihon/pull/450)) - Fix webtoon last visible item position calculation ([@FooIbar](https://github.com/FooIbar)) ([#562](https://github.com/mihonapp/mihon/pull/562)) - Migrate from `com.google.accompanist:accompanist-webview` to `io.github.kevinnzou:compose-webview` ([@sirlag](https://github.com/sirlag)) ([#569](https://github.com/mihonapp/mihon/pull/569)) - Rewrite migrations ([@ghostbear](https://github.com/ghostbear)) ([#577](https://github.com/mihonapp/mihon/pull/577)) - Further improve migration ([@ghostbear](https://github.com/ghostbear)) ([#588](https://github.com/mihonapp/mihon/pull/588)) - Fix migrations not running ([@ghostbear](https://github.com/ghostbear)) ([#604](https://github.com/mihonapp/mihon/pull/604)) - Fix MigratorTest after updating to Kotlin 2 ([@cuong-tran](https://github.com/cuong-tran)) ([#896](https://github.com/mihonapp/mihon/pull/896)) - Add MigratorTest to build script ([@cuong-tran](https://github.com/cuong-tran)) ([#896](https://github.com/mihonapp/mihon/pull/896)) - Fix UI freeze after migration ([@AntsyLich](https://github.com/AntsyLich)) ([`3f1d28c`](https://github.com/mihonapp/mihon/commit/3f1d28c3833e6b868152149ed02b3fb8c54eccef)) - Fix some migrations never running ([@MajorTanya](https://github.com/MajorTanya), [@AntsyLich](https://github.com/AntsyLich)) ([#1030](https://github.com/mihonapp/mihon/pull/1030)) - Add ProGuard rule to keep `mihon` namespace classes ([@MajorTanya](https://github.com/MajorTanya)) ([#605](https://github.com/mihonapp/mihon/pull/605)) - Use gradle plugins to share build configuration instead of subprojects ([@AntsyLich](https://github.com/AntsyLich)) ([`e448e40`](https://github.com/mihonapp/mihon/commit/e448e40406e8d9916120a278e42829a6f1b25a7a)) - Remove dependency on compose material 2 components ([@AntsyLich](https://github.com/AntsyLich)) ([`fb94230`](https://github.com/mihonapp/mihon/commit/fb9423028eb017c110cb805f2d0601e5b02e50f9)) - Upload PR build artifacts to GitHub ([@FooIbar](https://github.com/FooIbar)) ([#941](https://github.com/mihonapp/mihon/pull/941)) - Refactor archive support with libarchive ([@FooIbar](https://github.com/FooIbar)) ([#949](https://github.com/mihonapp/mihon/pull/949)) - Add safeguard to prevent ArchiveInputStream from being closed twice ([@null2264](https://github.com/null2264)) ([#967](https://github.com/mihonapp/mihon/pull/967)) - Move archive related code to :core:archive ([@AntsyLich](https://github.com/AntsyLich)) ([`bd7b354`](https://github.com/mihonapp/mihon/commit/bd7b35419861df6d426d6ec0a188391910d0f615)) - Replace detekt with ktlint via spotless ([@AntsyLich](https://github.com/AntsyLich)) ([#1130](https://github.com/mihonapp/mihon/pull/1130), [#1136](https://github.com/mihonapp/mihon/pull/1136), [#1138](https://github.com/mihonapp/mihon/pull/1138)) - Refrain from running spotless on weblate files ([@AntsyLich](https://github.com/AntsyLich)) ([`32d2c2a`](https://github.com/mihonapp/mihon/commit/32d2c2ac1bc224cbda2f09a4023d7d120ea0e954)) - Use feature flags in compose compiler plugin ([@AntsyLich](https://github.com/AntsyLich)) ([`8f9a325`](https://github.com/mihonapp/mihon/commit/8f9a325895bb7b94c2ec92dd969094fc30b3b5e2)) - PagerPageHolder: lazy init loading indicator ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`a45eb5e`](https://github.com/mihonapp/mihon/commit/a45eb5e5288159dbbbbb5f92140ce0dd32a8f3ab)) - Collect MangaScreen state with lifecycle ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`03eb756`](https://github.com/mihonapp/mihon/commit/03eb756ecba0692d88d3a76254afc4c157fa225b)) - Add stable marker to Manga data class ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`03eb756`](https://github.com/mihonapp/mihon/commit/03eb756ecba0692d88d3a76254afc4c157fa225b)) - Use DTOs to parse tracking API responses ([@MajorTanya](https://github.com/MajorTanya)) ([#1103](https://github.com/mihonapp/mihon/pull/1103)) - Fix Kitsu ratingTwenty being typed as String ([@MajorTanya](https://github.com/MajorTanya)) ([#1191](https://github.com/mihonapp/mihon/pull/1191)) - Fix Kitsu `synopsis` nullability ([@MajorTanya](https://github.com/MajorTanya)) ([#1233](https://github.com/mihonapp/mihon/pull/1233)) - Fix AniList `ALSearchItem.status` nullibility ([@Secozzi](https://github.com/Secozzi)) ([#1297](https://github.com/mihonapp/mihon/pull/1297)) - Migrate some classpaths to gradle plugins ([@AntsyLich](https://github.com/AntsyLich)) ([`fc1c804`](https://github.com/mihonapp/mihon/commit/fc1c804bfda1d76c0399bbb6214e75b3def951cc)) - Add crashlytics to standard builds ([@AntsyLich](https://github.com/AntsyLich)) ([`3c611b9`](https://github.com/mihonapp/mihon/commit/3c611b95fb79e5ac972019b76c7b24f46a3087fd)) - Switch to stable compose ([@AntsyLich](https://github.com/AntsyLich)) ([`2baffa6`](https://github.com/mihonapp/mihon/commit/2baffa62cade1abd978d5fd03151b47fc87fd31e)) - Switch from inorichi injekt to kohesive Injekt ([@AntsyLich](https://github.com/AntsyLich)) ([#1205](https://github.com/mihonapp/mihon/pull/1205)) - Use custom injekt register with inorichi patch ([@AntsyLich](https://github.com/AntsyLich)) ([`83fd474`](https://github.com/mihonapp/mihon/commit/83fd4746eda1b99f35292b0c2211e606a421b3eb)) - Use TextFieldState in BasicTextField where applicable (p) ([#1201](https://github.com/mihonapp/mihon/pull/1201)) - Bump NDK version ([@AntsyLich](https://github.com/AntsyLich)) ([#1203](https://github.com/mihonapp/mihon/pull/1203)) - Move firebase permission removal to standard flavor ([@AntsyLich](https://github.com/AntsyLich)) ([`be671b4`](https://github.com/mihonapp/mihon/commit/be671b42cefd70180644e01bb065a18cb7701bf9)) - Adjust distinct checker in WidgetManager and run on default dispatcher (p) ([`9b8ab6a`](https://github.com/mihonapp/mihon/commit/9b8ab6acc25a5f99c9c5eebf9cc250975931c57c)) - Update resources exclusion rules (p) ([`481cfed`](https://github.com/mihonapp/mihon/commit/481cfedf08576cecfbb35616837bd8f627d8f959)) - Bump compile sdk to 35 (p) ([`37419cd`](https://github.com/mihonapp/mihon/commit/37419cdc26c2b5c4f8583fc2ba439b08fab42856)) - ChapterNavigator: dispatch page change only when needed (p) ([`f84d9a0`](https://github.com/mihonapp/mihon/commit/f84d9a08b4af768b1e9920c43cc445c86f5427fc)) - Remove usage of deprecated accompanist SystemUiController ([@AntsyLich](https://github.com/AntsyLich)) ([`2ba3f06`](https://github.com/mihonapp/mihon/commit/2ba3f0612c08c7021fed2f6d96cd538da2f34a13)) - Run PR check when base strings are changed ([@AntsyLich](https://github.com/AntsyLich)) ([`4051f18`](https://github.com/mihonapp/mihon/commit/4051f180a2e36e8a2cde6c55f0bea7952fdc4704)) - Fix PR build check ([@AntsyLich](https://github.com/AntsyLich)) ([`9503082`](https://github.com/mihonapp/mihon/commit/9503082d44b5bd868ee1bfc42741dc978d1d9047)) - Cleanup .gitignore files ([@AntsyLich](https://github.com/AntsyLich)) ([`afa5002`](https://github.com/mihonapp/mihon/commit/afa50029882655af8d5eea40aed7644fce4564d8)) - Pass uncaught exception to default handler in GlobalExceptionHandler (so it's reported to crashlytics) ([@AntsyLich](https://github.com/AntsyLich)) ([`f3a2f56`](https://github.com/mihonapp/mihon/commit/f3a2f566c8a09ab862758ae69b43da2a2cd8f1db)) ## [v0.16.5] - 2024-04-09 ### Added - Relative date for up to a week in the future ([@sirlag](https://github.com/sirlag)) ([#415](https://github.com/mihonapp/mihon/pull/415)) - Advance setting to install custom color profiles ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523)) ### Changed - Permanently enable 32-bit color mode ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523)) ### Fixed - Wrong dates in Updates and History tab due to time zone issues ([@sirlag](https://github.com/sirlag)) ([#402](https://github.com/mihonapp/mihon/pull/402)) - Fix extra date header introduced by parent PR ([@sirlag](https://github.com/sirlag)) ([#415](https://github.com/mihonapp/mihon/pull/415)) - Fix build time in about screen displayed in UTC ([@AntsyLich](https://github.com/AntsyLich)) ([`aed53d3`](https://github.com/mihonapp/mihon/commit/aed53d3bdc85ce0e899fbb90b9f9cad0f1b86480)) - App infinitely retries tracker update instead of failing after 3 tries ([@MajorTanya](https://github.com/MajorTanya)) ([#411](https://github.com/mihonapp/mihon/pull/411)) - Crash on Pixel devices (was introduced due to compose update) ([@AntsyLich](https://github.com/AntsyLich)) ([`ab06720`](https://github.com/mihonapp/mihon/commit/ab067209661eceefc04c65f6bdbfcaa8a1264651)) - Crash when opening some heif/heic images ([@az4521](https://github.com/az4521)) ([#466](https://github.com/mihonapp/mihon/pull/466)) - Crash when putting app in background while track date selection dialog is open ([@ivaniskandar](https://github.com/ivaniskandar)) ([`c348fac`](https://github.com/mihonapp/mihon/commit/c348fac78fac479fb123bd617c01c78b9ca851d5)) - Dates for saved images not following the specification (fixes date issue mainly on Samsung devices) ([@MajorTanya](https://github.com/MajorTanya)) ([#552](https://github.com/mihonapp/mihon/pull/552)) - Colors getting distorted when opening CMYK jpeg images ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523)) ## [v0.16.4] - 2024-02-27 ### Changed - Don't include custom user agent for MAL (circumvents MAL block) ([@AntsyLich](https://github.com/AntsyLich)) ([`085ad8d`](https://github.com/mihonapp/mihon/commit/085ad8d44637c375a8ed24aba3a6f75f5b0cc9ee)) ## [v0.16.3] - 2024-01-30 ### Added - Copy extension debug info when clicking logo or name in the extension details screen ([@MajorTanya](https://github.com/MajorTanya)) ([#271](https://github.com/mihonapp/mihon/pull/271)) ### Changed - Hide display cutoff setting in reader settings sheet if fullscreen is disabled ([@Riztard](https://github.com/Riztard)) ([#241](https://github.com/mihonapp/mihon/pull/241)) - Library update error filename to `mihon_update_errors.txt` from `tachiyomi_update_errors.txt` ([@mjishnu](https://github.com/mjishnu)) ([#253](https://github.com/mihonapp/mihon/pull/253)) ### Fixed - Bottom sheet UI issues on non-tablet devices ([@theolm](https://github.com/theolm)) ([#182](https://github.com/mihonapp/mihon/pull/182)) - Crash when switching screen while a list is scrolling ([@theolm](https://github.com/theolm)) ([#272](https://github.com/mihonapp/mihon/pull/272)) - Newly installed extensions not being recognized by Mihon ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#275](https://github.com/mihonapp/mihon/pull/275)) - Failing to refresh MAL token being inferred as token expiration ([@AntsyLich](https://github.com/AntsyLich)) ([`0f4de03`](https://github.com/mihonapp/mihon/commit/0f4de03d7a77b52490dc9a95e96a308b93b26e4f)) ### Other - Add `detekt` (kotlin code analyzer) to the project ([@theolm](https://github.com/theolm)) ([#216](https://github.com/mihonapp/mihon/pull/216)) ## [v0.16.2] - 2024-01-28 ### Changed - Backup now contains scanlator filter of a series ([@jobobby04](https://github.com/jobobby04)) ([#166](https://github.com/mihonapp/mihon/pull/166)) - App icon scaling ([@AntsyLich](https://github.com/AntsyLich)) ([`26815c7`](https://github.com/mihonapp/mihon/commit/26815c7356111394665467c1e81255ac9ee33c1a)) - Tracker OAuth client to Mihon's (fixes login issue for Shikimori tracker) ([@AntsyLich](https://github.com/AntsyLich)) ([`e3f33e2`](https://github.com/mihonapp/mihon/commit/e3f33e24f5e928ac8a85d1f500fd42d4715fc6b5)) - Tracker user agents ([@AntsyLich](https://github.com/AntsyLich), [@kitsumed](https://github.com/kitsumed)) ([`e3f33e2`](https://github.com/mihonapp/mihon/commit/e3f33e24f5e928ac8a85d1f500fd42d4715fc6b5)) - Crash log filename to `mihon_crash_logs.txt` from `tachiyomi_crash_logs.txt` ([@MajorTanya](https://github.com/MajorTanya)) ([#234](https://github.com/mihonapp/mihon/pull/234)) - Don't try to refresh MAL token after refresh token expires ([@AntsyLich](https://github.com/AntsyLich)) ([`32188f9`](https://github.com/mihonapp/mihon/commit/32188f9f65009a18250674ef1bd6e57d351c1fba)) ### Fixed - "Flash screen on page change" making the screen full black ([@AntsyLich](https://github.com/AntsyLich)) ([`38d6ab8`](https://github.com/mihonapp/mihon/commit/38d6ab80ce868707829dbc81de4170afe3c2f2a5)) - Faulty MangaUpdates score in database ([@AntsyLich](https://github.com/AntsyLich)) ([`a024218`](https://github.com/mihonapp/mihon/commit/a024218410953a389b8af4880fa7ae6cc30124a2)) - Updating extension not reflecting correctly ([@AntsyLich](https://github.com/AntsyLich)) ([`cb06898`](https://github.com/mihonapp/mihon/commit/cb068984303f811692531bf6f14902ae118d8ac7)) - Inconsistent button height in "Data and storage" for some languages ([@theolm](https://github.com/theolm)) ([#202](https://github.com/mihonapp/mihon/pull/202)) - Chapter not being marked as read locally when refreshing Enhanced Trackers ([@Secozzi](https://github.com/Secozzi)) ([#219](https://github.com/mihonapp/mihon/pull/219)) ### Other - Make `last_modified_at` field in database be `0` on insert ([@kaiserbh](https://github.com/kaiserbh)) ([#113](https://github.com/mihonapp/mihon/pull/113)) - Remove usage of `.not()` where possible in code ([@AntsyLich](https://github.com/AntsyLich)) ([`3940740`](https://github.com/mihonapp/mihon/commit/39407407f282dbb7fa972b12053c26b3e3bd66d8)) - Use type-safe project accessors ([@theolm](https://github.com/theolm)) ([#194](https://github.com/mihonapp/mihon/pull/194)) - Legacy tracker model properties now has the same type as the domain ones ([@AntsyLich](https://github.com/AntsyLich)) ([#245](https://github.com/mihonapp/mihon/pull/245)) ## [v0.16.1] - 2024-01-18 ### Changed - Branding to Mihon (for references we missed) ([@AntsyLich](https://github.com/AntsyLich)) ([`6539406`](https://github.com/mihonapp/mihon/commit/653940613d661eb371aab3b3c3a8181e4e308c43)) - Preview builds are now called Beta builds ([@AntsyLich](https://github.com/AntsyLich)) ([`3c3a1cd`](https://github.com/mihonapp/mihon/commit/3c3a1cd448ab1f653ddd12b2afe0cba38968d1b9)) ### Fixed - App icon not following the [specification](https://developer.android.com/develop/ui/views/launch/icon_design_adaptive) ([@AntsyLich](https://github.com/AntsyLich)) ([`1849715`](https://github.com/mihonapp/mihon/commit/18497154183356bb0d469b27827f9f7d6b7a3130)) - MangaUpdates default score being set to -1.0 ([@AntsyLich](https://github.com/AntsyLich)) ([`99fd273`](https://github.com/mihonapp/mihon/commit/99fd2731f5d9d374700e89fa67d4d5bf611bbafa)) ## [v0.16.0] - 2024-01-16 ### Changed - Branding to Mihon ([@AntsyLich](https://github.com/AntsyLich)) - Minimum supported Android version to 8 ([@AntsyLich](https://github.com/AntsyLich)) ([`dfb3091`](https://github.com/mihonapp/mihon/commit/dfb3091e380dda3e9bfb64bf5c9a685cf3a03d0e)) [unreleased]: https://github.com/mihonapp/mihon/compare/v0.19.5...main [v0.19.4]: https://github.com/mihonapp/mihon/compare/v0.19.4...v0.19.5 [v0.19.4]: https://github.com/mihonapp/mihon/compare/v0.19.3...v0.19.4 [v0.19.3]: https://github.com/mihonapp/mihon/compare/v0.19.2...v0.19.3 [v0.19.2]: https://github.com/mihonapp/mihon/compare/v0.19.1...v0.19.2 [v0.19.1]: https://github.com/mihonapp/mihon/compare/v0.19.0...v0.19.1 [v0.19.0]: https://github.com/mihonapp/mihon/compare/v0.18.0...v0.19.0 [v0.18.0]: https://github.com/mihonapp/mihon/compare/v0.17.1...v0.18.0 [v0.17.1]: https://github.com/mihonapp/mihon/compare/v0.17.0...v0.17.1 [v0.17.0]: https://github.com/mihonapp/mihon/compare/v0.16.5...v0.17.0 [v0.16.5]: https://github.com/mihonapp/mihon/compare/v0.16.4...v0.16.5 [v0.16.4]: https://github.com/mihonapp/mihon/compare/v0.16.3...v0.16.4 [v0.16.3]: https://github.com/mihonapp/mihon/compare/v0.16.2...v0.16.3 [v0.16.2]: https://github.com/mihonapp/mihon/compare/v0.16.1...v0.16.2 [v0.16.1]: https://github.com/mihonapp/mihon/compare/v0.16.0...v0.16.1 [v0.16.0]: https://github.com/mihonapp/mihon/compare/a9c7cbf...v0.16.0 ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community moderators are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community moderators have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community moderators responsible for enforcement at the [Mihon Discord server](https://discord.gg/mihon). All complaints will be reviewed and investigated promptly and fairly. All community moderators are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community moderators will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community moderators, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1, available at [v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). For answers to common questions about this code of conduct, see the FAQ at [FAQ](https://www.contributor-covenant.org/faq). Translations are available at [translations](https://www.contributor-covenant.org/translations). ================================================ FILE: CONTRIBUTING.md ================================================ Looking to report an issue/bug or make a feature request? Please refer to the [README file](https://github.com/mihonapp/mihon#issues-feature-requests-and-contributing). --- Thanks for your interest in contributing to Mihon! # Code contributions Pull requests are welcome! If you're interested in taking on [an open issue](https://github.com/mihonapp/mihon/issues), please comment on it so others are aware. You do not need to ask for permission nor an assignment. ## Prerequisites Before you start, please note that the ability to use following technologies is **required** and that existing contributors will not actively teach them to you. - Basic [Android development](https://developer.android.com/) - [Kotlin](https://kotlinlang.org/) ### Tools - [Android Studio](https://developer.android.com/studio) - Emulator or phone with developer options enabled to test changes. ## Getting help - Join [the Discord server](https://discord.gg/mihon) for online help and to ask questions while developing. # Translations Translations are done externally via Weblate. See [our website](https://mihon.app/docs/contribute#translation) for more details. # Forks Forks are allowed so long as they abide by [the project's LICENSE](https://github.com/mihonapp/mihon/blob/main/LICENSE). When creating a fork, remember to: - To avoid confusion with the main app: - Change the app name - Change the app icon - Change or disable the [app update checker](https://github.com/mihonapp/mihon/blob/main/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt) - To avoid installation conflicts: - Change the `applicationId` in [`build.gradle.kts`](https://github.com/mihonapp/mihon/blob/main/app/build.gradle.kts) - To avoid having your data polluting the main app's analytics and crash report services: - If you want to use Firebase analytics, replace [`google-services.json`](https://github.com/mihonapp/mihon/blob/main/app/src/standard/google-services.json) with your own ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS ================================================ FILE: README.md ================================================
Mihon logo # Mihon [App](#) ### Full-featured reader Discover and read manga, webtoons, comics, and more – easier than ever on your Android device. [![Discord server](https://img.shields.io/discord/1195734228319617024.svg?label=&labelColor=6A7EC2&color=7389D8&logo=discord&logoColor=FFFFFF)](https://discord.gg/mihon) [![GitHub downloads](https://img.shields.io/github/downloads/mihonapp/mihon/total?label=downloads&labelColor=27303D&color=0D1117&logo=github&logoColor=FFFFFF&style=flat)](https://mihon.app/download) [![CI](https://img.shields.io/github/actions/workflow/status/mihonapp/mihon/build.yml?labelColor=27303D)](https://github.com/mihonapp/mihon/actions/workflows/build_push.yml) [![License: Apache-2.0](https://img.shields.io/github/license/mihonapp/mihon?labelColor=27303D&color=0877d2)](/LICENSE) [![Translation status](https://img.shields.io/weblate/progress/mihon?labelColor=27303D&color=946300)](https://hosted.weblate.org/engage/mihon/) ## Download [![Mihon Stable](https://img.shields.io/github/release/mihonapp/mihon.svg?maxAge=3600&label=Stable&labelColor=06599d&color=043b69)](https://mihon.app/download) [![Mihon Beta](https://img.shields.io/github/v/release/mihonapp/mihon-preview.svg?maxAge=3600&label=Beta&labelColor=2c2c47&color=1c1c39)](https://mihon.app/download) *Requires Android 8.0 or higher.* ## Features
* Local reading of content. * A configurable reader with multiple viewers, reading directions and other settings. * Tracker support: [MyAnimeList](https://myanimelist.net/), [AniList](https://anilist.co/), [Kitsu](https://kitsu.app/), [MangaUpdates](https://mangaupdates.com), [Shikimori](https://shikimori.one), and [Bangumi](https://bgm.tv/) support. * Categories to organize your library. * Light and dark themes. * Schedule updating your library for new chapters. * Create backups locally to read offline or to your desired cloud service. * Plus much more...
## Contributing [Code of conduct](./CODE_OF_CONDUCT.md) · [Contributing guide](./CONTRIBUTING.md) Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Before reporting a new issue, take a look at the [FAQ](https://mihon.app/docs/faq/general), the [changelog](https://mihon.app/changelogs/) and the already opened [issues](https://github.com/mihonapp/mihon/issues); if you got any questions, join our [Discord server](https://discord.gg/mihon). ### Repositories [![mihonapp/website - GitHub](https://github-readme-stats.vercel.app/api/pin/?username=mihonapp&repo=website&bg_color=161B22&text_color=c9d1d9&title_color=0877d2&icon_color=0877d2&border_radius=8&hide_border=true&description_lines_count=2)](https://github.com/mihonapp/website/) [![mihonapp/bitmap.kt - GitHub](https://github-readme-stats.vercel.app/api/pin/?username=mihonapp&repo=bitmap.kt&bg_color=161B22&text_color=c9d1d9&title_color=0877d2&icon_color=0877d2&border_radius=8&hide_border=true&description_lines_count=2)](https://github.com/mihonapp/bitmap.kt/) ### Credits Thank you to all the people who have contributed! Mihon app contributors ### Disclaimer The developer(s) of this application does not have any affiliation with the content providers available, and this application hosts zero content. ### License
Copyright © 2015 Javier Tomás
Copyright © 2024 Mihon Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================ FILE: app/build.gradle.kts ================================================ import mihon.buildlogic.Config import mihon.buildlogic.getBuildTime import mihon.buildlogic.getCommitCount import mihon.buildlogic.getGitSha plugins { id("mihon.android.application") id("mihon.android.application.compose") id("com.github.zellius.shortcut-helper") kotlin("plugin.serialization") alias(libs.plugins.aboutLibraries) } if (Config.includeTelemetry) { pluginManager.apply { apply(libs.plugins.google.services.get().pluginId) apply(libs.plugins.firebase.crashlytics.get().pluginId) } } shortcutHelper.setFilePath("./shortcuts.xml") android { namespace = "eu.kanade.tachiyomi" defaultConfig { applicationId = "app.mihon" versionCode = 19 versionName = "0.19.5" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"") buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLastCommitTime = false)}\"") buildConfigField("boolean", "TELEMETRY_INCLUDED", "${Config.includeTelemetry}") buildConfigField("boolean", "UPDATER_ENABLED", "${Config.enableUpdater}") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { val debug by getting { applicationIdSuffix = ".dev" versionNameSuffix = "-${getCommitCount()}" isPseudoLocalesEnabled = true } val release by getting { isMinifyEnabled = Config.enableCodeShrink isShrinkResources = Config.enableCodeShrink proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro") buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLastCommitTime = true)}\"") } val commonMatchingFallbacks = listOf(release.name) create("foss") { initWith(release) applicationIdSuffix = ".foss" matchingFallbacks.addAll(commonMatchingFallbacks) } create("preview") { initWith(release) applicationIdSuffix = ".debug" versionNameSuffix = debug.versionNameSuffix signingConfig = debug.signingConfig matchingFallbacks.addAll(commonMatchingFallbacks) buildConfigField("String", "BUILD_TIME", "\"${getBuildTime(useLastCommitTime = false)}\"") } create("benchmark") { initWith(release) isDebuggable = false isProfileable = true versionNameSuffix = "-benchmark" applicationIdSuffix = ".benchmark" signingConfig = debug.signingConfig matchingFallbacks.addAll(commonMatchingFallbacks) } } sourceSets { getByName("preview").res.srcDirs("src/debug/res") getByName("benchmark").res.srcDirs("src/debug/res") } splits { abi { isEnable = true isUniversalApk = true reset() include("armeabi-v7a", "arm64-v8a", "x86", "x86_64") } } packaging { jniLibs { keepDebugSymbols += listOf( "libandroidx.graphics.path", "libarchive-jni", "libconscrypt_jni", "libimagedecoder", "libquickjs", "libsqlite3x", ) .map { "**/$it.so" } } resources { excludes += setOf( "kotlin-tooling-metadata.json", "LICENSE.txt", "META-INF/**/*.properties", "META-INF/**/LICENSE.txt", "META-INF/*.properties", "META-INF/*.version", "META-INF/DEPENDENCIES", "META-INF/LICENSE", "META-INF/NOTICE", "META-INF/README.md", ) } } dependenciesInfo { includeInApk = Config.includeDependencyInfo includeInBundle = Config.includeDependencyInfo } buildFeatures { viewBinding = true buildConfig = true aidl = true // Disable some unused things renderScript = false shaders = false } lint { abortOnError = false checkReleaseBuilds = false } } kotlin { compilerOptions { freeCompilerArgs.addAll( "-opt-in=androidx.compose.animation.ExperimentalAnimationApi", "-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi", "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi", "-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi", "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api", "-opt-in=androidx.compose.material3.ExperimentalMaterial3ExpressiveApi", "-opt-in=androidx.compose.ui.ExperimentalComposeUiApi", "-opt-in=coil3.annotation.ExperimentalCoilApi", "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", "-opt-in=kotlinx.coroutines.FlowPreview", "-opt-in=kotlinx.coroutines.InternalCoroutinesApi", "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", "-Xannotation-default-target=param-property", ) } } dependencies { implementation(projects.i18n) implementation(projects.core.archive) implementation(projects.core.common) implementation(projects.coreMetadata) implementation(projects.sourceApi) implementation(projects.sourceLocal) implementation(projects.data) implementation(projects.domain) implementation(projects.presentationCore) implementation(projects.presentationWidget) implementation(projects.telemetry) // Compose implementation(compose.activity) implementation(compose.foundation) implementation(compose.material3.core) implementation(compose.material.icons) implementation(compose.animation) implementation(compose.animation.graphics) debugImplementation(compose.ui.tooling) implementation(compose.ui.tooling.preview) implementation(compose.ui.util) implementation(androidx.interpolator) implementation(androidx.paging.runtime) implementation(androidx.paging.compose) implementation(androidx.sqlite.bundled) implementation(kotlinx.reflect) implementation(kotlinx.immutables) implementation(platform(kotlinx.coroutines.bom)) implementation(kotlinx.bundles.coroutines) // AndroidX libraries implementation(androidx.annotation) implementation(androidx.appcompat) implementation(androidx.biometricktx) implementation(androidx.constraintlayout) implementation(androidx.corektx) implementation(androidx.splashscreen) implementation(androidx.recyclerview) implementation(androidx.viewpager) implementation(androidx.profileinstaller) implementation(androidx.bundles.lifecycle) // Job scheduling implementation(androidx.workmanager) // RxJava implementation(libs.rxjava) // Networking implementation(libs.bundles.okhttp) implementation(libs.okio) implementation(libs.conscrypt.android) // TLS 1.3 support for Android < 10 // Data serialization (JSON, protobuf, xml) implementation(kotlinx.bundles.serialization) // HTML parser implementation(libs.jsoup) // Disk implementation(libs.disklrucache) implementation(libs.unifile) // Preferences implementation(libs.preferencektx) // Dependency injection implementation(libs.injekt) // Image loading implementation(platform(libs.coil.bom)) implementation(libs.bundles.coil) implementation(libs.subsamplingscaleimageview) { exclude(module = "image-decoder") } implementation(libs.image.decoder) // UI libraries implementation(libs.material) implementation(libs.flexible.adapter.core) implementation(libs.photoview) implementation(libs.directionalviewpager) { exclude(group = "androidx.viewpager", module = "viewpager") } implementation(libs.richeditor.compose) implementation(libs.aboutLibraries.compose) implementation(libs.bundles.voyager) implementation(libs.compose.materialmotion) implementation(libs.swipe) implementation(libs.compose.webview) implementation(libs.compose.grid) implementation(libs.reorderable) implementation(libs.bundles.markdown) implementation(libs.materialKolor) // Logging implementation(libs.logcat) // Shizuku implementation(libs.bundles.shizuku) // String similarity implementation(libs.stringSimilarity) // Tests testImplementation(libs.bundles.test) testRuntimeOnly(libs.junit.platform.launcher) // For detecting memory leaks; see https://square.github.io/leakcanary/ // debugImplementation(libs.leakcanary.android) implementation(libs.leakcanary.plumber) testImplementation(kotlinx.coroutines.test) } androidComponents { onVariants(selector().withFlavor("default" to "standard")) { // Only excluding in standard flavor because this breaks // Layout Inspector's Compose tree it.packaging.resources.excludes.add("META-INF/*.version") } } buildscript { dependencies { classpath(kotlinx.gradle) } } ================================================ FILE: app/google-services.json ================================================ { "project_info": { "project_number": "82031285239", "project_id": "mihonapp", "storage_bucket": "mihonapp.appspot.com" }, "client": [ { "client_info": { "mobilesdk_app_id": "1:82031285239:android:336ed6dceef55c357594f2", "android_client_info": { "package_name": "app.mihon" } }, "oauth_client": [], "api_key": [ { "current_key": "AIzaSyDTvOxBQnuXADx5isKxoynPG0nlAO8bQbk" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [] } } }, { "client_info": { "mobilesdk_app_id": "1:82031285239:android:b7440cbdd0d33c9d7594f2", "android_client_info": { "package_name": "app.mihon.debug" } }, "oauth_client": [], "api_key": [ { "current_key": "AIzaSyDTvOxBQnuXADx5isKxoynPG0nlAO8bQbk" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [] } } } ], "configuration_version": "1" } ================================================ FILE: app/proguard-android-optimize.txt ================================================ -dontusemixedcaseclassnames -ignorewarnings -verbose -keepattributes *Annotation* -keepclasseswithmembernames,includedescriptorclasses class * { native ; } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements android.os.Parcelable { public static final ** CREATOR; } -keep class androidx.annotation.Keep -keep @androidx.annotation.Keep class * {*;} -keepclasseswithmembers class * { @androidx.annotation.Keep ; } -keepclasseswithmembers class * { @androidx.annotation.Keep ; } -keepclasseswithmembers class * { @androidx.annotation.Keep (...); } ================================================ FILE: app/proguard-rules.pro ================================================ -dontobfuscate -keep,allowoptimization class eu.kanade.** -keep,allowoptimization class tachiyomi.** -keep,allowoptimization class mihon.** # Keep common dependencies used in extensions -keep,allowoptimization class androidx.preference.** { public protected *; } -keep,allowoptimization class kotlin.** { public protected *; } -keep,allowoptimization class kotlinx.coroutines.** { public protected *; } -keep,allowoptimization class kotlinx.serialization.** { public protected *; } -keep,allowoptimization class kotlin.time.** { public protected *; } -keep,allowoptimization class okhttp3.** { public protected *; } -keep,allowoptimization class okio.** { public protected *; } -keep,allowoptimization class org.jsoup.** { public protected *; } -keep,allowoptimization class rx.** { public protected *; } -keep,allowoptimization class app.cash.quickjs.** { public protected *; } -keep,allowoptimization class uy.kohesive.injekt.** { public protected *; } # From extensions-lib -keep,allowoptimization class eu.kanade.tachiyomi.network.interceptor.RateLimitInterceptorKt { public protected *; } -keep,allowoptimization class eu.kanade.tachiyomi.network.interceptor.SpecificHostRateLimitInterceptorKt { public protected *; } -keep,allowoptimization class eu.kanade.tachiyomi.network.NetworkHelper { public protected *; } -keep,allowoptimization class eu.kanade.tachiyomi.network.OkHttpExtensionsKt { public protected *; } -keep,allowoptimization class eu.kanade.tachiyomi.network.RequestsKt { public protected *; } -keep,allowoptimization class eu.kanade.tachiyomi.AppInfo { public protected *; } ##---------------Begin: proguard configuration for RxJava 1.x ---------- -dontwarn sun.misc.** -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { long producerIndex; long consumerIndex; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { rx.internal.util.atomic.LinkedQueueNode producerNode; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { rx.internal.util.atomic.LinkedQueueNode consumerNode; } -dontnote rx.internal.util.PlatformDependent ##---------------End: proguard configuration for RxJava 1.x ---------- ##---------------Begin: proguard configuration for okhttp ---------- -keepclasseswithmembers class okhttp3.MultipartBody$Builder { *; } ##---------------End: proguard configuration for okhttp ---------- ##---------------Begin: proguard configuration for kotlinx.serialization ---------- -keepattributes *Annotation*, InnerClasses -dontnote kotlinx.serialization.** # core serialization annotations # kotlinx-serialization-json specific. Add this if you have java.lang.NoClassDefFoundError kotlinx.serialization.json.JsonObjectSerializer -keepclassmembers class kotlinx.serialization.json.** { *** Companion; } -keepclasseswithmembers class kotlinx.serialization.json.** { kotlinx.serialization.KSerializer serializer(...); } -keep,includedescriptorclasses class eu.kanade.**$$serializer { *; } -keepclassmembers class eu.kanade.** { *** Companion; } -keepclasseswithmembers class eu.kanade.** { kotlinx.serialization.KSerializer serializer(...); } -keep class kotlinx.serialization.** -keepclassmembers class kotlinx.serialization.** { ; } ##---------------End: proguard configuration for kotlinx.serialization ---------- # XmlUtil -keep public enum nl.adaptivity.xmlutil.EventType { *; } # Firebase -keep class com.google.firebase.installations.** { *; } -keep interface com.google.firebase.installations.** { *; } ================================================ FILE: app/shortcuts.xml ================================================ ================================================ FILE: app/src/debug/res/drawable/ic_launcher_background.xml ================================================ ================================================ FILE: app/src/debug/res/drawable/ic_launcher_foreground.xml ================================================ ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/aidl/mihon/app/shizuku/IShellInterface.aidl ================================================ package mihon.app.shizuku; interface IShellInterface { void install(in AssetFileDescriptor apk) = 1; void destroy() = 16777114; } ================================================ FILE: app/src/main/baseline-prof.txt ================================================ Landroidx/activity/Cancellable; Landroidx/activity/ComponentActivity; PLandroidx/activity/ComponentActivity;->$r8$lambda$OnwlVMZzrLePIRy-6IUDTtLLUV0(Landroidx/activity/ComponentActivity;)Landroid/os/Bundle; HSPLandroidx/activity/ComponentActivity;->$r8$lambda$h2i_RK2mddCIbAsGubaI4eL8_cU(Landroidx/activity/ComponentActivity;)V PLandroidx/activity/ComponentActivity;->$r8$lambda$h2i_RK2mddCIbAsGubaI4eL8_cU(Landroidx/activity/ComponentActivity;)V HSPLandroidx/activity/ComponentActivity;->()V HPLandroidx/activity/ComponentActivity;->()V HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V PLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V HSPLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V PLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V PLandroidx/activity/ComponentActivity;->ensureViewModelStore()V HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; PLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; PLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle; HPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle; HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; PLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; PLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; PLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V PLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V PLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V PLandroidx/activity/ComponentActivity;->onTrimMemory(I)V PLandroidx/activity/ComponentActivity;->removeOnNewIntentListener(Landroidx/core/util/Consumer;)V Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0; HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentActivity;)V Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1; HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->saveState()Landroid/os/Bundle; Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2; HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentActivity;)V HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable(Landroid/content/Context;)V PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable(Landroid/content/Context;)V Landroidx/activity/ComponentActivity$1; HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$1;->(Landroidx/fragment/app/FragmentActivity;)V Landroidx/activity/ComponentActivity$2; HSPLandroidx/activity/ComponentActivity$2;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$2;->(Landroidx/fragment/app/FragmentActivity;)V Landroidx/activity/ComponentActivity$3; HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$3;->(Landroidx/fragment/app/FragmentActivity;)V HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/activity/ComponentActivity$4; HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$4;->(Landroidx/fragment/app/FragmentActivity;)V HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/activity/ComponentActivity$5; HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$5;->(Landroidx/fragment/app/FragmentActivity;)V HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V PLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/activity/ComponentActivity$NonConfigurationInstances; Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl; HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/fragment/app/FragmentActivity;)V PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/fragment/app/FragmentActivity;)V Landroidx/activity/ComponentDialog$$ExternalSyntheticLambda0; HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V PLandroidx/activity/ComponentDialog$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V Landroidx/activity/FullyDrawnReporter; HSPLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V PLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V Landroidx/activity/OnBackPressedCallback; HSPLandroidx/activity/OnBackPressedCallback;->(Z)V PLandroidx/activity/OnBackPressedCallback;->(Z)V HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V HPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V HSPLandroidx/activity/OnBackPressedCallback;->remove()V HPLandroidx/activity/OnBackPressedCallback;->remove()V HSPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V HPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V PLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V Landroidx/activity/OnBackPressedDispatcher; HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V PLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V HSPLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque; PLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque; HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V HPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable; HPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable; Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable; HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V HPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable; HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V HPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V Landroidx/activity/OnBackPressedDispatcherKt; HSPLandroidx/activity/OnBackPressedDispatcherKt;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner; PLandroidx/activity/OnBackPressedDispatcherKt;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner; Landroidx/activity/OnBackPressedDispatcherOwner; Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1; HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->(I)V PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->(I)V HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/activity/compose/BackHandlerKt; HSPLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HPLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V Landroidx/activity/compose/BackHandlerKt$BackHandler$1$1; HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V PLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object; HPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object; Landroidx/activity/compose/BackHandlerKt$BackHandler$2; HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V PLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1; HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->(Ljava/lang/Object;I)V PLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->(Ljava/lang/Object;I)V HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->dispose()V Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1; HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;->(ZLandroidx/compose/runtime/MutableState;)V PLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;->(ZLandroidx/compose/runtime/MutableState;)V Landroidx/activity/compose/ComponentActivityKt; HSPLandroidx/activity/compose/ComponentActivityKt;->()V PLandroidx/activity/compose/ComponentActivityKt;->()V HSPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V Landroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1; HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->()V PLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->()V HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->(I)V PLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->(I)V HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->invoke()Ljava/lang/Object; PLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->invoke()Ljava/lang/Object; Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner; HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;)Landroidx/activity/OnBackPressedDispatcherOwner; HPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;)Landroidx/activity/OnBackPressedDispatcherOwner; Landroidx/activity/contextaware/ContextAwareHelper; HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V PLandroidx/activity/contextaware/ContextAwareHelper;->()V HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V PLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V PLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V HPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V Landroidx/activity/contextaware/OnContextAvailableListener; Landroidx/activity/result/ActivityResult; Landroidx/activity/result/ActivityResultCallback; Landroidx/activity/result/ActivityResultLauncher; HSPLandroidx/activity/result/ActivityResultLauncher;->()V PLandroidx/activity/result/ActivityResultLauncher;->()V Landroidx/activity/result/ActivityResultRegistry; HSPLandroidx/activity/result/ActivityResultRegistry;->()V PLandroidx/activity/result/ActivityResultRegistry;->()V HPLandroidx/activity/result/ActivityResultRegistry;->onSaveInstanceState(Landroid/os/Bundle;)V HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher; PLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher; HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V HPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V HPLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V Landroidx/activity/result/ActivityResultRegistry$2; HSPLandroidx/activity/result/ActivityResultRegistry$2;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;I)V PLandroidx/activity/result/ActivityResultRegistry$2;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;I)V PLandroidx/activity/result/ActivityResultRegistry$2;->unregister()V Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract; HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)V PLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)V Landroidx/activity/result/ActivityResultRegistryOwner; Landroidx/activity/result/contract/ActivityResultContract; HSPLandroidx/activity/result/contract/ActivityResultContract;->()V PLandroidx/activity/result/contract/ActivityResultContract;->()V Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions; HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V PLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult; HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V PLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V Landroidx/appcompat/R$styleable; HSPLandroidx/appcompat/R$styleable;->()V PLandroidx/appcompat/R$styleable;->()V Landroidx/appcompat/app/ActionBar; HSPLandroidx/appcompat/app/ActionBar;->readLocales(Landroid/content/Context;)Ljava/lang/String; PLandroidx/appcompat/app/ActionBar;->readLocales(Landroid/content/Context;)Ljava/lang/String; Landroidx/appcompat/app/AppCompatActivity; HSPLandroidx/appcompat/app/AppCompatActivity;->()V PLandroidx/appcompat/app/AppCompatActivity;->()V HSPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V PLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V HSPLandroidx/appcompat/app/AppCompatActivity;->findViewById(I)Landroid/view/View; PLandroidx/appcompat/app/AppCompatActivity;->findViewById(I)Landroid/view/View; HSPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate; PLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate; HSPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources; HPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources; HSPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V HPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V HSPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V PLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V PLandroidx/appcompat/app/AppCompatActivity;->onDestroy()V HSPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V PLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V HSPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V PLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V HSPLandroidx/appcompat/app/AppCompatActivity;->onStart()V PLandroidx/appcompat/app/AppCompatActivity;->onStart()V PLandroidx/appcompat/app/AppCompatActivity;->onStop()V HSPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V PLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V HSPLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V PLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V HSPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V PLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V Landroidx/appcompat/app/AppCompatActivity$1; HSPLandroidx/appcompat/app/AppCompatActivity$1;->(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V PLandroidx/appcompat/app/AppCompatActivity$1;->(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V PLandroidx/appcompat/app/AppCompatActivity$1;->saveState()Landroid/os/Bundle; Landroidx/appcompat/app/AppCompatActivity$2; HSPLandroidx/appcompat/app/AppCompatActivity$2;->(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V PLandroidx/appcompat/app/AppCompatActivity$2;->(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V HSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V PLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V Landroidx/appcompat/app/AppCompatCallback; Landroidx/appcompat/app/AppCompatDelegate; HSPLandroidx/appcompat/app/AppCompatDelegate;->()V PLandroidx/appcompat/app/AppCompatDelegate;->()V HSPLandroidx/appcompat/app/AppCompatDelegate;->()V PLandroidx/appcompat/app/AppCompatDelegate;->()V HSPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V PLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V HSPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I PLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I HSPLandroidx/appcompat/app/AppCompatDelegate;->getRequestedAppLocales()Landroidx/core/os/LocaleListCompat; PLandroidx/appcompat/app/AppCompatDelegate;->getRequestedAppLocales()Landroidx/core/os/LocaleListCompat; HSPLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z PLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z PLandroidx/appcompat/app/AppCompatDelegate;->removeActivityDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V HSPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V PLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V HSPLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V PLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V HSPLandroidx/appcompat/app/AppCompatDelegate;->syncRequestedAndStoredLocales(Landroid/content/Context;)V PLandroidx/appcompat/app/AppCompatDelegate;->syncRequestedAndStoredLocales(Landroid/content/Context;)V Landroidx/appcompat/app/AppCompatDelegateImpl; HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z PLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context; PLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context; HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat; PLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat; HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration; PLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration; PLandroidx/appcompat/app/AppCompatDelegateImpl;->dismissPopups()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V HPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->findViewById(I)Landroid/view/View; PLandroidx/appcompat/app/AppCompatDelegateImpl;->findViewById(I)Landroid/view/View; HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(I)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; PLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(I)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I PLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; HPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; PLandroidx/appcompat/app/AppCompatDelegateImpl;->onDestroy()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->onStop()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z PLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V PLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V PLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I PLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I Landroidx/appcompat/app/AppCompatDelegateImpl$3; HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V PLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; Landroidx/appcompat/app/AppCompatDelegateImpl$4; HSPLandroidx/appcompat/app/AppCompatDelegateImpl$4;->(Landroidx/appcompat/app/AppCompatDelegateImpl;I)V PLandroidx/appcompat/app/AppCompatDelegateImpl$4;->(Landroidx/appcompat/app/AppCompatDelegateImpl;I)V PLandroidx/appcompat/app/AppCompatDelegateImpl$4;->onDetachedFromWindow()V Landroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl; HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat; PLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat; Landroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback; HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; HSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->(I)V PLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->(I)V Landroidx/appcompat/app/AppCompatViewInflater; HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V PLandroidx/appcompat/app/AppCompatViewInflater;->()V HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V PLandroidx/appcompat/app/AppCompatViewInflater;->()V HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; HPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; Landroidx/appcompat/app/AppLocalesMetadataHolderService; Landroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl; HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I PLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I Landroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor; HSPLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;->(Ljava/util/concurrent/Executor;)V PLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;->(Ljava/util/concurrent/Executor;)V Landroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor; HSPLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;->()V PLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;->()V Landroidx/appcompat/app/ToolbarActionBar$1; HSPLandroidx/appcompat/app/ToolbarActionBar$1;->(Ljava/lang/Object;I)V PLandroidx/appcompat/app/ToolbarActionBar$1;->(Ljava/lang/Object;I)V HSPLandroidx/appcompat/app/ToolbarActionBar$1;->run()V PLandroidx/appcompat/app/ToolbarActionBar$1;->run()V Landroidx/appcompat/view/ContextThemeWrapper; HSPLandroidx/appcompat/view/ContextThemeWrapper;->(Landroid/content/Context;I)V PLandroidx/appcompat/view/ContextThemeWrapper;->(Landroid/content/Context;I)V HSPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V PLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources; PLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources; HSPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; HPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; HSPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme; PLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme; HSPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V PLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V Landroidx/appcompat/view/WindowCallbackWrapper; HSPLandroidx/appcompat/view/WindowCallbackWrapper;->(Landroid/view/Window$Callback;)V PLandroidx/appcompat/view/WindowCallbackWrapper;->(Landroid/view/Window$Callback;)V HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z PLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z HPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z HSPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback; PLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback; HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V PLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V PLandroidx/appcompat/view/WindowCallbackWrapper;->onDetachedFromWindow()V HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V HPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V PLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V Landroidx/appcompat/view/menu/MenuBuilder$Callback; Landroidx/appcompat/view/menu/MenuPresenter$Callback; Landroidx/appcompat/widget/AppCompatBackgroundHelper; HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->(Landroid/view/View;)V PLandroidx/appcompat/widget/AppCompatBackgroundHelper;->(Landroid/view/View;)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V PLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V PLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V Landroidx/appcompat/widget/AppCompatDrawableManager; HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V PLandroidx/appcompat/widget/AppCompatDrawableManager;->()V HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V PLandroidx/appcompat/widget/AppCompatDrawableManager;->()V HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode; PLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode; HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager; PLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager; HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable$1(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable$1(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V PLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V Landroidx/appcompat/widget/AppCompatDrawableManager$1; HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains(I[I)Z PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains(I[I)Z HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/LayerDrawable; PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/LayerDrawable; HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList; PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList; HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z Landroidx/appcompat/widget/AppCompatImageHelper; HSPLandroidx/appcompat/widget/AppCompatImageHelper;->(Landroid/widget/ImageView;)V PLandroidx/appcompat/widget/AppCompatImageHelper;->(Landroid/widget/ImageView;)V HSPLandroidx/appcompat/widget/AppCompatImageHelper;->applyImageLevel()V PLandroidx/appcompat/widget/AppCompatImageHelper;->applyImageLevel()V HSPLandroidx/appcompat/widget/AppCompatImageHelper;->applySupportImageTint()V PLandroidx/appcompat/widget/AppCompatImageHelper;->applySupportImageTint()V HSPLandroidx/appcompat/widget/AppCompatImageHelper;->hasOverlappingRendering()Z PLandroidx/appcompat/widget/AppCompatImageHelper;->hasOverlappingRendering()Z HSPLandroidx/appcompat/widget/AppCompatImageHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V PLandroidx/appcompat/widget/AppCompatImageHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatImageHelper;->obtainLevelFromDrawable(Landroid/graphics/drawable/Drawable;)V PLandroidx/appcompat/widget/AppCompatImageHelper;->obtainLevelFromDrawable(Landroid/graphics/drawable/Drawable;)V Landroidx/appcompat/widget/AppCompatImageView; HSPLandroidx/appcompat/widget/AppCompatImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V PLandroidx/appcompat/widget/AppCompatImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatImageView;->drawableStateChanged()V PLandroidx/appcompat/widget/AppCompatImageView;->drawableStateChanged()V HSPLandroidx/appcompat/widget/AppCompatImageView;->hasOverlappingRendering()Z PLandroidx/appcompat/widget/AppCompatImageView;->hasOverlappingRendering()Z HSPLandroidx/appcompat/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V PLandroidx/appcompat/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V Landroidx/appcompat/widget/ContentFrameLayout; HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V PLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue; PLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue; HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue; PLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue; HSPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V PLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V PLandroidx/appcompat/widget/ContentFrameLayout;->onDetachedFromWindow()V HSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V HPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V HSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V PLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V HSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V PLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener; Landroidx/appcompat/widget/DrawableUtils; HSPLandroidx/appcompat/widget/DrawableUtils;->()V PLandroidx/appcompat/widget/DrawableUtils;->()V HSPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V HPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V Landroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0; HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/BlendMode; PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/BlendMode; HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I Landroidx/appcompat/widget/FitWindowsFrameLayout; HSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V PLandroidx/appcompat/widget/FitWindowsFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z PLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z Landroidx/appcompat/widget/ResourceManagerInternal; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V PLandroidx/appcompat/widget/ResourceManagerInternal;->()V HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V PLandroidx/appcompat/widget/ResourceManagerInternal;->()V HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal; PLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList; PLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V PLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z PLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z Landroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache; HSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->()V PLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->()V Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks; Landroidx/appcompat/widget/ResourcesWrapper; Landroidx/appcompat/widget/ThemeUtils; HSPLandroidx/appcompat/widget/ThemeUtils;->()V PLandroidx/appcompat/widget/ThemeUtils;->()V HSPLandroidx/appcompat/widget/ThemeUtils;->checkAppCompatTheme(Landroid/view/View;Landroid/content/Context;)V PLandroidx/appcompat/widget/ThemeUtils;->checkAppCompatTheme(Landroid/view/View;Landroid/content/Context;)V Landroidx/appcompat/widget/TintContextWrapper; HSPLandroidx/appcompat/widget/TintContextWrapper;->()V PLandroidx/appcompat/widget/TintContextWrapper;->()V HSPLandroidx/appcompat/widget/TintContextWrapper;->wrap(Landroid/content/Context;)V PLandroidx/appcompat/widget/TintContextWrapper;->wrap(Landroid/content/Context;)V Landroidx/appcompat/widget/TintResources; Landroidx/appcompat/widget/TintTypedArray; HSPLandroidx/appcompat/widget/TintTypedArray;->(Landroid/content/Context;Landroid/content/res/TypedArray;)V PLandroidx/appcompat/widget/TintTypedArray;->(Landroid/content/Context;Landroid/content/res/TypedArray;)V HSPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable; PLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/TintTypedArray;->getResourceId(II)I PLandroidx/appcompat/widget/TintTypedArray;->getResourceId(II)I HSPLandroidx/appcompat/widget/TintTypedArray;->getWrappedTypeArray()Landroid/content/res/TypedArray; PLandroidx/appcompat/widget/TintTypedArray;->getWrappedTypeArray()Landroid/content/res/TypedArray; HSPLandroidx/appcompat/widget/TintTypedArray;->hasValue(I)Z PLandroidx/appcompat/widget/TintTypedArray;->hasValue(I)Z HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[II)Landroidx/appcompat/widget/TintTypedArray; PLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[II)Landroidx/appcompat/widget/TintTypedArray; HSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V PLandroidx/appcompat/widget/TintTypedArray;->recycle()V Landroidx/appcompat/widget/VectorEnabledTintResources; Landroidx/appcompat/widget/ViewStubCompat; HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V PLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V PLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V Landroidx/appcompat/widget/ViewUtils; HSPLandroidx/appcompat/widget/ViewUtils;->()V PLandroidx/appcompat/widget/ViewUtils;->()V Landroidx/arch/core/executor/ArchTaskExecutor; HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V PLandroidx/arch/core/executor/ArchTaskExecutor;->()V HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V PLandroidx/arch/core/executor/ArchTaskExecutor;->()V HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor; HPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor; HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z HPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z HSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V PLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V Landroidx/arch/core/executor/DefaultTaskExecutor; HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V PLandroidx/arch/core/executor/DefaultTaskExecutor;->()V HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; PLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V PLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V Landroidx/arch/core/executor/DefaultTaskExecutor$1; HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->()V PLandroidx/arch/core/executor/DefaultTaskExecutor$1;->()V Landroidx/arch/core/internal/FastSafeIterableMap; HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V PLandroidx/arch/core/internal/FastSafeIterableMap;->()V HSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry; HPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry; HSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z HPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; HPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/arch/core/internal/SafeIterableMap; HSPLandroidx/arch/core/internal/SafeIterableMap;->()V HPLandroidx/arch/core/internal/SafeIterableMap;->()V HSPLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator; PLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator; HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry; PLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry; HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; HPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator; PLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator; HSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; HPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; HSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry; PLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry; HSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; PLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/arch/core/internal/SafeIterableMap;->size()I PLandroidx/arch/core/internal/SafeIterableMap;->size()I Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator; HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V PLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V Landroidx/arch/core/internal/SafeIterableMap$Entry; HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object; PLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object; HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object; PLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object; Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object; PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object; HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V Landroidx/arch/core/internal/SafeIterableMap$ListIterator; HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object; PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object; HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry; PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry; PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V Landroidx/arch/core/internal/SafeIterableMap$SupportRemove; HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V HPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V Landroidx/arch/core/util/Function; Landroidx/collection/ArrayMap; HSPLandroidx/collection/ArrayMap;->()V PLandroidx/collection/ArrayMap;->()V Landroidx/collection/ArrayMap$KeyIterator; HSPLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArraySet;)V PLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArraySet;)V Landroidx/collection/ArraySet; HSPLandroidx/collection/ArraySet;->()V PLandroidx/collection/ArraySet;->()V HSPLandroidx/collection/ArraySet;->(I)V PLandroidx/collection/ArraySet;->(I)V HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z PLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z HSPLandroidx/collection/ArraySet;->allocArrays(I)V PLandroidx/collection/ArraySet;->allocArrays(I)V HSPLandroidx/collection/ArraySet;->clear()V PLandroidx/collection/ArraySet;->clear()V HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V PLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V HSPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I PLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I HSPLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator; PLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator; PLandroidx/collection/ArraySet;->removeAt(I)V HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object; PLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object; Landroidx/collection/ContainerHelpers; HSPLandroidx/collection/ContainerHelpers;->()V PLandroidx/collection/ContainerHelpers;->()V PLandroidx/collection/ContainerHelpers;->binarySearch([III)I HSPLandroidx/collection/ContainerHelpers;->binarySearch([JIJ)I HPLandroidx/collection/ContainerHelpers;->binarySearch([JIJ)I Landroidx/collection/IndexBasedArrayIterator; HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V PLandroidx/collection/IndexBasedArrayIterator;->(I)V HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z PLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z PLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object; PLandroidx/collection/IndexBasedArrayIterator;->remove()V Landroidx/collection/LongSparseArray; HSPLandroidx/collection/LongSparseArray;->()V PLandroidx/collection/LongSparseArray;->()V HSPLandroidx/collection/LongSparseArray;->()V PLandroidx/collection/LongSparseArray;->()V HSPLandroidx/collection/LongSparseArray;->(I)V HPLandroidx/collection/LongSparseArray;->(I)V HSPLandroidx/collection/LongSparseArray;->clear()V PLandroidx/collection/LongSparseArray;->clear()V HSPLandroidx/collection/LongSparseArray;->get(JLjava/lang/Long;)Ljava/lang/Object; HPLandroidx/collection/LongSparseArray;->get(JLjava/lang/Long;)Ljava/lang/Object; HSPLandroidx/collection/LongSparseArray;->indexOfKey(J)I PLandroidx/collection/LongSparseArray;->indexOfKey(J)I HSPLandroidx/collection/LongSparseArray;->keyAt(I)J PLandroidx/collection/LongSparseArray;->keyAt(I)J HSPLandroidx/collection/LongSparseArray;->put(JLjava/lang/Object;)V HPLandroidx/collection/LongSparseArray;->put(JLjava/lang/Object;)V HSPLandroidx/collection/LongSparseArray;->remove(J)V PLandroidx/collection/LongSparseArray;->remove(J)V HSPLandroidx/collection/LongSparseArray;->size()I PLandroidx/collection/LongSparseArray;->size()I HSPLandroidx/collection/LongSparseArray;->valueAt(I)Ljava/lang/Object; PLandroidx/collection/LongSparseArray;->valueAt(I)Ljava/lang/Object; Landroidx/collection/LruCache; HSPLandroidx/collection/LruCache;->(I)V PLandroidx/collection/LruCache;->(I)V HSPLandroidx/collection/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/collection/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/collection/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/collection/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/collection/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/collection/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/collection/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I PLandroidx/collection/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I HSPLandroidx/collection/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I PLandroidx/collection/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I HSPLandroidx/collection/LruCache;->trimToSize(I)V PLandroidx/collection/LruCache;->trimToSize(I)V Landroidx/collection/SimpleArrayMap; HSPLandroidx/collection/SimpleArrayMap;->()V PLandroidx/collection/SimpleArrayMap;->()V HSPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/collection/SimpleArrayMap;->indexOf(ILjava/lang/Object;)I PLandroidx/collection/SimpleArrayMap;->indexOf(ILjava/lang/Object;)I HSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I PLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I PLandroidx/collection/SimpleArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/collection/SparseArrayCompat; HSPLandroidx/collection/SparseArrayCompat;->()V PLandroidx/collection/SparseArrayCompat;->()V HSPLandroidx/collection/SparseArrayCompat;->()V PLandroidx/collection/SparseArrayCompat;->()V Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$2; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$3; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;II)V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;II)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$4; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$5; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;)V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->(Landroidx/compose/animation/ExitTransition;)V PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->(Landroidx/compose/animation/ExitTransition;)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;I)V PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;I)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$9; HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentKt$SizeTransform$1; HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V PLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V PLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentMeasurePolicy; HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V PLandroidx/compose/animation/AnimatedContentMeasurePolicy;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; PLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3; HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V PLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedContentScope; Landroidx/compose/animation/AnimatedContentScopeImpl; HSPLandroidx/compose/animation/AnimatedContentScopeImpl;->()V PLandroidx/compose/animation/AnimatedContentScopeImpl;->()V Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;)V PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;)V HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment$animation_release()Landroidx/compose/ui/Alignment; PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment$animation_release()Landroidx/compose/ui/Alignment; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/LinkedHashMap; PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/LinkedHashMap; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment$animation_release(Landroidx/compose/ui/Alignment;)V PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment$animation_release(Landroidx/compose/ui/Alignment;)V HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V Landroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->(Z)V PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->(Z)V HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V Landroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/MutableState;)V PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/MutableState;)V HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->getSizeTransform()Landroidx/compose/runtime/State; PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->getSizeTransform()Landroidx/compose/runtime/State; HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy; HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V PLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->()V PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->()V HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->()V PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->()V HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->(Landroidx/compose/animation/core/Transition;)V HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->(Landroidx/compose/animation/core/Transition;)V HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->(Landroidx/compose/runtime/ProduceStateScope;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;)V HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->(Landroidx/compose/runtime/ProduceStateScope;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;)V HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2; HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;->(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;->(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V Landroidx/compose/animation/AnimatedVisibilityScope; Landroidx/compose/animation/AnimatedVisibilityScopeImpl; HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->()V PLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->()V HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/ParcelableSnapshotMutableState; PLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/ParcelableSnapshotMutableState; Landroidx/compose/animation/AnimationModifierKt; HSPLandroidx/compose/animation/AnimationModifierKt;->()V PLandroidx/compose/animation/AnimationModifierKt;->()V HSPLandroidx/compose/animation/AnimationModifierKt;->getInvalidSize()J PLandroidx/compose/animation/AnimationModifierKt;->getInvalidSize()J HSPLandroidx/compose/animation/AnimationModifierKt;->isValid-ozmzZPI(J)Z PLandroidx/compose/animation/AnimationModifierKt;->isValid-ozmzZPI(J)Z Landroidx/compose/animation/ChangeSize; HSPLandroidx/compose/animation/ChangeSize;->(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)V HPLandroidx/compose/animation/ChangeSize;->(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)V Landroidx/compose/animation/ColorVectorConverterKt; HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V PLandroidx/compose/animation/ColorVectorConverterKt;->()V HSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter()Lkotlin/jvm/functions/Function1; PLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter()Lkotlin/jvm/functions/Function1; Landroidx/compose/animation/ContentTransform; HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V HPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V HSPLandroidx/compose/animation/ContentTransform;->getInitialContentExit()Landroidx/compose/animation/ExitTransition; PLandroidx/compose/animation/ContentTransform;->getInitialContentExit()Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform; PLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform; HSPLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition; PLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F PLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F Landroidx/compose/animation/CrossfadeKt; HSPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/animation/CrossfadeKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/animation/CrossfadeKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/animation/CrossfadeKt;->AnimatedVisibility(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/animation/CrossfadeKt;->AnimatedVisibility(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/animation/CrossfadeKt;->access$getExitFinished(Landroidx/compose/animation/core/Transition;)Z HPLandroidx/compose/animation/CrossfadeKt;->access$getExitFinished(Landroidx/compose/animation/core/Transition;)Z HSPLandroidx/compose/animation/CrossfadeKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/EnterExitState; HPLandroidx/compose/animation/CrossfadeKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/EnterExitState; Landroidx/compose/animation/CrossfadeKt$Crossfade$4$1; HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; HPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1; HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->(Landroidx/compose/runtime/State;I)V HPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->(Landroidx/compose/runtime/State;I)V HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V HPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2; HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->(Ljava/lang/Object;I)V PLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/EnterExitState; HSPLandroidx/compose/animation/EnterExitState;->()V PLandroidx/compose/animation/EnterExitState;->()V HSPLandroidx/compose/animation/EnterExitState;->(Ljava/lang/String;I)V PLandroidx/compose/animation/EnterExitState;->(Ljava/lang/String;I)V Landroidx/compose/animation/EnterExitTransitionElement; HSPLandroidx/compose/animation/EnterExitTransitionElement;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/animation/EnterExitTransitionElement;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/EnterExitTransitionElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/animation/EnterExitTransitionElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/animation/EnterExitTransitionElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/EnterExitTransitionElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/EnterExitTransitionElement;->update(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/animation/EnterExitTransitionElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/animation/EnterExitTransitionKt; HSPLandroidx/compose/animation/EnterExitTransitionKt;->()V PLandroidx/compose/animation/EnterExitTransitionKt;->()V HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; HPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/EnterTransition; PLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/EnterTransition; HPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/TweenSpec;FI)Landroidx/compose/animation/EnterTransition; HPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/TweenSpec;FI)Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/TweenSpec;I)Landroidx/compose/animation/ExitTransition; HPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/TweenSpec;I)Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E$default(Landroidx/compose/animation/core/TweenSpec;F)Landroidx/compose/animation/EnterTransition; PLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E$default(Landroidx/compose/animation/core/TweenSpec;F)Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/ExitTransition; PLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/ExitTransition; HPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; PLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; PLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/ui/BiasAlignment; HPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/ui/BiasAlignment; Landroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1; HSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->()V PLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->()V HSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->()V PLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->()V HSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2; HSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;I)V HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;I)V HSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/FiniteAnimationSpec; HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/FiniteAnimationSpec; HSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/EnterExitTransitionKt$expandIn$1; HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->()V PLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->()V HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->(I)V PLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->(I)V HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Z)Ljava/lang/Boolean; PLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Z)Ljava/lang/Boolean; Landroidx/compose/animation/EnterExitTransitionKt$expandVertically$2; HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->(ILkotlin/jvm/functions/Function1;)V HPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->(ILkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->invoke-mHKZG7I(J)J Landroidx/compose/animation/EnterExitTransitionModifierNode; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getAlignment()Landroidx/compose/ui/Alignment; HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getAlignment()Landroidx/compose/ui/Alignment; PLandroidx/compose/animation/EnterExitTransitionModifierNode;->getEnter()Landroidx/compose/animation/EnterTransition; PLandroidx/compose/animation/EnterExitTransitionModifierNode;->getExit()Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getGraphicsLayerBlock()Lkotlin/jvm/functions/Function1; PLandroidx/compose/animation/EnterExitTransitionModifierNode;->getGraphicsLayerBlock()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->onAttach()V HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->onAttach()V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setEnter(Landroidx/compose/animation/EnterTransition;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setEnter(Landroidx/compose/animation/EnterTransition;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setExit(Landroidx/compose/animation/ExitTransition;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setExit(Landroidx/compose/animation/ExitTransition;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setGraphicsLayerBlock(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setGraphicsLayerBlock(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setOffsetAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setOffsetAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSizeAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSizeAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSlideAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSlideAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setTransition(Landroidx/compose/animation/core/Transition;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setTransition(Landroidx/compose/animation/core/Transition;)V PLandroidx/compose/animation/EnterExitTransitionModifierNode;->slideTargetValueByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->slideTargetValueByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J Landroidx/compose/animation/EnterExitTransitionModifierNode$measure$2; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;->(Landroidx/compose/ui/layout/Placeable;JJLandroidx/compose/animation/EnterExitTransitionModifierNode;)V HPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;->(Landroidx/compose/ui/layout/Placeable;JJLandroidx/compose/animation/EnterExitTransitionModifierNode;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->(IJLjava/lang/Object;)V HPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->(IJLjava/lang/Object;)V HSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke-Bjo55l4(Landroidx/compose/animation/EnterExitState;)J HPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke-Bjo55l4(Landroidx/compose/animation/EnterExitState;)J Landroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1; HSPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->(Landroidx/compose/animation/EnterExitTransitionModifierNode;I)V HPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->(Landroidx/compose/animation/EnterExitTransitionModifierNode;I)V PLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec; HPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec; PLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterTransition;->()V PLandroidx/compose/animation/EnterTransition;->()V HSPLandroidx/compose/animation/EnterTransition;->()V HPLandroidx/compose/animation/EnterTransition;->()V HSPLandroidx/compose/animation/EnterTransition;->access$getNone$cp()Landroidx/compose/animation/EnterTransition; HPLandroidx/compose/animation/EnterTransition;->access$getNone$cp()Landroidx/compose/animation/EnterTransition; HSPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransition;)Landroidx/compose/animation/EnterTransition; HPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransition;)Landroidx/compose/animation/EnterTransition; Landroidx/compose/animation/EnterTransitionImpl; HSPLandroidx/compose/animation/EnterTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V HPLandroidx/compose/animation/EnterTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V HSPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; HPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/ExitTransition;->()V PLandroidx/compose/animation/ExitTransition;->()V HSPLandroidx/compose/animation/ExitTransition;->()V HPLandroidx/compose/animation/ExitTransition;->()V HSPLandroidx/compose/animation/ExitTransition;->access$getNone$cp()Landroidx/compose/animation/ExitTransition; HPLandroidx/compose/animation/ExitTransition;->access$getNone$cp()Landroidx/compose/animation/ExitTransition; HSPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ExitTransition; HPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ExitTransition; Landroidx/compose/animation/ExitTransitionImpl; HSPLandroidx/compose/animation/ExitTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V HPLandroidx/compose/animation/ExitTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V HSPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; HPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; Landroidx/compose/animation/Fade; HSPLandroidx/compose/animation/Fade;->(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V HPLandroidx/compose/animation/Fade;->(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V HSPLandroidx/compose/animation/Fade;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/Fade;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/Fade;->getAlpha()F HPLandroidx/compose/animation/Fade;->getAlpha()F HSPLandroidx/compose/animation/Fade;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; PLandroidx/compose/animation/Fade;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; Landroidx/compose/animation/FlingCalculator; HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V HPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V Landroidx/compose/animation/FlingCalculatorKt; HSPLandroidx/compose/animation/FlingCalculatorKt;->()V PLandroidx/compose/animation/FlingCalculatorKt;->()V Landroidx/compose/animation/LayoutModifierNodeWithPassThroughIntrinsics; HSPLandroidx/compose/animation/LayoutModifierNodeWithPassThroughIntrinsics;->()V HPLandroidx/compose/animation/LayoutModifierNodeWithPassThroughIntrinsics;->()V Landroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics; HSPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;->()V PLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;->()V Landroidx/compose/animation/Scale; HSPLandroidx/compose/animation/Scale;->(FJLandroidx/compose/animation/core/FiniteAnimationSpec;)V HPLandroidx/compose/animation/Scale;->(FJLandroidx/compose/animation/core/FiniteAnimationSpec;)V HSPLandroidx/compose/animation/Scale;->equals(Ljava/lang/Object;)Z PLandroidx/compose/animation/Scale;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/Scale;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; PLandroidx/compose/animation/Scale;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; HSPLandroidx/compose/animation/Scale;->getScale()F PLandroidx/compose/animation/Scale;->getScale()F HSPLandroidx/compose/animation/Scale;->getTransformOrigin-SzJe1aQ()J HPLandroidx/compose/animation/Scale;->getTransformOrigin-SzJe1aQ()J Landroidx/compose/animation/Scale$$ExternalSyntheticOutline0; HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(FFFF)F PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(FFFF)F HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(FII)I HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(II)Lkotlin/collections/IntIterator; PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(II)Lkotlin/collections/IntIterator; HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(III)I HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(III)I HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/ComposerImpl;ILkotlin/jvm/functions/Function2;)V HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/ComposerImpl;ILkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;I)V HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;I)V HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;II)V HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;II)V HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)I PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)I HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)J HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)J HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/layout/MeasurePolicy;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Lkotlin/jvm/functions/Function2; HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/layout/MeasurePolicy;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/Object;)V PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/Object;)V HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;I)Ljava/lang/String; PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;I)Ljava/lang/String; HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;II)I PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;II)I HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/util/List;II)I PLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/util/List;II)I HSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller; HPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller; Landroidx/compose/animation/SingleValueAnimationKt; HSPLandroidx/compose/animation/SingleValueAnimationKt;->()V PLandroidx/compose/animation/SingleValueAnimationKt;->()V HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; HPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; Landroidx/compose/animation/SizeTransform; Landroidx/compose/animation/SizeTransformImpl; HSPLandroidx/compose/animation/SizeTransformImpl;->(ZLkotlin/jvm/functions/Function2;)V HPLandroidx/compose/animation/SizeTransformImpl;->(ZLkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/animation/SizeTransformImpl;->createAnimationSpec-TemP2vQ(JJ)Landroidx/compose/animation/core/FiniteAnimationSpec; PLandroidx/compose/animation/SizeTransformImpl;->createAnimationSpec-TemP2vQ(JJ)Landroidx/compose/animation/core/FiniteAnimationSpec; HSPLandroidx/compose/animation/SizeTransformImpl;->getClip()Z PLandroidx/compose/animation/SizeTransformImpl;->getClip()Z Landroidx/compose/animation/Slide; HSPLandroidx/compose/animation/Slide;->(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/animation/Slide;->(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/Slide;->equals(Ljava/lang/Object;)Z PLandroidx/compose/animation/Slide;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; PLandroidx/compose/animation/Slide;->getSlideOffset()Lkotlin/jvm/functions/Function1; Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec; HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V HPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt; HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/DecayAnimationSpec; HPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/DecayAnimationSpec; Landroidx/compose/animation/TransitionData; HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;Z)V HPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;Z)V HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;ZI)V HPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;ZI)V HSPLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/TransitionData;->getChangeSize()Landroidx/compose/animation/ChangeSize; HPLandroidx/compose/animation/TransitionData;->getChangeSize()Landroidx/compose/animation/ChangeSize; HSPLandroidx/compose/animation/TransitionData;->getFade()Landroidx/compose/animation/Fade; HPLandroidx/compose/animation/TransitionData;->getFade()Landroidx/compose/animation/Fade; HSPLandroidx/compose/animation/TransitionData;->getHold()Z PLandroidx/compose/animation/TransitionData;->getHold()Z HSPLandroidx/compose/animation/TransitionData;->getScale()Landroidx/compose/animation/Scale; HPLandroidx/compose/animation/TransitionData;->getScale()Landroidx/compose/animation/Scale; HSPLandroidx/compose/animation/TransitionData;->getSlide()Landroidx/compose/animation/Slide; HPLandroidx/compose/animation/TransitionData;->getSlide()Landroidx/compose/animation/Slide; Landroidx/compose/animation/core/Animatable; HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)V HPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;I)V PLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;I)V HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V PLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V HSPLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;)V PLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;)V HSPLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V PLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object; HPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object; HSPLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/animation/core/AnimationState; PLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/animation/core/AnimationState; HSPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState; PLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState; HSPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object; HPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object; HPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Animatable;->isRunning()Z PLandroidx/compose/animation/core/Animatable;->isRunning()Z HSPLandroidx/compose/animation/core/Animatable;->updateBounds$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Float;)V HPLandroidx/compose/animation/core/Animatable;->updateBounds$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Float;)V Landroidx/compose/animation/core/Animatable$runAnimation$2; HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/animation/core/Animatable$runAnimation$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/Animatable$runAnimation$2$1; HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V PLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/AnimateAsStateKt; HSPLandroidx/compose/animation/core/AnimateAsStateKt;->()V PLandroidx/compose/animation/core/AnimateAsStateKt;->()V HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; HPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; HPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2; HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V PLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object; Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3; HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1; HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/Animation; HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z HPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z Landroidx/compose/animation/core/AnimationResult; HSPLandroidx/compose/animation/core/AnimationResult;->(Landroidx/compose/animation/core/AnimationState;I)V PLandroidx/compose/animation/core/AnimationResult;->(Landroidx/compose/animation/core/AnimationState;I)V Landroidx/compose/animation/core/AnimationScope; HSPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J PLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J HSPLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J PLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J HSPLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J PLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object; HPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z HPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z HSPLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V PLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V HSPLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V PLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V HSPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release()V PLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release()V HSPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V HPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V PLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V Landroidx/compose/animation/core/AnimationSpec; Landroidx/compose/animation/core/AnimationState; HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V HPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V HPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V HSPLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J PLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J HSPLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object; HPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationState;->isRunning()Z PLandroidx/compose/animation/core/AnimationState;->isRunning()Z HSPLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V PLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V HSPLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V PLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V HSPLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V PLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V HSPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V HPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V PLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationVector;->()V HPLandroidx/compose/animation/core/AnimationVector;->()V Landroidx/compose/animation/core/AnimationVector1D; HSPLandroidx/compose/animation/core/AnimationVector1D;->(F)V HPLandroidx/compose/animation/core/AnimationVector1D;->(F)V HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F HPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I HPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I HSPLandroidx/compose/animation/core/AnimationVector1D;->getValue()F PLandroidx/compose/animation/core/AnimationVector1D;->getValue()F HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V HPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V HPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V Landroidx/compose/animation/core/AnimationVector2D; HSPLandroidx/compose/animation/core/AnimationVector2D;->(FF)V PLandroidx/compose/animation/core/AnimationVector2D;->(FF)V HSPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F PLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F HSPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I PLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I HSPLandroidx/compose/animation/core/AnimationVector2D;->getV1()F PLandroidx/compose/animation/core/AnimationVector2D;->getV1()F HSPLandroidx/compose/animation/core/AnimationVector2D;->getV2()F PLandroidx/compose/animation/core/AnimationVector2D;->getV2()F HSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationVector2D;->reset$animation_core_release()V PLandroidx/compose/animation/core/AnimationVector2D;->reset$animation_core_release()V HSPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(FI)V HPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(FI)V Landroidx/compose/animation/core/AnimationVector3D; HSPLandroidx/compose/animation/core/AnimationVector3D;->(FFF)V PLandroidx/compose/animation/core/AnimationVector3D;->(FFF)V Landroidx/compose/animation/core/AnimationVector4D; HSPLandroidx/compose/animation/core/AnimationVector4D;->(FFFF)V HPLandroidx/compose/animation/core/AnimationVector4D;->(FFFF)V HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F HPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I HPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I HSPLandroidx/compose/animation/core/AnimationVector4D;->getV1()F PLandroidx/compose/animation/core/AnimationVector4D;->getV1()F HSPLandroidx/compose/animation/core/AnimationVector4D;->getV2()F PLandroidx/compose/animation/core/AnimationVector4D;->getV2()F HSPLandroidx/compose/animation/core/AnimationVector4D;->getV3()F PLandroidx/compose/animation/core/AnimationVector4D;->getV3()F HSPLandroidx/compose/animation/core/AnimationVector4D;->getV4()F PLandroidx/compose/animation/core/AnimationVector4D;->getV4()F HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V HPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V HPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V Landroidx/compose/animation/core/Animations; Landroidx/compose/animation/core/ComplexDouble; HSPLandroidx/compose/animation/core/ComplexDouble;->(DD)V HPLandroidx/compose/animation/core/ComplexDouble;->(DD)V HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D HPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D HPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V HPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V HPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V Landroidx/compose/animation/core/CubicBezierEasing; HSPLandroidx/compose/animation/core/CubicBezierEasing;->(FFFF)V PLandroidx/compose/animation/core/CubicBezierEasing;->(FFFF)V HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F HPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F Landroidx/compose/animation/core/DecayAnimationSpec; Landroidx/compose/animation/core/DecayAnimationSpecImpl; HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;->(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V HPLandroidx/compose/animation/core/DecayAnimationSpecImpl;->(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V Landroidx/compose/animation/core/DurationBasedAnimationSpec; Landroidx/compose/animation/core/Easing; Landroidx/compose/animation/core/EasingKt; HSPLandroidx/compose/animation/core/EasingKt;->()V PLandroidx/compose/animation/core/EasingKt;->()V HSPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/CubicBezierEasing; PLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/CubicBezierEasing; HSPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing; PLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing; HSPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing; PLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing; HSPLandroidx/compose/animation/core/EasingKt;->getLinearOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing; PLandroidx/compose/animation/core/EasingKt;->getLinearOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing; Landroidx/compose/animation/core/EasingKt$LinearEasing$1; HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V PLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V PLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F PLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F Landroidx/compose/animation/core/FiniteAnimationSpec; Landroidx/compose/animation/core/FloatAnimationSpec; Landroidx/compose/animation/core/FloatDecayAnimationSpec; Landroidx/compose/animation/core/FloatSpringSpec; HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFF)V HPLandroidx/compose/animation/core/FloatSpringSpec;->(FFF)V HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J HPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F PLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F Landroidx/compose/animation/core/FloatTweenSpec; HSPLandroidx/compose/animation/core/FloatTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HPLandroidx/compose/animation/core/FloatTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F HPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F HPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F Landroidx/compose/animation/core/InfiniteRepeatableSpec; HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;IJ)V PLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;IJ)V HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; PLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; Landroidx/compose/animation/core/InfiniteTransition; HSPLandroidx/compose/animation/core/InfiniteTransition;->()V PLandroidx/compose/animation/core/InfiniteTransition;->()V HSPLandroidx/compose/animation/core/InfiniteTransition;->access$getStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;)J PLandroidx/compose/animation/core/InfiniteTransition;->access$getStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;)J HSPLandroidx/compose/animation/core/InfiniteTransition;->access$get_animations$p(Landroidx/compose/animation/core/InfiniteTransition;)Landroidx/compose/runtime/collection/MutableVector; PLandroidx/compose/animation/core/InfiniteTransition;->access$get_animations$p(Landroidx/compose/animation/core/InfiniteTransition;)Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/animation/core/InfiniteTransition;->access$onFrame(Landroidx/compose/animation/core/InfiniteTransition;J)V PLandroidx/compose/animation/core/InfiniteTransition;->access$onFrame(Landroidx/compose/animation/core/InfiniteTransition;J)V HSPLandroidx/compose/animation/core/InfiniteTransition;->access$setRefreshChildNeeded(Landroidx/compose/animation/core/InfiniteTransition;Z)V PLandroidx/compose/animation/core/InfiniteTransition;->access$setRefreshChildNeeded(Landroidx/compose/animation/core/InfiniteTransition;Z)V HSPLandroidx/compose/animation/core/InfiniteTransition;->access$setStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;J)V PLandroidx/compose/animation/core/InfiniteTransition;->access$setStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;J)V HSPLandroidx/compose/animation/core/InfiniteTransition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V PLandroidx/compose/animation/core/InfiniteTransition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V HSPLandroidx/compose/animation/core/InfiniteTransition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V PLandroidx/compose/animation/core/InfiniteTransition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V HSPLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V PLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;)V PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;)V HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getInitialValue$animation_core_release()Ljava/lang/Object; PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getInitialValue$animation_core_release()Ljava/lang/Object; HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getTargetValue$animation_core_release()Ljava/lang/Object; PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getTargetValue$animation_core_release()Ljava/lang/Object; HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object; PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->isFinished$animation_core_release()Z PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->isFinished$animation_core_release()Z HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(J)V PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(J)V HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->reset$animation_core_release()V PLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->reset$animation_core_release()V Landroidx/compose/animation/core/InfiniteTransition$run$1; HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/animation/core/InfiniteTransition$run$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/InfiniteTransition$run$1$1; HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/InfiniteTransition$run$1$2; HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$2;->(Ljava/lang/Object;I)V HPLandroidx/compose/animation/core/InfiniteTransition$run$1$2;->(Ljava/lang/Object;I)V Landroidx/compose/animation/core/InfiniteTransition$run$2; HSPLandroidx/compose/animation/core/InfiniteTransition$run$2;->(Landroidx/compose/animation/core/InfiniteTransition;I)V PLandroidx/compose/animation/core/InfiniteTransition$run$2;->(Landroidx/compose/animation/core/InfiniteTransition;I)V Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1; HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->(Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V PLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->(Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object; PLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object; Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1; HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/animation/core/KeyframesSpec; HSPLandroidx/compose/animation/core/KeyframesSpec;->(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V HPLandroidx/compose/animation/core/KeyframesSpec;->(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; PLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; PLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec; HPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec; Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Ljava/lang/Object;)V HPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->setEasing$animation_core_release(Landroidx/compose/animation/core/Easing;)V PLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->setEasing$animation_core_release(Landroidx/compose/animation/core/Easing;)V HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->toPair$animation_core_release(Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; PLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->toPair$animation_core_release(Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V HPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->at(ILjava/lang/Object;)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; HPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->at(ILjava/lang/Object;)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDurationMillis()I PLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDurationMillis()I HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getKeyframes$animation_core_release()Ljava/util/LinkedHashMap; PLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getKeyframes$animation_core_release()Ljava/util/LinkedHashMap; HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->setDurationMillis(I)V PLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->setDurationMillis(I)V Landroidx/compose/animation/core/Motion; HSPLandroidx/compose/animation/core/Motion;->()V PLandroidx/compose/animation/core/Motion;->()V HSPLandroidx/compose/animation/core/Motion;->Animatable$default(F)Landroidx/compose/animation/core/Animatable; HPLandroidx/compose/animation/core/Motion;->Animatable$default(F)Landroidx/compose/animation/core/Animatable; HSPLandroidx/compose/animation/core/Motion;->AnimationState$default(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Float;Ljava/lang/Float;)Landroidx/compose/animation/core/AnimationState; PLandroidx/compose/animation/core/Motion;->AnimationState$default(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Float;Ljava/lang/Float;)Landroidx/compose/animation/core/AnimationState; HSPLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D; PLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D; HSPLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D; PLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D; HSPLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D; PLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D; HSPLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D; PLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D; HSPLandroidx/compose/animation/core/Motion;->animateFloat(Landroidx/compose/animation/core/InfiniteTransition;FLandroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; PLandroidx/compose/animation/core/Motion;->animateFloat(Landroidx/compose/animation/core/InfiniteTransition;FLandroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; HSPLandroidx/compose/animation/core/Motion;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; PLandroidx/compose/animation/core/Motion;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; HSPLandroidx/compose/animation/core/Motion;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble; HPLandroidx/compose/animation/core/Motion;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble; HSPLandroidx/compose/animation/core/Motion;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/Motion;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/Motion;->createChildTransitionInternal(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition; HPLandroidx/compose/animation/core/Motion;->createChildTransitionInternal(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition; HSPLandroidx/compose/animation/core/Motion;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$DeferredAnimation; HPLandroidx/compose/animation/core/Motion;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$DeferredAnimation; HSPLandroidx/compose/animation/core/Motion;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$TransitionAnimationState; HPLandroidx/compose/animation/core/Motion;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$TransitionAnimationState; HSPLandroidx/compose/animation/core/Motion;->generateDecayAnimationSpec(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec; PLandroidx/compose/animation/core/Motion;->generateDecayAnimationSpec(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec; HSPLandroidx/compose/animation/core/Motion;->infiniteRepeatable-9IiC70o$default(Landroidx/compose/animation/core/DurationBasedAnimationSpec;II)Landroidx/compose/animation/core/InfiniteRepeatableSpec; PLandroidx/compose/animation/core/Motion;->infiniteRepeatable-9IiC70o$default(Landroidx/compose/animation/core/DurationBasedAnimationSpec;II)Landroidx/compose/animation/core/InfiniteRepeatableSpec; HSPLandroidx/compose/animation/core/Motion;->keyframes(Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/KeyframesSpec; PLandroidx/compose/animation/core/Motion;->keyframes(Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/KeyframesSpec; HSPLandroidx/compose/animation/core/Motion;->rememberInfiniteTransition(Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition; PLandroidx/compose/animation/core/Motion;->rememberInfiniteTransition(Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition; HSPLandroidx/compose/animation/core/Motion;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec; HPLandroidx/compose/animation/core/Motion;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec; HSPLandroidx/compose/animation/core/Motion;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec; HPLandroidx/compose/animation/core/Motion;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec; HSPLandroidx/compose/animation/core/Motion;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition; HPLandroidx/compose/animation/core/Motion;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition; Landroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0; HSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->()V PLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->()V HSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;II)Ljava/lang/Object; HPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;II)Ljava/lang/Object; HSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Lkotlin/coroutines/CoroutineContext$Element;)V PLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Lkotlin/coroutines/CoroutineContext$Element;)V HSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->ordinal(I)I HPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->ordinal(I)I HSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->values(I)[I PLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->values(I)[I Landroidx/compose/animation/core/MutableTransitionState; HSPLandroidx/compose/animation/core/MutableTransitionState;->(Ljava/lang/Object;)V PLandroidx/compose/animation/core/MutableTransitionState;->(Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/MutableTransitionState;->getCurrentState()Ljava/lang/Object; HPLandroidx/compose/animation/core/MutableTransitionState;->getCurrentState()Ljava/lang/Object; HSPLandroidx/compose/animation/core/MutableTransitionState;->getTargetState()Ljava/lang/Object; PLandroidx/compose/animation/core/MutableTransitionState;->getTargetState()Ljava/lang/Object; HSPLandroidx/compose/animation/core/MutableTransitionState;->setCurrentState$animation_core_release(Ljava/lang/Object;)V HPLandroidx/compose/animation/core/MutableTransitionState;->setCurrentState$animation_core_release(Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/MutableTransitionState;->setRunning$animation_core_release(Z)V HPLandroidx/compose/animation/core/MutableTransitionState;->setRunning$animation_core_release(Z)V HSPLandroidx/compose/animation/core/MutableTransitionState;->setTargetState(Ljava/lang/Boolean;)V PLandroidx/compose/animation/core/MutableTransitionState;->setTargetState(Ljava/lang/Boolean;)V Landroidx/compose/animation/core/MutatorMutex; HSPLandroidx/compose/animation/core/MutatorMutex;->()V PLandroidx/compose/animation/core/MutatorMutex;->()V HSPLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference; PLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference; HSPLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex; PLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex; HSPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V HPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V Landroidx/compose/animation/core/MutatorMutex$Mutator; HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;->(ILkotlinx/coroutines/Job;)V PLandroidx/compose/animation/core/MutatorMutex$Mutator;->(ILkotlinx/coroutines/Job;)V Landroidx/compose/animation/core/MutatorMutex$mutate$2; HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/RepeatableSpec; Landroidx/compose/animation/core/SpringSimulation; HSPLandroidx/compose/animation/core/SpringSimulation;->()V HPLandroidx/compose/animation/core/SpringSimulation;->()V HSPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F PLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F HSPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F PLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F HSPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V HPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V HSPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V HPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V Landroidx/compose/animation/core/SpringSpec; HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;)V HPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;)V HSPLandroidx/compose/animation/core/SpringSpec;->(Ljava/lang/Object;)V PLandroidx/compose/animation/core/SpringSpec;->(Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; PLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; Landroidx/compose/animation/core/SuspendAnimationKt; HSPLandroidx/compose/animation/core/SuspendAnimationKt;->access$doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/animation/core/SuspendAnimationKt;->access$doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F HPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V HPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V Landroidx/compose/animation/core/SuspendAnimationKt$animate$3; HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/SuspendAnimationKt$animate$4; HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->(Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/SuspendAnimationKt$animate$5; HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->()V PLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->()V HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->(I)V PLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->(I)V HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/SuspendAnimationKt$animate$6; HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/SuspendAnimationKt$animate$9; HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/TargetBasedAnimation; HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V HPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J HPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object; PLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object; HPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object; HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z PLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z Landroidx/compose/animation/core/Transition; HSPLandroidx/compose/animation/core/Transition;->(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V HPLandroidx/compose/animation/core/Transition;->(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V HSPLandroidx/compose/animation/core/Transition;->access$onChildAnimationUpdated(Landroidx/compose/animation/core/Transition;)V HPLandroidx/compose/animation/core/Transition;->access$onChildAnimationUpdated(Landroidx/compose/animation/core/Transition;)V HSPLandroidx/compose/animation/core/Transition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V HPLandroidx/compose/animation/core/Transition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V HSPLandroidx/compose/animation/core/Transition;->addTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V PLandroidx/compose/animation/core/Transition;->addTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V HSPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Transition;->getLabel()Ljava/lang/String; PLandroidx/compose/animation/core/Transition;->getLabel()Ljava/lang/String; HSPLandroidx/compose/animation/core/Transition;->getPlayTimeNanos()J PLandroidx/compose/animation/core/Transition;->getPlayTimeNanos()J HSPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment; HPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment; HSPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Transition;->isSeeking()Z HPLandroidx/compose/animation/core/Transition;->isSeeking()Z HSPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(JF)V HPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(JF)V HSPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V HPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V HSPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V PLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V HSPLandroidx/compose/animation/core/Transition;->removeTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V PLandroidx/compose/animation/core/Transition;->removeTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V HSPLandroidx/compose/animation/core/Transition;->setSeeking$animation_core_release(Z)V PLandroidx/compose/animation/core/Transition;->setSeeking$animation_core_release(Z)V HSPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V Landroidx/compose/animation/core/Transition$DeferredAnimation; HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V PLandroidx/compose/animation/core/Transition$DeferredAnimation;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; HPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->getData$animation_core_release()Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; HPLandroidx/compose/animation/core/Transition$DeferredAnimation;->getData$animation_core_release()Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getAnimation()Landroidx/compose/animation/core/Transition$TransitionAnimationState; PLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getAnimation()Landroidx/compose/animation/core/Transition$TransitionAnimationState; HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTargetValueByState(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTargetValueByState(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTransitionSpec(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTransitionSpec(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V HPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V Landroidx/compose/animation/core/Transition$Segment; HSPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z Landroidx/compose/animation/core/Transition$SegmentImpl; HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/animation/core/Transition$SegmentImpl;->(Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object; Landroidx/compose/animation/core/Transition$TransitionAnimationState; HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;)V HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;)V HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation; HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation; HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->isFinished$animation_core_release()Z HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->isFinished$animation_core_release()Z HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(JF)V HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(JF)V HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->resetAnimation$animation_core_release()V PLandroidx/compose/animation/core/Transition$TransitionAnimationState;->resetAnimation$animation_core_release()V HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V Landroidx/compose/animation/core/Transition$animateTo$1$1; HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/animation/core/Transition$animateTo$1$1;->(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/Transition$animateTo$1$1$1; HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->(Landroidx/compose/animation/core/Transition;F)V HPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->(Landroidx/compose/animation/core/Transition;F)V HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/Transition$animateTo$2; HSPLandroidx/compose/animation/core/Transition$animateTo$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;II)V HPLandroidx/compose/animation/core/Transition$animateTo$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;II)V HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/Transition$totalDurationNanos$2; HSPLandroidx/compose/animation/core/Transition$totalDurationNanos$2;->(Landroidx/compose/animation/core/Transition;)V PLandroidx/compose/animation/core/Transition$totalDurationNanos$2;->(Landroidx/compose/animation/core/Transition;)V Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1; HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->(Ljava/lang/Object;I)V PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;I)V PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;I)V HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/animation/core/TweenSpec; HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HSPLandroidx/compose/animation/core/TweenSpec;->(ILandroidx/compose/animation/core/Easing;I)V PLandroidx/compose/animation/core/TweenSpec;->(ILandroidx/compose/animation/core/Easing;I)V HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; PLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; PLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; PLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; Landroidx/compose/animation/core/TwoWayConverter; Landroidx/compose/animation/core/TwoWayConverterImpl; HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/animation/core/TwoWayConverterImpl;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1; Landroidx/compose/animation/core/VectorConvertersKt; HSPLandroidx/compose/animation/core/VectorConvertersKt;->()V PLandroidx/compose/animation/core/VectorConvertersKt;->()V HSPLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$1()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$1()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$2()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$2()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$1()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$1()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$2()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$2()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3$1()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3$1()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3()Landroidx/compose/animation/core/TwoWayConverter; PLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3()Landroidx/compose/animation/core/TwoWayConverter; HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter()Landroidx/compose/animation/core/TwoWayConverter; HPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter()Landroidx/compose/animation/core/TwoWayConverter; Landroidx/compose/animation/core/VectorizedAnimationSpec; HSPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; HSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; HSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z HPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z Landroidx/compose/animation/core/VectorizedFloatAnimationSpec; HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/Animations;)V HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/Animations;)V HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V PLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/core/VectorizedFloatAnimationSpec$1; HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; Landroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec; HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;IJ)V PLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;IJ)V HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J PLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J PLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J Landroidx/compose/animation/core/VectorizedKeyframesSpec; HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->(ILjava/util/LinkedHashMap;)V PLandroidx/compose/animation/core/VectorizedKeyframesSpec;->(ILjava/util/LinkedHashMap;)V HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I PLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I PLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/core/VectorizedSpringSpec; HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/AnimationVector;)V HPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/AnimationVector;)V HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J PLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/core/VectorizedTweenSpec; HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HPLandroidx/compose/animation/core/VectorizedTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I PLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I PLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/core/VisibilityThresholdsKt; HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->()V PLandroidx/compose/animation/core/VisibilityThresholdsKt;->()V HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThresholdMap()Ljava/util/Map; PLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThresholdMap()Ljava/util/Map; Landroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1; HSPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;->(ZLandroidx/compose/animation/graphics/vector/AnimatedImageVector;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;->(ZLandroidx/compose/animation/graphics/vector/AnimatedImageVector;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt; HSPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->animatedVectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/animation/graphics/vector/AnimatedImageVector; HPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->animatedVectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/animation/graphics/vector/AnimatedImageVector; HSPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->rememberAnimatedVectorPainter(Landroidx/compose/animation/graphics/vector/AnimatedImageVector;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter; HPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->rememberAnimatedVectorPainter(Landroidx/compose/animation/graphics/vector/AnimatedImageVector;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter; Landroidx/compose/animation/graphics/res/AnimatorResources_androidKt; HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->()V PLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->()V HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->getAccelerateDecelerateEasing()Landroidx/compose/animation/core/Easing; PLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->getAccelerateDecelerateEasing()Landroidx/compose/animation/core/Easing; HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadAnimatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/Animator; HPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadAnimatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/Animator; HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadInterpolatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/core/Easing; HPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadInterpolatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/core/Easing; Landroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1; HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->()V PLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->()V HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->(I)V PLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->(I)V HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->transform(F)F HPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->transform(F)F Landroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1; HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;->(Landroid/view/animation/BaseInterpolator;)V PLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;->(Landroid/view/animation/BaseInterpolator;)V HSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;->transform(F)F PLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;->transform(F)F Landroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt; HSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt;->()V PLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt;->()V Landroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1; HSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->()V PLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->()V HSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->()V PLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->()V HSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/AnimatedImageVector; HSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->()V PLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->()V HSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/util/ArrayList;)V HPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/util/ArrayList;)V HSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTargets$animation_graphics_release()Ljava/util/List; PLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTargets$animation_graphics_release()Ljava/util/List; HSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTotalDuration()I PLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTotalDuration()I Landroidx/compose/animation/graphics/vector/AnimatedVectorTarget; HSPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->(Ljava/lang/String;Landroidx/compose/animation/graphics/vector/Animator;)V PLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->(Ljava/lang/String;Landroidx/compose/animation/graphics/vector/Animator;)V HSPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getAnimator()Landroidx/compose/animation/graphics/vector/Animator; PLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getAnimator()Landroidx/compose/animation/graphics/vector/Animator; HSPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getName()Ljava/lang/String; PLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getName()Ljava/lang/String; Landroidx/compose/animation/graphics/vector/Animator; HSPLandroidx/compose/animation/graphics/vector/Animator;->()V HPLandroidx/compose/animation/graphics/vector/Animator;->()V HSPLandroidx/compose/animation/graphics/vector/Animator;->Configure(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;ILandroidx/compose/runtime/Composer;I)V HPLandroidx/compose/animation/graphics/vector/Animator;->Configure(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;ILandroidx/compose/runtime/Composer;I)V Landroidx/compose/animation/graphics/vector/Animator$Configure$2; HSPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;->(Landroidx/compose/animation/graphics/vector/Animator;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;II)V PLandroidx/compose/animation/graphics/vector/Animator$Configure$2;->(Landroidx/compose/animation/graphics/vector/Animator;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;II)V HSPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/AnimatorSet; HSPLandroidx/compose/animation/graphics/vector/AnimatorSet;->(Ljava/util/ArrayList;I)V HPLandroidx/compose/animation/graphics/vector/AnimatorSet;->(Ljava/util/ArrayList;I)V HSPLandroidx/compose/animation/graphics/vector/AnimatorSet;->collectPropertyValues(IILjava/util/LinkedHashMap;)V HPLandroidx/compose/animation/graphics/vector/AnimatorSet;->collectPropertyValues(IILjava/util/LinkedHashMap;)V HSPLandroidx/compose/animation/graphics/vector/AnimatorSet;->getTotalDuration()I PLandroidx/compose/animation/graphics/vector/AnimatorSet;->getTotalDuration()I Landroidx/compose/animation/graphics/vector/CombinedSpec; HSPLandroidx/compose/animation/graphics/vector/CombinedSpec;->(Ljava/util/ArrayList;)V PLandroidx/compose/animation/graphics/vector/CombinedSpec;->(Ljava/util/ArrayList;)V HSPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; PLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; HSPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; HPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; Landroidx/compose/animation/graphics/vector/FloatPropertyValues; HSPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;->()V PLandroidx/compose/animation/graphics/vector/FloatPropertyValues;->()V HSPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; HPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; Landroidx/compose/animation/graphics/vector/Keyframe; HSPLandroidx/compose/animation/graphics/vector/Keyframe;->(FLjava/lang/Object;Landroidx/compose/animation/core/Easing;)V HPLandroidx/compose/animation/graphics/vector/Keyframe;->(FLjava/lang/Object;Landroidx/compose/animation/core/Easing;)V HSPLandroidx/compose/animation/graphics/vector/Keyframe;->getFraction()F PLandroidx/compose/animation/graphics/vector/Keyframe;->getFraction()F HSPLandroidx/compose/animation/graphics/vector/Keyframe;->getInterpolator()Landroidx/compose/animation/core/Easing; PLandroidx/compose/animation/graphics/vector/Keyframe;->getInterpolator()Landroidx/compose/animation/core/Easing; HSPLandroidx/compose/animation/graphics/vector/Keyframe;->getValue()Ljava/lang/Object; PLandroidx/compose/animation/graphics/vector/Keyframe;->getValue()Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/ObjectAnimator; HSPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->(IIIILjava/util/ArrayList;)V PLandroidx/compose/animation/graphics/vector/ObjectAnimator;->(IIIILjava/util/ArrayList;)V HSPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->collectPropertyValues(IILjava/util/LinkedHashMap;)V HPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->collectPropertyValues(IILjava/util/LinkedHashMap;)V HSPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->getTotalDuration()I PLandroidx/compose/animation/graphics/vector/ObjectAnimator;->getTotalDuration()I Landroidx/compose/animation/graphics/vector/PathPropertyValues; HSPLandroidx/compose/animation/graphics/vector/PathPropertyValues;->()V PLandroidx/compose/animation/graphics/vector/PathPropertyValues;->()V HSPLandroidx/compose/animation/graphics/vector/PathPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; HPLandroidx/compose/animation/graphics/vector/PathPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; Landroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1; HSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;->(Landroidx/compose/animation/graphics/vector/PathPropertyValues;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V PLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;->(Landroidx/compose/animation/graphics/vector/PathPropertyValues;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V HSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1; HSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;->(I)V PLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;->(I)V HSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/PropertyValues; HSPLandroidx/compose/animation/graphics/vector/PropertyValues;->()V PLandroidx/compose/animation/graphics/vector/PropertyValues;->()V HSPLandroidx/compose/animation/graphics/vector/PropertyValues;->getTimestamps()Ljava/util/ArrayList; PLandroidx/compose/animation/graphics/vector/PropertyValues;->getTimestamps()Ljava/util/ArrayList; Landroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1; HSPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;->(Landroidx/compose/animation/graphics/vector/PropertyValues;I)V PLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;->(Landroidx/compose/animation/graphics/vector/PropertyValues;I)V HSPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/PropertyValuesHolder; HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder;->()V HPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder;->()V Landroidx/compose/animation/graphics/vector/PropertyValuesHolder1D; HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;->(Ljava/lang/String;)V PLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;->(Ljava/lang/String;)V HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;->getPropertyName()Ljava/lang/String; PLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;->getPropertyName()Ljava/lang/String; Landroidx/compose/animation/graphics/vector/PropertyValuesHolder2D; Landroidx/compose/animation/graphics/vector/PropertyValuesHolderColor; Landroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1; HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->(ILandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;I)V HPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->(ILandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;I)V HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V HPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat; HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;->(Ljava/lang/String;Ljava/util/ArrayList;)V PLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;->(Ljava/lang/String;Ljava/util/ArrayList;)V HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;->getAnimatorKeyframes()Ljava/util/List; PLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;->getAnimatorKeyframes()Ljava/util/List; Landroidx/compose/animation/graphics/vector/PropertyValuesHolderPath; HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;->(Ljava/lang/String;Ljava/util/ArrayList;)V PLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;->(Ljava/lang/String;Ljava/util/ArrayList;)V HSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;->interpolate(F)Ljava/util/ArrayList; HPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;->interpolate(F)Ljava/util/ArrayList; Landroidx/compose/animation/graphics/vector/ReversedSpec; HSPLandroidx/compose/animation/graphics/vector/ReversedSpec;->(Landroidx/compose/animation/core/FiniteAnimationSpec;I)V HPLandroidx/compose/animation/graphics/vector/ReversedSpec;->(Landroidx/compose/animation/core/FiniteAnimationSpec;I)V HSPLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; PLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; HSPLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; PLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; Landroidx/compose/animation/graphics/vector/StateVectorConfig; HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->()V PLandroidx/compose/animation/graphics/vector/StateVectorConfig;->()V HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setPathDataState(Landroidx/compose/runtime/State;)V PLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setPathDataState(Landroidx/compose/runtime/State;)V HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setRotationState(Landroidx/compose/runtime/State;)V PLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setRotationState(Landroidx/compose/runtime/State;)V HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleXState(Landroidx/compose/runtime/State;)V PLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleXState(Landroidx/compose/runtime/State;)V HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleYState(Landroidx/compose/runtime/State;)V PLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleYState(Landroidx/compose/runtime/State;)V HSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setTranslateXState(Landroidx/compose/runtime/State;)V PLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setTranslateXState(Landroidx/compose/runtime/State;)V Landroidx/compose/animation/graphics/vector/Timestamp; HSPLandroidx/compose/animation/graphics/vector/Timestamp;->(IIIILandroidx/compose/animation/graphics/vector/PropertyValuesHolder;)V PLandroidx/compose/animation/graphics/vector/Timestamp;->(IIIILandroidx/compose/animation/graphics/vector/PropertyValuesHolder;)V HSPLandroidx/compose/animation/graphics/vector/Timestamp;->asAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; HPLandroidx/compose/animation/graphics/vector/Timestamp;->asAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; HSPLandroidx/compose/animation/graphics/vector/Timestamp;->getDurationMillis()I PLandroidx/compose/animation/graphics/vector/Timestamp;->getDurationMillis()I HSPLandroidx/compose/animation/graphics/vector/Timestamp;->getHolder()Landroidx/compose/animation/graphics/vector/PropertyValuesHolder; PLandroidx/compose/animation/graphics/vector/Timestamp;->getHolder()Landroidx/compose/animation/graphics/vector/PropertyValuesHolder; HSPLandroidx/compose/animation/graphics/vector/Timestamp;->getRepeatCount()I PLandroidx/compose/animation/graphics/vector/Timestamp;->getRepeatCount()I HSPLandroidx/compose/animation/graphics/vector/Timestamp;->getTimeMillis()I PLandroidx/compose/animation/graphics/vector/Timestamp;->getTimeMillis()I Landroidx/compose/animation/graphics/vector/VectorizedCombinedSpec; HSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->(Ljava/util/ArrayList;)V PLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->(Ljava/util/ArrayList;)V HSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->chooseAnimation(J)Lkotlin/Pair; HPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->chooseAnimation(J)Lkotlin/Pair; HSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J PLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/graphics/vector/VectorizedReversedSpec; HSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->(Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;J)V PLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->(Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;J)V HSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J PLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J HSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; Landroidx/compose/animation/graphics/vector/compat/AndroidVectorResources; HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->()V PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->()V HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getKeyframe(Landroid/content/res/TypedArray;FLandroidx/compose/animation/core/Easing;Landroidx/compose/animation/graphics/vector/compat/ValueType;I)Landroidx/compose/animation/graphics/vector/Keyframe; HPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getKeyframe(Landroid/content/res/TypedArray;FLandroidx/compose/animation/core/Easing;Landroidx/compose/animation/graphics/vector/compat/ValueType;I)Landroidx/compose/animation/graphics/vector/Keyframe; HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getPropertyValuesHolder1D(Landroid/content/res/TypedArray;Ljava/lang/String;IIILandroidx/compose/animation/core/Easing;Lkotlin/jvm/functions/Function2;)Landroidx/compose/animation/graphics/vector/PropertyValuesHolder1D; HPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getPropertyValuesHolder1D(Landroid/content/res/TypedArray;Ljava/lang/String;IIILandroidx/compose/animation/core/Easing;Lkotlin/jvm/functions/Function2;)Landroidx/compose/animation/graphics/vector/PropertyValuesHolder1D; HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR_SET()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR_SET()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_DECELERATE_INTERPOLATOR()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_DECELERATE_INTERPOLATOR()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PATH_INTERPOLATOR()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PATH_INTERPOLATOR()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PROPERTY_ANIMATOR()[I PLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PROPERTY_ANIMATOR()[I HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->inferValueType(I[I)Landroidx/compose/animation/graphics/vector/compat/ValueType; HPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->inferValueType(I[I)Landroidx/compose/animation/graphics/vector/compat/ValueType; HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseAnimatorSet(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/AnimatorSet; HPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseAnimatorSet(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/AnimatorSet; HSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseObjectAnimator(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/ObjectAnimator; HPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseObjectAnimator(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/ObjectAnimator; Landroidx/compose/animation/graphics/vector/compat/ValueType; HSPLandroidx/compose/animation/graphics/vector/compat/ValueType;->()V PLandroidx/compose/animation/graphics/vector/compat/ValueType;->()V HSPLandroidx/compose/animation/graphics/vector/compat/ValueType;->(Ljava/lang/String;I)V PLandroidx/compose/animation/graphics/vector/compat/ValueType;->(Ljava/lang/String;I)V Landroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1; HSPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->()V PLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->()V HSPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->()V PLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->()V HSPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/AbstractClickableNode; HSPLandroidx/compose/foundation/AbstractClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/AbstractClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/foundation/AbstractClickableNode;->disposeInteractionSource()V HPLandroidx/compose/foundation/AbstractClickableNode;->disposeInteractionSource()V HSPLandroidx/compose/foundation/AbstractClickableNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; PLandroidx/compose/foundation/AbstractClickableNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; HSPLandroidx/compose/foundation/AbstractClickableNode;->onDetach()V HPLandroidx/compose/foundation/AbstractClickableNode;->onDetach()V HSPLandroidx/compose/foundation/AbstractClickableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V PLandroidx/compose/foundation/AbstractClickableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V HSPLandroidx/compose/foundation/AbstractClickableNode;->updateCommon-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/AbstractClickableNode;->updateCommon-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V Landroidx/compose/foundation/AbstractClickableNode$InteractionData; HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->()V HPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->()V HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getCurrentKeyPressInteractions()Ljava/util/LinkedHashMap; PLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getCurrentKeyPressInteractions()Ljava/util/LinkedHashMap; HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getPressInteraction()Landroidx/compose/foundation/interaction/PressInteraction$Press; PLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getPressInteraction()Landroidx/compose/foundation/interaction/PressInteraction$Press; HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setCentreOffset-k-4lQ0M(J)V PLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setCentreOffset-k-4lQ0M(J)V HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setPressInteraction(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V PLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setPressInteraction(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V Landroidx/compose/foundation/AbstractClickablePointerInputNode; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V HPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getEnabled()Z PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getEnabled()Z HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getOnClick()Lkotlin/jvm/functions/Function0; PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getOnClick()Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->handlePressInteraction-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->handlePressInteraction-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setEnabled(Z)V PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setEnabled(Z)V HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setInteractionSource(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setInteractionSource(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setOnClick(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setOnClick(Lkotlin/jvm/functions/Function0;)V Landroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerId$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/input/pointer/PointerId;)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerPosition$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/geometry/Offset;)V HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1; HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/AndroidOverscrollKt; HSPLandroidx/compose/foundation/AndroidOverscrollKt;->()V PLandroidx/compose/foundation/AndroidOverscrollKt;->()V HSPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/BackgroundElement; HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/ShaderBrush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;I)V HPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/ShaderBrush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;I)V HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/foundation/BackgroundNode; HSPLandroidx/compose/foundation/BackgroundNode;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V HPLandroidx/compose/foundation/BackgroundNode;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/foundation/BackgroundNode;->setAlpha(F)V PLandroidx/compose/foundation/BackgroundNode;->setAlpha(F)V HSPLandroidx/compose/foundation/BackgroundNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V PLandroidx/compose/foundation/BackgroundNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V HSPLandroidx/compose/foundation/BackgroundNode;->setColor-8_81llA(J)V PLandroidx/compose/foundation/BackgroundNode;->setColor-8_81llA(J)V HSPLandroidx/compose/foundation/BackgroundNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V PLandroidx/compose/foundation/BackgroundNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V Landroidx/compose/foundation/BorderModifierNode; HSPLandroidx/compose/foundation/BorderModifierNode;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V PLandroidx/compose/foundation/BorderModifierNode;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V HSPLandroidx/compose/foundation/BorderModifierNode;->access$drawRoundRectBorder-JqoCqck(Landroidx/compose/foundation/BorderModifierNode;Landroidx/compose/ui/draw/CacheDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Outline$Rounded;JJZF)Landroidx/compose/ui/draw/DrawResult; PLandroidx/compose/foundation/BorderModifierNode;->access$drawRoundRectBorder-JqoCqck(Landroidx/compose/foundation/BorderModifierNode;Landroidx/compose/ui/draw/CacheDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Outline$Rounded;JJZF)Landroidx/compose/ui/draw/DrawResult; HSPLandroidx/compose/foundation/BorderModifierNode;->getBrush()Landroidx/compose/ui/graphics/Brush; PLandroidx/compose/foundation/BorderModifierNode;->getBrush()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/foundation/BorderModifierNode;->getShape()Landroidx/compose/ui/graphics/Shape; PLandroidx/compose/foundation/BorderModifierNode;->getShape()Landroidx/compose/ui/graphics/Shape; HSPLandroidx/compose/foundation/BorderModifierNode;->getWidth-D9Ej5fM()F PLandroidx/compose/foundation/BorderModifierNode;->getWidth-D9Ej5fM()F Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1; HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V PLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/BorderModifierNodeElement; HSPLandroidx/compose/foundation/BorderModifierNodeElement;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V PLandroidx/compose/foundation/BorderModifierNodeElement;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/foundation/ClickableElement; HSPLandroidx/compose/foundation/ClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/ClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/ClickableElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/ClickableElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/foundation/ClickableKt$clickable$2; HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2; HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1; HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->(Lkotlin/jvm/functions/Function0;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->(Lkotlin/jvm/functions/Function0;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ClickableNode; HSPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)V HPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)V HSPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/AbstractClickablePointerInputNode; PLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/AbstractClickablePointerInputNode; HSPLandroidx/compose/foundation/ClickableNode;->update-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/foundation/ClickableNode;->update-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V Landroidx/compose/foundation/ClickablePointerInputNode; HSPLandroidx/compose/foundation/ClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V HPLandroidx/compose/foundation/ClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V HSPLandroidx/compose/foundation/ClickablePointerInputNode;->pointerInput(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/ClickablePointerInputNode;->pointerInput(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2; HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;I)V HPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;I)V HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ClickableSemanticsNode; HSPLandroidx/compose/foundation/ClickableSemanticsNode;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/ClickableSemanticsNode;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/foundation/ClickableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HPLandroidx/compose/foundation/ClickableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HSPLandroidx/compose/foundation/ClickableSemanticsNode;->getShouldMergeDescendantSemantics()Z HPLandroidx/compose/foundation/ClickableSemanticsNode;->getShouldMergeDescendantSemantics()Z HSPLandroidx/compose/foundation/ClickableSemanticsNode;->update-UMe6uN4(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/foundation/ClickableSemanticsNode;->update-UMe6uN4(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V Landroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1; HSPLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;->(Landroidx/compose/foundation/ClickableSemanticsNode;I)V HPLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;->(Landroidx/compose/foundation/ClickableSemanticsNode;I)V Landroidx/compose/foundation/Clickable_androidKt; HSPLandroidx/compose/foundation/Clickable_androidKt;->()V PLandroidx/compose/foundation/Clickable_androidKt;->()V PLandroidx/compose/foundation/Clickable_androidKt;->getTapIndicationDelay()J Landroidx/compose/foundation/ClipScrollableContainerKt; HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->()V PLandroidx/compose/foundation/ClipScrollableContainerKt;->()V HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F PLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F Landroidx/compose/foundation/DrawOverscrollModifier; HSPLandroidx/compose/foundation/DrawOverscrollModifier;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/DrawOverscrollModifier;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/FocusableElement; HSPLandroidx/compose/foundation/FocusableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/FocusableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/FocusableInNonTouchMode; HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->()V HPLandroidx/compose/foundation/FocusableInNonTouchMode;->()V HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V PLandroidx/compose/foundation/FocusableInNonTouchMode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V Landroidx/compose/foundation/FocusableInteractionNode; HSPLandroidx/compose/foundation/FocusableInteractionNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/FocusableInteractionNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HSPLandroidx/compose/foundation/FocusableInteractionNode;->setFocus(Z)V HPLandroidx/compose/foundation/FocusableInteractionNode;->setFocus(Z)V Landroidx/compose/foundation/FocusableKt; HSPLandroidx/compose/foundation/FocusableKt;->()V PLandroidx/compose/foundation/FocusableKt;->()V HSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1; HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->()V PLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->()V HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1; HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V Landroidx/compose/foundation/FocusableNode; HSPLandroidx/compose/foundation/FocusableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/FocusableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HSPLandroidx/compose/foundation/FocusableNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HPLandroidx/compose/foundation/FocusableNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V HPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V PLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V Landroidx/compose/foundation/FocusablePinnableContainerNode; HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->()V HPLandroidx/compose/foundation/FocusablePinnableContainerNode;->()V HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->setFocus(Z)V HPLandroidx/compose/foundation/FocusablePinnableContainerNode;->setFocus(Z)V Landroidx/compose/foundation/FocusableSemanticsNode; HSPLandroidx/compose/foundation/FocusableSemanticsNode;->()V HPLandroidx/compose/foundation/FocusableSemanticsNode;->()V HSPLandroidx/compose/foundation/FocusableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HPLandroidx/compose/foundation/FocusableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HSPLandroidx/compose/foundation/FocusableSemanticsNode;->setFocus(Z)V PLandroidx/compose/foundation/FocusableSemanticsNode;->setFocus(Z)V Landroidx/compose/foundation/FocusedBoundsKt; HSPLandroidx/compose/foundation/FocusedBoundsKt;->()V PLandroidx/compose/foundation/FocusedBoundsKt;->()V HSPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal; PLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal; Landroidx/compose/foundation/FocusedBoundsNode; HSPLandroidx/compose/foundation/FocusedBoundsNode;->()V HPLandroidx/compose/foundation/FocusedBoundsNode;->()V HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/foundation/FocusedBoundsNode;->setFocus(Z)V HPLandroidx/compose/foundation/FocusedBoundsNode;->setFocus(Z)V Landroidx/compose/foundation/FocusedBoundsObserverNode; HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/FocusedBoundsObserverNode;->(Lkotlin/jvm/functions/Function1;)V Landroidx/compose/foundation/GlowEdgeEffectCompat; HSPLandroidx/compose/foundation/GlowEdgeEffectCompat;->(Landroid/content/Context;)V HPLandroidx/compose/foundation/GlowEdgeEffectCompat;->(Landroid/content/Context;)V HSPLandroidx/compose/foundation/GlowEdgeEffectCompat;->onRelease()V HPLandroidx/compose/foundation/GlowEdgeEffectCompat;->onRelease()V Landroidx/compose/foundation/HoverableElement; HSPLandroidx/compose/foundation/HoverableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/HoverableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HSPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/HoverableElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/HoverableElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/HoverableNode; HSPLandroidx/compose/foundation/HoverableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/HoverableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HSPLandroidx/compose/foundation/HoverableNode;->onDetach()V HPLandroidx/compose/foundation/HoverableNode;->onDetach()V HSPLandroidx/compose/foundation/HoverableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V HPLandroidx/compose/foundation/HoverableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V HSPLandroidx/compose/foundation/HoverableNode;->tryEmitExit()V PLandroidx/compose/foundation/HoverableNode;->tryEmitExit()V Landroidx/compose/foundation/ImageKt; HSPLandroidx/compose/foundation/ImageKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/ImageKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/ImageKt;->access$shrink-Kibmq7A(JF)J PLandroidx/compose/foundation/ImageKt;->access$shrink-Kibmq7A(JF)J HSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;J)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/ImageKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;J)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V PLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V HSPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/ImageKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect; HPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect; HSPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F PLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F HSPLandroidx/compose/foundation/ImageKt;->hoverable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/ImageKt;->hoverable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;)Z PLandroidx/compose/foundation/ImageKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;)Z HSPLandroidx/compose/foundation/ImageKt;->progressSemantics(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/ImageKt;->progressSemantics(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/ImageKt;->rememberScrollState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/ScrollState; HPLandroidx/compose/foundation/ImageKt;->rememberScrollState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/ScrollState; HSPLandroidx/compose/foundation/ImageKt;->shrink-Kibmq7A(JF)J PLandroidx/compose/foundation/ImageKt;->shrink-Kibmq7A(JF)J HSPLandroidx/compose/foundation/ImageKt;->verticalScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/ImageKt;->verticalScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1; HSPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Boolean; HPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Boolean; HSPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/ImageKt$Image$semantics$1$1; HSPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/Indication; Landroidx/compose/foundation/IndicationInstance; Landroidx/compose/foundation/IndicationKt; HSPLandroidx/compose/foundation/IndicationKt;->()V PLandroidx/compose/foundation/IndicationKt;->()V HSPLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/IndicationKt$LocalIndication$1; HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V PLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->(I)V PLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->(I)V HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/IndicationKt$indication$2; HSPLandroidx/compose/foundation/IndicationKt$indication$2;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V HPLandroidx/compose/foundation/IndicationKt$indication$2;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/IndicationModifier; HSPLandroidx/compose/foundation/IndicationModifier;->(Landroidx/compose/foundation/IndicationInstance;)V PLandroidx/compose/foundation/IndicationModifier;->(Landroidx/compose/foundation/IndicationInstance;)V HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V Landroidx/compose/foundation/MagnifierNode$draw$1$1; HSPLandroidx/compose/foundation/MagnifierNode$draw$1$1;->()V PLandroidx/compose/foundation/MagnifierNode$draw$1$1;->()V HSPLandroidx/compose/foundation/MagnifierNode$draw$1$1;->(I)V PLandroidx/compose/foundation/MagnifierNode$draw$1$1;->(I)V Landroidx/compose/foundation/MutatorMutex; HSPLandroidx/compose/foundation/MutatorMutex;->()V HPLandroidx/compose/foundation/MutatorMutex;->()V Landroidx/compose/foundation/NoIndication; HSPLandroidx/compose/foundation/NoIndication;->()V PLandroidx/compose/foundation/NoIndication;->()V HSPLandroidx/compose/foundation/NoIndication;->()V PLandroidx/compose/foundation/NoIndication;->()V HSPLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance; PLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance; Landroidx/compose/foundation/OverscrollConfiguration; HSPLandroidx/compose/foundation/OverscrollConfiguration;->()V PLandroidx/compose/foundation/OverscrollConfiguration;->()V HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J HPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J Landroidx/compose/foundation/OverscrollConfigurationKt; HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->()V PLandroidx/compose/foundation/OverscrollConfigurationKt;->()V HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Landroidx/compose/foundation/OverscrollEffect; Landroidx/compose/foundation/PlatformMagnifierFactory; Landroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl; HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->()V PLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->()V HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->()V PLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->()V HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1; HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->(I)V PLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->(I)V HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1; HSPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;->(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;->(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ScrollKt$scroll$2; HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZZ)V PLandroidx/compose/foundation/ScrollKt$scroll$2;->(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZZ)V HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1; HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;->(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;->(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V Landroidx/compose/foundation/ScrollState; HSPLandroidx/compose/foundation/ScrollState;->()V PLandroidx/compose/foundation/ScrollState;->()V HSPLandroidx/compose/foundation/ScrollState;->(I)V PLandroidx/compose/foundation/ScrollState;->(I)V HSPLandroidx/compose/foundation/ScrollState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/foundation/ScrollState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/foundation/ScrollState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; PLandroidx/compose/foundation/ScrollState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; HSPLandroidx/compose/foundation/ScrollState;->getMaxValue()I HPLandroidx/compose/foundation/ScrollState;->getMaxValue()I HSPLandroidx/compose/foundation/ScrollState;->getValue()I HPLandroidx/compose/foundation/ScrollState;->getValue()I HSPLandroidx/compose/foundation/ScrollState;->setMaxValue$foundation_release(I)V PLandroidx/compose/foundation/ScrollState;->setMaxValue$foundation_release(I)V HSPLandroidx/compose/foundation/ScrollState;->setViewportSize$foundation_release(I)V PLandroidx/compose/foundation/ScrollState;->setViewportSize$foundation_release(I)V Landroidx/compose/foundation/ScrollState$Companion$Saver$1; HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/ScrollState$canScrollForward$2; HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->(Landroidx/compose/foundation/ScrollState;I)V HPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->(Landroidx/compose/foundation/ScrollState;I)V HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Float; HPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Float; HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/ScrollingLayoutElement; HSPLandroidx/compose/foundation/ScrollingLayoutElement;->(Landroidx/compose/foundation/ScrollState;ZZ)V PLandroidx/compose/foundation/ScrollingLayoutElement;->(Landroidx/compose/foundation/ScrollState;ZZ)V HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/ScrollingLayoutNode; HSPLandroidx/compose/foundation/ScrollingLayoutNode;->(Landroidx/compose/foundation/ScrollState;ZZ)V PLandroidx/compose/foundation/ScrollingLayoutNode;->(Landroidx/compose/foundation/ScrollState;ZZ)V HSPLandroidx/compose/foundation/ScrollingLayoutNode;->getScrollerState()Landroidx/compose/foundation/ScrollState; PLandroidx/compose/foundation/ScrollingLayoutNode;->getScrollerState()Landroidx/compose/foundation/ScrollState; HSPLandroidx/compose/foundation/ScrollingLayoutNode;->isReversed()Z PLandroidx/compose/foundation/ScrollingLayoutNode;->isReversed()Z HSPLandroidx/compose/foundation/ScrollingLayoutNode;->isVertical()Z PLandroidx/compose/foundation/ScrollingLayoutNode;->isVertical()Z HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/ScrollingLayoutNode$measure$1; HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->(Landroidx/compose/foundation/ScrollingLayoutNode;ILandroidx/compose/ui/layout/Placeable;)V PLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->(Landroidx/compose/foundation/ScrollingLayoutNode;ILandroidx/compose/ui/layout/Placeable;)V HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/AnchoredDragFinishedSignal; Landroidx/compose/foundation/gestures/AndroidConfig; HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V PLandroidx/compose/foundation/gestures/AndroidConfig;->()V HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V PLandroidx/compose/foundation/gestures/AndroidConfig;->()V Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue; HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->()V HPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->()V Landroidx/compose/foundation/gestures/BringIntoViewScroller; HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller;->()V PLandroidx/compose/foundation/gestures/BringIntoViewScroller;->()V Landroidx/compose/foundation/gestures/BringIntoViewScroller$Companion; HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->()V PLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->()V HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->()V PLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->()V HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultBringIntoViewScroller$foundation_release()Landroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1; PLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultBringIntoViewScroller$foundation_release()Landroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1; HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec; PLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec; Landroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1; HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;->()V PLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;->()V HSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec; PLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec; Landroidx/compose/foundation/gestures/ContentInViewNode; HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewScroller;)V PLandroidx/compose/foundation/gestures/ContentInViewNode;->(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewScroller;)V HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V HPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V Landroidx/compose/foundation/gestures/ContentInViewNode$Request; Landroidx/compose/foundation/gestures/DefaultFlingBehavior; HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;)V HPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;)V HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->setFlingDecay(Landroidx/compose/animation/core/DecayAnimationSpec;)V PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->setFlingDecay(Landroidx/compose/animation/core/DecayAnimationSpec;)V Landroidx/compose/foundation/gestures/DefaultScrollableState; HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/foundation/gestures/DefaultScrollableState;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/gestures/DefaultScrollableState;->isScrollInProgress()Z Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1; HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V PLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V PLandroidx/compose/foundation/gestures/DragEvent$DragCancelled;->()V PLandroidx/compose/foundation/gestures/DragEvent$DragCancelled;->()V PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->()V PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1; PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->(I)V Landroidx/compose/foundation/gestures/DragScope; PLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; HPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V Landroidx/compose/foundation/gestures/DraggableKt$draggable$1; HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;->(Lkotlin/coroutines/Continuation;I)V PLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;->(Lkotlin/coroutines/Continuation;I)V Landroidx/compose/foundation/gestures/DraggableKt$draggable$3; HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->()V PLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->()V HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->(I)V PLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->(I)V PLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean; PLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/DraggableNode; HSPLandroidx/compose/foundation/gestures/DraggableNode;->(Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)V HPLandroidx/compose/foundation/gestures/DraggableNode;->(Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)V PLandroidx/compose/foundation/gestures/DraggableNode;->access$getCanDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getChannel$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlinx/coroutines/channels/Channel; PLandroidx/compose/foundation/gestures/DraggableNode;->access$getChannel$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlinx/coroutines/channels/Channel; PLandroidx/compose/foundation/gestures/DraggableNode;->access$getEnabled$p(Landroidx/compose/foundation/gestures/DraggableNode;)Z PLandroidx/compose/foundation/gestures/DraggableNode;->access$getOrientation$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/foundation/gestures/Orientation; PLandroidx/compose/foundation/gestures/DraggableNode;->access$getStartDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0; PLandroidx/compose/foundation/gestures/DraggableNode;->access$getVelocityTracker$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/ui/input/pointer/util/VelocityTracker; PLandroidx/compose/foundation/gestures/DraggableNode;->access$get_canDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1; PLandroidx/compose/foundation/gestures/DraggableNode;->access$get_startDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V PLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V HSPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V HPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V HSPLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V PLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V PLandroidx/compose/foundation/gestures/DraggableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V Landroidx/compose/foundation/gestures/DraggableNode$onAttach$1; HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1; HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/DraggableState; Landroidx/compose/foundation/gestures/FlingBehavior; Landroidx/compose/foundation/gestures/ForEachGestureKt; PLandroidx/compose/foundation/gestures/ForEachGestureKt;->()V HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState; PLandroidx/compose/foundation/gestures/ForEachGestureKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState; HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect; HPLandroidx/compose/foundation/gestures/ForEachGestureKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect; Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3; HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->(Lkotlin/coroutines/Continuation;)V Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2; HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider; HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->(Z)V PLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->(Z)V PLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getProvidedValues()Landroidx/compose/ui/text/StringKt; Landroidx/compose/foundation/gestures/MouseWheelScrollNode; HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->(Landroidx/compose/foundation/gestures/ScrollingLogic;)V HPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->(Landroidx/compose/foundation/gestures/ScrollingLogic;)V HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V PLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V Landroidx/compose/foundation/gestures/MouseWheelScrollNode$1; HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/Orientation; HSPLandroidx/compose/foundation/gestures/Orientation;->()V PLandroidx/compose/foundation/gestures/Orientation;->()V HSPLandroidx/compose/foundation/gestures/Orientation;->(Ljava/lang/String;I)V PLandroidx/compose/foundation/gestures/Orientation;->(Ljava/lang/String;I)V Landroidx/compose/foundation/gestures/PressGestureScope; Landroidx/compose/foundation/gestures/PressGestureScopeImpl; HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->(Landroidx/compose/ui/unit/Density;)V PLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V PLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1; HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1; HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/ScrollConfig; Landroidx/compose/foundation/gestures/ScrollDraggableState; HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;->(Landroidx/compose/foundation/gestures/ScrollingLogic;)V PLandroidx/compose/foundation/gestures/ScrollDraggableState;->(Landroidx/compose/foundation/gestures/ScrollingLogic;)V Landroidx/compose/foundation/gestures/ScrollScope; Landroidx/compose/foundation/gestures/ScrollableElement; HSPLandroidx/compose/foundation/gestures/ScrollableElement;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V HPLandroidx/compose/foundation/gestures/ScrollableElement;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V HSPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/gestures/ScrollableGesturesNode; HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V HPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V PLandroidx/compose/foundation/gestures/ScrollableGesturesNode;->getScrollLogic()Landroidx/compose/foundation/gestures/ScrollingLogic; Landroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1; HSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;->(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;->(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V Landroidx/compose/foundation/gestures/ScrollableKt; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->()V PLandroidx/compose/foundation/gestures/ScrollableKt;->()V PLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getCanDragCalculation$p()Lkotlin/jvm/functions/Function1; PLandroidx/compose/foundation/gestures/ScrollableKt;->access$getCanDragCalculation$p()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpOnDragStarted$p()Lkotlin/jvm/functions/Function3; PLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpOnDragStarted$p()Lkotlin/jvm/functions/Function3; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1; PLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getUnityDensity$p()Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1; PLandroidx/compose/foundation/gestures/ScrollableKt;->access$getUnityDensity$p()Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1; PLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal; PLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->()V PLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->()V Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V PLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V PLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;->()V PLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;->()V Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1; HSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->()V PLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->()V HSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F PLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F PLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/ScrollableNestedScrollConnection; HSPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V PLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V Landroidx/compose/foundation/gestures/ScrollableNode; HSPLandroidx/compose/foundation/gestures/ScrollableNode;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V HPLandroidx/compose/foundation/gestures/ScrollableNode;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V HSPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V PLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V HSPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V HPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V Landroidx/compose/foundation/gestures/ScrollableNode$1; HSPLandroidx/compose/foundation/gestures/ScrollableNode$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/gestures/ScrollableNode$1;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/gestures/ScrollableNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/ScrollableNode$onAttach$1; HSPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->(ILandroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->(ILandroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()Ljava/lang/Boolean; HSPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()V PLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()V Landroidx/compose/foundation/gestures/ScrollableState; Landroidx/compose/foundation/gestures/ScrollingLogic; HSPLandroidx/compose/foundation/gestures/ScrollingLogic;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V HPLandroidx/compose/foundation/gestures/ScrollingLogic;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V PLandroidx/compose/foundation/gestures/ScrollingLogic;->shouldScrollImmediately()Z Landroidx/compose/foundation/gestures/TapGestureDetectorKt; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->()V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->()V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapAndPress(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapAndPress(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->(Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2; HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->(Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/gestures/UpdatableAnimationState; HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->()V PLandroidx/compose/foundation/gestures/UpdatableAnimationState;->()V HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->(Landroidx/compose/animation/core/AnimationSpec;)V PLandroidx/compose/foundation/gestures/UpdatableAnimationState;->(Landroidx/compose/animation/core/AnimationSpec;)V Landroidx/compose/foundation/interaction/DragInteractionKt; HSPLandroidx/compose/foundation/interaction/DragInteractionKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource; HPLandroidx/compose/foundation/interaction/DragInteractionKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource; HSPLandroidx/compose/foundation/interaction/DragInteractionKt;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/foundation/interaction/DragInteractionKt;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState; Landroidx/compose/foundation/interaction/DragInteractionKt$collectIsDraggedAsState$1$1$1; HSPLandroidx/compose/foundation/interaction/DragInteractionKt$collectIsDraggedAsState$1$1$1;->(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V PLandroidx/compose/foundation/interaction/DragInteractionKt$collectIsDraggedAsState$1$1$1;->(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V Landroidx/compose/foundation/interaction/Interaction; Landroidx/compose/foundation/interaction/InteractionSource; Landroidx/compose/foundation/interaction/MutableInteractionSource; Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl; HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->()V HPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->()V HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow; PLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow; Landroidx/compose/foundation/interaction/PressInteraction$Cancel; Landroidx/compose/foundation/interaction/PressInteraction$Press; HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->(J)V HPLandroidx/compose/foundation/interaction/PressInteraction$Press;->(J)V HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J PLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J Landroidx/compose/foundation/interaction/PressInteraction$Release; HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V HPLandroidx/compose/foundation/interaction/PressInteraction$Release;->(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press; PLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press; Landroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1; HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/AddedInsets; HSPLandroidx/compose/foundation/layout/AddedInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V PLandroidx/compose/foundation/layout/AddedInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V HSPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/AddedInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/AddedInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/AddedInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/AddedInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I Landroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1; HSPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;->(Landroidx/compose/ui/layout/AlignmentLine;FIIILandroidx/compose/ui/layout/Placeable;I)V PLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;->(Landroidx/compose/ui/layout/AlignmentLine;FIIILandroidx/compose/ui/layout/Placeable;I)V HSPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/AlignmentLineOffsetDpElement; HSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->(Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->(Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/AlignmentLineOffsetDpNode; HSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;->(Landroidx/compose/ui/layout/AlignmentLine;FF)V PLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;->(Landroidx/compose/ui/layout/AlignmentLine;FF)V HSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->(ILjava/lang/String;)V HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->(ILjava/lang/String;)V HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets; HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets; HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V HPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V Landroidx/compose/foundation/layout/Arrangement; HSPLandroidx/compose/foundation/layout/Arrangement;->()V PLandroidx/compose/foundation/layout/Arrangement;->()V HSPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$Center$1; PLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$Center$1; HSPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$End$1; PLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$End$1; HSPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$End$1; PLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$End$1; HSPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Top$1; PLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Top$1; HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V HPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V HPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V PLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V HSPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$SpacedAligned; PLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$SpacedAligned; Landroidx/compose/foundation/layout/Arrangement$Center$1; HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->(I)V PLandroidx/compose/foundation/layout/Arrangement$Center$1;->(I)V HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V PLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V PLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F PLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F Landroidx/compose/foundation/layout/Arrangement$End$1; HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->(I)V PLandroidx/compose/foundation/layout/Arrangement$End$1;->(I)V HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V Landroidx/compose/foundation/layout/Arrangement$Horizontal; HSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F HPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F Landroidx/compose/foundation/layout/Arrangement$SpacedAligned; HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(FZLkotlin/jvm/functions/Function2;)V PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(FZLkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F PLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F Landroidx/compose/foundation/layout/Arrangement$Top$1; HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->(I)V PLandroidx/compose/foundation/layout/Arrangement$Top$1;->(I)V HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V PLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V Landroidx/compose/foundation/layout/Arrangement$Vertical; HSPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F PLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F Landroidx/compose/foundation/layout/Arrangement$spacedBy$1; HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V PLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->(I)V PLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->(I)V Landroidx/compose/foundation/layout/Arrangement$spacedBy$2; HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J PLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J Landroidx/compose/foundation/layout/Arrangement$spacedBy$3; HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$3;->(Landroidx/compose/ui/Alignment$Vertical;I)V PLandroidx/compose/foundation/layout/Arrangement$spacedBy$3;->(Landroidx/compose/ui/Alignment$Vertical;I)V Landroidx/compose/foundation/layout/BoxChildDataElement; HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->(Landroidx/compose/ui/BiasAlignment;ZLkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/layout/BoxChildDataElement;->(Landroidx/compose/ui/BiasAlignment;ZLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/foundation/layout/BoxChildDataNode; HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->(Landroidx/compose/ui/Alignment;Z)V PLandroidx/compose/foundation/layout/BoxChildDataNode;->(Landroidx/compose/ui/Alignment;Z)V HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getAlignment()Landroidx/compose/ui/Alignment; PLandroidx/compose/foundation/layout/BoxChildDataNode;->getAlignment()Landroidx/compose/ui/Alignment; HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getMatchParentSize()Z PLandroidx/compose/foundation/layout/BoxChildDataNode;->getMatchParentSize()Z HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/BoxKt; HSPLandroidx/compose/foundation/layout/BoxKt;->()V PLandroidx/compose/foundation/layout/BoxKt;->()V HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z PLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z HSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V HPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy; Landroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1; HSPLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;I)V PLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;I)V HSPLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/layout/BoxKt$Box$2; HSPLandroidx/compose/foundation/layout/BoxKt$Box$2;->(Landroidx/compose/ui/Modifier;I)V PLandroidx/compose/foundation/layout/BoxKt$Box$2;->(Landroidx/compose/ui/Modifier;I)V Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1; HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V PLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V PLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1; HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->(Landroidx/compose/ui/Alignment;Z)V PLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->(Landroidx/compose/ui/Alignment;Z)V HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2; HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/BoxScope; Landroidx/compose/foundation/layout/BoxScopeInstance; HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->()V PLandroidx/compose/foundation/layout/BoxScopeInstance;->()V HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->()V PLandroidx/compose/foundation/layout/BoxScopeInstance;->()V HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1; HSPLandroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;->(Ljava/lang/Object;I)V Landroidx/compose/foundation/layout/ColumnKt; HSPLandroidx/compose/foundation/layout/ColumnKt;->()V PLandroidx/compose/foundation/layout/ColumnKt;->()V HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/BiasAlignment$Horizontal;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/BiasAlignment$Horizontal;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy; Landroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1; HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/ColumnScope; Landroidx/compose/foundation/layout/ColumnScopeInstance; HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V PLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V PLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V Landroidx/compose/foundation/layout/ConsumedInsetsModifier; HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V HPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment; HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I Landroidx/compose/foundation/layout/ExcludeInsets; HSPLandroidx/compose/foundation/layout/ExcludeInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V HPLandroidx/compose/foundation/layout/ExcludeInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V HSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I PLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I PLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I PLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I Landroidx/compose/foundation/layout/FillElement; HSPLandroidx/compose/foundation/layout/FillElement;->(IF)V PLandroidx/compose/foundation/layout/FillElement;->(IF)V HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/FillElement$Companion; HSPLandroidx/compose/foundation/layout/FillElement$Companion;->()V PLandroidx/compose/foundation/layout/FillElement$Companion;->()V HSPLandroidx/compose/foundation/layout/FillElement$Companion;->()V PLandroidx/compose/foundation/layout/FillElement$Companion;->()V HSPLandroidx/compose/foundation/layout/FillElement$Companion;->access$systemInsets(ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; PLandroidx/compose/foundation/layout/FillElement$Companion;->access$systemInsets(ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/FillElement$Companion;->access$valueInsetsIgnoringVisibility(ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; PLandroidx/compose/foundation/layout/FillElement$Companion;->access$valueInsetsIgnoringVisibility(ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; HSPLandroidx/compose/foundation/layout/FillElement$Companion;->current(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsetsHolder; HPLandroidx/compose/foundation/layout/FillElement$Companion;->current(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsetsHolder; HSPLandroidx/compose/foundation/layout/FillElement$Companion;->height(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentElement; PLandroidx/compose/foundation/layout/FillElement$Companion;->height(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentElement; HSPLandroidx/compose/foundation/layout/FillElement$Companion;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement; PLandroidx/compose/foundation/layout/FillElement$Companion;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement; Landroidx/compose/foundation/layout/FillNode; HSPLandroidx/compose/foundation/layout/FillNode;->(IF)V HPLandroidx/compose/foundation/layout/FillNode;->(IF)V HSPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/FillNode$measure$1; HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;I)V PLandroidx/compose/foundation/layout/FillNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;I)V HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/FixedIntInsets; HSPLandroidx/compose/foundation/layout/FixedIntInsets;->(IIII)V HPLandroidx/compose/foundation/layout/FixedIntInsets;->(IIII)V HSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I PLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I PLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I PLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I PLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I Landroidx/compose/foundation/layout/InsetsConsumingModifier; HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->()V PLandroidx/compose/foundation/layout/InsetsConsumingModifier;->()V HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; HPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Ljava/lang/Object; HPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Ljava/lang/Object; HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V PLandroidx/compose/foundation/layout/InsetsConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V Landroidx/compose/foundation/layout/InsetsListener; HSPLandroidx/compose/foundation/layout/InsetsListener;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V PLandroidx/compose/foundation/layout/InsetsListener;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V HSPLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/compose/foundation/layout/InsetsListener;->onViewAttachedToWindow(Landroid/view/View;)V PLandroidx/compose/foundation/layout/InsetsListener;->onViewAttachedToWindow(Landroid/view/View;)V Landroidx/compose/foundation/layout/InsetsPaddingModifier; HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;)V PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;)V HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; PLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V HPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V Landroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1; HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->(IILandroidx/compose/ui/layout/Placeable;)V PLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->(IILandroidx/compose/ui/layout/Placeable;)V HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/InsetsPaddingValues; HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)V PLandroidx/compose/foundation/layout/InsetsPaddingValues;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateBottomPadding-D9Ej5fM()F HPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateBottomPadding-D9Ej5fM()F HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F HPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F HPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F PLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F Landroidx/compose/foundation/layout/InsetsValues; HSPLandroidx/compose/foundation/layout/InsetsValues;->(IIII)V HPLandroidx/compose/foundation/layout/InsetsValues;->(IIII)V HSPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/LayoutWeightElement; HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->(FZ)V HPLandroidx/compose/foundation/layout/LayoutWeightElement;->(FZ)V HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/LayoutWeightElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/LayoutWeightNode; HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->(FZ)V HPLandroidx/compose/foundation/layout/LayoutWeightNode;->(FZ)V HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/LimitInsets; HSPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)V HPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)V HSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I Landroidx/compose/foundation/layout/MutableWindowInsets; HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->()V HPLandroidx/compose/foundation/layout/MutableWindowInsets;->()V HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/MutableWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/MutableWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/MutableWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I PLandroidx/compose/foundation/layout/MutableWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->setInsets(Landroidx/compose/foundation/layout/WindowInsets;)V HPLandroidx/compose/foundation/layout/MutableWindowInsets;->setInsets(Landroidx/compose/foundation/layout/WindowInsets;)V Landroidx/compose/foundation/layout/OffsetKt; HSPLandroidx/compose/foundation/layout/OffsetKt;->()V PLandroidx/compose/foundation/layout/OffsetKt;->()V HSPLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-YgX7TsA$default(FFI)Landroidx/compose/foundation/layout/PaddingValuesImpl; PLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-YgX7TsA$default(FFI)Landroidx/compose/foundation/layout/PaddingValuesImpl; HSPLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-a9UjIt4$default(FFFFI)Landroidx/compose/foundation/layout/PaddingValuesImpl; PLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-a9UjIt4$default(FFFFI)Landroidx/compose/foundation/layout/PaddingValuesImpl; HSPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/foundation/layout/OffsetKt;->WindowInsets$default(II)Landroidx/compose/foundation/layout/WindowInsets; PLandroidx/compose/foundation/layout/OffsetKt;->WindowInsets$default(II)Landroidx/compose/foundation/layout/WindowInsets; HSPLandroidx/compose/foundation/layout/OffsetKt;->access$getHorizontal$cp()I PLandroidx/compose/foundation/layout/OffsetKt;->access$getHorizontal$cp()I HSPLandroidx/compose/foundation/layout/OffsetKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)Landroidx/compose/foundation/layout/PaddingValues; PLandroidx/compose/foundation/layout/OffsetKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)Landroidx/compose/foundation/layout/PaddingValues; HSPLandroidx/compose/foundation/layout/OffsetKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F PLandroidx/compose/foundation/layout/OffsetKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F HSPLandroidx/compose/foundation/layout/OffsetKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F PLandroidx/compose/foundation/layout/OffsetKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F HSPLandroidx/compose/foundation/layout/OffsetKt;->constructor-impl(JI)J HPLandroidx/compose/foundation/layout/OffsetKt;->constructor-impl(JI)J HSPLandroidx/compose/foundation/layout/OffsetKt;->copy-yUG9Ft0$default(JIII)J HPLandroidx/compose/foundation/layout/OffsetKt;->copy-yUG9Ft0$default(JIII)J HSPLandroidx/compose/foundation/layout/OffsetKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; PLandroidx/compose/foundation/layout/OffsetKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; HSPLandroidx/compose/foundation/layout/OffsetKt;->getNavigationBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; PLandroidx/compose/foundation/layout/OffsetKt;->getNavigationBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/OffsetKt;->getSystemBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; HPLandroidx/compose/foundation/layout/OffsetKt;->getSystemBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/OffsetKt;->offset(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/OffsetKt;->offset(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets; PLandroidx/compose/foundation/layout/OffsetKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets; HSPLandroidx/compose/foundation/layout/OffsetKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/OffsetKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->paddingFrom-4j6BHR0$default(Landroidx/compose/ui/Modifier$Companion;Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFI)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/OffsetKt;->paddingFrom-4j6BHR0$default(Landroidx/compose/ui/Modifier$Companion;Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFI)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4$default(Landroidx/compose/ui/Modifier$Companion;F)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4$default(Landroidx/compose/ui/Modifier$Companion;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4(Landroidx/compose/ui/Modifier$Companion;FF)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4(Landroidx/compose/ui/Modifier$Companion;FF)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J HPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J HSPLandroidx/compose/foundation/layout/OffsetKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; PLandroidx/compose/foundation/layout/OffsetKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; Landroidx/compose/foundation/layout/OffsetKt$offset$1; HSPLandroidx/compose/foundation/layout/OffsetKt$offset$1;->(FFI)V HPLandroidx/compose/foundation/layout/OffsetKt$offset$1;->(FFI)V Landroidx/compose/foundation/layout/OffsetKt$offset$2; HSPLandroidx/compose/foundation/layout/OffsetKt$offset$2;->(ILkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/layout/OffsetKt$offset$2;->(ILkotlin/jvm/functions/Function1;)V Landroidx/compose/foundation/layout/OffsetNode$measure$1; HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->(Landroidx/compose/foundation/layout/OffsetPxNode;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;)V PLandroidx/compose/foundation/layout/OffsetNode$measure$1;->(Landroidx/compose/foundation/layout/OffsetPxNode;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;)V HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V PLandroidx/compose/foundation/layout/OffsetNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/ui/layout/MeasureScope;I)V HPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/ui/layout/MeasureScope;I)V HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/OffsetPxElement; HSPLandroidx/compose/foundation/layout/OffsetPxElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)V PLandroidx/compose/foundation/layout/OffsetPxElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)V HSPLandroidx/compose/foundation/layout/OffsetPxElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/layout/OffsetPxElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/foundation/layout/OffsetPxNode; HSPLandroidx/compose/foundation/layout/OffsetPxNode;->(ZLkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/layout/OffsetPxNode;->(ZLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/layout/OffsetPxNode;->getOffset()Lkotlin/jvm/functions/Function1; PLandroidx/compose/foundation/layout/OffsetPxNode;->getOffset()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/foundation/layout/OffsetPxNode;->getRtlAware()Z PLandroidx/compose/foundation/layout/OffsetPxNode;->getRtlAware()Z HSPLandroidx/compose/foundation/layout/OffsetPxNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; PLandroidx/compose/foundation/layout/OffsetPxNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/PaddingElement; HSPLandroidx/compose/foundation/layout/PaddingElement;->(FFFFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/foundation/layout/PaddingElement;->(FFFFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/PaddingKt$padding$1; HSPLandroidx/compose/foundation/layout/PaddingKt$padding$1;->(FFFF)V HPLandroidx/compose/foundation/layout/PaddingKt$padding$1;->(FFFF)V Landroidx/compose/foundation/layout/PaddingNode; HSPLandroidx/compose/foundation/layout/PaddingNode;->(FFFFZ)V HPLandroidx/compose/foundation/layout/PaddingNode;->(FFFFZ)V HSPLandroidx/compose/foundation/layout/PaddingNode;->getRtlAware()Z PLandroidx/compose/foundation/layout/PaddingNode;->getRtlAware()Z HSPLandroidx/compose/foundation/layout/PaddingNode;->getStart-D9Ej5fM()F PLandroidx/compose/foundation/layout/PaddingNode;->getStart-D9Ej5fM()F HSPLandroidx/compose/foundation/layout/PaddingNode;->getTop-D9Ej5fM()F PLandroidx/compose/foundation/layout/PaddingNode;->getTop-D9Ej5fM()F HSPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/PaddingValues; Landroidx/compose/foundation/layout/PaddingValuesConsumingModifier; HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V PLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->calculateInsets(Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; PLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->calculateInsets(Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/PaddingValuesElement; HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;)V HPLandroidx/compose/foundation/layout/PaddingValuesElement;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;)V HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/PaddingValuesElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/PaddingValuesImpl; HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFF)V HPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFF)V HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F PLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F PLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F PLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F PLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/PaddingValuesInsets; HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->(Landroidx/compose/foundation/layout/PaddingValues;)V PLandroidx/compose/foundation/layout/PaddingValuesInsets;->(Landroidx/compose/foundation/layout/PaddingValues;)V PLandroidx/compose/foundation/layout/PaddingValuesInsets;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getTop(Landroidx/compose/ui/unit/Density;)I HPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getTop(Landroidx/compose/ui/unit/Density;)I Landroidx/compose/foundation/layout/PaddingValuesModifier; HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V PLandroidx/compose/foundation/layout/PaddingValuesModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues; PLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues; HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/RowColumnImplKt; HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData; PLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData; HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F PLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1; HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/OffsetKt;)V PLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/OffsetKt;)V HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->(IIII[I)V PLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->(IIII[I)V HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I PLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I PLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I PLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I PLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I PLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I Landroidx/compose/foundation/layout/RowColumnMeasurementHelper; HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V HPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I PLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; HPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V HPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V Landroidx/compose/foundation/layout/RowColumnParentData; HSPLandroidx/compose/foundation/layout/RowColumnParentData;->()V PLandroidx/compose/foundation/layout/RowColumnParentData;->()V HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/OffsetKt; PLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/OffsetKt; HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z PLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F PLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V PLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V PLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V Landroidx/compose/foundation/layout/RowKt; HSPLandroidx/compose/foundation/layout/RowKt;->()V PLandroidx/compose/foundation/layout/RowKt;->()V HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy; Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1; HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V PLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->(I)V PLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->(I)V HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1; HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;I)V PLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;I)V HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/RowScope; Landroidx/compose/foundation/layout/RowScopeInstance; HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V PLandroidx/compose/foundation/layout/RowScopeInstance;->()V HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V PLandroidx/compose/foundation/layout/RowScopeInstance;->()V HSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/layout/SizeElement; HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;I)V HPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;I)V HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/SizeKt; HSPLandroidx/compose/foundation/layout/SizeKt;->()V PLandroidx/compose/foundation/layout/SizeKt;->()V HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->requiredSize-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->requiredSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;I)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;I)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/layout/SizeNode; HSPLandroidx/compose/foundation/layout/SizeNode;->(FFFFZ)V HPLandroidx/compose/foundation/layout/SizeNode;->(FFFFZ)V HSPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J HPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J HSPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/SpacerMeasurePolicy; HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V PLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V PLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1; HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V PLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->(I)V PLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->(I)V HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/UnionInsets; HSPLandroidx/compose/foundation/layout/UnionInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V PLandroidx/compose/foundation/layout/UnionInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V HSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/UnspecifiedConstraintsElement; HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->(FF)V HPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->(FF)V HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode; HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->(FF)V PLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->(FF)V HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/ValueInsets; HSPLandroidx/compose/foundation/layout/ValueInsets;->(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V HPLandroidx/compose/foundation/layout/ValueInsets;->(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V HSPLandroidx/compose/foundation/layout/ValueInsets;->setValue$foundation_layout_release(Landroidx/compose/foundation/layout/InsetsValues;)V HPLandroidx/compose/foundation/layout/ValueInsets;->setValue$foundation_layout_release(Landroidx/compose/foundation/layout/InsetsValues;)V Landroidx/compose/foundation/layout/WindowInsets; HSPLandroidx/compose/foundation/layout/WindowInsets;->()V PLandroidx/compose/foundation/layout/WindowInsets;->()V Landroidx/compose/foundation/layout/WindowInsetsHolder; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->()V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->()V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroid/view/View;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroid/view/View;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap; PLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z PLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getNavigationBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; PLandroidx/compose/foundation/layout/WindowInsetsHolder;->getNavigationBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getStatusBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; PLandroidx/compose/foundation/layout/WindowInsetsHolder;->getStatusBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; PLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update$default(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->update$default(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroidx/core/view/WindowInsetsCompat;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationSource(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationSource(Landroidx/core/view/WindowInsetsCompat;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationTarget(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationTarget(Landroidx/core/view/WindowInsetsCompat;)V Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V PLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V HPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/foundation/layout/WindowInsetsPaddingKt; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->()V PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->()V HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->consumeWindowInsets(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->consumeWindowInsets(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal; PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->onConsumedWindowInsetsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->onConsumedWindowInsetsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V PLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->(Landroidx/compose/foundation/layout/WindowInsets;I)V HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->(Landroidx/compose/foundation/layout/WindowInsets;I)V HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/layout/WrapContentElement; HSPLandroidx/compose/foundation/layout/WrapContentElement;->(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;)V PLandroidx/compose/foundation/layout/WrapContentElement;->(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;)V HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/foundation/layout/WrapContentNode; HSPLandroidx/compose/foundation/layout/WrapContentNode;->(IZLkotlin/jvm/functions/Function2;)V PLandroidx/compose/foundation/layout/WrapContentNode;->(IZLkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/foundation/layout/WrapContentNode;->getAlignmentCallback()Lkotlin/jvm/functions/Function2; PLandroidx/compose/foundation/layout/WrapContentNode;->getAlignmentCallback()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/layout/WrapContentNode$measure$1; HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V PLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo; HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V Landroidx/compose/foundation/lazy/LazyDslKt; HSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V HPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V HSPLandroidx/compose/foundation/lazy/LazyDslKt;->ScrollPositionUpdater(ILandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/foundation/lazy/LazyDslKt;->ScrollPositionUpdater(ILandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function0;)V Landroidx/compose/foundation/lazy/LazyItemScopeImpl; HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V PLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V HPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V Landroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1; HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->(Landroidx/compose/foundation/lazy/LazyListState;Z)V PLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->(Landroidx/compose/foundation/lazy/LazyListState;Z)V HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; PLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; PLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getCanScrollForward()Z PLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getFirstVisibleItemIndex()I PLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getFirstVisibleItemScrollOffset()I Landroidx/compose/foundation/lazy/LazyListAnimateScrollScope; HSPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;->(Landroidx/compose/foundation/lazy/LazyListState;)V PLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;->(Landroidx/compose/foundation/lazy/LazyListState;)V Landroidx/compose/foundation/lazy/LazyListBeyondBoundsState; HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;->(Landroidx/compose/foundation/lazy/LazyListState;I)V PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;->(Landroidx/compose/foundation/lazy/LazyListState;I)V Landroidx/compose/foundation/lazy/LazyListInterval; HSPLandroidx/compose/foundation/lazy/LazyListInterval;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/foundation/lazy/LazyListInterval;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getItem()Lkotlin/jvm/functions/Function4; PLandroidx/compose/foundation/lazy/LazyListInterval;->getItem()Lkotlin/jvm/functions/Function4; HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getKey()Lkotlin/jvm/functions/Function1; PLandroidx/compose/foundation/lazy/LazyListInterval;->getKey()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getType()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/foundation/lazy/LazyListInterval;->getType()Lkotlin/jvm/functions/Function1; Landroidx/compose/foundation/lazy/LazyListIntervalContent; HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getHeaderIndexes()Ljava/util/List; PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getHeaderIndexes()Ljava/util/List; HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals$1()Landroidx/compose/foundation/lazy/layout/MutableIntervalList; HPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals$1()Landroidx/compose/foundation/lazy/layout/MutableIntervalList; HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->item(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->item(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$1; HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$3; HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListItemInfo; Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->()V HPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->()V HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;ZZZ)V HPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;ZZZ)V HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V PLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V Landroidx/compose/foundation/lazy/LazyListItemProvider; Landroidx/compose/foundation/lazy/LazyListItemProviderImpl; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListIntervalContent;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V HPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListIntervalContent;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->access$getIntervalContent$p(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;)Landroidx/compose/foundation/lazy/LazyListIntervalContent; PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->access$getIntervalContent$p(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;)Landroidx/compose/foundation/lazy/LazyListIntervalContent; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List; PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;I)V PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;I)V HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->(Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->(Ljava/lang/Object;)V HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->get()Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->get()Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->(Landroidx/compose/runtime/MutableState;)V PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->(Landroidx/compose/runtime/MutableState;)V HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1; HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1; HSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(ILandroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(ILandroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function0;)V Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1; HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;ZLandroidx/compose/foundation/layout/PaddingValues;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;ZLandroidx/compose/foundation/layout/PaddingValues;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2; HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JII)V HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JII)V HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1; HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/compose/foundation/lazy/LazyListMeasuredItem; HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/compose/foundation/lazy/LazyListMeasuredItem; HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getChildConstraints-msEJaDk()J PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getChildConstraints-msEJaDk()J Landroidx/compose/foundation/lazy/LazyListLayoutInfo; Landroidx/compose/foundation/lazy/LazyListMeasureKt; HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-qnDatfE(ILandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;ILjava/util/List;ZZLandroidx/compose/foundation/lazy/LazyListMeasureResult;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult; HPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-qnDatfE(ILandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;ILjava/util/List;ZZLandroidx/compose/foundation/lazy/LazyListMeasureResult;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult; Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8; HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;->(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListMeasuredItem;Z)V HPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;->(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListMeasuredItem;Z)V HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListMeasureResult; HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;IIILandroidx/compose/foundation/gestures/Orientation;II)V HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;IIILandroidx/compose/foundation/gestures/Orientation;II)V HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAfterContentPadding()I PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAfterContentPadding()I HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getBeforeContentPadding()I HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getBeforeContentPadding()I HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyListMeasuredItem; PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyListMeasuredItem; HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getViewportSize-YbymL2g()J PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getViewportSize-YbymL2g()J HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List; PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List; HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V HPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V Landroidx/compose/foundation/lazy/LazyListMeasuredItem; HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getCrossAxisSize()I HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getCrossAxisSize()I HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getIndex()I HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getIndex()I HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getKey()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getKey()Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset()I PLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset()I HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset-Bjo55l4(I)J PLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset-Bjo55l4(I)J HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getParentData(I)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getParentData(I)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getPlaceablesCount()I HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getPlaceablesCount()I HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSize()I PLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSize()I HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSizeWithSpacings()I HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSizeWithSpacings()I HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;Z)V HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;Z)V HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->position(III)V HPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->position(III)V Landroidx/compose/foundation/lazy/LazyListScope; HSPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V HPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V Landroidx/compose/foundation/lazy/LazyListScope$items$1; HSPLandroidx/compose/foundation/lazy/LazyListScope$items$1;->()V PLandroidx/compose/foundation/lazy/LazyListScope$items$1;->()V HSPLandroidx/compose/foundation/lazy/LazyListScope$items$1;->(I)V PLandroidx/compose/foundation/lazy/LazyListScope$items$1;->(I)V Landroidx/compose/foundation/lazy/LazyListScrollPosition; HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(III)V PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(III)V HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex()I HPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex()I HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getNearestRangeState()Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getNearestRangeState()Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I HPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update(II)V HPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update(II)V HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I Landroidx/compose/foundation/lazy/LazyListState; HSPLandroidx/compose/foundation/lazy/LazyListState;->()V PLandroidx/compose/foundation/lazy/LazyListState;->()V HSPLandroidx/compose/foundation/lazy/LazyListState;->(II)V HPLandroidx/compose/foundation/lazy/LazyListState;->(II)V HSPLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement$p(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement$p(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;Z)V HPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;Z)V HSPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; PLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; HSPLandroidx/compose/foundation/lazy/LazyListState;->getBeyondBoundsInfo$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; PLandroidx/compose/foundation/lazy/LazyListState;->getBeyondBoundsInfo$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; PLandroidx/compose/foundation/lazy/LazyListState;->getCanScrollForward()Z HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I PLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I PLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I HSPLandroidx/compose/foundation/lazy/LazyListState;->getHasLookaheadPassOccurred$foundation_release()Z PLandroidx/compose/foundation/lazy/LazyListState;->getHasLookaheadPassOccurred$foundation_release()Z HSPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; PLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; HSPLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo; PLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo; HSPLandroidx/compose/foundation/lazy/LazyListState;->getNearestRange$foundation_release()Lkotlin/ranges/IntRange; PLandroidx/compose/foundation/lazy/LazyListState;->getNearestRange$foundation_release()Lkotlin/ranges/IntRange; HSPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; PLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; HSPLandroidx/compose/foundation/lazy/LazyListState;->getPlacementAnimator$foundation_release()Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; PLandroidx/compose/foundation/lazy/LazyListState;->getPlacementAnimator$foundation_release()Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; HSPLandroidx/compose/foundation/lazy/LazyListState;->getPostLookaheadLayoutInfo$foundation_release()Landroidx/compose/foundation/lazy/LazyListMeasureResult; PLandroidx/compose/foundation/lazy/LazyListState;->getPostLookaheadLayoutInfo$foundation_release()Landroidx/compose/foundation/lazy/LazyListMeasureResult; HSPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; PLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; HSPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier; PLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier; HSPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F PLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F PLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z HSPLandroidx/compose/foundation/lazy/LazyListState;->setCoroutineScope$foundation_release(Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/foundation/lazy/LazyListState;->setCoroutineScope$foundation_release(Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V PLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V PLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release$default(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;)V HPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release$default(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;)V HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I PLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1; HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1; HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/node/LayoutNode;)V Landroidx/compose/foundation/lazy/LazyListStateKt; HSPLandroidx/compose/foundation/lazy/LazyListStateKt;->()V PLandroidx/compose/foundation/lazy/LazyListStateKt;->()V HSPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(ILandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListState; HPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(ILandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListState; Landroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1; HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->(II)V PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->(II)V HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/lazy/ParentSizeNode$measure$1; HSPLandroidx/compose/foundation/lazy/ParentSizeNode$measure$1;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/lazy/ParentSizeNode$measure$1;->(Ljava/lang/Object;I)V Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->()V PLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->()V HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->onGloballyPositioned()V PLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->onGloballyPositioned()V Landroidx/compose/foundation/lazy/layout/DefaultLazyKey; HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->()V PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->()V HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->(I)V PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->(I)V HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I HPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion; HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->()V PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->()V HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->()V PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->()V Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1; HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;->()V PLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;->()V Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V HPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I HPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyAnimateScrollScope; Landroidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode; Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->hasIntervals()Z PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->hasIntervals()Z Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval; Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;->()V Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState; Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;)Ljava/util/List; PLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;)Ljava/util/List; Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder; PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;Ljava/lang/Object;)Lkotlin/jvm/functions/Function2; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;Ljava/lang/Object;)Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0; PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2; PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContentType()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContentType()Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getIndex()I PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getIndex()I HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ILjava/lang/Object;I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ILjava/lang/Object;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$2; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider; Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;->()V Landroidx/compose/foundation/lazy/layout/LazyLayoutKt; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->()V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->getContentType(I)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->getContentType(I)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->isLookingAhead()Z HPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->isLookingAhead()Z HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; PLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I HPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->(III)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->(III)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->onDisposed()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->(Ljava/lang/Object;I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z PLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList$PinnedItem; Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle; Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher; Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest; Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float; PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;->(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;->(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1; HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;->(Lkotlin/reflect/KProperty0;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;->(Lkotlin/reflect/KProperty0;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/LinkedHashSet; PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/LinkedHashSet; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map; HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$3; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$3;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$3;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1; HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/MutableIntervalList; HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V HPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V HPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V HPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V HPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; HPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I PLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap; HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;)V HPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;)V HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeys$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)[Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeys$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)[Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeysStartIndex$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)I PLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeysStartIndex$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)I HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object; Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1; HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->(IILjava/util/HashMap;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V HPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->(IILjava/util/HashMap;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/relocation/BringIntoViewChildNode; HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->()V HPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->()V HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V Landroidx/compose/foundation/relocation/BringIntoViewKt; HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->()V PLandroidx/compose/foundation/relocation/BringIntoViewKt;->()V HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal; PLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal; Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1; HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V PLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V PLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V Landroidx/compose/foundation/relocation/BringIntoViewParent; Landroidx/compose/foundation/relocation/BringIntoViewRequester; Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl; HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->()V HPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->()V HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector; PLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector; Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt; HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester; PLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester; Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode; HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V PLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V HPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V HPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->updateRequester(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V HPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->updateRequester(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V Landroidx/compose/foundation/relocation/BringIntoViewResponder; Landroidx/compose/foundation/relocation/BringIntoViewResponderNode; HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->(Landroidx/compose/foundation/gestures/ContentInViewNode;)V PLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->(Landroidx/compose/foundation/gestures/ContentInViewNode;)V Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1; HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V HPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V Landroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1; HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V PLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V PLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/selection/SelectableKt; HSPLandroidx/compose/foundation/selection/SelectableKt;->selectable-O2vRcR0(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/foundation/selection/SelectableKt;->selectable-O2vRcR0(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/selection/SelectableKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/selection/SelectableKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Landroidx/compose/foundation/selection/SelectableKt$selectable$4$1; HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->(Z)V HPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->(Z)V HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/shape/CornerBasedShape; HSPLandroidx/compose/foundation/shape/CornerBasedShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V PLandroidx/compose/foundation/shape/CornerBasedShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt; HPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt; Landroidx/compose/foundation/shape/CornerSize; Landroidx/compose/foundation/shape/CornerSizeKt; HSPLandroidx/compose/foundation/shape/CornerSizeKt;->()V PLandroidx/compose/foundation/shape/CornerSizeKt;->()V HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize; PLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize; HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize; PLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize; Landroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1; HSPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;->()V PLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;->()V Landroidx/compose/foundation/shape/DpCornerSize; HSPLandroidx/compose/foundation/shape/DpCornerSize;->(F)V PLandroidx/compose/foundation/shape/DpCornerSize;->(F)V Landroidx/compose/foundation/shape/PercentCornerSize; HSPLandroidx/compose/foundation/shape/PercentCornerSize;->(F)V PLandroidx/compose/foundation/shape/PercentCornerSize;->(F)V HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F HPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V PLandroidx/compose/foundation/shape/RoundedCornerShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/BrushKt; HPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/BrushKt; HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z Landroidx/compose/foundation/shape/RoundedCornerShapeKt; HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->()V PLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->()V HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape; Landroidx/compose/foundation/text/BasicTextKt; HSPLandroidx/compose/foundation/text/BasicTextKt;->()V PLandroidx/compose/foundation/text/BasicTextKt;->()V HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/foundation/text/BasicTextKt;->ceilToIntPx(F)I HPLandroidx/compose/foundation/text/BasicTextKt;->ceilToIntPx(F)I HSPLandroidx/compose/foundation/text/BasicTextKt;->validateMinMaxLines(II)V HPLandroidx/compose/foundation/text/BasicTextKt;->validateMinMaxLines(II)V Landroidx/compose/foundation/text/BasicTextKt$BasicText$1; Landroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1; HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;I)V HPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;I)V HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/text/EmptyMeasurePolicy; HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V PLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V PLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/foundation/text/KeyMapping; Landroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1; HSPLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;->()V PLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;->()V Landroidx/compose/foundation/text/TextFieldKeyInput$1; HSPLandroidx/compose/foundation/text/TextFieldKeyInput$1;->()V PLandroidx/compose/foundation/text/TextFieldKeyInput$1;->()V HSPLandroidx/compose/foundation/text/TextFieldKeyInput$1;->(I)V PLandroidx/compose/foundation/text/TextFieldKeyInput$1;->(I)V HSPLandroidx/compose/foundation/text/TextFieldKeyInput$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/text/TextFieldKeyInput$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache; HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZII)V HPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZII)V HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getDidOverflow$foundation_release()Z PLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getDidOverflow$foundation_release()Z HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getLayoutSize-YbymL2g$foundation_release()J PLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getLayoutSize-YbymL2g$foundation_release()J HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getObserveFontChanges$foundation_release()V PLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getObserveFontChanges$foundation_release()V HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getParagraph$foundation_release()Landroidx/compose/ui/text/AndroidParagraph; PLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getParagraph$foundation_release()Landroidx/compose/ui/text/AndroidParagraph; HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/AndroidParagraph; HPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/AndroidParagraph; HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutWithConstraints-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Z HPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutWithConstraints-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Z HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V HPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphIntrinsics; HPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphIntrinsics; Landroidx/compose/foundation/text/modifiers/SelectionController; Landroidx/compose/foundation/text/modifiers/TextStringSimpleElement; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->update(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->doInvalidations(ZZZ)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->doInvalidations(ZZZ)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache; HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache; HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateDraw(Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/ui/text/TextStyle;)Z HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateDraw(Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/ui/text/TextStyle;)Z HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateLayoutRelatedArgs-HuAbxIM(Landroidx/compose/ui/text/TextStyle;IIZLandroidx/compose/ui/text/font/FontFamilyResolverImpl;I)Z HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateLayoutRelatedArgs-HuAbxIM(Landroidx/compose/ui/text/TextStyle;IIZLandroidx/compose/ui/text/font/FontFamilyResolverImpl;I)Z HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateText(Ljava/lang/String;)Z HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateText(Ljava/lang/String;)Z Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode$TextSubstitutionValue; Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$1; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$1;->(Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode;I)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$1;->(Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode;I)V Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$4; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$4;->(ILandroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$4;->(ILandroidx/compose/ui/Modifier$Node;)V Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1; HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;I)V PLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;I)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/foundation/text/selection/SelectionRegistrarImpl; Landroidx/compose/foundation/text/selection/SelectionRegistrarKt; HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->()V PLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->()V HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1; HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V PLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->(I)V PLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->(I)V HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object; Landroidx/compose/foundation/text/selection/TextSelectionColors; HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJ)V PLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJ)V Landroidx/compose/foundation/text/selection/TextSelectionColorsKt; HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->()V PLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->()V HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Landroidx/compose/material/ripple/AndroidRippleIndicationInstance; HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroid/view/ViewGroup;)V HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroid/view/ViewGroup;)V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V Landroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1; HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object; Landroidx/compose/material/ripple/CommonRippleIndicationInstance; Landroidx/compose/material/ripple/PlatformRipple; HSPLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/MutableState;)V PLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/MutableState;)V Landroidx/compose/material/ripple/Ripple; HSPLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/MutableState;)V PLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/MutableState;)V HSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance; HPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance; Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1; HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1; HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V HPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/material/ripple/RippleAlpha; HSPLandroidx/compose/material/ripple/RippleAlpha;->(FFFF)V PLandroidx/compose/material/ripple/RippleAlpha;->(FFFF)V HSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F PLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F Landroidx/compose/material/ripple/RippleAnimationKt; HSPLandroidx/compose/material/ripple/RippleAnimationKt;->()V PLandroidx/compose/material/ripple/RippleAnimationKt;->()V HSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F HPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F Landroidx/compose/material/ripple/RippleContainer; HSPLandroidx/compose/material/ripple/RippleContainer;->(Landroid/content/Context;)V HPLandroidx/compose/material/ripple/RippleContainer;->(Landroid/content/Context;)V PLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V HSPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; HPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; Landroidx/compose/material/ripple/RippleHostMap; HSPLandroidx/compose/material/ripple/RippleHostMap;->()V PLandroidx/compose/material/ripple/RippleHostMap;->()V HSPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; HPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; PLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V HSPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V HPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V Landroidx/compose/material/ripple/RippleHostView; PLandroidx/compose/material/ripple/RippleHostView;->$r8$lambda$4nztiuYeQHklB-09QfMAnp7Ay8E(Landroidx/compose/material/ripple/RippleHostView;)V HSPLandroidx/compose/material/ripple/RippleHostView;->()V PLandroidx/compose/material/ripple/RippleHostView;->()V HSPLandroidx/compose/material/ripple/RippleHostView;->(Landroid/content/Context;)V PLandroidx/compose/material/ripple/RippleHostView;->(Landroid/content/Context;)V HSPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V PLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V HPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V HSPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V HPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V HPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V HSPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V PLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V HPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V HSPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(FIJJ)V HPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(FIJJ)V Landroidx/compose/material/ripple/RippleIndicationInstance; HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->(ZLandroidx/compose/runtime/MutableState;)V PLandroidx/compose/material/ripple/RippleIndicationInstance;->(ZLandroidx/compose/runtime/MutableState;)V HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V PLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V Landroidx/compose/material/ripple/RippleKt; HSPLandroidx/compose/material/ripple/RippleKt;->()V PLandroidx/compose/material/ripple/RippleKt;->()V HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple; HPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple; Landroidx/compose/material/ripple/RippleTheme; Landroidx/compose/material/ripple/RippleThemeKt; HSPLandroidx/compose/material/ripple/RippleThemeKt;->()V PLandroidx/compose/material/ripple/RippleThemeKt;->()V HSPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1; HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V PLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V PLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V Landroidx/compose/material/ripple/StateLayer; HSPLandroidx/compose/material/ripple/StateLayer;->(ZLandroidx/compose/runtime/MutableState;)V HPLandroidx/compose/material/ripple/StateLayer;->(ZLandroidx/compose/runtime/MutableState;)V HSPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V HPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V Landroidx/compose/material/ripple/UnprojectedRipple; HSPLandroidx/compose/material/ripple/UnprojectedRipple;->(Z)V HPLandroidx/compose/material/ripple/UnprojectedRipple;->(Z)V HSPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect; HPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect; HSPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z HPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z HSPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V HPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V HSPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V PLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V Landroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper; HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V Landroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$3; HSPLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$3;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V PLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$3;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V Landroidx/compose/material3/AppBarKt; HSPLandroidx/compose/material3/AppBarKt;->()V PLandroidx/compose/material3/AppBarKt;->()V HSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/AppBarKt;->access$SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V PLandroidx/compose/material3/AppBarKt;->access$SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F PLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F HSPLandroidx/compose/material3/AppBarKt;->rememberTopAppBarState(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarState; HPLandroidx/compose/material3/AppBarKt;->rememberTopAppBarState(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarState; Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2; HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/internal/ComposableLambdaImpl;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V HPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/internal/ComposableLambdaImpl;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3; HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V HPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Landroidx/compose/runtime/Composer;I)V PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/AppBarKt$TopAppBar$1;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2; HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V HPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1; HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V PLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1; HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->(FFF)V PLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->(FFF)V HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Ljava/lang/Object; PLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/material3/BadgeKt; HSPLandroidx/compose/material3/BadgeKt;->()V PLandroidx/compose/material3/BadgeKt;->()V HSPLandroidx/compose/material3/BadgeKt;->BadgedBox(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/BadgeKt;->BadgedBox(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/BadgeKt;->getBadgeOffset()F PLandroidx/compose/material3/BadgeKt;->getBadgeOffset()F Landroidx/compose/material3/BadgeKt$BadgedBox$2$1; HSPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;->(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V PLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;->(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V HSPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/BadgeKt$BadgedBox$3; HSPLandroidx/compose/material3/BadgeKt$BadgedBox$3;->(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V PLandroidx/compose/material3/BadgeKt$BadgedBox$3;->(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V HSPLandroidx/compose/material3/BadgeKt$BadgedBox$3;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/material3/BadgeKt$BadgedBox$3;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1; HSPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V PLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V HSPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/BadgeKt$BadgedBox$4; HSPLandroidx/compose/material3/BadgeKt$BadgedBox$4;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;III)V PLandroidx/compose/material3/BadgeKt$BadgedBox$4;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;III)V Landroidx/compose/material3/ButtonColors; HSPLandroidx/compose/material3/ButtonColors;->(JJJJ)V PLandroidx/compose/material3/ButtonColors;->(JJJJ)V HSPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z PLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z Landroidx/compose/material3/ButtonDefaults; HSPLandroidx/compose/material3/ButtonDefaults;->()V PLandroidx/compose/material3/ButtonDefaults;->()V HSPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F PLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F HSPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F PLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F HSPLandroidx/compose/material3/ButtonDefaults;->getTextButtonContentPadding()Landroidx/compose/foundation/layout/PaddingValuesImpl; PLandroidx/compose/material3/ButtonDefaults;->getTextButtonContentPadding()Landroidx/compose/foundation/layout/PaddingValuesImpl; HSPLandroidx/compose/material3/ButtonDefaults;->getTextShape(Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape; PLandroidx/compose/material3/ButtonDefaults;->getTextShape(Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape; HSPLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ButtonColors; HPLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ButtonColors; Landroidx/compose/material3/ButtonKt$Button$3; HSPLandroidx/compose/material3/ButtonKt$Button$3;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V PLandroidx/compose/material3/ButtonKt$Button$3;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V HSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/ButtonKt$Button$3$1; HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->(IILandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;)V PLandroidx/compose/material3/ButtonKt$Button$3$1;->(IILandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;)V HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/ButtonKt$Button$4; HSPLandroidx/compose/material3/ButtonKt$Button$4;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;III)V PLandroidx/compose/material3/ButtonKt$Button$4;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;III)V Landroidx/compose/material3/CardKt; HSPLandroidx/compose/material3/CardKt;->()V PLandroidx/compose/material3/CardKt;->()V HSPLandroidx/compose/material3/CardKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->DropdownMenu-4kj-_NE(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->DropdownMenu-4kj-_NE(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->FadeInFadeOutWithScale(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->FadeInFadeOutWithScale(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->HorizontalDivider-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->HorizontalDivider-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->SnackbarHost(Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->SnackbarHost(Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/CardKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/CardKt;->access$getDefaultRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha; PLandroidx/compose/material3/CardKt;->access$getDefaultRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha; HSPLandroidx/compose/material3/CardKt;->getString-NWtq2-8(ILandroidx/compose/runtime/Composer;)Ljava/lang/String; HPLandroidx/compose/material3/CardKt;->getString-NWtq2-8(ILandroidx/compose/runtime/Composer;)Ljava/lang/String; HSPLandroidx/compose/material3/CardKt;->getSystemBarsForVisualComponents(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; HPLandroidx/compose/material3/CardKt;->getSystemBarsForVisualComponents(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; HSPLandroidx/compose/material3/CardKt;->pinnedScrollBehavior(Landroidx/compose/material3/TopAppBarState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarScrollBehavior; HPLandroidx/compose/material3/CardKt;->pinnedScrollBehavior(Landroidx/compose/material3/TopAppBarState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarScrollBehavior; HSPLandroidx/compose/material3/CardKt;->topAppBarColors-zjMxDiM(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors; HPLandroidx/compose/material3/CardKt;->topAppBarColors-zjMxDiM(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors; Landroidx/compose/material3/CardKt$Card$1; HSPLandroidx/compose/material3/CardKt$Card$1;->(IILkotlin/jvm/functions/Function3;)V HPLandroidx/compose/material3/CardKt$Card$1;->(IILkotlin/jvm/functions/Function3;)V HSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/CardKt$Card$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/CardKt$Card$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/ChipKt$Chip$1; HSPLandroidx/compose/material3/ChipKt$Chip$1;->()V PLandroidx/compose/material3/ChipKt$Chip$1;->()V HSPLandroidx/compose/material3/ChipKt$Chip$1;->(I)V PLandroidx/compose/material3/ChipKt$Chip$1;->(I)V HSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V PLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V HSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V PLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/ColorScheme; HSPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V HPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceBright-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceBright-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHigh-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHigh-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHighest-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHighest-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLow-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLow-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLowest-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLowest-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceDim-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceDim-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J HPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J PLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J HSPLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceBright-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceBright-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceContainer-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHigh-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHigh-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHighest-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHighest-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLow-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLow-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLowest-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLowest-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceDim-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceDim-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V HSPLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V PLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V Landroidx/compose/material3/ColorSchemeKt; HSPLandroidx/compose/material3/ColorSchemeKt;->()V PLandroidx/compose/material3/ColorSchemeKt;->()V HSPLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-RFCenO8(Landroidx/compose/material3/ColorScheme;JFLandroidx/compose/runtime/Composer;)J HPLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-RFCenO8(Landroidx/compose/material3/ColorScheme;JFLandroidx/compose/runtime/Composer;)J HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J HPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J HPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J HSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;I)J HPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;I)J HSPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/material3/ColorSchemeKt;->getValue(ILandroidx/compose/runtime/Composer;)J HPLandroidx/compose/material3/ColorSchemeKt;->getValue(ILandroidx/compose/runtime/Composer;)J HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-C-Xl9yA$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJI)Landroidx/compose/material3/ColorScheme; PLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-C-Xl9yA$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJI)Landroidx/compose/material3/ColorScheme; HSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J HPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J Landroidx/compose/material3/ComposableSingletons$SnackbarHostKt; HSPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;->()V PLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;->()V Landroidx/compose/material3/ContentColorKt; HSPLandroidx/compose/material3/ContentColorKt;->()V PLandroidx/compose/material3/ContentColorKt;->()V HSPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Landroidx/compose/material3/DateInputKt$DateInputContent$2; HSPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/DatePickerKt$Day$1$1; HSPLandroidx/compose/material3/DatePickerKt$Day$1$1;->(Ljava/lang/String;I)V PLandroidx/compose/material3/DatePickerKt$Day$1$1;->(Ljava/lang/String;I)V HSPLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V PLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HSPLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/DatePickerKt$WeekDays$2; HSPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->(IILjava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/material3/DatePickerKt$WeekDays$2;->(IILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Landroidx/compose/runtime/Composer;I)V PLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/DefaultPlatformTextStyle_androidKt; HSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->()V PLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->()V HSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle; PLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle; Landroidx/compose/material3/DividerDefaults; HSPLandroidx/compose/material3/DividerDefaults;->()V PLandroidx/compose/material3/DividerDefaults;->()V HSPLandroidx/compose/material3/DividerDefaults;->getColor(Landroidx/compose/runtime/Composer;)J PLandroidx/compose/material3/DividerDefaults;->getColor(Landroidx/compose/runtime/Composer;)J HSPLandroidx/compose/material3/DividerDefaults;->getThickness-D9Ej5fM()F PLandroidx/compose/material3/DividerDefaults;->getThickness-D9Ej5fM()F Landroidx/compose/material3/DividerKt$VerticalDivider$1$1; HSPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->(FJI)V PLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->(FJI)V HSPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HSPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/DividerKt$VerticalDivider$2; HSPLandroidx/compose/material3/DividerKt$VerticalDivider$2;->(Landroidx/compose/ui/Modifier;FJIII)V PLandroidx/compose/material3/DividerKt$VerticalDivider$2;->(Landroidx/compose/ui/Modifier;FJIII)V Landroidx/compose/material3/ExposedDropdownMenuKt$expandable$2$1$1; HSPLandroidx/compose/material3/ExposedDropdownMenuKt$expandable$2$1$1;->(Lkotlin/jvm/functions/Function0;I)V PLandroidx/compose/material3/ExposedDropdownMenuKt$expandable$2$1$1;->(Lkotlin/jvm/functions/Function0;I)V Landroidx/compose/material3/FadeInFadeOutState; HSPLandroidx/compose/material3/FadeInFadeOutState;->()V PLandroidx/compose/material3/FadeInFadeOutState;->()V HSPLandroidx/compose/material3/FadeInFadeOutState;->getCurrent()Ljava/lang/Object; PLandroidx/compose/material3/FadeInFadeOutState;->getCurrent()Ljava/lang/Object; HSPLandroidx/compose/material3/FadeInFadeOutState;->getItems()Ljava/util/ArrayList; PLandroidx/compose/material3/FadeInFadeOutState;->getItems()Ljava/util/ArrayList; HSPLandroidx/compose/material3/FadeInFadeOutState;->setCurrent(Ljava/lang/Object;)V PLandroidx/compose/material3/FadeInFadeOutState;->setCurrent(Ljava/lang/Object;)V HSPLandroidx/compose/material3/FadeInFadeOutState;->setScope(Landroidx/compose/runtime/RecomposeScopeImpl;)V PLandroidx/compose/material3/FadeInFadeOutState;->setScope(Landroidx/compose/runtime/RecomposeScopeImpl;)V Landroidx/compose/material3/IconButtonColors; HSPLandroidx/compose/material3/IconButtonColors;->(JJJJ)V PLandroidx/compose/material3/IconButtonColors;->(JJJJ)V HSPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; Landroidx/compose/material3/IconButtonKt$IconButton$3; HSPLandroidx/compose/material3/IconButtonKt$IconButton$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V PLandroidx/compose/material3/IconButtonKt$IconButton$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V Landroidx/compose/material3/IconKt; HSPLandroidx/compose/material3/IconKt;->()V PLandroidx/compose/material3/IconKt;->()V HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V Landroidx/compose/material3/IconKt$Icon$1; HSPLandroidx/compose/material3/IconKt$Icon$1;->(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;JIII)V PLandroidx/compose/material3/IconKt$Icon$1;->(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;JIII)V HSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/InteractiveComponentSizeKt; HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->()V PLandroidx/compose/material3/InteractiveComponentSizeKt;->()V HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J PLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; PLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Landroidx/compose/material3/MappedInteractionSource; HSPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;J)V HPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;J)V HSPLandroidx/compose/material3/MappedInteractionSource;->access$getMappedPresses$p(Landroidx/compose/material3/MappedInteractionSource;)Ljava/util/LinkedHashMap; PLandroidx/compose/material3/MappedInteractionSource;->access$getMappedPresses$p(Landroidx/compose/material3/MappedInteractionSource;)Ljava/util/LinkedHashMap; HSPLandroidx/compose/material3/MappedInteractionSource;->access$mapPress(Landroidx/compose/material3/MappedInteractionSource;Landroidx/compose/foundation/interaction/PressInteraction$Press;)Landroidx/compose/foundation/interaction/PressInteraction$Press; PLandroidx/compose/material3/MappedInteractionSource;->access$mapPress(Landroidx/compose/material3/MappedInteractionSource;Landroidx/compose/foundation/interaction/PressInteraction$Press;)Landroidx/compose/foundation/interaction/PressInteraction$Press; HSPLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow; PLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow; Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1; HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V HPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2; HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1; HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;->(Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;->(Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V Landroidx/compose/material3/MaterialRippleTheme; HSPLandroidx/compose/material3/MaterialRippleTheme;->()V PLandroidx/compose/material3/MaterialRippleTheme;->()V HSPLandroidx/compose/material3/MaterialRippleTheme;->()V PLandroidx/compose/material3/MaterialRippleTheme;->()V HSPLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J PLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J HSPLandroidx/compose/material3/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleAlpha; PLandroidx/compose/material3/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleAlpha; Landroidx/compose/material3/MaterialTheme; HSPLandroidx/compose/material3/MaterialTheme;->()V PLandroidx/compose/material3/MaterialTheme;->()V HSPLandroidx/compose/material3/MaterialTheme;->()V PLandroidx/compose/material3/MaterialTheme;->()V HSPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/Typography; HPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/Typography; Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2; HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V PLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V Landroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m$1(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m$1(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ILkotlin/jvm/functions/Function2;Landroidx/compose/runtime/ComposerImpl;)V HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ILkotlin/jvm/functions/Function2;Landroidx/compose/runtime/ComposerImpl;)V PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(JII)I HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/foundation/layout/Arrangement$Top$1;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/foundation/layout/Arrangement$Top$1;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;I)Ljava/lang/Object; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;I)Ljava/lang/Object; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;ILandroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;ILandroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/ui/graphics/vector/PathBuilder;FFFF)V PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/ui/graphics/vector/PathBuilder;FFFF)V HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)Lkotlin/reflect/KMutableProperty1; PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)Lkotlin/reflect/KMutableProperty1; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder; PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; HPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy; Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier; HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->(J)V HPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->(J)V HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1; HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->(IILandroidx/compose/ui/layout/Placeable;)V PLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->(IILandroidx/compose/ui/layout/Placeable;)V HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/NavigationBarDefaults; HSPLandroidx/compose/material3/NavigationBarDefaults;->()V PLandroidx/compose/material3/NavigationBarDefaults;->()V HSPLandroidx/compose/material3/NavigationBarDefaults;->getElevation-D9Ej5fM()F PLandroidx/compose/material3/NavigationBarDefaults;->getElevation-D9Ej5fM()F HSPLandroidx/compose/material3/NavigationBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsets; PLandroidx/compose/material3/NavigationBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsets; Landroidx/compose/material3/NavigationBarItemColors; HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJJJ)V HPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJJJ)V HSPLandroidx/compose/material3/NavigationBarItemColors;->getIndicatorColor-0d7_KjU$material3_release()J PLandroidx/compose/material3/NavigationBarItemColors;->getIndicatorColor-0d7_KjU$material3_release()J HSPLandroidx/compose/material3/NavigationBarItemColors;->iconColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State; HPLandroidx/compose/material3/NavigationBarItemColors;->iconColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State; HSPLandroidx/compose/material3/NavigationBarItemColors;->textColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State; HPLandroidx/compose/material3/NavigationBarItemColors;->textColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State; Landroidx/compose/material3/NavigationBarKt; HSPLandroidx/compose/material3/NavigationBarKt;->()V PLandroidx/compose/material3/NavigationBarKt;->()V HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F HPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F HSPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorHorizontalPadding$p()F PLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorHorizontalPadding$p()F HSPLandroidx/compose/material3/NavigationBarKt;->access$placeLabelAndIcon-zUg2_y0(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;JZF)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/material3/NavigationBarKt;->access$placeLabelAndIcon-zUg2_y0(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;JZF)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/material3/NavigationBarKt;->getIndicatorVerticalPadding()F PLandroidx/compose/material3/NavigationBarKt;->getIndicatorVerticalPadding()F Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->(Landroidx/compose/runtime/MutableIntState;I)V HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->(Landroidx/compose/runtime/MutableIntState;I)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$4; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;I)V HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;I)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;I)V HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;I)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;->(FLkotlin/jvm/functions/Function2;ZI)V PLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;->(FLkotlin/jvm/functions/Function2;ZI)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$3; Landroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1; HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IFFLandroidx/compose/ui/layout/Placeable;IFLandroidx/compose/ui/layout/Placeable;IFILandroidx/compose/ui/layout/MeasureScope;I)V HPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IFFLandroidx/compose/ui/layout/Placeable;IFLandroidx/compose/ui/layout/Placeable;IFILandroidx/compose/ui/layout/MeasureScope;I)V HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/NavigationRailItemColors; Landroidx/compose/material3/NavigationRailKt; Landroidx/compose/material3/PinnedScrollBehavior; HSPLandroidx/compose/material3/PinnedScrollBehavior;->(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/material3/PinnedScrollBehavior;->(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/material3/PinnedScrollBehavior;->getNestedScrollConnection()Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1; PLandroidx/compose/material3/PinnedScrollBehavior;->getNestedScrollConnection()Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1; HSPLandroidx/compose/material3/PinnedScrollBehavior;->getState()Landroidx/compose/material3/TopAppBarState; PLandroidx/compose/material3/PinnedScrollBehavior;->getState()Landroidx/compose/material3/TopAppBarState; Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1; HSPLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;->(Landroidx/compose/material3/PinnedScrollBehavior;)V HPLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;->(Landroidx/compose/material3/PinnedScrollBehavior;)V Landroidx/compose/material3/PlainTooltipPositionProvider; HSPLandroidx/compose/material3/PlainTooltipPositionProvider;->(I)V HPLandroidx/compose/material3/PlainTooltipPositionProvider;->(I)V Landroidx/compose/material3/PlainTooltipState; Landroidx/compose/material3/PlainTooltipStateImpl; HSPLandroidx/compose/material3/PlainTooltipStateImpl;->(Landroidx/compose/foundation/MutatorMutex;)V HPLandroidx/compose/material3/PlainTooltipStateImpl;->(Landroidx/compose/foundation/MutatorMutex;)V HSPLandroidx/compose/material3/PlainTooltipStateImpl;->isVisible()Z HPLandroidx/compose/material3/PlainTooltipStateImpl;->isVisible()Z HSPLandroidx/compose/material3/PlainTooltipStateImpl;->onDispose()V PLandroidx/compose/material3/PlainTooltipStateImpl;->onDispose()V Landroidx/compose/material3/ProgressIndicatorDefaults; HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->()V PLandroidx/compose/material3/ProgressIndicatorDefaults;->()V HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularIndeterminateStrokeCap-KaPHkGw()I PLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularIndeterminateStrokeCap-KaPHkGw()I HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularStrokeWidth-D9Ej5fM()F PLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularStrokeWidth-D9Ej5fM()F Landroidx/compose/material3/ProgressIndicatorKt; HSPLandroidx/compose/material3/ProgressIndicatorKt;->()V PLandroidx/compose/material3/ProgressIndicatorKt;->()V HSPLandroidx/compose/material3/ProgressIndicatorKt;->CircularProgressIndicator-LxG7B9w(FIIIJJLandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V PLandroidx/compose/material3/ProgressIndicatorKt;->CircularProgressIndicator-LxG7B9w(FIIIJJLandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V PLandroidx/compose/material3/ProgressIndicatorKt;->access$drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V PLandroidx/compose/material3/ProgressIndicatorKt;->access$drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$getCircularEasing$p()Landroidx/compose/animation/core/CubicBezierEasing; PLandroidx/compose/material3/ProgressIndicatorKt;->access$getCircularEasing$p()Landroidx/compose/animation/core/CubicBezierEasing; HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicator-42QJj7c(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V PLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicator-42QJj7c(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3; HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->(FJJLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/ui/graphics/drawscope/Stroke;)V PLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->(FJJLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/ui/graphics/drawscope/Stroke;)V HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/ProgressIndicatorKt$LinearProgressIndicator$2; HSPLandroidx/compose/material3/ProgressIndicatorKt$LinearProgressIndicator$2;->(Landroidx/compose/ui/Modifier;JFJIII)V PLandroidx/compose/material3/ProgressIndicatorKt$LinearProgressIndicator$2;->(Landroidx/compose/ui/Modifier;JFJIII)V Landroidx/compose/material3/ScaffoldKt$Scaffold$1$1; HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V PLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/ShapeDefaults; HSPLandroidx/compose/material3/ShapeDefaults;->()V PLandroidx/compose/material3/ShapeDefaults;->()V HSPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; Landroidx/compose/material3/Shapes; HSPLandroidx/compose/material3/Shapes;->()V PLandroidx/compose/material3/Shapes;->()V HSPLandroidx/compose/material3/Shapes;->(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V PLandroidx/compose/material3/Shapes;->(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V HSPLandroidx/compose/material3/Shapes;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape; PLandroidx/compose/material3/Shapes;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape; HSPLandroidx/compose/material3/Shapes;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape; PLandroidx/compose/material3/Shapes;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape; HSPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape; PLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape; HSPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape; PLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape; HSPLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape; PLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape; Landroidx/compose/material3/ShapesKt; HSPLandroidx/compose/material3/ShapesKt;->()V PLandroidx/compose/material3/ShapesKt;->()V HSPLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/material3/ShapesKt;->getValue(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape; HPLandroidx/compose/material3/ShapesKt;->getValue(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape; Landroidx/compose/material3/ShapesKt$LocalShapes$1; HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V PLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->(I)V PLandroidx/compose/material3/ShapesKt$LocalShapes$1;->(I)V HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; PLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; Landroidx/compose/material3/SnackbarData; Landroidx/compose/material3/SnackbarHostKt$SnackbarHost$1; HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/platform/AccessibilityManager;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/platform/AccessibilityManager;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SnackbarHostState; HSPLandroidx/compose/material3/SnackbarHostState;->()V PLandroidx/compose/material3/SnackbarHostState;->()V HSPLandroidx/compose/material3/SnackbarHostState;->getCurrentSnackbarData()Landroidx/compose/material3/SnackbarData; PLandroidx/compose/material3/SnackbarHostState;->getCurrentSnackbarData()Landroidx/compose/material3/SnackbarData; Landroidx/compose/material3/SnackbarKt$Snackbar$3; HSPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->(Ljava/lang/Object;I)V HPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->(Ljava/lang/Object;I)V HSPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SurfaceKt; HSPLandroidx/compose/material3/SurfaceKt;->()V PLandroidx/compose/material3/SurfaceKt;->()V HSPLandroidx/compose/material3/SurfaceKt;->Surface-T9BRK9s(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/SurfaceKt;->Surface-T9BRK9s(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/SurfaceKt;->Surface-o_FOJdg(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/SurfaceKt;->Surface-o_FOJdg(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; PLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J PLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J Landroidx/compose/material3/SurfaceKt$Surface$1; HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V PLandroidx/compose/material3/SurfaceKt$Surface$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SurfaceKt$Surface$1$2; HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->(Lkotlin/coroutines/Continuation;)V PLandroidx/compose/material3/SurfaceKt$Surface$1$2;->(Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SurfaceKt$Surface$3; HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLandroidx/compose/material3/SurfaceKt$Surface$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SwitchColors; HSPLandroidx/compose/material3/SwitchColors;->(JJJJJJJJJJJJJJJJ)V PLandroidx/compose/material3/SwitchColors;->(JJJJJJJJJJJJJJJJ)V HSPLandroidx/compose/material3/SwitchColors;->borderColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/SwitchColors;->borderColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/material3/SwitchColors;->thumbColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/SwitchColors;->thumbColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/material3/SwitchColors;->trackColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; PLandroidx/compose/material3/SwitchColors;->trackColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; Landroidx/compose/material3/SwitchDefaults; HSPLandroidx/compose/material3/SwitchDefaults;->()V PLandroidx/compose/material3/SwitchDefaults;->()V Landroidx/compose/material3/SwitchKt; HSPLandroidx/compose/material3/SwitchKt;->()V PLandroidx/compose/material3/SwitchKt;->()V HSPLandroidx/compose/material3/SwitchKt;->Switch(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/SwitchKt;->Switch(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/SwitchKt;->SwitchImpl-0DmnUew(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFLandroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/SwitchKt;->SwitchImpl-0DmnUew(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFLandroidx/compose/runtime/Composer;II)V Landroidx/compose/material3/SwitchKt$Switch$2; HSPLandroidx/compose/material3/SwitchKt$Switch$2;->(Ljava/lang/Object;FI)V HPLandroidx/compose/material3/SwitchKt$Switch$2;->(Ljava/lang/Object;FI)V HSPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()Ljava/lang/Object; HSPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()V HPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()V Landroidx/compose/material3/SwitchKt$Switch$3; HSPLandroidx/compose/material3/SwitchKt$Switch$3;->(Landroidx/compose/animation/core/Animatable;FLkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/material3/SwitchKt$Switch$3;->(Landroidx/compose/animation/core/Animatable;FLkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/material3/SwitchKt$Switch$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/SwitchKt$Switch$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1; HSPLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;->()V PLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;->()V PLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/material3/SwitchKt$Switch$5; HSPLandroidx/compose/material3/SwitchKt$Switch$5;->(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V PLandroidx/compose/material3/SwitchKt$Switch$5;->(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V Landroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1; HSPLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;->(FF)V PLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;->(FF)V HSPLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1; HSPLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;->(F)V PLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;->(F)V HSPLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/SwitchKt$SwitchImpl$2; HSPLandroidx/compose/material3/SwitchKt$SwitchImpl$2;->(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFII)V PLandroidx/compose/material3/SwitchKt$SwitchImpl$2;->(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFII)V Landroidx/compose/material3/TabKt$TabTransition$color$2; HSPLandroidx/compose/material3/TabKt$TabTransition$color$2;->()V PLandroidx/compose/material3/TabKt$TabTransition$color$2;->()V HSPLandroidx/compose/material3/TabKt$TabTransition$color$2;->(I)V PLandroidx/compose/material3/TabKt$TabTransition$color$2;->(I)V HSPLandroidx/compose/material3/TabKt$TabTransition$color$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/TabKt$TabTransition$color$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/TextKt; HSPLandroidx/compose/material3/TextKt;->()V PLandroidx/compose/material3/TextKt;->()V HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V HPLandroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V HSPLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Landroidx/compose/material3/TextKt$ProvideTextStyle$1; HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;II)V HPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;II)V HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/TextKt$Text$1; HSPLandroidx/compose/material3/TextKt$Text$1;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V HPLandroidx/compose/material3/TextKt$Text$1;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/TooltipDefaults; HSPLandroidx/compose/material3/TooltipDefaults;->()V PLandroidx/compose/material3/TooltipDefaults;->()V HSPLandroidx/compose/material3/TooltipDefaults;->getGlobalMutatorMutex()Landroidx/compose/foundation/MutatorMutex; PLandroidx/compose/material3/TooltipDefaults;->getGlobalMutatorMutex()Landroidx/compose/foundation/MutatorMutex; Landroidx/compose/material3/TooltipKt; HSPLandroidx/compose/material3/TooltipKt;->()V PLandroidx/compose/material3/TooltipKt;->()V HSPLandroidx/compose/material3/TooltipKt;->PlainTooltipBox-EVJuX4I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/material3/TooltipKt;->PlainTooltipBox-EVJuX4I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/material3/TooltipKt;->TooltipBox-xJj0JzU(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/TooltipKt;->TooltipBox-xJj0JzU(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V Landroidx/compose/material3/TooltipKt$PlainTooltipBox$1; HSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->(JLkotlin/jvm/functions/Function2;II)V HPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->(JLkotlin/jvm/functions/Function2;II)V HSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/TooltipKt$PlainTooltipBox$2; HSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$2;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;II)V HPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$2;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;II)V Landroidx/compose/material3/TooltipKt$TooltipBox$1$1; HSPLandroidx/compose/material3/TooltipKt$TooltipBox$1$1;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/PlainTooltipState;)V HPLandroidx/compose/material3/TooltipKt$TooltipBox$1$1;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/PlainTooltipState;)V Landroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;->(Ljava/lang/Object;I)V PLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/material3/TooltipKt$TooltipBox$3; HSPLandroidx/compose/material3/TooltipKt$TooltipBox$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;I)V HPLandroidx/compose/material3/TooltipKt$TooltipBox$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;I)V Landroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1; HSPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;->(Landroidx/compose/material3/PlainTooltipState;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;)V HPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;->(Landroidx/compose/material3/PlainTooltipState;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;)V HSPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;->tooltipTrigger(Landroidx/compose/ui/Modifier$Companion;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;->tooltipTrigger(Landroidx/compose/ui/Modifier$Companion;)Landroidx/compose/ui/Modifier; Landroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1$tooltipTrigger$1; HSPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1$tooltipTrigger$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1$tooltipTrigger$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V Landroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1; HSPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/TopAppBarColors; HSPLandroidx/compose/material3/TopAppBarColors;->(JJJJJ)V PLandroidx/compose/material3/TopAppBarColors;->(JJJJJ)V HSPLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;)J HPLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;)J PLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU()J PLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU()J HSPLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU()J PLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU()J HSPLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU()J PLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU()J Landroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1; HSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V PLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V HSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V PLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V Landroidx/compose/material3/TopAppBarScrollBehavior; Landroidx/compose/material3/TopAppBarState; HSPLandroidx/compose/material3/TopAppBarState;->()V PLandroidx/compose/material3/TopAppBarState;->()V HSPLandroidx/compose/material3/TopAppBarState;->(FFF)V PLandroidx/compose/material3/TopAppBarState;->(FFF)V HSPLandroidx/compose/material3/TopAppBarState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/material3/TopAppBarState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/material3/TopAppBarState;->getContentOffset()F HPLandroidx/compose/material3/TopAppBarState;->getContentOffset()F HSPLandroidx/compose/material3/TopAppBarState;->getHeightOffset()F HPLandroidx/compose/material3/TopAppBarState;->getHeightOffset()F HSPLandroidx/compose/material3/TopAppBarState;->getHeightOffsetLimit()F HPLandroidx/compose/material3/TopAppBarState;->getHeightOffsetLimit()F HSPLandroidx/compose/material3/TopAppBarState;->setHeightOffsetLimit(F)V PLandroidx/compose/material3/TopAppBarState;->setHeightOffsetLimit(F)V Landroidx/compose/material3/TopAppBarState$Companion$Saver$1; HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->()V PLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->()V HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->(I)V PLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->(I)V HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/material3/Typography; HSPLandroidx/compose/material3/Typography;->(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V PLandroidx/compose/material3/Typography;->(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V HSPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/Typography;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/Typography;->getLabelMedium()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getLabelMedium()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle; Landroidx/compose/material3/TypographyKt; HSPLandroidx/compose/material3/TypographyKt;->()V PLandroidx/compose/material3/TypographyKt;->()V HSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;I)Landroidx/compose/ui/text/TextStyle; HPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;I)Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/material3/tokens/BadgeTokens; HSPLandroidx/compose/material3/tokens/BadgeTokens;->()V PLandroidx/compose/material3/tokens/BadgeTokens;->()V HSPLandroidx/compose/material3/tokens/BadgeTokens;->getSize-D9Ej5fM()F PLandroidx/compose/material3/tokens/BadgeTokens;->getSize-D9Ej5fM()F Landroidx/compose/material3/tokens/CircularProgressIndicatorTokens; HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->()V PLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->()V HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorWidth-D9Ej5fM()F PLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorWidth-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getSize-D9Ej5fM()F PLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getSize-D9Ej5fM()F Landroidx/compose/material3/tokens/ColorLightTokens; HSPLandroidx/compose/material3/tokens/ColorLightTokens;->()V PLandroidx/compose/material3/tokens/ColorLightTokens;->()V HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceBright-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceBright-0d7_KjU()J HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainer-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainer-0d7_KjU()J HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHigh-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHigh-0d7_KjU()J HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHighest-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHighest-0d7_KjU()J HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLow-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLow-0d7_KjU()J HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLowest-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLowest-0d7_KjU()J HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceDim-0d7_KjU()J PLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceDim-0d7_KjU()J Landroidx/compose/material3/tokens/DividerTokens; HSPLandroidx/compose/material3/tokens/DividerTokens;->()V PLandroidx/compose/material3/tokens/DividerTokens;->()V HSPLandroidx/compose/material3/tokens/DividerTokens;->getThickness-D9Ej5fM()F PLandroidx/compose/material3/tokens/DividerTokens;->getThickness-D9Ej5fM()F Landroidx/compose/material3/tokens/ElevationTokens; HSPLandroidx/compose/material3/tokens/ElevationTokens;->()V PLandroidx/compose/material3/tokens/ElevationTokens;->()V HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F PLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F PLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F PLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F Landroidx/compose/material3/tokens/FilledButtonTokens; HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->()V PLandroidx/compose/material3/tokens/FilledButtonTokens;->()V Landroidx/compose/material3/tokens/IconButtonTokens; HSPLandroidx/compose/material3/tokens/IconButtonTokens;->()V PLandroidx/compose/material3/tokens/IconButtonTokens;->()V HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F PLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()I PLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()I HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F PLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F Landroidx/compose/material3/tokens/LinearProgressIndicatorTokens; HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->()V PLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->()V HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->getTrackHeight-D9Ej5fM()F PLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->getTrackHeight-D9Ej5fM()F Landroidx/compose/material3/tokens/NavigationBarTokens; HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->()V PLandroidx/compose/material3/tokens/NavigationBarTokens;->()V HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorHeight-D9Ej5fM()F PLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorHeight-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorShape()I PLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorShape()I HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorWidth-D9Ej5fM()F PLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorWidth-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveLabelTextColor()I PLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveLabelTextColor()I HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerColor()I PLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerColor()I HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerElevation-D9Ej5fM()F PLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerElevation-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerHeight-D9Ej5fM()F PLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerHeight-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getIconSize-D9Ej5fM()F PLandroidx/compose/material3/tokens/NavigationBarTokens;->getIconSize-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveIconColor()I PLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveIconColor()I HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveLabelTextColor()I PLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveLabelTextColor()I HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getLabelTextFont()I PLandroidx/compose/material3/tokens/NavigationBarTokens;->getLabelTextFont()I Landroidx/compose/material3/tokens/PaletteTokens; HSPLandroidx/compose/material3/tokens/PaletteTokens;->()V PLandroidx/compose/material3/tokens/PaletteTokens;->()V HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral100-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral100-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral87-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral87-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral90-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral90-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral92-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral92-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral94-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral94-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral96-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral96-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral98-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral98-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J PLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J Landroidx/compose/material3/tokens/ShapeTokens; HSPLandroidx/compose/material3/tokens/ShapeTokens;->()V PLandroidx/compose/material3/tokens/ShapeTokens;->()V HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape; HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; PLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; Landroidx/compose/material3/tokens/SwitchTokens; HSPLandroidx/compose/material3/tokens/SwitchTokens;->()V PLandroidx/compose/material3/tokens/SwitchTokens;->()V HSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleColor()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleWidth-D9Ej5fM()F PLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleWidth-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedIconColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedIconColor()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedTrackColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedTrackColor()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getStateLayerSize-D9Ej5fM()F PLandroidx/compose/material3/tokens/SwitchTokens;->getStateLayerSize-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackHeight-D9Ej5fM()F PLandroidx/compose/material3/tokens/SwitchTokens;->getTrackHeight-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackOutlineWidth-D9Ej5fM()F PLandroidx/compose/material3/tokens/SwitchTokens;->getTrackOutlineWidth-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackShape()I PLandroidx/compose/material3/tokens/SwitchTokens;->getTrackShape()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackWidth-D9Ej5fM()F PLandroidx/compose/material3/tokens/SwitchTokens;->getTrackWidth-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedFocusTrackOutlineColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedFocusTrackOutlineColor()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleColor()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleWidth-D9Ej5fM()F PLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleWidth-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedIconColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedIconColor()I HSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedTrackColor()I PLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedTrackColor()I Landroidx/compose/material3/tokens/TextButtonTokens; HSPLandroidx/compose/material3/tokens/TextButtonTokens;->()V PLandroidx/compose/material3/tokens/TextButtonTokens;->()V HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getContainerShape()I PLandroidx/compose/material3/tokens/TextButtonTokens;->getContainerShape()I HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getDisabledLabelTextColor()I PLandroidx/compose/material3/tokens/TextButtonTokens;->getDisabledLabelTextColor()I HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getLabelTextColor()I PLandroidx/compose/material3/tokens/TextButtonTokens;->getLabelTextColor()I Landroidx/compose/material3/tokens/TopAppBarSmallTokens; HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->()V PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->()V HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()I PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()I HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()I PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()I HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()I PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()I HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()I PLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()I Landroidx/compose/material3/tokens/TypographyTokensKt; HSPLandroidx/compose/material3/tokens/TypographyTokensKt;->()V PLandroidx/compose/material3/tokens/TypographyTokensKt;->()V HSPLandroidx/compose/material3/tokens/TypographyTokensKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/material3/tokens/TypographyTokensKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle; Landroidx/compose/runtime/AbstractApplier; HSPLandroidx/compose/runtime/AbstractApplier;->(Ljava/lang/Object;)V HPLandroidx/compose/runtime/AbstractApplier;->(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/AbstractApplier;->clear()V HPLandroidx/compose/runtime/AbstractApplier;->clear()V HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V HPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object; HPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object; HSPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object; PLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object; HSPLandroidx/compose/runtime/AbstractApplier;->up()V HPLandroidx/compose/runtime/AbstractApplier;->up()V Landroidx/compose/runtime/ActualAndroid_androidKt; HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->()V PLandroidx/compose/runtime/ActualAndroid_androidKt;->()V Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2; HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V PLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V PLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V Landroidx/compose/runtime/Anchor; HSPLandroidx/compose/runtime/Anchor;->(I)V HPLandroidx/compose/runtime/Anchor;->(I)V HSPLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I PLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I HSPLandroidx/compose/runtime/Anchor;->getValid()Z HPLandroidx/compose/runtime/Anchor;->getValid()Z HSPLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V PLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V Landroidx/compose/runtime/Applier; HSPLandroidx/compose/runtime/Applier;->onEndChanges()V PLandroidx/compose/runtime/Applier;->onEndChanges()V Landroidx/compose/runtime/BroadcastFrameClock; HSPLandroidx/compose/runtime/BroadcastFrameClock;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/BroadcastFrameClock;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List; PLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List; HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object; PLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object; HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; PLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z HPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V HPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter; HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V HPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V HPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V Landroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1; HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V HPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/ComposableSingletons$CompositionKt; HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V PLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1; HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V PLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->(I)V PLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->(I)V Landroidx/compose/runtime/ComposeNodeLifecycleCallback; Landroidx/compose/runtime/ComposeRuntimeError; Landroidx/compose/runtime/Composer; Landroidx/compose/runtime/Composer$Companion; HSPLandroidx/compose/runtime/Composer$Companion;->()V PLandroidx/compose/runtime/Composer$Companion;->()V HSPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Landroidx/compose/runtime/Composer$Companion$Empty$1; HPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Landroidx/compose/runtime/Composer$Companion$Empty$1; Landroidx/compose/runtime/Composer$Companion$Empty$1; HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;->()V PLandroidx/compose/runtime/Composer$Companion$Empty$1;->()V Landroidx/compose/runtime/ComposerImpl; HSPLandroidx/compose/runtime/ComposerImpl;->(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/ComposerImpl;->(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I HPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I HSPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext; PLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext; HSPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V HPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext; HPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext; HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z HPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z HPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z HPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z HPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V HPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V HPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V HSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I HPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; HPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; HSPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V HPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap; HPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap; HSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V HPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V HSPLandroidx/compose/runtime/ComposerImpl;->end(Z)V HPLandroidx/compose/runtime/ComposerImpl;->end(Z)V HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V HPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V HSPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V HPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V HSPLandroidx/compose/runtime/ComposerImpl;->endNode()V HPLandroidx/compose/runtime/ComposerImpl;->endNode()V HSPLandroidx/compose/runtime/ComposerImpl;->endProvider()V PLandroidx/compose/runtime/ComposerImpl;->endProvider()V HSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V PLandroidx/compose/runtime/ComposerImpl;->endProviders()V HSPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V HPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl; HPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl; HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V PLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V HPLandroidx/compose/runtime/ComposerImpl;->endRoot()V HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V HPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V HSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier; HPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier; HSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext; HPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z PLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z HSPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition; HPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition; HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I PLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentCompositionLocalMap()Landroidx/compose/runtime/PersistentCompositionLocalMap; HPLandroidx/compose/runtime/ComposerImpl;->getCurrentCompositionLocalMap()Landroidx/compose/runtime/PersistentCompositionLocalMap; HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl; HPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl; HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z HPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z HSPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Landroidx/compose/runtime/changelist/ChangeList; PLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Landroidx/compose/runtime/changelist/ChangeList; HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z HPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z HSPLandroidx/compose/runtime/ComposerImpl;->getReader$runtime_release()Landroidx/compose/runtime/SlotReader; HPLandroidx/compose/runtime/ComposerImpl;->getReader$runtime_release()Landroidx/compose/runtime/SlotReader; HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z HPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z HSPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z PLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object; HPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object; HSPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z HPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V HPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V HPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V HSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V HPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I HPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V HPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V HPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V HPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V HSPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V HPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->startNode()V HPLandroidx/compose/runtime/ComposerImpl;->startNode()V HSPLandroidx/compose/runtime/ComposerImpl;->startProvider(Landroidx/compose/runtime/ProvidedValue;)V HPLandroidx/compose/runtime/ComposerImpl;->startProvider(Landroidx/compose/runtime/ProvidedValue;)V HSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V HPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V HPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V HPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl; HPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl; HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V HPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V HPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V HPLandroidx/compose/runtime/ComposerImpl;->startRoot()V HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z HPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V HPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V HPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V HPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V HPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I HPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V HPLandroidx/compose/runtime/ComposerImpl;->useNode()V Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; PLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/LinkedHashSet; PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/LinkedHashSet; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder; PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder; HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V PLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1; HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->(Landroidx/compose/runtime/ComposerImpl;)V PLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->(Landroidx/compose/runtime/ComposerImpl;)V HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V HPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V HPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V Landroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1; HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;->()V PLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;->()V HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I Landroidx/compose/runtime/ComposerKt; HSPLandroidx/compose/runtime/ComposerKt;->()V PLandroidx/compose/runtime/ComposerKt;->()V HSPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(IILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation; HPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(IILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation; HSPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/ArrayList;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V HPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/ArrayList;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I HPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I HSPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(ILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation; PLandroidx/compose/runtime/ComposerKt;->access$removeLocation(ILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation; HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(IILjava/util/ArrayList;)V HPLandroidx/compose/runtime/ComposerKt;->access$removeRange(IILjava/util/ArrayList;)V HSPLandroidx/compose/runtime/ComposerKt;->findLocation(ILjava/util/List;)I HPLandroidx/compose/runtime/ComposerKt;->findLocation(ILjava/util/List;)I HSPLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Landroidx/compose/runtime/OpaqueKey; PLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Landroidx/compose/runtime/OpaqueKey; HSPLandroidx/compose/runtime/ComposerKt;->getInvocation()Landroidx/compose/runtime/OpaqueKey; PLandroidx/compose/runtime/ComposerKt;->getInvocation()Landroidx/compose/runtime/OpaqueKey; HSPLandroidx/compose/runtime/ComposerKt;->getProvider()Landroidx/compose/runtime/OpaqueKey; PLandroidx/compose/runtime/ComposerKt;->getProvider()Landroidx/compose/runtime/OpaqueKey; HSPLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Landroidx/compose/runtime/OpaqueKey; PLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Landroidx/compose/runtime/OpaqueKey; HSPLandroidx/compose/runtime/ComposerKt;->getReference()Landroidx/compose/runtime/OpaqueKey; PLandroidx/compose/runtime/ComposerKt;->getReference()Landroidx/compose/runtime/OpaqueKey; HSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V HPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V Landroidx/compose/runtime/Composition; Landroidx/compose/runtime/CompositionContext; HSPLandroidx/compose/runtime/CompositionContext;->()V PLandroidx/compose/runtime/CompositionContext;->()V HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V PLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; PLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; HSPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder; PLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder; HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V PLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V PLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V Landroidx/compose/runtime/CompositionContextKt; HSPLandroidx/compose/runtime/CompositionContextKt;->()V PLandroidx/compose/runtime/CompositionContextKt;->()V HSPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyPersistentCompositionLocalMap$p()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; PLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyPersistentCompositionLocalMap$p()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; Landroidx/compose/runtime/CompositionImpl; HSPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/AbstractApplier;)V HPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/AbstractApplier;)V HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet; HPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet; HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V HPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V HPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Landroidx/compose/runtime/changelist/ChangeList;)V HPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Landroidx/compose/runtime/changelist/ChangeList;)V HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V HPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V HPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V HPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/runtime/CompositionImpl;->dispose()V HPLandroidx/compose/runtime/CompositionImpl;->dispose()V HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V HPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V HPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z HPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z HSPLandroidx/compose/runtime/CompositionImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder; PLandroidx/compose/runtime/CompositionImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder; HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I HPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I HPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V HPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z PLandroidx/compose/runtime/CompositionImpl;->isComposing()Z HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z PLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z HSPLandroidx/compose/runtime/CompositionImpl;->observer()V HPLandroidx/compose/runtime/CompositionImpl;->observer()V HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z HPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z HPLandroidx/compose/runtime/CompositionImpl;->recompose()Z HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V PLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V HPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V HPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V HPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/CompositionImpl;->removeDerivedStateObservation$runtime_release(Landroidx/compose/runtime/DerivedState;)V PLandroidx/compose/runtime/CompositionImpl;->removeDerivedStateObservation$runtime_release(Landroidx/compose/runtime/DerivedState;)V HSPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V PLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher; HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->(Ljava/util/HashSet;)V HPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->(Ljava/util/HashSet;)V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V HPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V HPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V HPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V PLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->releasing(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V PLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->releasing(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V HPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V Landroidx/compose/runtime/CompositionKt; HSPLandroidx/compose/runtime/CompositionKt;->()V PLandroidx/compose/runtime/CompositionKt;->()V HSPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object; PLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object; Landroidx/compose/runtime/CompositionLocal; HSPLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder; PLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder; Landroidx/compose/runtime/CompositionLocalKt$CompositionLocalProvider$1; Landroidx/compose/runtime/CompositionLocalMap; HSPLandroidx/compose/runtime/CompositionLocalMap;->()V PLandroidx/compose/runtime/CompositionLocalMap;->()V Landroidx/compose/runtime/CompositionLocalMap$Companion; HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V PLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V PLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->getEmpty()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; PLandroidx/compose/runtime/CompositionLocalMap$Companion;->getEmpty()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; Landroidx/compose/runtime/CompositionObserverHolder; HSPLandroidx/compose/runtime/CompositionObserverHolder;->()V HPLandroidx/compose/runtime/CompositionObserverHolder;->()V HSPLandroidx/compose/runtime/CompositionObserverHolder;->getObserver()V PLandroidx/compose/runtime/CompositionObserverHolder;->getObserver()V HSPLandroidx/compose/runtime/CompositionObserverHolder;->getRoot()Z PLandroidx/compose/runtime/CompositionObserverHolder;->getRoot()Z Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller; HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->(Lkotlinx/coroutines/CoroutineScope;)V HPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->(Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; PLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V HPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V HPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V Landroidx/compose/runtime/ControlledComposition; Landroidx/compose/runtime/DefaultChoreographerFrameClock; Landroidx/compose/runtime/DerivedSnapshotState; HSPLandroidx/compose/runtime/DerivedSnapshotState;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/DerivedSnapshotState;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/DerivedSnapshotState;->current(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HPLandroidx/compose/runtime/DerivedSnapshotState;->current(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; PLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object; HPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object; HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object; PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getCurrentValue()Ljava/lang/Object; PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getCurrentValue()Ljava/lang/Object; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()[Ljava/lang/Object; PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()[Ljava/lang/Object; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object; PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->get_dependencies()Landroidx/compose/runtime/collection/IdentityArrayMap; HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->get_dependencies()Landroidx/compose/runtime/collection/IdentityArrayMap; HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I HPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotId(I)V PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotId(I)V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotWriteCount(I)V PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotWriteCount(I)V HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->set_dependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V PLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->set_dependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V Landroidx/compose/runtime/DerivedState; Landroidx/compose/runtime/DerivedStateObserver; Landroidx/compose/runtime/DisposableEffectImpl; HSPLandroidx/compose/runtime/DisposableEffectImpl;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/runtime/DisposableEffectImpl;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V HPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V HPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V Landroidx/compose/runtime/DisposableEffectResult; Landroidx/compose/runtime/DisposableEffectScope; HSPLandroidx/compose/runtime/DisposableEffectScope;->()V PLandroidx/compose/runtime/DisposableEffectScope;->()V Landroidx/compose/runtime/DynamicProvidableCompositionLocal; HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State; HPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State; Landroidx/compose/runtime/EffectsKt; HSPLandroidx/compose/runtime/EffectsKt;->()V PLandroidx/compose/runtime/EffectsKt;->()V HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Ljava/lang/Boolean;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Ljava/lang/Boolean;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope; PLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope; HSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/EmptyCoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope; HPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/EmptyCoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope; Landroidx/compose/runtime/GroupInfo; HSPLandroidx/compose/runtime/GroupInfo;->(III)V PLandroidx/compose/runtime/GroupInfo;->(III)V HSPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I PLandroidx/compose/runtime/GroupInfo;->getNodeCount()I HSPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I PLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I HSPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I PLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I HSPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V PLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V HSPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V PLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V HSPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V PLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V Landroidx/compose/runtime/GroupKind$Companion; HSPLandroidx/compose/runtime/GroupKind$Companion;->()V PLandroidx/compose/runtime/GroupKind$Companion;->()V PLandroidx/compose/runtime/GroupKind$Companion;->access$removeRunning(Landroidx/compose/runtime/GroupKind$Companion;)V Landroidx/compose/runtime/IntStack; HSPLandroidx/compose/runtime/IntStack;->(II)V HPLandroidx/compose/runtime/IntStack;->(II)V HSPLandroidx/compose/runtime/IntStack;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V HPLandroidx/compose/runtime/IntStack;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V HSPLandroidx/compose/runtime/IntStack;->add-0FcD4WY(J)V PLandroidx/compose/runtime/IntStack;->add-0FcD4WY(J)V HSPLandroidx/compose/runtime/IntStack;->clear()V PLandroidx/compose/runtime/IntStack;->clear()V HSPLandroidx/compose/runtime/IntStack;->contains(J)Z PLandroidx/compose/runtime/IntStack;->contains(J)Z HSPLandroidx/compose/runtime/IntStack;->get-_I2yYro(I)J PLandroidx/compose/runtime/IntStack;->get-_I2yYro(I)J HSPLandroidx/compose/runtime/IntStack;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; PLandroidx/compose/runtime/IntStack;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/IntStack;->getSize()I HPLandroidx/compose/runtime/IntStack;->getSize()I HSPLandroidx/compose/runtime/IntStack;->getSizeDelta()I PLandroidx/compose/runtime/IntStack;->getSizeDelta()I HSPLandroidx/compose/runtime/IntStack;->isEmpty()Z PLandroidx/compose/runtime/IntStack;->isEmpty()Z HSPLandroidx/compose/runtime/IntStack;->peek()I PLandroidx/compose/runtime/IntStack;->peek()I HSPLandroidx/compose/runtime/IntStack;->peekOr(I)I PLandroidx/compose/runtime/IntStack;->peekOr(I)I HSPLandroidx/compose/runtime/IntStack;->pop()I PLandroidx/compose/runtime/IntStack;->pop()I HSPLandroidx/compose/runtime/IntStack;->push(I)V HPLandroidx/compose/runtime/IntStack;->push(I)V HSPLandroidx/compose/runtime/IntStack;->remove-0FcD4WY(J)V PLandroidx/compose/runtime/IntStack;->remove-0FcD4WY(J)V HSPLandroidx/compose/runtime/IntStack;->removeAt(I)V PLandroidx/compose/runtime/IntStack;->removeAt(I)V HSPLandroidx/compose/runtime/IntStack;->setNode(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V PLandroidx/compose/runtime/IntStack;->setNode(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V Landroidx/compose/runtime/Invalidation; HSPLandroidx/compose/runtime/Invalidation;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V PLandroidx/compose/runtime/Invalidation;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V HSPLandroidx/compose/runtime/Invalidation;->getInstances()Landroidx/compose/runtime/collection/IdentityArraySet; PLandroidx/compose/runtime/Invalidation;->getInstances()Landroidx/compose/runtime/collection/IdentityArraySet; HSPLandroidx/compose/runtime/Invalidation;->getLocation()I HPLandroidx/compose/runtime/Invalidation;->getLocation()I HSPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl; PLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl; HSPLandroidx/compose/runtime/Invalidation;->isInvalid()Z PLandroidx/compose/runtime/Invalidation;->isInvalid()Z HSPLandroidx/compose/runtime/Invalidation;->setInstances()V PLandroidx/compose/runtime/Invalidation;->setInstances()V Landroidx/compose/runtime/JoinedKey; HSPLandroidx/compose/runtime/JoinedKey;->(Ljava/lang/Integer;Ljava/lang/Object;)V PLandroidx/compose/runtime/JoinedKey;->(Ljava/lang/Integer;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/JoinedKey;->hashCode()I HPLandroidx/compose/runtime/JoinedKey;->hashCode()I Landroidx/compose/runtime/KeyInfo; HSPLandroidx/compose/runtime/KeyInfo;->(IIILjava/lang/Object;)V PLandroidx/compose/runtime/KeyInfo;->(IIILjava/lang/Object;)V HSPLandroidx/compose/runtime/KeyInfo;->getKey()I PLandroidx/compose/runtime/KeyInfo;->getKey()I HSPLandroidx/compose/runtime/KeyInfo;->getLocation()I HPLandroidx/compose/runtime/KeyInfo;->getLocation()I HSPLandroidx/compose/runtime/KeyInfo;->getNodes()I PLandroidx/compose/runtime/KeyInfo;->getNodes()I HSPLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object; PLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object; Landroidx/compose/runtime/Latch; HSPLandroidx/compose/runtime/Latch;->()V PLandroidx/compose/runtime/Latch;->()V HSPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Latch;->closeLatch()V PLandroidx/compose/runtime/Latch;->closeLatch()V HSPLandroidx/compose/runtime/Latch;->openLatch()V PLandroidx/compose/runtime/Latch;->openLatch()V Landroidx/compose/runtime/Latch$await$2$2; HSPLandroidx/compose/runtime/Latch$await$2$2;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/Latch$await$2$2;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Throwable;)V Landroidx/compose/runtime/LaunchedEffectImpl; HSPLandroidx/compose/runtime/LaunchedEffectImpl;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/runtime/LaunchedEffectImpl;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V HPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V HPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V Landroidx/compose/runtime/LazyValueHolder; HSPLandroidx/compose/runtime/LazyValueHolder;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/LazyValueHolder;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object; PLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object; Landroidx/compose/runtime/LeftCompositionCancellationException; HSPLandroidx/compose/runtime/LeftCompositionCancellationException;->()V HPLandroidx/compose/runtime/LeftCompositionCancellationException;->()V HSPLandroidx/compose/runtime/LeftCompositionCancellationException;->fillInStackTrace()Ljava/lang/Throwable; HPLandroidx/compose/runtime/LeftCompositionCancellationException;->fillInStackTrace()Ljava/lang/Throwable; Landroidx/compose/runtime/MonotonicFrameClock; HSPLandroidx/compose/runtime/MonotonicFrameClock;->()V PLandroidx/compose/runtime/MonotonicFrameClock;->()V HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key; HPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key; Landroidx/compose/runtime/MonotonicFrameClock$Key; HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V PLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V PLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V Landroidx/compose/runtime/MonotonicFrameClockKt; HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock; HPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock; HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2; HSPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->(Ljava/lang/Object;I)V HPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)V HPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)V Landroidx/compose/runtime/MovableContentStateReference; Landroidx/compose/runtime/MutableFloatState; Landroidx/compose/runtime/MutableIntState; Landroidx/compose/runtime/MutableLongState; Landroidx/compose/runtime/MutableState; Landroidx/compose/runtime/NeverEqualPolicy; HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V PLandroidx/compose/runtime/NeverEqualPolicy;->()V HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V PLandroidx/compose/runtime/NeverEqualPolicy;->()V HSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z PLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z Landroidx/compose/runtime/OpaqueKey; HSPLandroidx/compose/runtime/OpaqueKey;->(Ljava/lang/String;)V PLandroidx/compose/runtime/OpaqueKey;->(Ljava/lang/String;)V HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I HPLandroidx/compose/runtime/OpaqueKey;->hashCode()I Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState; HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->()V PLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->()V HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->(F)V HPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->(F)V Landroidx/compose/runtime/ParcelableSnapshotMutableIntState; HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->()V PLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->()V HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->(I)V HPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->(I)V Landroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1; HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;->(I)V PLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;->(I)V Landroidx/compose/runtime/ParcelableSnapshotMutableLongState; HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->()V PLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->()V HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->(J)V PLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->(J)V Landroidx/compose/runtime/ParcelableSnapshotMutableState; HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->()V PLandroidx/compose/runtime/ParcelableSnapshotMutableState;->()V HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V HPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1; HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;->()V PLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;->()V Landroidx/compose/runtime/PausableMonotonicFrameClock; HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->(Landroidx/compose/runtime/MonotonicFrameClock;)V PLandroidx/compose/runtime/PausableMonotonicFrameClock;->(Landroidx/compose/runtime/MonotonicFrameClock;)V HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; PLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; PLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V PLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V PLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1; HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/Pending; HSPLandroidx/compose/runtime/Pending;->(ILjava/util/ArrayList;)V HPLandroidx/compose/runtime/Pending;->(ILjava/util/ArrayList;)V HSPLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List; PLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List; HSPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo; HPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo; HSPLandroidx/compose/runtime/Pending;->getStartIndex()I PLandroidx/compose/runtime/Pending;->getStartIndex()I HSPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I HPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I HSPLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)V PLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)V HSPLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V PLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V HSPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V HPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V HSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z HPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z Landroidx/compose/runtime/Pending$keyMap$2; HSPLandroidx/compose/runtime/Pending$keyMap$2;->(Ljava/lang/Object;I)V HPLandroidx/compose/runtime/Pending$keyMap$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object; Landroidx/compose/runtime/PersistentCompositionLocalMap; Landroidx/compose/runtime/ProduceStateScope; Landroidx/compose/runtime/ProduceStateScopeImpl; HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V HPLandroidx/compose/runtime/ProduceStateScopeImpl;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V HPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V Landroidx/compose/runtime/ProvidableCompositionLocal; HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/ProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; HPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; Landroidx/compose/runtime/ProvidedValue; HSPLandroidx/compose/runtime/ProvidedValue;->(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V HPLandroidx/compose/runtime/ProvidedValue;->(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V HSPLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z PLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z HSPLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal; PLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal; HSPLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object; PLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object; Landroidx/compose/runtime/RecomposeScope; Landroidx/compose/runtime/RecomposeScopeImpl; HSPLandroidx/compose/runtime/RecomposeScopeImpl;->(Landroidx/compose/runtime/CompositionImpl;)V HPLandroidx/compose/runtime/RecomposeScopeImpl;->(Landroidx/compose/runtime/CompositionImpl;)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I PLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayMap; PLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayMap; HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap; PLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap; HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)V PLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor; HPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor; HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z HPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V PLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I PLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z PLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z HPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V PLandroidx/compose/runtime/RecomposeScopeImpl;->release()V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V HPLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V PLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V PLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope()V PLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope()V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V PLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V PLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed()V PLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed()V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V PLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V HSPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2; HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V PLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V HPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/RecomposeScopeOwner; Landroidx/compose/runtime/Recomposer; HSPLandroidx/compose/runtime/Recomposer;->()V PLandroidx/compose/runtime/Recomposer;->()V HSPLandroidx/compose/runtime/Recomposer;->(Lkotlin/coroutines/CoroutineContext;)V HPLandroidx/compose/runtime/Recomposer;->(Lkotlin/coroutines/CoroutineContext;)V HSPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation; PLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation; HSPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V HPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V HSPLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock; PLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock; HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList; PLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList; HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList; PLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList; HSPLandroidx/compose/runtime/Recomposer;->access$getHasBroadcastFrameClockAwaiters(Landroidx/compose/runtime/Recomposer;)Z HPLandroidx/compose/runtime/Recomposer;->access$getHasBroadcastFrameClockAwaiters(Landroidx/compose/runtime/Recomposer;)Z HSPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; PLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; HSPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/GroupKind$Companion; PLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/GroupKind$Companion; PLandroidx/compose/runtime/Recomposer;->access$getRunnerJob$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/Job; HSPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z HPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z HSPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/collection/IdentityArraySet; PLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/collection/IdentityArraySet; HSPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow; PLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow; HSPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow; PLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow; PLandroidx/compose/runtime/Recomposer;->access$isClosed$p(Landroidx/compose/runtime/Recomposer;)Z HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl; HPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl; HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z HPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z HSPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V PLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V HSPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V PLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V PLandroidx/compose/runtime/Recomposer;->access$setCloseCause$p(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V HSPLandroidx/compose/runtime/Recomposer;->access$setCompositionsRemoved$p(Landroidx/compose/runtime/Recomposer;)V PLandroidx/compose/runtime/Recomposer;->access$setCompositionsRemoved$p(Landroidx/compose/runtime/Recomposer;)V PLandroidx/compose/runtime/Recomposer;->access$setRunnerJob$p(Landroidx/compose/runtime/Recomposer;)V PLandroidx/compose/runtime/Recomposer;->access$setWorkContinuation$p(Landroidx/compose/runtime/Recomposer;)V HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V HPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V PLandroidx/compose/runtime/Recomposer;->cancel()V HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation; HPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation; HSPLandroidx/compose/runtime/Recomposer;->getChangeCount()J PLandroidx/compose/runtime/Recomposer;->getChangeCount()J HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z PLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I PLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I HSPLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/MutableStateFlow; PLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/MutableStateFlow; HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; HPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z PLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z HPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z HSPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List; HPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List; HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer;->pauseCompositionFrameClock()V PLandroidx/compose/runtime/Recomposer;->pauseCompositionFrameClock()V HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/Recomposer;->resumeCompositionFrameClock()V PLandroidx/compose/runtime/Recomposer;->resumeCompositionFrameClock()V HSPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V Landroidx/compose/runtime/Recomposer$State; HSPLandroidx/compose/runtime/Recomposer$State;->()V PLandroidx/compose/runtime/Recomposer$State;->()V HSPLandroidx/compose/runtime/Recomposer$State;->(Ljava/lang/String;I)V PLandroidx/compose/runtime/Recomposer$State;->(Ljava/lang/String;I)V Landroidx/compose/runtime/Recomposer$effectJob$1$1; HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->(Landroidx/compose/runtime/Recomposer;)V PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->(Landroidx/compose/runtime/Recomposer;)V PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/Recomposer$join$2; HSPLandroidx/compose/runtime/Recomposer$join$2;->(Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/runtime/Recomposer$join$2;->(Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/Recomposer$performRecompose$1$1; HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->(ILjava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V HPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V Landroidx/compose/runtime/Recomposer$recompositionRunner$2; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->(Ljava/lang/Object;I)V PLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;)V HPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;)V Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2; HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V HPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1; HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V HPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/ReferentialEqualityPolicy; HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V PLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V PLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z HPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z Landroidx/compose/runtime/RememberManager; Landroidx/compose/runtime/RememberObserver; Landroidx/compose/runtime/SkippableUpdater; HSPLandroidx/compose/runtime/SkippableUpdater;->(Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/SkippableUpdater;->(Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater; HPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater; HSPLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer; PLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer; Landroidx/compose/runtime/SlotReader; HSPLandroidx/compose/runtime/SlotReader;->(Landroidx/compose/runtime/SlotTable;)V HPLandroidx/compose/runtime/SlotReader;->(Landroidx/compose/runtime/SlotTable;)V HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor; HPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor; HSPLandroidx/compose/runtime/SlotReader;->beginEmpty()V PLandroidx/compose/runtime/SlotReader;->beginEmpty()V HSPLandroidx/compose/runtime/SlotReader;->close()V HPLandroidx/compose/runtime/SlotReader;->close()V HSPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z PLandroidx/compose/runtime/SlotReader;->containsMark(I)Z HSPLandroidx/compose/runtime/SlotReader;->endEmpty()V PLandroidx/compose/runtime/SlotReader;->endEmpty()V HSPLandroidx/compose/runtime/SlotReader;->endGroup()V HPLandroidx/compose/runtime/SlotReader;->endGroup()V HSPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/ArrayList; HPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/ArrayList; HSPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I HPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object; HPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I PLandroidx/compose/runtime/SlotReader;->getGroupKey()I HSPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->getGroupSize()I PLandroidx/compose/runtime/SlotReader;->getGroupSize()I HSPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z PLandroidx/compose/runtime/SlotReader;->getInEmpty()Z HSPLandroidx/compose/runtime/SlotReader;->getParent()I HPLandroidx/compose/runtime/SlotReader;->getParent()I HSPLandroidx/compose/runtime/SlotReader;->getParentNodes()I PLandroidx/compose/runtime/SlotReader;->getParentNodes()I HSPLandroidx/compose/runtime/SlotReader;->getSize()I PLandroidx/compose/runtime/SlotReader;->getSize()I HSPLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; PLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; HSPLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object; HPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->groupKey(I)I PLandroidx/compose/runtime/SlotReader;->groupKey(I)I HSPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I HPLandroidx/compose/runtime/SlotReader;->groupSize(I)I HSPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z PLandroidx/compose/runtime/SlotReader;->hasMark(I)Z HSPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z HPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z HSPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z PLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z HSPLandroidx/compose/runtime/SlotReader;->isNode()Z PLandroidx/compose/runtime/SlotReader;->isNode()Z HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z PLandroidx/compose/runtime/SlotReader;->isNode(I)Z HSPLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I HPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I HSPLandroidx/compose/runtime/SlotReader;->objectKey(I[I)Ljava/lang/Object; PLandroidx/compose/runtime/SlotReader;->objectKey(I[I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotReader;->parent(I)I HPLandroidx/compose/runtime/SlotReader;->parent(I)I HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V HPLandroidx/compose/runtime/SlotReader;->reposition(I)V HSPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V HPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I HPLandroidx/compose/runtime/SlotReader;->skipGroup()I HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V PLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V HSPLandroidx/compose/runtime/SlotReader;->startGroup()V HPLandroidx/compose/runtime/SlotReader;->startGroup()V Landroidx/compose/runtime/SlotTable; HSPLandroidx/compose/runtime/SlotTable;->()V HPLandroidx/compose/runtime/SlotTable;->()V HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I HPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V HPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V HPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V HSPLandroidx/compose/runtime/SlotTable;->containsMark()Z PLandroidx/compose/runtime/SlotTable;->containsMark()Z HSPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList; PLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList; HSPLandroidx/compose/runtime/SlotTable;->getGroups()[I PLandroidx/compose/runtime/SlotTable;->getGroups()[I HSPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I PLandroidx/compose/runtime/SlotTable;->getGroupsSize()I HSPLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object; PLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I HPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I HSPLandroidx/compose/runtime/SlotTable;->isEmpty()Z PLandroidx/compose/runtime/SlotTable;->isEmpty()Z HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader; HPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader; HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter; HPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter; HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z HPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z HSPLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V PLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V Landroidx/compose/runtime/SlotWriter; HSPLandroidx/compose/runtime/SlotWriter;->()V PLandroidx/compose/runtime/SlotWriter;->()V HSPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V HPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V HSPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z PLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I PLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I HPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I HPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I HPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I HSPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList; PLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList; HSPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I PLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I HSPLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I PLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I HSPLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I PLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I HSPLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I PLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I HSPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object; HPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I PLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I PLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I PLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I HSPLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V PLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V HSPLandroidx/compose/runtime/SlotWriter;->access$insertSlots(IILandroidx/compose/runtime/SlotWriter;)V PLandroidx/compose/runtime/SlotWriter;->access$insertSlots(IILandroidx/compose/runtime/SlotWriter;)V HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V PLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V PLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V HSPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V PLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V HSPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V PLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V HSPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V PLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V HPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor; HPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor; HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I HPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I HSPLandroidx/compose/runtime/SlotWriter;->auxIndex(I[I)I HPLandroidx/compose/runtime/SlotWriter;->auxIndex(I[I)I HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V PLandroidx/compose/runtime/SlotWriter;->beginInsert()V HSPLandroidx/compose/runtime/SlotWriter;->close()V HPLandroidx/compose/runtime/SlotWriter;->close()V HSPLandroidx/compose/runtime/SlotWriter;->dataIndex(I[I)I HPLandroidx/compose/runtime/SlotWriter;->dataIndex(I[I)I HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I PLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I HSPLandroidx/compose/runtime/SlotWriter;->endGroup()V HPLandroidx/compose/runtime/SlotWriter;->endGroup()V HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V HPLandroidx/compose/runtime/SlotWriter;->endInsert()V HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V HPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V HSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V HPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V HSPLandroidx/compose/runtime/SlotWriter;->getClosed()Z PLandroidx/compose/runtime/SlotWriter;->getClosed()Z HSPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I PLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I HSPLandroidx/compose/runtime/SlotWriter;->getParent()I HPLandroidx/compose/runtime/SlotWriter;->getParent()I HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I HPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I HSPLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; PLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; HSPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object; HPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I HPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I HSPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I PLandroidx/compose/runtime/SlotWriter;->groupKey(I)I HSPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object; HPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I HPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I HSPLandroidx/compose/runtime/SlotWriter;->groupSlots()Landroidx/compose/runtime/SlotWriter$groupSlots$1; HPLandroidx/compose/runtime/SlotWriter;->groupSlots()Landroidx/compose/runtime/SlotWriter$groupSlots$1; HSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V HPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V HSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V HPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V HPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V HPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V HSPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V HPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V HPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V HPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object; PLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I HPLandroidx/compose/runtime/SlotWriter;->parent(I)I HSPLandroidx/compose/runtime/SlotWriter;->parent(I[I)I HPLandroidx/compose/runtime/SlotWriter;->parent(I[I)I HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V HPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z HPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z HPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V HPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V HSPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I HPLandroidx/compose/runtime/SlotWriter;->skipGroup()I HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V PLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V HSPLandroidx/compose/runtime/SlotWriter;->slotIndex(I[I)I PLandroidx/compose/runtime/SlotWriter;->slotIndex(I[I)I HSPLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V HPLandroidx/compose/runtime/SlotWriter;->startGroup()V HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V PLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;Ljava/lang/Object;Z)V HPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;Ljava/lang/Object;Z)V HSPLandroidx/compose/runtime/SlotWriter;->startNode(ILandroidx/compose/runtime/Composer$Companion$Empty$1;)V PLandroidx/compose/runtime/SlotWriter;->startNode(ILandroidx/compose/runtime/Composer$Companion$Empty$1;)V HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)V HPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V HPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V HPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V HSPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V HPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V HPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V Landroidx/compose/runtime/SlotWriter$Companion; HSPLandroidx/compose/runtime/SlotWriter$Companion;->()V PLandroidx/compose/runtime/SlotWriter$Companion;->()V HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;)Ljava/util/List; PLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;)Ljava/util/List; HSPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List; HPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List; Landroidx/compose/runtime/SlotWriter$groupSlots$1; HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->(IILandroidx/compose/runtime/SlotWriter;)V HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->(IILandroidx/compose/runtime/SlotWriter;)V HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object; HPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object; Landroidx/compose/runtime/SnapshotMutableFloatStateImpl; HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->(F)V HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->(F)V HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFloatValue()F HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFloatValue()F HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord; HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->(F)V HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->(F)V HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->getValue()F PLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->getValue()F HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->setValue(F)V PLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->setValue(F)V Landroidx/compose/runtime/SnapshotMutableIntStateImpl; HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->(I)V HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->(I)V HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord; HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->(I)V HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->(I)V HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->getValue()I PLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->getValue()I HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->setValue(I)V PLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->setValue(I)V Landroidx/compose/runtime/SnapshotMutableLongStateImpl; HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->(J)V PLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->(J)V HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getLongValue()J HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getLongValue()J HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->setLongValue(J)V HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->setLongValue(J)V Landroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord; HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->(J)V HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->(J)V HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->getValue()J PLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->getValue()J HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->setValue(J)V PLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->setValue(J)V Landroidx/compose/runtime/SnapshotMutableStateImpl; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V HPLandroidx/compose/runtime/SnapshotMutableStateImpl;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V HPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->(Ljava/lang/Object;)V HPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object; PLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V PLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V Landroidx/compose/runtime/SnapshotMutationPolicy; Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt; HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->()V PLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->()V HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal; HPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal; HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; HPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1; HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3; HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->(Landroidx/compose/runtime/ProduceStateScope;I)V PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->(Landroidx/compose/runtime/ProduceStateScope;I)V HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/SnapshotThreadLocal; HSPLandroidx/compose/runtime/SnapshotThreadLocal;->()V PLandroidx/compose/runtime/SnapshotThreadLocal;->()V HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object; HPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object; HSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V HPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V Landroidx/compose/runtime/Stack; HSPLandroidx/compose/runtime/Stack;->()V PLandroidx/compose/runtime/Stack;->()V HSPLandroidx/compose/runtime/Stack;->(I)V HPLandroidx/compose/runtime/Stack;->(I)V HSPLandroidx/compose/runtime/Stack;->add(I)V PLandroidx/compose/runtime/Stack;->add(I)V HSPLandroidx/compose/runtime/Stack;->clear()V HPLandroidx/compose/runtime/Stack;->clear()V HSPLandroidx/compose/runtime/Stack;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas; HPLandroidx/compose/runtime/Stack;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas; HSPLandroidx/compose/runtime/Stack;->getSize()I HPLandroidx/compose/runtime/Stack;->getSize()I HSPLandroidx/compose/runtime/Stack;->isEmpty()Z HPLandroidx/compose/runtime/Stack;->isEmpty()Z HSPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object; HPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object; HSPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object; HPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object; HPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object; HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)V HPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/Stack;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult$Immutable; PLandroidx/compose/runtime/Stack;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult$Immutable; HSPLandroidx/compose/runtime/Stack;->scheduleWithDelay(JLjava/lang/Runnable;)V PLandroidx/compose/runtime/Stack;->scheduleWithDelay(JLjava/lang/Runnable;)V HSPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object; HPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object; Landroidx/compose/runtime/State; Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/StaticProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State; HPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State; Landroidx/compose/runtime/StaticValueHolder; HSPLandroidx/compose/runtime/StaticValueHolder;->(Ljava/lang/Object;)V PLandroidx/compose/runtime/StaticValueHolder;->(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object; HPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object; Landroidx/compose/runtime/StructuralEqualityPolicy; HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V PLandroidx/compose/runtime/StructuralEqualityPolicy;->()V HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V PLandroidx/compose/runtime/StructuralEqualityPolicy;->()V HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z HPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z Landroidx/compose/runtime/Updater; HSPLandroidx/compose/runtime/Updater;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/runtime/Updater;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/runtime/Updater;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/runtime/Updater;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/runtime/Updater;->access$auxIndex(I[I)I PLandroidx/compose/runtime/Updater;->access$auxIndex(I[I)I HSPLandroidx/compose/runtime/Updater;->access$containsMark(I[I)Z PLandroidx/compose/runtime/Updater;->access$containsMark(I[I)Z HSPLandroidx/compose/runtime/Updater;->access$countOneBits(I)I PLandroidx/compose/runtime/Updater;->access$countOneBits(I)I HSPLandroidx/compose/runtime/Updater;->access$groupSize(I[I)I HPLandroidx/compose/runtime/Updater;->access$groupSize(I[I)I HSPLandroidx/compose/runtime/Updater;->access$hasAux(I[I)Z HPLandroidx/compose/runtime/Updater;->access$hasAux(I[I)Z HSPLandroidx/compose/runtime/Updater;->access$intersects(Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/Set;)Z HPLandroidx/compose/runtime/Updater;->access$intersects(Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/Set;)Z HSPLandroidx/compose/runtime/Updater;->access$isNode(I[I)Z HPLandroidx/compose/runtime/Updater;->access$isNode(I[I)Z HSPLandroidx/compose/runtime/Updater;->access$locationOf(Ljava/util/ArrayList;II)I HPLandroidx/compose/runtime/Updater;->access$locationOf(Ljava/util/ArrayList;II)I HSPLandroidx/compose/runtime/Updater;->access$nodeCount(I[I)I PLandroidx/compose/runtime/Updater;->access$nodeCount(I[I)I HSPLandroidx/compose/runtime/Updater;->access$objectKeyIndex(I[I)I PLandroidx/compose/runtime/Updater;->access$objectKeyIndex(I[I)I HSPLandroidx/compose/runtime/Updater;->access$search(Ljava/util/ArrayList;II)I HPLandroidx/compose/runtime/Updater;->access$search(Ljava/util/ArrayList;II)I HSPLandroidx/compose/runtime/Updater;->access$slotAnchor(I[I)I HPLandroidx/compose/runtime/Updater;->access$slotAnchor(I[I)I HSPLandroidx/compose/runtime/Updater;->access$updateGroupSize([III)V PLandroidx/compose/runtime/Updater;->access$updateGroupSize([III)V HSPLandroidx/compose/runtime/Updater;->access$updateNodeCount([III)V PLandroidx/compose/runtime/Updater;->access$updateNodeCount([III)V HSPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/runtime/Updater;->compositionLocalOf$default(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/runtime/Updater;->compositionLocalOf$default(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal; HSPLandroidx/compose/runtime/Updater;->countOneBits(I)I PLandroidx/compose/runtime/Updater;->countOneBits(I)I HSPLandroidx/compose/runtime/Updater;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; PLandroidx/compose/runtime/Updater;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/runtime/Updater;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; PLandroidx/compose/runtime/Updater;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; HSPLandroidx/compose/runtime/Updater;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; HPLandroidx/compose/runtime/Updater;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; HSPLandroidx/compose/runtime/Updater;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;)I HPLandroidx/compose/runtime/Updater;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;)I HSPLandroidx/compose/runtime/Updater;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/Updater;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/Updater;->mutableFloatStateOf(F)Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState; PLandroidx/compose/runtime/Updater;->mutableFloatStateOf(F)Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState; HSPLandroidx/compose/runtime/Updater;->mutableIntStateOf(I)Landroidx/compose/runtime/ParcelableSnapshotMutableIntState; HPLandroidx/compose/runtime/Updater;->mutableIntStateOf(I)Landroidx/compose/runtime/ParcelableSnapshotMutableIntState; HSPLandroidx/compose/runtime/Updater;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList; PLandroidx/compose/runtime/Updater;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList; HSPLandroidx/compose/runtime/Updater;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; HPLandroidx/compose/runtime/Updater;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; HSPLandroidx/compose/runtime/Updater;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; HPLandroidx/compose/runtime/Updater;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; HSPLandroidx/compose/runtime/Updater;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; PLandroidx/compose/runtime/Updater;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; HSPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/runtime/Updater;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; HPLandroidx/compose/runtime/Updater;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; HSPLandroidx/compose/runtime/Updater;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; HPLandroidx/compose/runtime/Updater;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; HSPLandroidx/compose/runtime/Updater;->rememberCompositionContext(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/CompositionContext; PLandroidx/compose/runtime/Updater;->rememberCompositionContext(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/CompositionContext; HSPLandroidx/compose/runtime/Updater;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HPLandroidx/compose/runtime/Updater;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HSPLandroidx/compose/runtime/Updater;->search(Ljava/util/ArrayList;II)I HPLandroidx/compose/runtime/Updater;->search(Ljava/util/ArrayList;II)I HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/Updater;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow; PLandroidx/compose/runtime/Updater;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow; HSPLandroidx/compose/runtime/Updater;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; HPLandroidx/compose/runtime/Updater;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; HSPLandroidx/compose/runtime/Updater;->updateChangedFlags(I)I HPLandroidx/compose/runtime/Updater;->updateChangedFlags(I)I HSPLandroidx/compose/runtime/Updater;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HPLandroidx/compose/runtime/Updater;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; Landroidx/compose/runtime/WeakReference; HSPLandroidx/compose/runtime/WeakReference;->(Ljava/lang/Object;)V PLandroidx/compose/runtime/WeakReference;->(Ljava/lang/Object;)V Landroidx/compose/runtime/changelist/ChangeList; HSPLandroidx/compose/runtime/changelist/ChangeList;->()V HPLandroidx/compose/runtime/changelist/ChangeList;->()V HSPLandroidx/compose/runtime/changelist/ChangeList;->clear()V HPLandroidx/compose/runtime/changelist/ChangeList;->clear()V HSPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V PLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z PLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z HSPLandroidx/compose/runtime/changelist/ChangeList;->isNotEmpty()Z PLandroidx/compose/runtime/changelist/ChangeList;->isNotEmpty()Z HSPLandroidx/compose/runtime/changelist/ChangeList;->pushAdvanceSlotsBy(I)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushAdvanceSlotsBy(I)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushDowns([Ljava/lang/Object;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushDowns([Ljava/lang/Object;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCurrentGroup()V PLandroidx/compose/runtime/changelist/ChangeList;->pushEndCurrentGroup()V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureGroupStarted(Landroidx/compose/runtime/Anchor;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureGroupStarted(Landroidx/compose/runtime/Anchor;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureRootStarted()V HPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureRootStarted()V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushMoveCurrentGroup(I)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushMoveCurrentGroup(I)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushRemember(Landroidx/compose/runtime/RememberObserver;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushRemember(Landroidx/compose/runtime/RememberObserver;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveCurrentGroup()V HPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveCurrentGroup()V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveNode(II)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveNode(II)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushSideEffect(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushSideEffect(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateAuxData(Ljava/lang/Object;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateAuxData(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateValue(ILjava/lang/Object;)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateValue(ILjava/lang/Object;)V HSPLandroidx/compose/runtime/changelist/ChangeList;->pushUps(I)V HPLandroidx/compose/runtime/changelist/ChangeList;->pushUps(I)V Landroidx/compose/runtime/changelist/ComposerChangeListWriter; HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCurrentGroup()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCurrentGroup()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endNodeMovement()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endNodeMovement()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endRoot()V PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endRoot()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->finalizeComposition()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->finalizeComposition()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getChangeList()Landroidx/compose/runtime/changelist/ChangeList; PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getChangeList()Landroidx/compose/runtime/changelist/ChangeList; HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getReader()Landroidx/compose/runtime/SlotReader; HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getReader()Landroidx/compose/runtime/SlotReader; HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveCurrentGroup(I)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveCurrentGroup(I)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveDown(Ljava/lang/Object;)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveDown(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveReaderRelativeTo(I)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveReaderRelativeTo(I)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->releaseMovableContent()V PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->releaseMovableContent()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->remember(Landroidx/compose/runtime/RememberObserver;)V PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->remember(Landroidx/compose/runtime/RememberObserver;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeCurrentGroup()V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeCurrentGroup()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->resetTransientState()V PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->resetTransientState()V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->setChangeList(Landroidx/compose/runtime/changelist/ChangeList;)V PLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->setChangeList(Landroidx/compose/runtime/changelist/ChangeList;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->sideEffect(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->sideEffect(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V Landroidx/compose/runtime/changelist/FixupList; HSPLandroidx/compose/runtime/changelist/FixupList;->()V PLandroidx/compose/runtime/changelist/FixupList;->()V HSPLandroidx/compose/runtime/changelist/FixupList;->createAndInsertNode(Lkotlin/jvm/functions/Function0;ILandroidx/compose/runtime/Anchor;)V HPLandroidx/compose/runtime/changelist/FixupList;->createAndInsertNode(Lkotlin/jvm/functions/Function0;ILandroidx/compose/runtime/Anchor;)V HSPLandroidx/compose/runtime/changelist/FixupList;->endNodeInsert()V PLandroidx/compose/runtime/changelist/FixupList;->endNodeInsert()V HSPLandroidx/compose/runtime/changelist/FixupList;->executeAndFlushAllPendingFixups(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/FixupList;->executeAndFlushAllPendingFixups(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HSPLandroidx/compose/runtime/changelist/FixupList;->isEmpty()Z PLandroidx/compose/runtime/changelist/FixupList;->isEmpty()Z HSPLandroidx/compose/runtime/changelist/FixupList;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/runtime/changelist/FixupList;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V Landroidx/compose/runtime/changelist/Operation; HSPLandroidx/compose/runtime/changelist/Operation;->(II)V PLandroidx/compose/runtime/changelist/Operation;->(II)V HSPLandroidx/compose/runtime/changelist/Operation;->(III)V PLandroidx/compose/runtime/changelist/Operation;->(III)V HSPLandroidx/compose/runtime/changelist/Operation;->getInts()I HPLandroidx/compose/runtime/changelist/Operation;->getInts()I HSPLandroidx/compose/runtime/changelist/Operation;->getObjects()I HPLandroidx/compose/runtime/changelist/Operation;->getObjects()I Landroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy; HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->()V PLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->()V HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->()V PLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->()V HSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$Downs; HSPLandroidx/compose/runtime/changelist/Operation$Downs;->()V PLandroidx/compose/runtime/changelist/Operation$Downs;->()V HSPLandroidx/compose/runtime/changelist/Operation$Downs;->()V PLandroidx/compose/runtime/changelist/Operation$Downs;->()V HSPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$EndCompositionScope; HSPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->()V PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->()V HSPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->()V PLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->()V HSPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$EndCurrentGroup; HSPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->()V PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->()V HSPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->()V PLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->()V HSPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$EnsureGroupStarted; HSPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->()V PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->()V HSPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->()V PLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->()V HSPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted; HSPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->()V PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->()V HSPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->()V PLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->()V HSPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$InsertNodeFixup; HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->()V PLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->()V HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->()V PLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->()V HSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$InsertSlots; HSPLandroidx/compose/runtime/changelist/Operation$InsertSlots;->()V PLandroidx/compose/runtime/changelist/Operation$InsertSlots;->()V HSPLandroidx/compose/runtime/changelist/Operation$InsertSlots;->()V PLandroidx/compose/runtime/changelist/Operation$InsertSlots;->()V HSPLandroidx/compose/runtime/changelist/Operation$InsertSlots;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$InsertSlots;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups; HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->()V PLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->()V HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->()V PLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->()V HSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$MoveCurrentGroup; HSPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->()V PLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->()V HSPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->()V PLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->()V HSPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup; HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->()V PLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->()V HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->()V PLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->()V HSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$Remember; HSPLandroidx/compose/runtime/changelist/Operation$Remember;->()V PLandroidx/compose/runtime/changelist/Operation$Remember;->()V HSPLandroidx/compose/runtime/changelist/Operation$Remember;->()V PLandroidx/compose/runtime/changelist/Operation$Remember;->()V HSPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup; HSPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->()V PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->()V HSPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->()V PLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->()V HSPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$RemoveNode; HSPLandroidx/compose/runtime/changelist/Operation$RemoveNode;->()V PLandroidx/compose/runtime/changelist/Operation$RemoveNode;->()V HSPLandroidx/compose/runtime/changelist/Operation$RemoveNode;->()V PLandroidx/compose/runtime/changelist/Operation$RemoveNode;->()V HSPLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$SideEffect; HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->()V PLandroidx/compose/runtime/changelist/Operation$SideEffect;->()V HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->()V PLandroidx/compose/runtime/changelist/Operation$SideEffect;->()V HSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$UpdateAuxData; HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->()V PLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->()V HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->()V PLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->()V HSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$UpdateNode; HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->()V PLandroidx/compose/runtime/changelist/Operation$UpdateNode;->()V HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->()V PLandroidx/compose/runtime/changelist/Operation$UpdateNode;->()V HSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$UpdateValue; HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->()V PLandroidx/compose/runtime/changelist/Operation$UpdateValue;->()V HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->()V PLandroidx/compose/runtime/changelist/Operation$UpdateValue;->()V HSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$Ups; HSPLandroidx/compose/runtime/changelist/Operation$Ups;->()V PLandroidx/compose/runtime/changelist/Operation$Ups;->()V HSPLandroidx/compose/runtime/changelist/Operation$Ups;->()V PLandroidx/compose/runtime/changelist/Operation$Ups;->()V HSPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V Landroidx/compose/runtime/changelist/Operation$UseCurrentNode; Landroidx/compose/runtime/changelist/Operations; HSPLandroidx/compose/runtime/changelist/Operations;->()V HPLandroidx/compose/runtime/changelist/Operations;->()V HSPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I HPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I HSPLandroidx/compose/runtime/changelist/Operations;->access$getIntArgs$p(Landroidx/compose/runtime/changelist/Operations;)[I PLandroidx/compose/runtime/changelist/Operations;->access$getIntArgs$p(Landroidx/compose/runtime/changelist/Operations;)[I HSPLandroidx/compose/runtime/changelist/Operations;->access$getObjectArgs$p(Landroidx/compose/runtime/changelist/Operations;)[Ljava/lang/Object; PLandroidx/compose/runtime/changelist/Operations;->access$getObjectArgs$p(Landroidx/compose/runtime/changelist/Operations;)[Ljava/lang/Object; HSPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodes$p(Landroidx/compose/runtime/changelist/Operations;)[Landroidx/compose/runtime/changelist/Operation; HPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodes$p(Landroidx/compose/runtime/changelist/Operations;)[Landroidx/compose/runtime/changelist/Operation; HSPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodesSize$p(Landroidx/compose/runtime/changelist/Operations;)I PLandroidx/compose/runtime/changelist/Operations;->access$getOpCodesSize$p(Landroidx/compose/runtime/changelist/Operations;)I HSPLandroidx/compose/runtime/changelist/Operations;->access$getPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;)I HPLandroidx/compose/runtime/changelist/Operations;->access$getPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;)I HSPLandroidx/compose/runtime/changelist/Operations;->access$getPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;)I PLandroidx/compose/runtime/changelist/Operations;->access$getPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;)I HSPLandroidx/compose/runtime/changelist/Operations;->access$setPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;I)V HPLandroidx/compose/runtime/changelist/Operations;->access$setPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;I)V HSPLandroidx/compose/runtime/changelist/Operations;->access$setPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;I)V HPLandroidx/compose/runtime/changelist/Operations;->access$setPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;I)V HSPLandroidx/compose/runtime/changelist/Operations;->access$topIntIndexOf-w8GmfQM(Landroidx/compose/runtime/changelist/Operations;I)I HPLandroidx/compose/runtime/changelist/Operations;->access$topIntIndexOf-w8GmfQM(Landroidx/compose/runtime/changelist/Operations;I)I HSPLandroidx/compose/runtime/changelist/Operations;->access$topObjectIndexOf-31yXWZQ(Landroidx/compose/runtime/changelist/Operations;I)I HPLandroidx/compose/runtime/changelist/Operations;->access$topObjectIndexOf-31yXWZQ(Landroidx/compose/runtime/changelist/Operations;I)I HSPLandroidx/compose/runtime/changelist/Operations;->clear()V HPLandroidx/compose/runtime/changelist/Operations;->clear()V HSPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V HSPLandroidx/compose/runtime/changelist/Operations;->isEmpty()Z PLandroidx/compose/runtime/changelist/Operations;->isEmpty()Z HSPLandroidx/compose/runtime/changelist/Operations;->isNotEmpty()Z PLandroidx/compose/runtime/changelist/Operations;->isNotEmpty()Z HSPLandroidx/compose/runtime/changelist/Operations;->popInto(Landroidx/compose/runtime/changelist/Operations;)V HPLandroidx/compose/runtime/changelist/Operations;->popInto(Landroidx/compose/runtime/changelist/Operations;)V HSPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V HPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V HSPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V HPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V Landroidx/compose/runtime/changelist/Operations$OpIterator; HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->(Landroidx/compose/runtime/changelist/Operations;)V HPLandroidx/compose/runtime/changelist/Operations$OpIterator;->(Landroidx/compose/runtime/changelist/Operations;)V HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I HPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object; HPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getOperation()Landroidx/compose/runtime/changelist/Operation; HPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getOperation()Landroidx/compose/runtime/changelist/Operation; HSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->next()Z HPLandroidx/compose/runtime/changelist/Operations$OpIterator;->next()Z Landroidx/compose/runtime/collection/IdentityArrayIntMap; HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->()V HPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->()V HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayIntMap;I)V PLandroidx/compose/runtime/collection/IdentityArrayIntMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayIntMap;I)V HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I HPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object; PLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I PLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I PLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I Landroidx/compose/runtime/collection/IdentityArrayMap; HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->()V HPLandroidx/compose/runtime/collection/IdentityArrayMap;->()V HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayMap;I)V PLandroidx/compose/runtime/collection/IdentityArrayMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayMap;I)V HPLandroidx/compose/runtime/collection/IdentityArrayMap;->clear()V HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I HPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys()[Ljava/lang/Object; HPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys()[Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize()I HPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize()I HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues()[Ljava/lang/Object; HPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues()[Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z PLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/collection/IdentityArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V Landroidx/compose/runtime/collection/IdentityArraySet; HSPLandroidx/compose/runtime/collection/IdentityArraySet;->()V PLandroidx/compose/runtime/collection/IdentityArraySet;->()V HSPLandroidx/compose/runtime/collection/IdentityArraySet;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArraySet;I)V PLandroidx/compose/runtime/collection/IdentityArraySet;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArraySet;I)V HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V HPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V HPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I HPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object; PLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z PLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z PLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator; PLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator; HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I PLandroidx/compose/runtime/collection/IdentityArraySet;->size()I Landroidx/compose/runtime/collection/IdentityArraySet$iterator$1; HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->(Landroidx/compose/runtime/collection/IdentityArraySet;)V HPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->(Landroidx/compose/runtime/collection/IdentityArraySet;)V HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z PLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object; PLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object; Landroidx/compose/runtime/collection/IdentityScopeMap; HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->()V HPLandroidx/compose/runtime/collection/IdentityScopeMap;->()V HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I HPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet; HPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet; HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I HPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet; PLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet; HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I PLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I PLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object; PLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V HPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V PLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V Landroidx/compose/runtime/collection/IntMap; HSPLandroidx/compose/runtime/collection/IntMap;->()V HPLandroidx/compose/runtime/collection/IntMap;->()V HSPLandroidx/compose/runtime/collection/IntMap;->clear()V HPLandroidx/compose/runtime/collection/IntMap;->clear()V HSPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object; PLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object; PLandroidx/compose/runtime/collection/IntMap;->set(ILjava/lang/Object;)V Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/runtime/collection/MutableVector;->([Ljava/lang/Object;)V HPLandroidx/compose/runtime/collection/MutableVector;->([Ljava/lang/Object;)V HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V PLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V HPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V HPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List; PLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List; HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V HPLandroidx/compose/runtime/collection/MutableVector;->clear()V HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z PLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V HPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V HSPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object; HPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/MutableVector;->getSize()I HPLandroidx/compose/runtime/collection/MutableVector;->getSize()I HSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I HPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z PLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z HPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object; HPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V HPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V HSPLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V PLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V Landroidx/compose/runtime/collection/MutableVector$MutableVectorList; HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->(Landroidx/compose/runtime/collection/MutableVector;)V HPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->(Landroidx/compose/runtime/collection/MutableVector;)V HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object; HPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z PLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator; HPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator; HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I HPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I Landroidx/compose/runtime/collection/MutableVector$VectorListIterator; HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->(ILjava/util/List;)V HPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->(ILjava/util/List;)V HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z HPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object; HPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object; Landroidx/compose/runtime/collection/MutableVectorKt; HSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(ILjava/util/List;)V HPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(ILjava/util/List;)V Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList; Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet; Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder; Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership()Lorg/acra/file/CrashReportPersister; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership()Lorg/acra/file/CrashReportPersister; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOwnership(Lorg/acra/file/CrashReportPersister;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOwnership(Lorg/acra/file/CrashReportPersister;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Lorg/acra/file/CrashReportPersister;)V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Lorg/acra/file/CrashReportPersister;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)[Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)[Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/IntStack; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/IntStack; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateNodeAtIndex(IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateNodeAtIndex(IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->(I)V HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->(I)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object; HPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->(Ljava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->(Ljava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasNext()Z PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasPrevious()Z PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getNext()Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getPrevious()Ljava/lang/Object; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->withNext(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->withPrevious(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V PLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V Landroidx/compose/runtime/internal/ComposableLambdaImpl; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->(IZ)V HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->(IZ)V HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V HPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V HPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2; HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V PLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->()V PLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->()V HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V PLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->access$getEmpty$cp()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; PLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->access$getEmpty$cp()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z PLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder; HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V PLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; Landroidx/compose/runtime/internal/ThreadMap; HSPLandroidx/compose/runtime/internal/ThreadMap;->(I[J[Ljava/lang/Object;)V PLandroidx/compose/runtime/internal/ThreadMap;->(I[J[Ljava/lang/Object;)V HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I HPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I HSPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object; HPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object; HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap; PLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap; HSPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z HPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z Landroidx/compose/runtime/internal/ThreadMapKt; HSPLandroidx/compose/runtime/internal/ThreadMapKt;->()V PLandroidx/compose/runtime/internal/ThreadMapKt;->()V HSPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap; PLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap; Landroidx/compose/runtime/saveable/MapSaverKt; HSPLandroidx/compose/runtime/saveable/MapSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/runtime/saveable/MapSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; HSPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/saveable/SaveableStateHolder; HPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/saveable/SaveableStateHolder; Landroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1; HSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;->(Ljava/lang/Object;I)V PLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2; HSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;->(Ljava/lang/Object;I)V PLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1; HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V PLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object; Landroidx/compose/runtime/saveable/SaveableHolder; HSPLandroidx/compose/runtime/saveable/SaveableHolder;->(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V PLandroidx/compose/runtime/saveable/SaveableHolder;->(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V HSPLandroidx/compose/runtime/saveable/SaveableHolder;->canBeSaved(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/saveable/SaveableHolder;->canBeSaved(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/saveable/SaveableHolder;->getValueIfInputsDidntChange([Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/saveable/SaveableHolder;->getValueIfInputsDidntChange([Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object; PLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object; HSPLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V HPLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V HSPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V HPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V HSPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V HPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V HSPLandroidx/compose/runtime/saveable/SaveableHolder;->update(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V HPLandroidx/compose/runtime/saveable/SaveableHolder;->update(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V Landroidx/compose/runtime/saveable/SaveableStateHolder; Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->()V PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->()V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;)V HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/LinkedHashMap; PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/LinkedHashMap; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->removeState(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$2; Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1; HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V PLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->(I)V PLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->(I)V HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object; Landroidx/compose/runtime/saveable/SaveableStateRegistry; Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/LinkedHashMap; PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/LinkedHashMap; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map; HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V Landroidx/compose/runtime/saveable/SaveableStateRegistryKt; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->()V PLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->()V HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry; PLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry; HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/runtime/saveable/SaverKt; HSPLandroidx/compose/runtime/saveable/SaverKt;->()V PLandroidx/compose/runtime/saveable/SaverKt;->()V HSPLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/runtime/saveable/SaverKt;->autoSaver()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLandroidx/compose/runtime/saveable/SaverKt;->autoSaver()Landroidx/compose/runtime/saveable/SaverKt$Saver$1; Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$1; HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V PLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->(I)V PLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->(I)V HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$2; HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V PLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->(I)V PLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->(I)V Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/saveable/SaverScope; Landroidx/compose/runtime/snapshots/GlobalSnapshot; HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V HPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V HPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V PLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; PLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1; HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->(Ljava/lang/Object;I)V PLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)V HPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)V Landroidx/compose/runtime/snapshots/MutableSnapshot; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->()V PLandroidx/compose/runtime/snapshots/MutableSnapshot;->()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion; HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z PLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet; HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; PLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I PLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot$Companion; HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot$Companion; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V PLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release()V PLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release()V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V PLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned()V HPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned()V Landroidx/compose/runtime/snapshots/NestedMutableSnapshot; HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V PLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion; HPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion; HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V HPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V Landroidx/compose/runtime/snapshots/ObserverHandle; Landroidx/compose/runtime/snapshots/ReadonlySnapshot; HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V HPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release()V HPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release()V Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V HPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V HPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V PLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V HPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V HSPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z HPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I HPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V HPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V PLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V HPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V HSPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release()V PLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release()V HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V PLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V PLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V HSPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I PLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I HSPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V PLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V Landroidx/compose/runtime/snapshots/Snapshot$Companion; HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->()V PLandroidx/compose/runtime/snapshots/Snapshot$Companion;->()V HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle; HPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle; HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle; PLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle; Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2; HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->(Lkotlin/jvm/internal/Lambda;I)V HPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->(Lkotlin/jvm/internal/Lambda;I)V HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V HPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure; Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success; HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V PLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V PLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap; HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->()V PLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I HPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I HPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V HPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V PLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->()V PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->(JJI[I)V HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->(JJI[I)V HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet; PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator; PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; Landroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/snapshots/SnapshotKt; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->()V PLandroidx/compose/runtime/snapshots/SnapshotKt;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$checkAndOverwriteUnusedRecordsLocked()V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$checkAndOverwriteUnusedRecordsLocked()V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List; PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference; PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1; PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List; PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet; PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal; PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setApplyObservers$p(Ljava/util/List;)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setApplyObservers$p(Ljava/util/List;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setGlobalWriteObservers$p(Ljava/util/List;)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setGlobalWriteObservers$p(Ljava/util/List;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/GlobalSnapshot;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/GlobalSnapshot;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V HPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V HPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object; PLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V HPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z HPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V PLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I HPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V PLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->(I)V PLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->(I)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V HPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V HPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V Landroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->(ILkotlin/jvm/functions/Function1;)V HPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->(ILkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/snapshots/SnapshotMutableState; Landroidx/compose/runtime/snapshots/SnapshotStateList; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->clear()V HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->clear()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z PLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z PLandroidx/compose/runtime/snapshots/SnapshotStateList;->iterator()Ljava/util/Iterator; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator; HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I PLandroidx/compose/runtime/snapshots/SnapshotStateList;->toArray()[Ljava/lang/Object; Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I HPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V PLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V Landroidx/compose/runtime/snapshots/SnapshotStateListKt; HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->()V PLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V HPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V Landroidx/compose/runtime/snapshots/SnapshotStateObserver; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector; PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clear()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->stop()V Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clear()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->done()V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->done()V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->start()V HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->start()V Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V PLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object; Landroidx/compose/runtime/snapshots/SnapshotWeakSet; HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->()V PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->()V HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->add(Ljava/lang/Object;)V PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->add(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getHashes$runtime_release()[I PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getHashes$runtime_release()[I HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getSize$runtime_release()I PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getSize$runtime_release()I HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getValues$runtime_release()[Landroidx/compose/runtime/WeakReference; PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getValues$runtime_release()[Landroidx/compose/runtime/WeakReference; HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->setSize$runtime_release(I)V PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->setSize$runtime_release(I)V Landroidx/compose/runtime/snapshots/StateListIterator; HSPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V HPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V HSPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z HPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z HSPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object; HPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V HPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V Landroidx/compose/runtime/snapshots/StateObject; Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/StateRecord;->()V HPLandroidx/compose/runtime/snapshots/StateRecord;->()V HSPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord; HPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I HPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I HSPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V HPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V HPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot; HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion; PLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion; HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot; HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot; HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; HPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; Landroidx/compose/runtime/snapshots/TransparentObserverSnapshot; Landroidx/compose/runtime/tooling/InspectionTablesKt; HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->()V PLandroidx/compose/runtime/tooling/InspectionTablesKt;->()V HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1; HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V PLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V PLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object; PLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/ActualKt; HSPLandroidx/compose/ui/ActualKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/ActualKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/ActualKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/ActualKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/ActualKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/ActualKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/Alignment; Landroidx/compose/ui/Alignment$Companion; HSPLandroidx/compose/ui/Alignment$Companion;->()V PLandroidx/compose/ui/Alignment$Companion;->()V HSPLandroidx/compose/ui/Alignment$Companion;->getBottom()Landroidx/compose/ui/BiasAlignment$Vertical; PLandroidx/compose/ui/Alignment$Companion;->getBottom()Landroidx/compose/ui/BiasAlignment$Vertical; HSPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/BiasAlignment; PLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/BiasAlignment; HSPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/BiasAlignment; PLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/BiasAlignment; HSPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/BiasAlignment$Horizontal; PLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/BiasAlignment$Horizontal; HSPLandroidx/compose/ui/Alignment$Companion;->getCenterStart()Landroidx/compose/ui/BiasAlignment; PLandroidx/compose/ui/Alignment$Companion;->getCenterStart()Landroidx/compose/ui/BiasAlignment; HSPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/BiasAlignment$Vertical; PLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/BiasAlignment$Vertical; HSPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/BiasAlignment$Horizontal; PLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/BiasAlignment$Horizontal; HSPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/BiasAlignment$Vertical; PLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/BiasAlignment$Vertical; HSPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/BiasAlignment; HPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/BiasAlignment; Landroidx/compose/ui/Alignment$Horizontal; Landroidx/compose/ui/Alignment$Vertical; Landroidx/compose/ui/BiasAlignment; HSPLandroidx/compose/ui/BiasAlignment;->(FF)V PLandroidx/compose/ui/BiasAlignment;->(FF)V HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J HPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/BiasAlignment$Horizontal; HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->(F)V PLandroidx/compose/ui/BiasAlignment$Horizontal;->(F)V HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I HPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/BiasAlignment$Vertical; HSPLandroidx/compose/ui/BiasAlignment$Vertical;->(F)V PLandroidx/compose/ui/BiasAlignment$Vertical;->(F)V HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I HPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/CombinedModifier; HSPLandroidx/compose/ui/CombinedModifier;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V HPLandroidx/compose/ui/CombinedModifier;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z HPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier; Landroidx/compose/ui/ComposedModifier; HSPLandroidx/compose/ui/ComposedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V HPLandroidx/compose/ui/ComposedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V HSPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3; PLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3; Landroidx/compose/ui/ComposedModifierKt$materialize$1; HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V PLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V PLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/ComposedModifierKt$materialize$result$1; HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->(Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->(Landroidx/compose/runtime/Composer;)V HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/CompositionLocalMapInjectionElement; Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/Modifier;->()V PLandroidx/compose/ui/Modifier;->()V HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/Modifier$Companion; HSPLandroidx/compose/ui/Modifier$Companion;->()V PLandroidx/compose/ui/Modifier$Companion;->()V HSPLandroidx/compose/ui/Modifier$Companion;->()V PLandroidx/compose/ui/Modifier$Companion;->()V HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z HPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/Modifier$Element; HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z HPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/Modifier$Node;->()V HPLandroidx/compose/ui/Modifier$Node;->()V HSPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I HPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I HSPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; HPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; HSPLandroidx/compose/ui/Modifier$Node;->getInsertedNodeAwaitingAttachForInvalidation$ui_release()Z PLandroidx/compose/ui/Modifier$Node;->getInsertedNodeAwaitingAttachForInvalidation$ui_release()Z HSPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I HPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I HSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/Modifier$Node;->getOwnerScope$ui_release()Landroidx/compose/ui/node/ObserverNodeOwnerScope; PLandroidx/compose/ui/Modifier$Node;->getOwnerScope$ui_release()Landroidx/compose/ui/node/ObserverNodeOwnerScope; HSPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z HPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z HSPLandroidx/compose/ui/Modifier$Node;->getUpdatedNodeAwaitingAttachForInvalidation$ui_release()Z PLandroidx/compose/ui/Modifier$Node;->getUpdatedNodeAwaitingAttachForInvalidation$ui_release()Z HSPLandroidx/compose/ui/Modifier$Node;->isAttached()Z HPLandroidx/compose/ui/Modifier$Node;->isAttached()Z HSPLandroidx/compose/ui/Modifier$Node;->isValidOwnerScope()Z PLandroidx/compose/ui/Modifier$Node;->isValidOwnerScope()Z HSPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V HPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V HSPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V HPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V HPLandroidx/compose/ui/Modifier$Node;->onAttach()V HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V HPLandroidx/compose/ui/Modifier$Node;->onDetach()V HSPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V HPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V HSPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V HPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V HSPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V PLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V HSPLandroidx/compose/ui/Modifier$Node;->setAsDelegateTo$ui_release(Landroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/ui/Modifier$Node;->setAsDelegateTo$ui_release(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/Modifier$Node;->setInsertedNodeAwaitingAttachForInvalidation$ui_release(Z)V HPLandroidx/compose/ui/Modifier$Node;->setInsertedNodeAwaitingAttachForInvalidation$ui_release(Z)V HSPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V PLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V HSPLandroidx/compose/ui/Modifier$Node;->setOwnerScope$ui_release(Landroidx/compose/ui/node/ObserverNodeOwnerScope;)V PLandroidx/compose/ui/Modifier$Node;->setOwnerScope$ui_release(Landroidx/compose/ui/node/ObserverNodeOwnerScope;)V HSPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/Modifier$Node;->setUpdatedNodeAwaitingAttachForInvalidation$ui_release(Z)V PLandroidx/compose/ui/Modifier$Node;->setUpdatedNodeAwaitingAttachForInvalidation$ui_release(Z)V HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V Landroidx/compose/ui/ModifierNodeDetachedCancellationException; HSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->()V PLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->()V HSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->fillInStackTrace()Ljava/lang/Throwable; PLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->fillInStackTrace()Ljava/lang/Throwable; Landroidx/compose/ui/MotionDurationScale; HSPLandroidx/compose/ui/MotionDurationScale;->()V PLandroidx/compose/ui/MotionDurationScale;->()V HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key; HPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key; Landroidx/compose/ui/MotionDurationScale$Key; HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V PLandroidx/compose/ui/MotionDurationScale$Key;->()V HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V PLandroidx/compose/ui/MotionDurationScale$Key;->()V Landroidx/compose/ui/TempListUtilsKt; HSPLandroidx/compose/ui/TempListUtilsKt;->fastJoinToString$default(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String; HPLandroidx/compose/ui/TempListUtilsKt;->fastJoinToString$default(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String; Landroidx/compose/ui/autofill/AndroidAutofill; HSPLandroidx/compose/ui/autofill/AndroidAutofill;->(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V PLandroidx/compose/ui/autofill/AndroidAutofill;->(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager; PLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager; Landroidx/compose/ui/autofill/AutofillCallback; HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V PLandroidx/compose/ui/autofill/AutofillCallback;->()V HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V PLandroidx/compose/ui/autofill/AutofillCallback;->()V HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V PLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V Landroidx/compose/ui/autofill/AutofillTree; HSPLandroidx/compose/ui/autofill/AutofillTree;->()V PLandroidx/compose/ui/autofill/AutofillTree;->()V Landroidx/compose/ui/draw/BlurKt; HSPLandroidx/compose/ui/draw/BlurKt;->CacheDrawModifierNode(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/CacheDrawModifierNode; PLandroidx/compose/ui/draw/BlurKt;->CacheDrawModifierNode(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/CacheDrawModifierNode; HSPLandroidx/compose/ui/draw/BlurKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/draw/BlurKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/draw/BlurKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/draw/BlurKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/draw/BlurKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/draw/BlurKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/draw/BlurKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/draw/BlurKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/draw/BlurKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/draw/BlurKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/draw/BlurKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/draw/BlurKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/draw/BlurKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;Z)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/draw/BlurKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;Z)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/draw/BuildDrawCacheParams; Landroidx/compose/ui/draw/CacheDrawModifierNode; Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl; HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getBlock()Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getBlock()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J HPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1; HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->(Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;Landroidx/compose/ui/draw/CacheDrawScope;)V PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->(Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;Landroidx/compose/ui/draw/CacheDrawScope;)V HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()Ljava/lang/Object; PLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/draw/CacheDrawScope; HSPLandroidx/compose/ui/draw/CacheDrawScope;->()V PLandroidx/compose/ui/draw/CacheDrawScope;->()V HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F PLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDrawResult$ui_release()Landroidx/compose/ui/draw/DrawResult; PLandroidx/compose/ui/draw/CacheDrawScope;->getDrawResult$ui_release()Landroidx/compose/ui/draw/DrawResult; HSPLandroidx/compose/ui/draw/CacheDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/draw/CacheDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J PLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J HSPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult; PLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult; HSPLandroidx/compose/ui/draw/CacheDrawScope;->setCacheParams$ui_release(Landroidx/compose/ui/draw/BuildDrawCacheParams;)V PLandroidx/compose/ui/draw/CacheDrawScope;->setCacheParams$ui_release(Landroidx/compose/ui/draw/BuildDrawCacheParams;)V HSPLandroidx/compose/ui/draw/CacheDrawScope;->setDrawResult$ui_release()V PLandroidx/compose/ui/draw/CacheDrawScope;->setDrawResult$ui_release()V Landroidx/compose/ui/draw/DrawBackgroundModifier; HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/DrawBackgroundModifier;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V PLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V Landroidx/compose/ui/draw/DrawBehindElement; HSPLandroidx/compose/ui/draw/DrawBehindElement;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/DrawBehindElement;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/ui/draw/DrawModifier; Landroidx/compose/ui/draw/DrawResult; HSPLandroidx/compose/ui/draw/DrawResult;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/DrawResult;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/draw/DrawResult;->getBlock$ui_release()Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/draw/DrawResult;->getBlock$ui_release()Lkotlin/jvm/functions/Function1; Landroidx/compose/ui/draw/DrawWithContentElement; HSPLandroidx/compose/ui/draw/DrawWithContentElement;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/DrawWithContentElement;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/draw/DrawWithContentElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/draw/DrawWithContentElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/ui/draw/DrawWithContentModifier; HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/DrawWithContentModifier;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V PLandroidx/compose/ui/draw/DrawWithContentModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/draw/DrawWithContentModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams; HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V PLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V PLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V Landroidx/compose/ui/draw/PainterElement; HSPLandroidx/compose/ui/draw/PainterElement;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V PLandroidx/compose/ui/draw/PainterElement;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/ui/draw/PainterNode; HSPLandroidx/compose/ui/draw/PainterNode;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V HPLandroidx/compose/ui/draw/PainterNode;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/ui/draw/PainterNode;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; PLandroidx/compose/ui/draw/PainterNode;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; HSPLandroidx/compose/ui/draw/PainterNode;->getShouldAutoInvalidate()Z HPLandroidx/compose/ui/draw/PainterNode;->getShouldAutoInvalidate()Z HSPLandroidx/compose/ui/draw/PainterNode;->getSizeToIntrinsics()Z PLandroidx/compose/ui/draw/PainterNode;->getSizeToIntrinsics()Z HSPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z PLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z HPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z HPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z HSPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J HPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J HSPLandroidx/compose/ui/draw/PainterNode;->setAlignment(Landroidx/compose/ui/Alignment;)V PLandroidx/compose/ui/draw/PainterNode;->setAlignment(Landroidx/compose/ui/Alignment;)V HSPLandroidx/compose/ui/draw/PainterNode;->setAlpha(F)V PLandroidx/compose/ui/draw/PainterNode;->setAlpha(F)V HSPLandroidx/compose/ui/draw/PainterNode;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V PLandroidx/compose/ui/draw/PainterNode;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/draw/PainterNode;->setContentScale(Landroidx/compose/ui/layout/ContentScale;)V PLandroidx/compose/ui/draw/PainterNode;->setContentScale(Landroidx/compose/ui/layout/ContentScale;)V HSPLandroidx/compose/ui/draw/PainterNode;->setPainter(Landroidx/compose/ui/graphics/painter/Painter;)V PLandroidx/compose/ui/draw/PainterNode;->setPainter(Landroidx/compose/ui/graphics/painter/Painter;)V HSPLandroidx/compose/ui/draw/PainterNode;->setSizeToIntrinsics(Z)V PLandroidx/compose/ui/draw/PainterNode;->setSizeToIntrinsics(Z)V Landroidx/compose/ui/draw/PainterNode$measure$1; HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V PLandroidx/compose/ui/draw/PainterNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/focus/FocusEventModifierNode; Landroidx/compose/ui/focus/FocusInvalidationManager; HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/focus/FocusInvalidationManager;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet; HPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet; HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet; HPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet; HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet; HPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet; HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V HPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V PLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V PLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V HPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V Landroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1; HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->(Landroidx/compose/ui/focus/FocusInvalidationManager;)V PLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->(Landroidx/compose/ui/focus/FocusInvalidationManager;)V HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/focus/FocusModifierKt; HSPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl; HPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl; HSPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V HPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V Landroidx/compose/ui/focus/FocusOwner; Landroidx/compose/ui/focus/FocusOwnerImpl; HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/focus/FocusOwnerImpl;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getFocusTransactionManager()Landroidx/compose/ui/focus/FocusTransactionManager; PLandroidx/compose/ui/focus/FocusOwnerImpl;->getFocusTransactionManager()Landroidx/compose/ui/focus/FocusTransactionManager; HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1; PLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1; HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetNode; PLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetNode; HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V HPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V PLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V PLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1; HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->(Landroidx/compose/ui/focus/FocusOwnerImpl;)V PLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->(Landroidx/compose/ui/focus/FocusOwnerImpl;)V HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/ui/focus/FocusProperties; Landroidx/compose/ui/focus/FocusPropertiesModifierNode; Landroidx/compose/ui/focus/FocusRequester; HSPLandroidx/compose/ui/focus/FocusRequester;->()V PLandroidx/compose/ui/focus/FocusRequester;->()V HSPLandroidx/compose/ui/focus/FocusRequester;->()V PLandroidx/compose/ui/focus/FocusRequester;->()V Landroidx/compose/ui/focus/FocusRequesterModifierNode; Landroidx/compose/ui/focus/FocusState; Landroidx/compose/ui/focus/FocusStateImpl; HSPLandroidx/compose/ui/focus/FocusStateImpl;->()V PLandroidx/compose/ui/focus/FocusStateImpl;->()V HSPLandroidx/compose/ui/focus/FocusStateImpl;->(Ljava/lang/String;I)V PLandroidx/compose/ui/focus/FocusStateImpl;->(Ljava/lang/String;I)V HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z HPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z Landroidx/compose/ui/focus/FocusTargetNode; HSPLandroidx/compose/ui/focus/FocusTargetNode;->()V HPLandroidx/compose/ui/focus/FocusTargetNode;->()V HSPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl; HPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl; HSPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V HPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement; HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V PLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V PLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/focus/FocusTransactionManager; HSPLandroidx/compose/ui/focus/FocusTransactionManager;->()V PLandroidx/compose/ui/focus/FocusTransactionManager;->()V HSPLandroidx/compose/ui/focus/FocusTransactionManager;->(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V HPLandroidx/compose/ui/focus/FocusTransactionManager;->(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V HSPLandroidx/compose/ui/focus/FocusTransactionManager;->getChanges()Landroidx/collection/LongSparseArray; PLandroidx/compose/ui/focus/FocusTransactionManager;->getChanges()Landroidx/collection/LongSparseArray; HSPLandroidx/compose/ui/focus/FocusTransactionManager;->getMotionEvent()Landroid/view/MotionEvent; PLandroidx/compose/ui/focus/FocusTransactionManager;->getMotionEvent()Landroid/view/MotionEvent; HSPLandroidx/compose/ui/focus/FocusTransactionManager;->getSuppressMovementConsumption()Z PLandroidx/compose/ui/focus/FocusTransactionManager;->getSuppressMovementConsumption()Z HSPLandroidx/compose/ui/focus/FocusTransactionManager;->getUncommittedFocusState(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusStateImpl; HPLandroidx/compose/ui/focus/FocusTransactionManager;->getUncommittedFocusState(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusStateImpl; HSPLandroidx/compose/ui/focus/FocusTransactionManager;->issuesEnterExitEvent-0FcD4WY(J)Z HPLandroidx/compose/ui/focus/FocusTransactionManager;->issuesEnterExitEvent-0FcD4WY(J)Z Landroidx/compose/ui/geometry/CornerRadius; HSPLandroidx/compose/ui/geometry/CornerRadius;->()V PLandroidx/compose/ui/geometry/CornerRadius;->()V HSPLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J PLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F HPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F PLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F Landroidx/compose/ui/geometry/MutableRect; HSPLandroidx/compose/ui/geometry/MutableRect;->()V PLandroidx/compose/ui/geometry/MutableRect;->()V HSPLandroidx/compose/ui/geometry/MutableRect;->getBottom()F HPLandroidx/compose/ui/geometry/MutableRect;->getBottom()F HSPLandroidx/compose/ui/geometry/MutableRect;->getLeft()F HPLandroidx/compose/ui/geometry/MutableRect;->getLeft()F HSPLandroidx/compose/ui/geometry/MutableRect;->getRight()F HPLandroidx/compose/ui/geometry/MutableRect;->getRight()F HSPLandroidx/compose/ui/geometry/MutableRect;->getTop()F HPLandroidx/compose/ui/geometry/MutableRect;->getTop()F HSPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V HPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z HPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z HSPLandroidx/compose/ui/geometry/MutableRect;->setBottom(F)V HPLandroidx/compose/ui/geometry/MutableRect;->setBottom(F)V HSPLandroidx/compose/ui/geometry/MutableRect;->setLeft(F)V HPLandroidx/compose/ui/geometry/MutableRect;->setLeft(F)V HSPLandroidx/compose/ui/geometry/MutableRect;->setRight(F)V HPLandroidx/compose/ui/geometry/MutableRect;->setRight(F)V HSPLandroidx/compose/ui/geometry/MutableRect;->setTop(F)V HPLandroidx/compose/ui/geometry/MutableRect;->setTop(F)V Landroidx/compose/ui/geometry/Offset; HSPLandroidx/compose/ui/geometry/Offset;->()V PLandroidx/compose/ui/geometry/Offset;->()V HSPLandroidx/compose/ui/geometry/Offset;->(J)V HPLandroidx/compose/ui/geometry/Offset;->(J)V HSPLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J PLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J HSPLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J PLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J HSPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J HPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J HSPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset; HPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset; HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z PLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F HPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F HPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F HPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F HSPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J HPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J HSPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J HPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J HSPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J PLandroidx/compose/ui/geometry/Offset;->unbox-impl()J Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/geometry/Rect;->()V PLandroidx/compose/ui/geometry/Rect;->()V HSPLandroidx/compose/ui/geometry/Rect;->(FFFF)V HPLandroidx/compose/ui/geometry/Rect;->(FFFF)V HSPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect; PLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/geometry/Rect;->getBottom()F PLandroidx/compose/ui/geometry/Rect;->getBottom()F HSPLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J PLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J HSPLandroidx/compose/ui/geometry/Rect;->getHeight()F PLandroidx/compose/ui/geometry/Rect;->getHeight()F HSPLandroidx/compose/ui/geometry/Rect;->getLeft()F PLandroidx/compose/ui/geometry/Rect;->getLeft()F HSPLandroidx/compose/ui/geometry/Rect;->getRight()F PLandroidx/compose/ui/geometry/Rect;->getRight()F HSPLandroidx/compose/ui/geometry/Rect;->getTop()F PLandroidx/compose/ui/geometry/Rect;->getTop()F HSPLandroidx/compose/ui/geometry/Rect;->getWidth()F PLandroidx/compose/ui/geometry/Rect;->getWidth()F Landroidx/compose/ui/geometry/RoundRect; HSPLandroidx/compose/ui/geometry/RoundRect;->()V PLandroidx/compose/ui/geometry/RoundRect;->()V HSPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJ)V HPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJ)V HSPLandroidx/compose/ui/geometry/RoundRect;->getBottom()F PLandroidx/compose/ui/geometry/RoundRect;->getBottom()F HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J PLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J PLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J HSPLandroidx/compose/ui/geometry/RoundRect;->getHeight()F PLandroidx/compose/ui/geometry/RoundRect;->getHeight()F HSPLandroidx/compose/ui/geometry/RoundRect;->getLeft()F PLandroidx/compose/ui/geometry/RoundRect;->getLeft()F HSPLandroidx/compose/ui/geometry/RoundRect;->getRight()F PLandroidx/compose/ui/geometry/RoundRect;->getRight()F HSPLandroidx/compose/ui/geometry/RoundRect;->getTop()F PLandroidx/compose/ui/geometry/RoundRect;->getTop()F HSPLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J PLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J HSPLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J PLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J HSPLandroidx/compose/ui/geometry/RoundRect;->getWidth()F PLandroidx/compose/ui/geometry/RoundRect;->getWidth()F Landroidx/compose/ui/geometry/Size; HSPLandroidx/compose/ui/geometry/Size;->()V PLandroidx/compose/ui/geometry/Size;->()V HSPLandroidx/compose/ui/geometry/Size;->(J)V PLandroidx/compose/ui/geometry/Size;->(J)V HSPLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J PLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J HSPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J PLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J HSPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size; PLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size; HSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z PLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z PLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F HPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F HPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F HPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z HPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z HSPLandroidx/compose/ui/geometry/Size;->unbox-impl()J PLandroidx/compose/ui/geometry/Size;->unbox-impl()J Landroidx/compose/ui/graphics/AndroidCanvas; HSPLandroidx/compose/ui/graphics/AndroidCanvas;->()V PLandroidx/compose/ui/graphics/AndroidCanvas;->()V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->clipPath-mtrdD-E(Landroidx/compose/ui/graphics/Path;I)V HPLandroidx/compose/ui/graphics/AndroidCanvas;->clipPath-mtrdD-E(Landroidx/compose/ui/graphics/Path;I)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V HPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawArc(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V PLandroidx/compose/ui/graphics/AndroidCanvas;->drawArc(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V HPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/AndroidPaint;)V HPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/AndroidPaint;)V HPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V PLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V PLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas; PLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas; HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V HPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V HPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V PLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V HPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V Landroidx/compose/ui/graphics/AndroidCanvas_androidKt; HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->()V PLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->()V HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas; PLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas; HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas; HPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas; Landroidx/compose/ui/graphics/AndroidImageBitmap; HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->(Landroid/graphics/Bitmap;)V HPLandroidx/compose/ui/graphics/AndroidImageBitmap;->(Landroid/graphics/Bitmap;)V HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap; PLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap; HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I PLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I PLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V PLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V Landroidx/compose/ui/graphics/AndroidPaint; HSPLandroidx/compose/ui/graphics/AndroidPaint;->(Landroid/graphics/Paint;)V HPLandroidx/compose/ui/graphics/AndroidPaint;->(Landroid/graphics/Paint;)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint; PLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint; HSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F PLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F HSPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I PLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J HPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter; PLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter; HSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I HPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I HSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader; PLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader; HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I PLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I PLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F PLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F PLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V HPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V HPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V HPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V PLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V HPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V PLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V PLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V PLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings; HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;->()V PLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;->()V Landroidx/compose/ui/graphics/AndroidPath; HSPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;)V HPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;)V HSPLandroidx/compose/ui/graphics/AndroidPath;->close()V PLandroidx/compose/ui/graphics/AndroidPath;->close()V HSPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V HPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->getFillType-Rg-k1Os()I PLandroidx/compose/ui/graphics/AndroidPath;->getFillType-Rg-k1Os()I HSPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path; PLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path; HSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V HPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V PLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V PLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V PLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->rewind()V PLandroidx/compose/ui/graphics/AndroidPath;->rewind()V HSPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V PLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V Landroidx/compose/ui/graphics/Api26Bitmap; HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap; PLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap; Landroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0; HSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V PLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V HSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/ColorSpace$Named; PLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/ColorSpace$Named; HSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap; HPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap; PLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V HSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/autofill/AutofillManager$AutofillCallback; PLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/autofill/AutofillManager$AutofillCallback; Landroidx/compose/ui/graphics/BlendMode; HSPLandroidx/compose/ui/graphics/BlendMode;->(I)V PLandroidx/compose/ui/graphics/BlendMode;->(I)V HSPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode; PLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode; HSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/graphics/BlendModeColorFilterHelper; HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V PLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V PLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter; HPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter; Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1; HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/Modifier$Node;I)V HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/Modifier$Node;I)V HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/graphics/Brush;->()V PLandroidx/compose/ui/graphics/Brush;->()V HSPLandroidx/compose/ui/graphics/Brush;->()V HPLandroidx/compose/ui/graphics/Brush;->()V Landroidx/compose/ui/graphics/Brush$Companion; HSPLandroidx/compose/ui/graphics/Brush$Companion;->()V PLandroidx/compose/ui/graphics/Brush$Companion;->()V HSPLandroidx/compose/ui/graphics/Brush$Companion;->()V PLandroidx/compose/ui/graphics/Brush$Companion;->()V HSPLandroidx/compose/ui/graphics/Brush$Companion;->tint-xETnrds(IJ)Landroidx/compose/ui/graphics/ColorFilter; HPLandroidx/compose/ui/graphics/Brush$Companion;->tint-xETnrds(IJ)Landroidx/compose/ui/graphics/ColorFilter; Landroidx/compose/ui/graphics/BrushKt; HSPLandroidx/compose/ui/graphics/BrushKt;->()V PLandroidx/compose/ui/graphics/BrushKt;->()V HSPLandroidx/compose/ui/graphics/BrushKt;->()V HPLandroidx/compose/ui/graphics/BrushKt;->()V HSPLandroidx/compose/ui/graphics/BrushKt;->Canvas(Landroidx/compose/ui/graphics/AndroidImageBitmap;)Landroidx/compose/ui/graphics/AndroidCanvas; PLandroidx/compose/ui/graphics/BrushKt;->Canvas(Landroidx/compose/ui/graphics/AndroidImageBitmap;)Landroidx/compose/ui/graphics/AndroidCanvas; HSPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J PLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J HSPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J HPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J HSPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J PLandroidx/compose/ui/graphics/BrushKt;->Color(I)J HSPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J PLandroidx/compose/ui/graphics/BrushKt;->Color(J)J HSPLandroidx/compose/ui/graphics/BrushKt;->ImageBitmap-x__-hDU$default(IIII)Landroidx/compose/ui/graphics/AndroidImageBitmap; HPLandroidx/compose/ui/graphics/BrushKt;->ImageBitmap-x__-hDU$default(IIII)Landroidx/compose/ui/graphics/AndroidImageBitmap; HSPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint; PLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint; HSPLandroidx/compose/ui/graphics/BrushKt;->Path()Landroidx/compose/ui/graphics/AndroidPath; HPLandroidx/compose/ui/graphics/BrushKt;->Path()Landroidx/compose/ui/graphics/AndroidPath; HSPLandroidx/compose/ui/graphics/BrushKt;->TransformOrigin(FF)J PLandroidx/compose/ui/graphics/BrushKt;->TransformOrigin(FF)J HSPLandroidx/compose/ui/graphics/BrushKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap; PLandroidx/compose/ui/graphics/BrushKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap; HSPLandroidx/compose/ui/graphics/BrushKt;->compositeOver--OWjLjI(JJ)J HPLandroidx/compose/ui/graphics/BrushKt;->compositeOver--OWjLjI(JJ)J HSPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V HPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V HSPLandroidx/compose/ui/graphics/BrushKt;->getRectangleShape()Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1; HPLandroidx/compose/ui/graphics/BrushKt;->getRectangleShape()Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1; HSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/graphics/BrushKt;->lerp-jxsXWHM(JJF)J HPLandroidx/compose/ui/graphics/BrushKt;->lerp-jxsXWHM(JJF)J HSPLandroidx/compose/ui/graphics/BrushKt;->luminance-8_81llA(J)F PLandroidx/compose/ui/graphics/BrushKt;->luminance-8_81llA(J)F HSPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V HPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V HSPLandroidx/compose/ui/graphics/BrushKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode; HPLandroidx/compose/ui/graphics/BrushKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode; HSPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I HPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I HSPLandroidx/compose/ui/graphics/BrushKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config; HPLandroidx/compose/ui/graphics/BrushKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config; Landroidx/compose/ui/graphics/Canvas; Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0; HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$12()Landroid/graphics/BlendMode; PLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$12()Landroid/graphics/BlendMode; HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$9()Landroid/graphics/BlendMode; PLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$9()Landroid/graphics/BlendMode; HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m()V PLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m()V HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter; PLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter; HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V HPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V Landroidx/compose/ui/graphics/Color; HSPLandroidx/compose/ui/graphics/Color;->()V PLandroidx/compose/ui/graphics/Color;->()V HSPLandroidx/compose/ui/graphics/Color;->(J)V HPLandroidx/compose/ui/graphics/Color;->(J)V HSPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J PLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J HSPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J PLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J HSPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J PLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J HSPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J PLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J HSPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J HPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J HSPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color; HPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color; HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J HPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J HPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F HPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F HPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace; HPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace; HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F HPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F HPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F PLandroidx/compose/ui/graphics/Color;->hashCode-impl(J)I HPLandroidx/compose/ui/graphics/Color;->hashCode-impl(J)I HSPLandroidx/compose/ui/graphics/Color;->unbox-impl()J HPLandroidx/compose/ui/graphics/Color;->unbox-impl()J Landroidx/compose/ui/graphics/ColorFilter; HSPLandroidx/compose/ui/graphics/ColorFilter;->(Landroid/graphics/ColorFilter;)V PLandroidx/compose/ui/graphics/ColorFilter;->(Landroid/graphics/ColorFilter;)V HSPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter; PLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter; Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper; HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->androidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; HPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->androidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticApiModelOutline1; HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace; HPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace; Landroidx/compose/ui/graphics/Float16; HSPLandroidx/compose/ui/graphics/Float16;->()V PLandroidx/compose/ui/graphics/Float16;->()V HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S HPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F HPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F Landroidx/compose/ui/graphics/GraphicsLayerElement; HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V HPLandroidx/compose/ui/graphics/GraphicsLayerElement;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/graphics/GraphicsLayerScopeKt; HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->()V PLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->()V HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J HPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J Landroidx/compose/ui/graphics/ImageBitmap; Landroidx/compose/ui/graphics/Matrix; HSPLandroidx/compose/ui/graphics/Matrix;->([F)V PLandroidx/compose/ui/graphics/Matrix;->([F)V HSPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix; PLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix; HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F HPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J HPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V HPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V PLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFF)V HPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFF)V HSPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F PLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F Landroidx/compose/ui/graphics/Outline$Generic; Landroidx/compose/ui/graphics/Outline$Rectangle; HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->(Landroidx/compose/ui/geometry/Rect;)V PLandroidx/compose/ui/graphics/Outline$Rectangle;->(Landroidx/compose/ui/geometry/Rect;)V HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect; PLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect; Landroidx/compose/ui/graphics/Outline$Rounded; HSPLandroidx/compose/ui/graphics/Outline$Rounded;->(Landroidx/compose/ui/geometry/RoundRect;)V HPLandroidx/compose/ui/graphics/Outline$Rounded;->(Landroidx/compose/ui/geometry/RoundRect;)V HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect; PLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect; HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/AndroidPath; PLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/AndroidPath; Landroidx/compose/ui/graphics/Path; Landroidx/compose/ui/graphics/PathFillType; HSPLandroidx/compose/ui/graphics/PathFillType;->(I)V HPLandroidx/compose/ui/graphics/PathFillType;->(I)V HSPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType; HPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType; HSPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I PLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1; HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->()V PLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->()V Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->()V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->()V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape; PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape; HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V HPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V PLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V Landroidx/compose/ui/graphics/ShaderBrush; Landroidx/compose/ui/graphics/Shadow; HSPLandroidx/compose/ui/graphics/Shadow;->()V PLandroidx/compose/ui/graphics/Shadow;->()V HSPLandroidx/compose/ui/graphics/Shadow;->(JFI)V PLandroidx/compose/ui/graphics/Shadow;->(JFI)V HSPLandroidx/compose/ui/graphics/Shadow;->(JJF)V PLandroidx/compose/ui/graphics/Shadow;->(JJF)V HSPLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow; PLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow; HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/graphics/Shape; Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier; HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V HPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape; PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape; HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F PLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1; HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V HPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/SolidColor; HSPLandroidx/compose/ui/graphics/SolidColor;->(J)V PLandroidx/compose/ui/graphics/SolidColor;->(J)V HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V HPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/graphics/SolidColor;->hashCode()I Landroidx/compose/ui/graphics/StrokeCap; HSPLandroidx/compose/ui/graphics/StrokeCap;->(I)V HPLandroidx/compose/ui/graphics/StrokeCap;->(I)V HSPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap; HPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap; HSPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I PLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I Landroidx/compose/ui/graphics/StrokeJoin; HSPLandroidx/compose/ui/graphics/StrokeJoin;->(I)V HPLandroidx/compose/ui/graphics/StrokeJoin;->(I)V HSPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin; HPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin; HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I PLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I Landroidx/compose/ui/graphics/TransformOrigin; HSPLandroidx/compose/ui/graphics/TransformOrigin;->()V PLandroidx/compose/ui/graphics/TransformOrigin;->()V HSPLandroidx/compose/ui/graphics/TransformOrigin;->(J)V HPLandroidx/compose/ui/graphics/TransformOrigin;->(J)V HSPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J HPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J HSPLandroidx/compose/ui/graphics/TransformOrigin;->box-impl(J)Landroidx/compose/ui/graphics/TransformOrigin; HPLandroidx/compose/ui/graphics/TransformOrigin;->box-impl(J)Landroidx/compose/ui/graphics/TransformOrigin; HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/graphics/TransformOrigin;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F HPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F HPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F HSPLandroidx/compose/ui/graphics/TransformOrigin;->unbox-impl()J HPLandroidx/compose/ui/graphics/TransformOrigin;->unbox-impl()J Landroidx/compose/ui/graphics/WrapperVerificationHelperMethods; HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V PLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V PLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V HPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V Landroidx/compose/ui/graphics/colorspace/Adaptation; HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->()V PLandroidx/compose/ui/graphics/colorspace/Adaptation;->()V HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->([F)V PLandroidx/compose/ui/graphics/colorspace/Adaptation;->([F)V HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1; PLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1; HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F PLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1; HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;->([F)V PLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;->([F)V Landroidx/compose/ui/graphics/colorspace/ColorModel; HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->()V PLandroidx/compose/ui/graphics/colorspace/ColorModel;->()V HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J PLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J PLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J PLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z PLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z Landroidx/compose/ui/graphics/colorspace/ColorSpace; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JI)V PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JI)V HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String; PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z PLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z Landroidx/compose/ui/graphics/colorspace/ColorSpaces; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace; HPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/Oklab; PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/Oklab; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb; HPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb; PLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb; Landroidx/compose/ui/graphics/colorspace/Connector; HSPLandroidx/compose/ui/graphics/colorspace/Connector;->()V PLandroidx/compose/ui/graphics/colorspace/Connector;->()V HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V PLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V PLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; PLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; PLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J HPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1; HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V PLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V Landroidx/compose/ui/graphics/colorspace/Connector$RgbConnector; Landroidx/compose/ui/graphics/colorspace/DoubleFunction; Landroidx/compose/ui/graphics/colorspace/Illuminant; HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V PLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint; PLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint; HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint; PLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint; HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint; PLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint; HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint; PLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint; Landroidx/compose/ui/graphics/colorspace/Lab; HSPLandroidx/compose/ui/graphics/colorspace/Lab;->()V PLandroidx/compose/ui/graphics/colorspace/Lab;->()V Landroidx/compose/ui/graphics/colorspace/Lab$Companion; HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->()V PLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->()V HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z PLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isWideGamut([FFF)V PLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isWideGamut([FFF)V HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->area([F)F PLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->area([F)F Landroidx/compose/ui/graphics/colorspace/Oklab; HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->()V PLandroidx/compose/ui/graphics/colorspace/Oklab;->()V HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->()V PLandroidx/compose/ui/graphics/colorspace/Oklab;->()V HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F PLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F PLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J HPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F HPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J HPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J Landroidx/compose/ui/graphics/colorspace/Rgb; HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D HPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D PLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->()V PLandroidx/compose/ui/graphics/colorspace/Rgb;->()V HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V PLandroidx/compose/ui/graphics/colorspace/Rgb;->(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V PLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V PLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V PLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0; PLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0; HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; PLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F PLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F PLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; PLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F PLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint; PLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint; HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z PLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J HPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F PLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J HPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0; HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V PLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D HPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1; HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V PLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D HPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2; HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->(DI)V PLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->(DI)V Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1; HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V PLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V Landroidx/compose/ui/graphics/colorspace/TransferParameters; HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDD)V PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDD)V HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDDDD)V PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDDDD)V HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D PLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D Landroidx/compose/ui/graphics/colorspace/WhitePoint; HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->(FF)V PLandroidx/compose/ui/graphics/colorspace/WhitePoint;->(FF)V HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F PLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F PLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F PLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F Landroidx/compose/ui/graphics/colorspace/Xyz; HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->()V PLandroidx/compose/ui/graphics/colorspace/Xyz;->()V Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->()V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->()V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-Q_0CZUI$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JFIFLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-Q_0CZUI$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JFIFLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/AndroidPaint; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/AndroidPaint; Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->()V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->()V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas; HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1; PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1; HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->clipPath-mtrdD-E$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;Landroidx/compose/ui/graphics/AndroidPath;)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->clipPath-mtrdD-E$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;Landroidx/compose/ui/graphics/AndroidPath;)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V Landroidx/compose/ui/graphics/drawscope/ContentDrawScope; Landroidx/compose/ui/graphics/drawscope/DrawContextKt; HSPLandroidx/compose/ui/graphics/drawscope/DrawContextKt;->()V PLandroidx/compose/ui/graphics/drawscope/DrawContextKt;->()V HSPLandroidx/compose/ui/graphics/drawscope/DrawContextKt;->getDefaultDensity()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/graphics/drawscope/DrawContextKt;->getDefaultDensity()Landroidx/compose/ui/unit/Density; Landroidx/compose/ui/graphics/drawscope/DrawScope; HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawArc-yD3GUKo$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawArc-yD3GUKo$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/ColorFilter;II)V HPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/ColorFilter;II)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawLine-NGM6Ib0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFII)V PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawLine-NGM6Ib0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFII)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/Stroke;I)V PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/Stroke;I)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/ColorFilter;I)V HPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJLandroidx/compose/ui/graphics/drawscope/Stroke;I)V PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJLandroidx/compose/ui/graphics/drawscope/Stroke;I)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J HPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J HPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J Landroidx/compose/ui/graphics/drawscope/DrawStyle; HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;->()V PLandroidx/compose/ui/graphics/drawscope/DrawStyle;->()V Landroidx/compose/ui/graphics/drawscope/EmptyCanvas; HSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;->()V HPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;->()V Landroidx/compose/ui/graphics/drawscope/Fill; HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V PLandroidx/compose/ui/graphics/drawscope/Fill;->()V HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V PLandroidx/compose/ui/graphics/drawscope/Fill;->()V Landroidx/compose/ui/graphics/drawscope/Stroke; HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIII)V PLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIII)V HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getCap-KaPHkGw()I PLandroidx/compose/ui/graphics/drawscope/Stroke;->getCap-KaPHkGw()I HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getJoin-LxFBmk8()I PLandroidx/compose/ui/graphics/drawscope/Stroke;->getJoin-LxFBmk8()I HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getMiter()F PLandroidx/compose/ui/graphics/drawscope/Stroke;->getMiter()F HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getWidth()F PLandroidx/compose/ui/graphics/drawscope/Stroke;->getWidth()F Landroidx/compose/ui/graphics/painter/Painter; HSPLandroidx/compose/ui/graphics/painter/Painter;->()V PLandroidx/compose/ui/graphics/painter/Painter;->()V HSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V HPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V Landroidx/compose/ui/graphics/painter/Painter$drawLambda$1; HSPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;->(Landroidx/compose/ui/graphics/painter/Painter;)V PLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;->(Landroidx/compose/ui/graphics/painter/Painter;)V Landroidx/compose/ui/graphics/vector/DrawCache; HSPLandroidx/compose/ui/graphics/vector/DrawCache;->()V PLandroidx/compose/ui/graphics/vector/DrawCache;->()V HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V HPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V Landroidx/compose/ui/graphics/vector/FloatResult; HSPLandroidx/compose/ui/graphics/vector/FloatResult;->()V HPLandroidx/compose/ui/graphics/vector/FloatResult;->()V HSPLandroidx/compose/ui/graphics/vector/FloatResult;->getValue()F HPLandroidx/compose/ui/graphics/vector/FloatResult;->getValue()F HSPLandroidx/compose/ui/graphics/vector/FloatResult;->isValid()Z HPLandroidx/compose/ui/graphics/vector/FloatResult;->isValid()Z HSPLandroidx/compose/ui/graphics/vector/FloatResult;->setValid(Z)V HPLandroidx/compose/ui/graphics/vector/FloatResult;->setValid(Z)V HSPLandroidx/compose/ui/graphics/vector/FloatResult;->setValue(F)V HPLandroidx/compose/ui/graphics/vector/FloatResult;->setValue(F)V Landroidx/compose/ui/graphics/vector/GroupComponent; HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->()V HPLandroidx/compose/ui/graphics/vector/GroupComponent;->()V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; PLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I HPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V HPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setClipPathData(Ljava/util/List;)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setClipPathData(Ljava/util/List;)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setRotation(F)V HPLandroidx/compose/ui/graphics/vector/GroupComponent;->setRotation(F)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationX(F)V HPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationX(F)V HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationY(F)V PLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationY(F)V Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/graphics/vector/ImageVector;->()V PLandroidx/compose/ui/graphics/vector/ImageVector;->()V HSPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V HPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V HSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z PLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F PLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F PLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String; PLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String; HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup; PLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup; HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I PLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J PLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F PLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F PLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F HPLandroidx/compose/ui/graphics/vector/ImageVector;->hashCode()I Landroidx/compose/ui/graphics/vector/ImageVector$Builder; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZ)V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZ)V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZI)V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZI)V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addGroup(Ljava/lang/String;FFFFFFFLjava/util/List;)V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addGroup(Ljava/lang/String;FFFFFFFLjava/util/List;)V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/ArrayList;ILandroidx/compose/ui/graphics/SolidColor;FIF)V PLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/ArrayList;ILandroidx/compose/ui/graphics/SolidColor;FIF)V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(FFFFFFFIIILandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Brush;Ljava/lang/String;Ljava/util/List;)V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(FFFFFFFIIILandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Brush;Ljava/lang/String;Ljava/util/List;)V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup; HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector; HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->clearGroup()V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->clearGroup()V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;I)V HPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;I)V HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List; PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List; PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String; PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String; HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F PLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F Landroidx/compose/ui/graphics/vector/PathBuilder; HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->()V PLandroidx/compose/ui/graphics/vector/PathBuilder;->()V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)V HPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->arcToRelative(FFZZFF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()V PLandroidx/compose/ui/graphics/vector/PathBuilder;->close()V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/ArrayList; PLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/ArrayList; HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)V HPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveToRelative(FF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->moveToRelative(FF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)V HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)V PLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)V Landroidx/compose/ui/graphics/vector/PathComponent; HSPLandroidx/compose/ui/graphics/vector/PathComponent;->()V HPLandroidx/compose/ui/graphics/vector/PathComponent;->()V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V PLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V HPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V Landroidx/compose/ui/graphics/vector/PathNode; HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZI)V HPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZI)V HSPLandroidx/compose/ui/graphics/vector/PathNode;->isCurve()Z PLandroidx/compose/ui/graphics/vector/PathNode;->isCurve()Z Landroidx/compose/ui/graphics/vector/PathNode$ArcTo; Landroidx/compose/ui/graphics/vector/PathNode$Close; HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V PLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V PLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V Landroidx/compose/ui/graphics/vector/PathNode$CurveTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->(FFFFFF)V HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->(FFFFFF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX1()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX2()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX2()F HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX3()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX3()F HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY1()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY2()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY2()F HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY3()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY3()F HPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->(F)V HPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->(F)V HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F HPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F PLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->hashCode()I HPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$LineTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->(FF)V HPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->(FF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F HPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F HPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F HPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$MoveTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->(FF)V HPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->(FF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F PLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F HPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F HPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$QuadTo; Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->(FFFF)V PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->(FFFF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX1()F PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX2()F PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX2()F HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY1()F PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY2()F PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY2()F PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->hashCode()I HPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveQuadTo; Landroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo; PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->(FFFZZFF)V PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDx()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDx()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDy()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDy()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getHorizontalEllipseRadius()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getHorizontalEllipseRadius()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getTheta()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getTheta()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getVerticalEllipseRadius()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getVerticalEllipseRadius()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->hashCode()I PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isMoreThanHalf()Z HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isMoreThanHalf()Z PLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isPositiveArc()Z HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isPositiveArc()Z Landroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->(FFFFFF)V HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->(FFFFFF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx1()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx2()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx2()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx3()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx3()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy1()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy2()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy2()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy3()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy3()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->(F)V HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->(F)V HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->(FF)V HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->(FF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->(FF)V PLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->(FF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDx()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDx()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDy()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDy()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->hashCode()I HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$RelativeQuadTo; Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->(FFFF)V PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->(FFFF)V HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx1()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx2()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx2()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy1()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy1()F HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy2()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy2()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveQuadTo; Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->(F)V HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->(F)V HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F PLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F HPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->hashCode()I Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo; HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->(F)V PLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->(F)V HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F PLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F Landroidx/compose/ui/graphics/vector/PathNodeKt; HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->()V PLandroidx/compose/ui/graphics/vector/PathNodeKt;->()V HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->()V PLandroidx/compose/ui/graphics/vector/PathNodeKt;->()V HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Group(Ljava/lang/String;FFFFFFFLjava/util/List;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Group(Ljava/lang/String;FFFFFFFLjava/util/List;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V HPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/ui/graphics/vector/PathNodeKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->access$getPowersOfTen$cp()[F HPLandroidx/compose/ui/graphics/vector/PathNodeKt;->access$getPowersOfTen$cp()[F HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter; HPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter; HSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter; HPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter; Landroidx/compose/ui/graphics/vector/PathParserKt; HPLandroidx/compose/ui/graphics/vector/PathParserKt;->drawArc(Landroidx/compose/ui/graphics/Path;DDDDDDDZZ)V HSPLandroidx/compose/ui/graphics/vector/PathParserKt;->toPath(Ljava/util/List;Landroidx/compose/ui/graphics/Path;)V HPLandroidx/compose/ui/graphics/vector/PathParserKt;->toPath(Ljava/util/List;Landroidx/compose/ui/graphics/Path;)V Landroidx/compose/ui/graphics/vector/VNode; HSPLandroidx/compose/ui/graphics/vector/VNode;->()V HPLandroidx/compose/ui/graphics/vector/VNode;->()V HSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; PLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V HPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V HSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V Landroidx/compose/ui/graphics/vector/VectorApplier; HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->(Landroidx/compose/ui/graphics/vector/GroupComponent;)V PLandroidx/compose/ui/graphics/vector/VectorApplier;->(Landroidx/compose/ui/graphics/vector/GroupComponent;)V HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent; PLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent; HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V PLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V PLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V PLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V Landroidx/compose/ui/graphics/vector/VectorComponent; HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->()V HPLandroidx/compose/ui/graphics/vector/VectorComponent;->()V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V PLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V HPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent; PLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent; HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F PLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F PLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V PLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;)V PLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;)V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V PLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V PLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V PLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V Landroidx/compose/ui/graphics/vector/VectorComposeKt$Group$4; Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1; HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->()V PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->()V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->(I)V PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->(I)V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1; HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->(I)V PLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->(I)V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/GroupComponent;F)V HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/GroupComponent;F)V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$3; Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1; HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()V HPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()V Landroidx/compose/ui/graphics/vector/VectorConfig; HSPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorGroup; HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V HPLandroidx/compose/ui/graphics/vector/VectorGroup;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List; PLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List; HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getClipPathData()Ljava/util/List; PLandroidx/compose/ui/graphics/vector/VectorGroup;->getClipPathData()Ljava/util/List; HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getName()Ljava/lang/String; PLandroidx/compose/ui/graphics/vector/VectorGroup;->getName()Ljava/lang/String; HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotX()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotX()F HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotY()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotY()F HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getRotation()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getRotation()F HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleX()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleX()F HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleY()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleY()F HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationX()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationX()F HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationY()F PLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationY()F HPLandroidx/compose/ui/graphics/vector/VectorGroup;->hashCode()I Landroidx/compose/ui/graphics/vector/VectorGroup$iterator$1; HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->(Landroidx/compose/ui/graphics/vector/VectorGroup;)V PLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->(Landroidx/compose/ui/graphics/vector/VectorGroup;)V HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z HPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorKt; HSPLandroidx/compose/ui/graphics/vector/VectorKt;->()V PLandroidx/compose/ui/graphics/vector/VectorKt;->()V HSPLandroidx/compose/ui/graphics/vector/VectorKt;->addPathNodes(Ljava/lang/String;)Ljava/util/List; HPLandroidx/compose/ui/graphics/vector/VectorKt;->addPathNodes(Ljava/lang/String;)Ljava/util/List; HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Lkotlin/collections/EmptyList; PLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Lkotlin/collections/EmptyList; Landroidx/compose/ui/graphics/vector/VectorNode; HSPLandroidx/compose/ui/graphics/vector/VectorNode;->()V HPLandroidx/compose/ui/graphics/vector/VectorNode;->()V Landroidx/compose/ui/graphics/vector/VectorPainter; HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V HPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getDrawCount$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)I PLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getDrawCount$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)I HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;)I HPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;)I HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent; PLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent; HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;I)V PLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;I)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V PLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J PLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V PLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V PLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V PLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2; HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->(Ljava/lang/Object;I)V HPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1; HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/Composition;)V PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/Composition;)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3; HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;->(Landroidx/compose/ui/graphics/vector/VectorPainter;Ljava/lang/String;FFLkotlin/jvm/functions/Function4;I)V PLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;->(Landroidx/compose/ui/graphics/vector/VectorPainter;Ljava/lang/String;FFLkotlin/jvm/functions/Function4;I)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1; HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->(ILjava/lang/Object;Ljava/lang/Object;)V PLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2; HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;->(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;II)V HPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;->(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;II)V HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1; HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;->()V HPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;->()V Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3; HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V PLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/graphics/vector/VectorPath; HSPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V HPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush; PLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String; PLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String; HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List; PLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List; HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I PLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush; PLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F PLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F HPLandroidx/compose/ui/graphics/vector/VectorPath;->hashCode()I Landroidx/compose/ui/graphics/vector/VectorProperty$Fill; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$PathData; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$PivotX; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$PivotY; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$Rotation; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$ScaleX; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$ScaleY; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$Stroke; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$TranslateX; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$TranslateY; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart; HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V PLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->(Lorg/xmlpull/v1/XmlPullParser;)V PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->(Lorg/xmlpull/v1/XmlPullParser;)V HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getDimension(Landroid/content/res/TypedArray;I)F HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getDimension(Landroid/content/res/TypedArray;I)F HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getFloat(Landroid/content/res/TypedArray;I)F HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getFloat(Landroid/content/res/TypedArray;I)F HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getInt(Landroid/content/res/TypedArray;)I PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getInt(Landroid/content/res/TypedArray;)I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedBoolean(Landroid/content/res/TypedArray;)Z PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedBoolean(Landroid/content/res/TypedArray;)Z HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedComplexColor(Landroid/content/res/TypedArray;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedComplexColor(Landroid/content/res/TypedArray;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedFloat(Landroid/content/res/TypedArray;Ljava/lang/String;IF)F HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedFloat(Landroid/content/res/TypedArray;Ljava/lang/String;IF)F HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedInt(Landroid/content/res/TypedArray;Ljava/lang/String;II)I HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedInt(Landroid/content/res/TypedArray;Ljava/lang/String;II)I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getString(Landroid/content/res/TypedArray;I)Ljava/lang/String; HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getString(Landroid/content/res/TypedArray;I)Ljava/lang/String; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getXmlParser()Lorg/xmlpull/v1/XmlPullParser; PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getXmlParser()Lorg/xmlpull/v1/XmlPullParser; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray; HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->updateConfig(I)V HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->updateConfig(I)V Landroidx/compose/ui/graphics/vector/compat/AndroidVectorResources; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->()V PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->()V HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_CLIP_PATH()[I PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_CLIP_PATH()[I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_GROUP()[I PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_GROUP()[I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_PATH()[I PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_PATH()[I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_TYPE_ARRAY()[I PLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_TYPE_ARRAY()[I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->obtainBrushFromComplexColor(Landroidx/core/content/res/ComplexColorCompat;)Landroidx/compose/ui/graphics/Brush; HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->obtainBrushFromComplexColor(Landroidx/core/content/res/ComplexColorCompat;)Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->parseCurrentVectorNode(Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;Landroidx/compose/ui/graphics/vector/ImageVector$Builder;I)I HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->parseCurrentVectorNode(Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;Landroidx/compose/ui/graphics/vector/ImageVector$Builder;I)I HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V HPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback; HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->(Landroid/view/View;)V PLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->(Landroid/view/View;)V Landroidx/compose/ui/input/InputMode; HSPLandroidx/compose/ui/input/InputMode;->(I)V PLandroidx/compose/ui/input/InputMode;->(I)V HSPLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode; PLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode; HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/input/InputMode;->unbox-impl()I PLandroidx/compose/ui/input/InputMode;->unbox-impl()I Landroidx/compose/ui/input/InputModeManagerImpl; HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/input/InputModeManagerImpl;->(ILkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I PLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I HSPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V PLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V Landroidx/compose/ui/input/key/KeyInputElement; HSPLandroidx/compose/ui/input/key/KeyInputElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/input/key/KeyInputElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/ui/input/key/KeyInputModifierNode; Landroidx/compose/ui/input/key/KeyInputNode; HSPLandroidx/compose/ui/input/key/KeyInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/input/key/KeyInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/input/key/Key_androidKt; HSPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V HPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getModifierLocalNode$ui_release()Landroidx/compose/ui/modifier/ModifierLocalModifierNode; PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getModifierLocalNode$ui_release()Landroidx/compose/ui/modifier/ModifierLocalModifierNode; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setModifierLocalNode$ui_release(Landroidx/compose/ui/modifier/ModifierLocalModifierNode;)V PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setModifierLocalNode$ui_release(Landroidx/compose/ui/modifier/ModifierLocalModifierNode;)V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V Landroidx/compose/ui/input/nestedscroll/NestedScrollElement; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V HPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/input/nestedscroll/NestedScrollNode; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V HPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt; PLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V HPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V HPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V PLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateNode$ui_release(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V Landroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;->(Ljava/lang/Object;I)V Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->()V PLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->()V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal; PLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal; Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1; HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V PLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V PLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V Landroidx/compose/ui/input/pointer/AndroidPointerIconType; HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;->(I)V PLandroidx/compose/ui/input/pointer/AndroidPointerIconType;->(I)V Landroidx/compose/ui/input/pointer/AwaitPointerEventScope; PLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;)Ljava/lang/Object; Landroidx/compose/ui/input/pointer/ConsumedData; HSPLandroidx/compose/ui/input/pointer/ConsumedData;->(ZZ)V HPLandroidx/compose/ui/input/pointer/ConsumedData;->(ZZ)V HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z PLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z PLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange()V PLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange()V HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange()V PLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange()V Landroidx/compose/ui/input/pointer/MotionEventAdapter; HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->()V PLandroidx/compose/ui/input/pointer/MotionEventAdapter;->()V HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent; HPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent; Landroidx/compose/ui/input/pointer/Node; HSPLandroidx/compose/ui/input/pointer/Node;->(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/input/pointer/Node;->(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/input/pointer/Node;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HPLandroidx/compose/ui/input/pointer/Node;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HSPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V HPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V HSPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z HPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z HSPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HSPLandroidx/compose/ui/input/pointer/Node;->getModifierNode()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/input/pointer/Node;->getModifierNode()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/IntStack; PLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/IntStack; Landroidx/compose/ui/input/pointer/NodeParent; HSPLandroidx/compose/ui/input/pointer/NodeParent;->()V HPLandroidx/compose/ui/input/pointer/NodeParent;->()V HSPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HSPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V HPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z HPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HSPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector; PLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V HPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V Landroidx/compose/ui/input/pointer/PointerEvent; HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;Landroidx/compose/ui/focus/FocusTransactionManager;)V HPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;Landroidx/compose/ui/focus/FocusTransactionManager;)V HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List; PLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List; HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent; PLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent; HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I PLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I Landroidx/compose/ui/input/pointer/PointerEventPass; HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->()V PLandroidx/compose/ui/input/pointer/PointerEventPass;->()V HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->(Ljava/lang/String;I)V PLandroidx/compose/ui/input/pointer/PointerEventPass;->(Ljava/lang/String;I)V Landroidx/compose/ui/input/pointer/PointerEventTimeoutCancellationException; Landroidx/compose/ui/input/pointer/PointerIcon; HSPLandroidx/compose/ui/input/pointer/PointerIcon;->()V PLandroidx/compose/ui/input/pointer/PointerIcon;->()V Landroidx/compose/ui/input/pointer/PointerIcon$Companion; HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V PLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V PLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1; HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/input/pointer/PointerId; PLandroidx/compose/ui/input/pointer/PointerId;->(J)V PLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId; HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z PLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z Landroidx/compose/ui/input/pointer/PointerInputChange; HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZILjava/util/List;J)V HPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZILjava/util/List;J)V HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJ)V HPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJ)V HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V PLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJLjava/util/ArrayList;)Landroidx/compose/ui/input/pointer/PointerInputChange; HPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJLjava/util/ArrayList;)Landroidx/compose/ui/input/pointer/PointerInputChange; HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List; PLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List; HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J PLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z PLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I PLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I PLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z PLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer; HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->()V PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->()V HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/focus/FocusTransactionManager; HPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/focus/FocusTransactionManager; Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData; HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZ)V PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZ)V HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J Landroidx/compose/ui/input/pointer/PointerInputEvent; HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->(Ljava/util/ArrayList;Landroid/view/MotionEvent;)V HPLandroidx/compose/ui/input/pointer/PointerInputEvent;->(Ljava/util/ArrayList;Landroid/view/MotionEvent;)V HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent; PLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent; HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List; PLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List; Landroidx/compose/ui/input/pointer/PointerInputEventData; HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/ArrayList;J)V HPLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/ArrayList;J)V HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List; PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List; HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J PLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J Landroidx/compose/ui/input/pointer/PointerInputEventProcessor; HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I PLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I PLandroidx/compose/ui/input/pointer/PointerInputResetException;->()V HPLandroidx/compose/ui/input/pointer/PointerInputResetException;->()V PLandroidx/compose/ui/input/pointer/PointerInputResetException;->fillInStackTrace()Ljava/lang/Throwable; HPLandroidx/compose/ui/input/pointer/PointerInputResetException;->fillInStackTrace()Ljava/lang/Throwable; Landroidx/compose/ui/input/pointer/PointerInputScope; Landroidx/compose/ui/input/pointer/PointerInteropFilter; Landroidx/compose/ui/input/pointer/PointerInteropFilter$pointerInputFilter$1; Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->(I)V PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->(I)V HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/input/pointer/PositionCalculator; Landroidx/compose/ui/input/pointer/ProcessResult; HSPLandroidx/compose/ui/input/pointer/ProcessResult;->()V PLandroidx/compose/ui/input/pointer/ProcessResult;->()V HSPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z PLandroidx/compose/ui/input/pointer/ProcessResult;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z HSPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z PLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z HSPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z PLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getPointerIconDefault()Landroidx/compose/ui/input/pointer/AndroidPointerIconType; PLandroidx/compose/ui/input/pointer/ProcessResult;->getPointerIconDefault()Landroidx/compose/ui/input/pointer/AndroidPointerIconType; HSPLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J PLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J HSPLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z PLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z Landroidx/compose/ui/input/pointer/SuspendPointerInputElement; HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V HPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->()V PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->()V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode; Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->(Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->(Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/ui/input/pointer/PointerEvent; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/ui/input/pointer/PointerEvent; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getPointerHandlers$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getPointerInputHandler()Lkotlin/jvm/functions/Function2; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getPointerInputHandler()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getSize-YbymL2g()J PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getSize-YbymL2g()J HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)V PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/input/pointer/util/DataPointAtTime; PLandroidx/compose/ui/input/pointer/util/DataPointAtTime;->(JF)V Landroidx/compose/ui/input/pointer/util/VelocityTracker; HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V Landroidx/compose/ui/input/pointer/util/VelocityTracker1D; HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->()V HPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->()V PLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->addDataPoint(JF)V PLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->resetTracking()V PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->()V PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->getVelocityTrackerAddPointsFix()Z Landroidx/compose/ui/input/rotary/RotaryInputElement; HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/input/rotary/RotaryInputElement;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/ui/input/rotary/RotaryInputModifierKt; HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier$Companion;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier$Companion;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/input/rotary/RotaryInputModifierNode; Landroidx/compose/ui/input/rotary/RotaryInputNode; HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/input/rotary/RotaryInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/layout/AlignmentLine; HSPLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;)V Landroidx/compose/ui/layout/AlignmentLineKt; HSPLandroidx/compose/ui/layout/AlignmentLineKt;->()V PLandroidx/compose/ui/layout/AlignmentLineKt;->()V HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; PLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; PLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1; HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V PLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V PLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1; HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V PLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V PLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V Landroidx/compose/ui/layout/BeyondBoundsLayout; Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope; PLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;->()V PLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;->getModifierLocalBeyondBoundsLayout()Landroidx/compose/ui/modifier/ProvidableModifierLocal; Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt; HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V PLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1; HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V PLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V PLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V Landroidx/compose/ui/layout/ContentScale; Landroidx/compose/ui/layout/ContentScale$Companion; HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V PLandroidx/compose/ui/layout/ContentScale$Companion;->()V HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V PLandroidx/compose/ui/layout/ContentScale$Companion;->()V HSPLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Lorg/acra/file/CrashReportPersister; PLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Lorg/acra/file/CrashReportPersister; Landroidx/compose/ui/layout/FixedScale; HSPLandroidx/compose/ui/layout/FixedScale;->()V PLandroidx/compose/ui/layout/FixedScale;->()V Landroidx/compose/ui/layout/HorizontalAlignmentLine; HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->(Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/layout/HorizontalAlignmentLine;->(Lkotlin/jvm/functions/Function2;)V Landroidx/compose/ui/layout/IntrinsicMeasurable; Landroidx/compose/ui/layout/IntrinsicMeasureScope; Landroidx/compose/ui/layout/LayoutCoordinates; Landroidx/compose/ui/layout/LayoutElement; HSPLandroidx/compose/ui/layout/LayoutElement;->(Lkotlin/jvm/functions/Function3;)V PLandroidx/compose/ui/layout/LayoutElement;->(Lkotlin/jvm/functions/Function3;)V HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/ui/layout/LayoutIdElement; HSPLandroidx/compose/ui/layout/LayoutIdElement;->(Ljava/lang/Object;)V HPLandroidx/compose/ui/layout/LayoutIdElement;->(Ljava/lang/Object;)V HSPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/layout/LayoutIdElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/layout/LayoutIdElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/layout/LayoutIdModifier; HSPLandroidx/compose/ui/layout/LayoutIdModifier;->(Ljava/lang/Object;)V HPLandroidx/compose/ui/layout/LayoutIdModifier;->(Ljava/lang/Object;)V HSPLandroidx/compose/ui/layout/LayoutIdModifier;->getLayoutId()Ljava/lang/Object; PLandroidx/compose/ui/layout/LayoutIdModifier;->getLayoutId()Ljava/lang/Object; HSPLandroidx/compose/ui/layout/LayoutIdModifier;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/layout/LayoutIdModifier;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/layout/LayoutIdParentData; Landroidx/compose/ui/layout/LayoutKt; HSPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J HPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/compose/ui/layout/LayoutKt;->access$computeFillMinDimension-iLBOSCw(JJ)F HPLandroidx/compose/ui/layout/LayoutKt;->access$computeFillMinDimension-iLBOSCw(JJ)F HSPLandroidx/compose/ui/layout/LayoutKt;->boundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; HPLandroidx/compose/ui/layout/LayoutKt;->boundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/layout/LayoutCoordinates; HPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/layout/LayoutKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object; HPLandroidx/compose/ui/layout/LayoutKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object; HSPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/layout/LayoutKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/layout/LayoutKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; HPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; HSPLandroidx/compose/ui/layout/LayoutKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; PLandroidx/compose/ui/layout/LayoutKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/layout/LayoutKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/layout/LayoutKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J HPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J Landroidx/compose/ui/layout/LayoutKt$materializerOf$1; HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->(Landroidx/compose/ui/Modifier;I)V HPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->(Landroidx/compose/ui/Modifier;I)V HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;)V HPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;)V Landroidx/compose/ui/layout/LayoutModifier; Landroidx/compose/ui/layout/LayoutModifierImpl; HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->(Lkotlin/jvm/functions/Function3;)V HPLandroidx/compose/ui/layout/LayoutModifierImpl;->(Lkotlin/jvm/functions/Function3;)V HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->setMeasureBlock(Lkotlin/jvm/functions/Function3;)V PLandroidx/compose/ui/layout/LayoutModifierImpl;->setMeasureBlock(Lkotlin/jvm/functions/Function3;)V Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode; Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition; PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2; PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->isLookingAhead()Z PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->isLookingAhead()Z HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map; PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1; HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl; Landroidx/compose/ui/layout/Measurable; Landroidx/compose/ui/layout/MeasurePolicy; Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/ui/layout/MeasureScope; HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/ui/layout/MeasureScope$layout$1; HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/layout/MeasureScope$layout$1;->(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map; HPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map; HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I HPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I HPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V HPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V Landroidx/compose/ui/layout/Measured; Landroidx/compose/ui/layout/OnGloballyPositionedElement; HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/layout/OnGloballyPositionedElement;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/ui/layout/OnGloballyPositionedNode; HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/layout/OnGloballyPositionedNode;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V PLandroidx/compose/ui/layout/OnGloballyPositionedNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V Landroidx/compose/ui/layout/OnRemeasuredModifier; Landroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1; HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V PLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/layout/OnSizeChangedModifier; HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/layout/OnSizeChangedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V PLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V Landroidx/compose/ui/layout/PinnableContainer; Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle; Landroidx/compose/ui/layout/PinnableContainerKt; HSPLandroidx/compose/ui/layout/PinnableContainerKt;->()V PLandroidx/compose/ui/layout/PinnableContainerKt;->()V HSPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Landroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1; HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->()V PLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->()V HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->(I)V PLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->(I)V HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object; PLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/layout/Placeable; HSPLandroidx/compose/ui/layout/Placeable;->()V HPLandroidx/compose/ui/layout/Placeable;->()V HSPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J HPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J PLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J HSPLandroidx/compose/ui/layout/Placeable;->getHeight()I HPLandroidx/compose/ui/layout/Placeable;->getHeight()I HSPLandroidx/compose/ui/layout/Placeable;->getLastMeasurementConstraints-msEJaDk$ui_release()J PLandroidx/compose/ui/layout/Placeable;->getLastMeasurementConstraints-msEJaDk$ui_release()J HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I PLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J HPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I PLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I HSPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J PLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J HSPLandroidx/compose/ui/layout/Placeable;->getSize-YbymL2g()J PLandroidx/compose/ui/layout/Placeable;->getSize-YbymL2g()J HSPLandroidx/compose/ui/layout/Placeable;->getWidth()I HPLandroidx/compose/ui/layout/Placeable;->getWidth()I HSPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V HPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V PLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V HPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V Landroidx/compose/ui/layout/Placeable$PlacementScope; HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V PLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V PLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; PLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection; HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I PLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates; PLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V PLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion; HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->()V PLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->()V HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z HPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z Landroidx/compose/ui/layout/PlaceableKt; HSPLandroidx/compose/ui/layout/PlaceableKt;->()V PLandroidx/compose/ui/layout/PlaceableKt;->()V HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J PLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1; Landroidx/compose/ui/layout/Remeasurement; Landroidx/compose/ui/layout/RemeasurementModifier; Landroidx/compose/ui/layout/RootMeasurePolicy; HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V PLandroidx/compose/ui/layout/RootMeasurePolicy;->()V HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V PLandroidx/compose/ui/layout/RootMeasurePolicy;->()V HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; PLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; Landroidx/compose/ui/layout/RootMeasurePolicy$measure$1; HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->()V PLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->()V HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->(I)V PLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->(I)V HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/layout/ScaleFactor; HSPLandroidx/compose/ui/layout/ScaleFactor;->()V PLandroidx/compose/ui/layout/ScaleFactor;->()V HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F PLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F HPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1; HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/State;)V HPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/State;)V HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V HPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6; HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V PLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V Landroidx/compose/ui/layout/SubcomposeLayoutState; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V PLandroidx/compose/ui/layout/SubcomposeLayoutState;->(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; PLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; PLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V PLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V PLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V HPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2; PLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2; PLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2; PLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; PLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1; HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V PLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/layout/SubcomposeMeasureScope; Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet; HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->()V HPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->()V Landroidx/compose/ui/modifier/BackwardsCompatLocalMap; HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V PLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z PLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; PLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; Landroidx/compose/ui/modifier/EmptyMap; HSPLandroidx/compose/ui/modifier/EmptyMap;->()V PLandroidx/compose/ui/modifier/EmptyMap;->()V HSPLandroidx/compose/ui/modifier/EmptyMap;->()V PLandroidx/compose/ui/modifier/EmptyMap;->()V HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z PLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z Landroidx/compose/ui/modifier/ModifierLocal; HSPLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0; PLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0; Landroidx/compose/ui/modifier/ModifierLocalConsumer; Landroidx/compose/ui/modifier/ModifierLocalManager; HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->(Landroidx/compose/ui/node/Owner;)V PLandroidx/compose/ui/modifier/ModifierLocalManager;->(Landroidx/compose/ui/node/Owner;)V HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V PLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ProvidableModifierLocal;)V PLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ProvidableModifierLocal;)V HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V HPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V Landroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1; HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->(Landroidx/compose/ui/modifier/ModifierLocalManager;)V PLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->(Landroidx/compose/ui/modifier/ModifierLocalManager;)V HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object; PLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/modifier/ModifierLocalModifierNode; HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; HPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt; HPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt; Landroidx/compose/ui/modifier/ModifierLocalProvider; Landroidx/compose/ui/modifier/ModifierLocalReadScope; Landroidx/compose/ui/modifier/ProvidableModifierLocal; HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/modifier/ProvidableModifierLocal;->(Lkotlin/jvm/functions/Function0;)V Landroidx/compose/ui/modifier/SingleLocalMap; HSPLandroidx/compose/ui/modifier/SingleLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocal;)V HPLandroidx/compose/ui/modifier/SingleLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocal;)V HSPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z PLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z PLandroidx/compose/ui/modifier/SingleLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; HSPLandroidx/compose/ui/modifier/SingleLocalMap;->set$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;Ljava/lang/Object;)V HPLandroidx/compose/ui/modifier/SingleLocalMap;->set$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;Ljava/lang/Object;)V Landroidx/compose/ui/node/AlignmentLines; HSPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V HPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V HSPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/HashMap; PLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/HashMap; HSPLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; PLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; HSPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z PLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z HSPLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/HashMap; PLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/HashMap; HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z PLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z HPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z HSPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z PLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V HPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V HSPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V HPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V HPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V HSPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V PLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V HSPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V PLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V PLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V PLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentLayout$ui_release(Z)V PLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentLayout$ui_release(Z)V HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V PLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V Landroidx/compose/ui/node/AlignmentLines$recalculate$1; HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->(Landroidx/compose/ui/node/LookaheadAlignmentLines;)V HPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->(Landroidx/compose/ui/node/LookaheadAlignmentLines;)V HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/node/AlignmentLinesOwner; Landroidx/compose/ui/node/BackwardsCompatNode; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->(Landroidx/compose/ui/Modifier$Element;)V HPLandroidx/compose/ui/node/BackwardsCompatNode;->(Landroidx/compose/ui/Modifier$Element;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V PLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; HPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element; PLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt; HPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V HPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V HPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V HPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V PLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V HPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V PLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V HPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V HPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V HPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2; HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->(Landroidx/compose/ui/node/BackwardsCompatNode;I)V HPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->(Landroidx/compose/ui/node/BackwardsCompatNode;I)V HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()V HPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()V Landroidx/compose/ui/node/BackwardsCompatNodeKt; HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->()V PLandroidx/compose/ui/node/BackwardsCompatNodeKt;->()V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; PLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z HPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->()V PLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->()V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; PLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1; HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V PLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->(I)V PLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->(I)V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V HPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/node/CanFocusChecker; HSPLandroidx/compose/ui/node/CanFocusChecker;->()V PLandroidx/compose/ui/node/CanFocusChecker;->()V HSPLandroidx/compose/ui/node/CanFocusChecker;->()V PLandroidx/compose/ui/node/CanFocusChecker;->()V HSPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z PLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z HSPLandroidx/compose/ui/node/CanFocusChecker;->reset()V PLandroidx/compose/ui/node/CanFocusChecker;->reset()V HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V PLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V Landroidx/compose/ui/node/ComposeUiNode; HSPLandroidx/compose/ui/node/ComposeUiNode;->()V PLandroidx/compose/ui/node/ComposeUiNode;->()V Landroidx/compose/ui/node/ComposeUiNode$Companion; HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V PLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V PLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0; HPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetCompositeKeyHash()Lkotlin/jvm/functions/Function2; HPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetCompositeKeyHash()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2; HPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2; PLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2; HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetResolvedCompositionLocals()Lkotlin/jvm/functions/Function2; HPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetResolvedCompositionLocals()Lkotlin/jvm/functions/Function2; Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1; HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V PLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->(I)V PLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->(I)V HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode; Landroidx/compose/ui/node/DelegatableNode; Landroidx/compose/ui/node/DelegatableNodeKt; HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/DelegatableNodeKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/DelegatableNodeKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode; HPLandroidx/compose/ui/node/DelegatableNodeKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode; HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner; HPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner; Landroidx/compose/ui/node/DelegatingNode; HSPLandroidx/compose/ui/node/DelegatingNode;->()V HPLandroidx/compose/ui/node/DelegatingNode;->()V HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/DelegatingNode;->getDelegate$ui_release()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/node/DelegatingNode;->getDelegate$ui_release()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/DelegatingNode;->getSelfKindSet$ui_release()I PLandroidx/compose/ui/node/DelegatingNode;->getSelfKindSet$ui_release()I HSPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V HPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V HSPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V HPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V HSPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V HPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V HSPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V HPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V HSPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V Landroidx/compose/ui/node/DepthSortedSet; HSPLandroidx/compose/ui/node/DepthSortedSet;->()V PLandroidx/compose/ui/node/DepthSortedSet;->()V HSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/DepthSortedSet;->contains(Landroidx/compose/ui/node/LayoutNode;)Z HPLandroidx/compose/ui/node/DepthSortedSet;->contains(Landroidx/compose/ui/node/LayoutNode;)Z HSPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z HPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z HSPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z HPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1; HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->()V PLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->()V HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I Landroidx/compose/ui/node/DrawModifierNode; HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V HPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V Landroidx/compose/ui/node/GlobalPositionAwareModifierNode; Landroidx/compose/ui/node/HitTestResult; HSPLandroidx/compose/ui/node/HitTestResult;->()V PLandroidx/compose/ui/node/HitTestResult;->()V HSPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I PLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I HSPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V PLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V HSPLandroidx/compose/ui/node/HitTestResult;->clear()V PLandroidx/compose/ui/node/HitTestResult;->clear()V HSPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J HPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object; HPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object; HSPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z PLandroidx/compose/ui/node/HitTestResult;->hasHit()Z HSPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Landroidx/compose/ui/Modifier$Node;FZLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Landroidx/compose/ui/Modifier$Node;FZLkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z PLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z HSPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V HPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V HSPLandroidx/compose/ui/node/HitTestResult;->size()I HPLandroidx/compose/ui/node/HitTestResult;->size()I Landroidx/compose/ui/node/InnerNodeCoordinator; HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->()V PLandroidx/compose/ui/node/InnerNodeCoordinator;->()V HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/node/InnerNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I HPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/node/TailModifierNode; PLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/node/TailModifierNode; HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; HPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/node/InnerNodeCoordinator$LookaheadDelegateImpl; Landroidx/compose/ui/node/IntStack; HSPLandroidx/compose/ui/node/IntStack;->(I)V HPLandroidx/compose/ui/node/IntStack;->(I)V HSPLandroidx/compose/ui/node/IntStack;->get(I)I PLandroidx/compose/ui/node/IntStack;->get(I)I HSPLandroidx/compose/ui/node/IntStack;->getSize()I PLandroidx/compose/ui/node/IntStack;->getSize()I HSPLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z PLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z HSPLandroidx/compose/ui/node/IntStack;->pop()I PLandroidx/compose/ui/node/IntStack;->pop()I HSPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V PLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V HSPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V PLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V HSPLandroidx/compose/ui/node/IntStack;->sortDiagonals()V PLandroidx/compose/ui/node/IntStack;->sortDiagonals()V Landroidx/compose/ui/node/IntrinsicsPolicy; HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/IntrinsicsPolicy;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V HPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V Landroidx/compose/ui/node/LayerPositionalProperties; HSPLandroidx/compose/ui/node/LayerPositionalProperties;->()V PLandroidx/compose/ui/node/LayerPositionalProperties;->()V HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V HPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/node/LayerPositionalProperties;)V HPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/node/LayerPositionalProperties;)V HSPLandroidx/compose/ui/node/LayerPositionalProperties;->hasSameValuesAs(Landroidx/compose/ui/node/LayerPositionalProperties;)Z HPLandroidx/compose/ui/node/LayerPositionalProperties;->hasSameValuesAs(Landroidx/compose/ui/node/LayerPositionalProperties;)Z Landroidx/compose/ui/node/LayoutAwareModifierNode; HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V PLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V Landroidx/compose/ui/node/LayoutModifierNode; Landroidx/compose/ui/node/LayoutModifierNodeCoordinator; HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->()V PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->()V HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I HPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode; PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode; HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator; PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; HPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$7po1rmUuVs6tXeBa5BDq-nmH7XI(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I HPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$7po1rmUuVs6tXeBa5BDq-nmH7XI(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I HSPLandroidx/compose/ui/node/LayoutNode;->()V PLandroidx/compose/ui/node/LayoutNode;->()V HSPLandroidx/compose/ui/node/LayoutNode;->(IZ)V HPLandroidx/compose/ui/node/LayoutNode;->(IZ)V HSPLandroidx/compose/ui/node/LayoutNode;->(IZI)V HPLandroidx/compose/ui/node/LayoutNode;->(IZI)V HSPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0; PLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V PLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V HPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V HPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V HSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z PLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List; HPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List; HPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/node/LayoutNode;->getCollapsedSemantics$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; HPLandroidx/compose/ui/node/LayoutNode;->getCollapsedSemantics$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; HSPLandroidx/compose/ui/node/LayoutNode;->getCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap; PLandroidx/compose/ui/node/LayoutNode;->getCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap; HSPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density; HPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I HPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List; PLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/node/LayoutNode;->getHeight()I PLandroidx/compose/ui/node/LayoutNode;->getHeight()I HSPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator; PLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator; HSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release$enumunboxing$()I PLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release$enumunboxing$()I HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; HPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z HPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release$enumunboxing$()I HPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release$enumunboxing$()I HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z PLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z HPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; PLandroidx/compose/ui/node/LayoutNode;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadRoot$ui_release()Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/node/LayoutNode;->getLookaheadRoot$ui_release()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z HPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy; PLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy; HSPLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z PLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain; PLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain; HSPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner; PLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner; HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I PLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I HSPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I PLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I HSPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; PLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; HSPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; PLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; HSPLandroidx/compose/ui/node/LayoutNode;->getWidth()I PLandroidx/compose/ui/node/LayoutNode;->getWidth()I HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector; HPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector; HPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V HPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateParentData$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->invalidateParentData$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V PLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z HPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z HPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z HPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z HSPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNode;->onRelease()V HPLandroidx/compose/ui/node/LayoutNode;->onRelease()V HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->place$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->place$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;)Z HPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;)Z HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z HPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z HSPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V PLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V PLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZI)V HPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZI)V HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V PLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V HSPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V HPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V HPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release()V PLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V PLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V HSPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V HPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V HSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V HPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V HSPLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V PLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V HSPLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V PLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V HPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V HPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0; HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->(I)V PLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->(I)V HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1; HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V PLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->(I)V PLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->(I)V HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1; HSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;->()V PLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;->()V Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1; HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;->()V PLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;->()V Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy; HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;->(Ljava/lang/String;)V PLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;->(Ljava/lang/String;)V Landroidx/compose/ui/node/LayoutNode$WhenMappings; HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;->()V PLandroidx/compose/ui/node/LayoutNode$WhenMappings;->()V Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1; HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->(Ljava/lang/Object;I)V HPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V HPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V Landroidx/compose/ui/node/LayoutNode$collapsedSemantics$1; HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/internal/Ref$ObjectRef;)V PLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/node/LayoutNodeDrawScope; HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->()V PLandroidx/compose/ui/node/LayoutNodeDrawScope;->()V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V HPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawDirect-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V HPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawDirect-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V HPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; PLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J HPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I PLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F PLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F Landroidx/compose/ui/node/LayoutNodeKt; HSPLandroidx/compose/ui/node/LayoutNodeKt;->()V PLandroidx/compose/ui/node/LayoutNodeKt;->()V HSPLandroidx/compose/ui/node/LayoutNodeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/node/LayoutNodeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner; HPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner; Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)I PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringModifierPlacement()Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringModifierPlacement()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release$enumunboxing$()I HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release$enumunboxing$()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->invalidateParentData()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->invalidateParentData()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->onCoordinatesUsed()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->onCoordinatesUsed()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$checkChildrenPlaceOrderForUpdates(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$checkChildrenPlaceOrderForUpdates(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$clearPlaceOrder(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$clearPlaceOrder(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/HashMap; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/HashMap; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredByParent$ui_release$enumunboxing$()I PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredByParent$ui_release$enumunboxing$()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getPlaceOrder$ui_release()I PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getPlaceOrder$ui_release()I HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getZIndex$ui_release()F PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getZIndex$ui_release()F HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateParentData()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateParentData()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodeDetached()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodeDetached()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildDelegatesDirty$ui_release()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildDelegatesDirty$ui_release()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setMeasuredByParent$ui_release()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setMeasuredByParent$ui_release()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setPlaced$ui_release()V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setPlaced$ui_release()V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V HPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V Landroidx/compose/ui/node/LookaheadAlignmentLines; HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V PLandroidx/compose/ui/node/LookaheadAlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map; HPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map; HSPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getPositionFor(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/layout/AlignmentLine;)I PLandroidx/compose/ui/node/LookaheadAlignmentLines;->getPositionFor(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/layout/AlignmentLine;)I Landroidx/compose/ui/node/LookaheadCapablePlaceable; HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->()V HPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->()V HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I HPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z PLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z PLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z HPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V HPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V PLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V Landroidx/compose/ui/node/LookaheadDelegate; Landroidx/compose/ui/node/MeasureAndLayoutDelegate; HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingMeasureOrLayout()Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingMeasureOrLayout()Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingOnPositionedCallbacks()Z PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingOnPositionedCallbacks()Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest; HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->(Landroidx/compose/ui/node/LayoutNode;ZZ)V PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->(Landroidx/compose/ui/node/LayoutNode;ZZ)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->getNode()Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->getNode()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isForced()Z PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isForced()Z HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isLookahead()Z PLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isLookahead()Z Landroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1; HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->(Z)V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->(Z)V HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/node/ModifierNodeElement; HSPLandroidx/compose/ui/node/ModifierNodeElement;->()V HPLandroidx/compose/ui/node/ModifierNodeElement;->()V Landroidx/compose/ui/node/NodeChain; HSPLandroidx/compose/ui/node/NodeChain;->(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/NodeChain;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/NodeChain;->access$createAndInsertNodeAsChild(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/NodeChain;->access$createAndInsertNodeAsChild(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I HPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I HSPLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator; PLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator; HSPLandroidx/compose/ui/node/NodeChain;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/node/NodeChain;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeChain;->has$ui_release()Z HPLandroidx/compose/ui/node/NodeChain;->has$ui_release()Z HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z HPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z HSPLandroidx/compose/ui/node/NodeChain;->markAsAttached()V HPLandroidx/compose/ui/node/NodeChain;->markAsAttached()V HSPLandroidx/compose/ui/node/NodeChain;->markAsDetached$ui_release()V PLandroidx/compose/ui/node/NodeChain;->markAsDetached$ui_release()V HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V HPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V HSPLandroidx/compose/ui/node/NodeChain;->runDetachLifecycle$ui_release()V PLandroidx/compose/ui/node/NodeChain;->runDetachLifecycle$ui_release()V HSPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;Z)V HPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;Z)V HSPLandroidx/compose/ui/node/NodeChain;->syncAggregateChildKindSet()V HPLandroidx/compose/ui/node/NodeChain;->syncAggregateChildKindSet()V HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V HPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V HSPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V HPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/ui/node/NodeChain$Differ; HSPLandroidx/compose/ui/node/NodeChain$Differ;->(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V PLandroidx/compose/ui/node/NodeChain$Differ;->(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V HSPLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V HPLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V HSPLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V PLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V HSPLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V PLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V HSPLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/node/NodeChain$Differ;->setOffset(I)V PLandroidx/compose/ui/node/NodeChain$Differ;->setOffset(I)V HSPLandroidx/compose/ui/node/NodeChain$Differ;->setShouldAttachOnInsert(Z)V PLandroidx/compose/ui/node/NodeChain$Differ;->setShouldAttachOnInsert(Z)V Landroidx/compose/ui/node/NodeChainKt; HSPLandroidx/compose/ui/node/NodeChainKt;->()V PLandroidx/compose/ui/node/NodeChainKt;->()V HSPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; HPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I HPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; HSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;->()V PLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;->()V Landroidx/compose/ui/node/NodeChainKt$fillVector$1; HSPLandroidx/compose/ui/node/NodeChainKt$fillVector$1;->(Landroidx/compose/runtime/collection/MutableVector;)V PLandroidx/compose/ui/node/NodeChainKt$fillVector$1;->(Landroidx/compose/runtime/collection/MutableVector;)V Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeCoordinator;->()V PLandroidx/compose/ui/node/NodeCoordinator;->()V HSPLandroidx/compose/ui/node/NodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/NodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; PLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getLayerPositionalProperties$p(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/LayerPositionalProperties; PLandroidx/compose/ui/node/NodeCoordinator;->access$getLayerPositionalProperties$p(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/LayerPositionalProperties; HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Lorg/acra/file/CrashReportPersister; PLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Lorg/acra/file/CrashReportPersister; HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getTmpLayerPositionalProperties$cp()Landroidx/compose/ui/node/LayerPositionalProperties; PLandroidx/compose/ui/node/NodeCoordinator;->access$getTmpLayerPositionalProperties$cp()Landroidx/compose/ui/node/LayerPositionalProperties; HSPLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V PLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V HPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J HPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J HPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F HPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J HPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; HPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; HSPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable; PLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable; HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; PLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F HPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F HPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F HSPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z HPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z PLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer; HPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer; HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult; HPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J PLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable; PLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable; HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; HPLandroidx/compose/ui/node/NodeCoordinator;->getParentCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object; HPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object; HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; HPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J PLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator; PLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F PLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F HSPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V HPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z HPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z HPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z HPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect; HPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J HPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J PLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->localToWindow-MK-Hz9U(J)J PLandroidx/compose/ui/node/NodeCoordinator;->localToWindow-MK-Hz9U(J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V HPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V PLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutNodeAttach()V HPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutNodeAttach()V HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V HPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V HPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V HSPLandroidx/compose/ui/node/NodeCoordinator;->onRelease()V HPLandroidx/compose/ui/node/NodeCoordinator;->onRelease()V HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelfApparentToRealOffset-f8xVGno(JFLkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/node/NodeCoordinator;->placeSelfApparentToRealOffset-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V HPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V HSPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V HPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V HPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V PLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V HPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z HPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V HPLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J HPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->touchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HPLandroidx/compose/ui/node/NodeCoordinator;->touchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock(ZLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock(ZLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters$default(Landroidx/compose/ui/node/NodeCoordinator;)V PLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters$default(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V HPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V HSPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z PLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; Landroidx/compose/ui/node/NodeCoordinator$hit$1; HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/node/NodeCoordinator$invoke$1; HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V HPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V Landroidx/compose/ui/node/NodeKindKt; HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V HPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V HPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V HPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I HPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I HPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I HPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z HPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z Landroidx/compose/ui/node/ObserverModifierNode; Landroidx/compose/ui/node/ObserverNodeOwnerScope; HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->()V PLandroidx/compose/ui/node/ObserverNodeOwnerScope;->()V HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->(Landroidx/compose/ui/node/ObserverModifierNode;)V HPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->(Landroidx/compose/ui/node/ObserverModifierNode;)V HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->access$getOnObserveReadsChanged$cp()Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/node/ObserverNodeOwnerScope;->access$getOnObserveReadsChanged$cp()Lkotlin/jvm/functions/Function1; Landroidx/compose/ui/node/OnPositionedDispatcher; HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V PLandroidx/compose/ui/node/OnPositionedDispatcher;->()V HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V HPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->isNotEmpty()Z PLandroidx/compose/ui/node/OnPositionedDispatcher;->isNotEmpty()Z HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onRootNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/node/OnPositionedDispatcher;->onRootNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator; HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V PLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V PLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I Landroidx/compose/ui/node/OwnedLayer; Landroidx/compose/ui/node/Owner; HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V PLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener; Landroidx/compose/ui/node/OwnerScope; Landroidx/compose/ui/node/OwnerSnapshotObserver; HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/node/OwnerSnapshotObserver;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V PLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeSemanticsReads$ui_release(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeSemanticsReads$ui_release(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V PLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V PLandroidx/compose/ui/node/OwnerSnapshotObserver;->stopObserving$ui_release()V Landroidx/compose/ui/node/ParentDataModifierNode; Landroidx/compose/ui/node/PointerInputModifierNode; HSPLandroidx/compose/ui/node/PointerInputModifierNode;->interceptOutOfBoundsChildEvents()V PLandroidx/compose/ui/node/PointerInputModifierNode;->interceptOutOfBoundsChildEvents()V HSPLandroidx/compose/ui/node/PointerInputModifierNode;->sharePointerInputWithSiblings()Z PLandroidx/compose/ui/node/PointerInputModifierNode;->sharePointerInputWithSiblings()Z Landroidx/compose/ui/node/SemanticsModifierNode; HSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldClearDescendantSemantics()Z HPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldClearDescendantSemantics()Z HSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldMergeDescendantSemantics()Z HPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldMergeDescendantSemantics()Z Landroidx/compose/ui/node/TailModifierNode; HSPLandroidx/compose/ui/node/TailModifierNode;->()V HPLandroidx/compose/ui/node/TailModifierNode;->()V HSPLandroidx/compose/ui/node/TailModifierNode;->getAttachHasBeenRun()Z PLandroidx/compose/ui/node/TailModifierNode;->getAttachHasBeenRun()Z HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V HPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V HPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V Landroidx/compose/ui/node/TreeSet; HSPLandroidx/compose/ui/node/TreeSet;->(Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;)V PLandroidx/compose/ui/node/TreeSet;->(Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;)V Landroidx/compose/ui/node/UiApplier; HSPLandroidx/compose/ui/node/UiApplier;->(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/node/UiApplier;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V PLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V PLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V HSPLandroidx/compose/ui/node/UiApplier;->onClear()V PLandroidx/compose/ui/node/UiApplier;->onClear()V HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V PLandroidx/compose/ui/node/UiApplier;->onEndChanges()V HSPLandroidx/compose/ui/node/UiApplier;->remove(II)V PLandroidx/compose/ui/node/UiApplier;->remove(II)V Landroidx/compose/ui/platform/AbstractComposeView; HSPLandroidx/compose/ui/platform/AbstractComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V PLandroidx/compose/ui/platform/AbstractComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V PLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V PLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V PLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V PLandroidx/compose/ui/platform/AbstractComposeView;->disposeComposition()V HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V PLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(IIIIZ)V HPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(IIIIZ)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V HPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z PLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V PLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V HPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V HPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V PLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext; HPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext; HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V PLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V HSPLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z PLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1; HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V PLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/AccessibilityManager; Landroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods; HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V HPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V Landroidx/compose/ui/platform/AndroidAccessibilityManager; HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;->(Landroid/content/Context;)V PLandroidx/compose/ui/platform/AndroidAccessibilityManager;->(Landroid/content/Context;)V Landroidx/compose/ui/platform/AndroidClipboardManager; HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/Context;)V PLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/Context;)V Landroidx/compose/ui/platform/AndroidComposeView; HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V PLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V PLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->()V PLandroidx/compose/ui/platform/AndroidComposeView;->()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V HPLandroidx/compose/ui/platform/AndroidComposeView;->(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method; PLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method; HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent; PLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent; HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class; PLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class; HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; PLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V PLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V PLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidComposeView;->calculatePositionInWindow-MK-Hz9U(J)J PLandroidx/compose/ui/platform/AndroidComposeView;->calculatePositionInWindow-MK-Hz9U(J)J HSPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V HPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J HPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer; HPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer; HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V HPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z HPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V PLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager; PLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; HPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/AndroidAutofill; PLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/AndroidAutofill; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; PLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager; PLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; PLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner; HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl; PLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/platform/ViewLayer$Companion; PLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/platform/ViewLayer$Companion; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback; PLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManagerImpl; PLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManagerImpl; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager; PLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1; PLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner; HPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope; PLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z PLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; HPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService; PLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/AndroidTextToolbar; PLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/AndroidTextToolbar; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; PLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; HPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfoImpl; PLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfoImpl; HSPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I HPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z HPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z HSPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z HPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z HSPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J HPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V HPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V HPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V HPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V HPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V HPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V HPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V HPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZZ)V HPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZZ)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V PLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V PLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V HPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V PLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V HPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V PLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V PLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J HPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J HSPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I HPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V HPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2; HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V PLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onGlobalLayout()V HPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onGlobalLayout()V Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3; HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->(Landroidx/compose/ui/platform/AndroidComposeView;)V PLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->(Landroidx/compose/ui/platform/AndroidComposeView;)V Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4; HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->(Landroidx/compose/ui/platform/AndroidComposeView;)V PLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->(Landroidx/compose/ui/platform/AndroidComposeView;)V HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->onTouchModeChanged(Z)V PLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->onTouchModeChanged(Z)V Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5; HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5;->(Ljava/lang/Object;I)V Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V PLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner; HPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner; HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner; PLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner; Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1; HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->(Landroidx/compose/ui/platform/AndroidComposeView;I)V PLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->(Landroidx/compose/ui/platform/AndroidComposeView;I)V HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1; HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V PLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V Landroidx/compose/ui/platform/AndroidComposeView$removeAndroidView$1; Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1; HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V PLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2; HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object; HPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()V HPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->()V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->(Landroidx/compose/ui/platform/AndroidComposeView;)V HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->(Landroidx/compose/ui/platform/AndroidComposeView;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$createNodeInfo(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;I)Landroid/view/accessibility/AccessibilityNodeInfo; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$createNodeInfo(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;I)Landroid/view/accessibility/AccessibilityNodeInfo; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroid/os/Handler; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getSemanticsChangeChecker$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes$ui_release()Ljava/util/Map; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes$ui_release()Ljava/util/Map; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;)Z HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoStateDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoStateDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoText(Landroidx/compose/ui/semantics/SemanticsNode;)Landroid/text/SpannableString; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoText(Landroidx/compose/ui/semantics/SemanticsNode;)Landroid/text/SpannableString; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isScreenReaderFocusable(Landroidx/compose/ui/semantics/SemanticsNode;)Z HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isScreenReaderFocusable(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStop(Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentCaptureSession$ui_release(Landroidx/core/view/contentcapture/ContentCaptureSessionCompat;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentCaptureSession$ui_release(Landroidx/core/view/contentcapture/ContentCaptureSessionCompat;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->addPageActions(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->addPageActions(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;->(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;->(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ; HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V PLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V PLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V PLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO; HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V Landroidx/compose/ui/platform/AndroidComposeView_androidKt; HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->()V PLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->()V HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getPlatformTextInputServiceInterceptor()Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getPlatformTextInputServiceInterceptor()Lkotlin/jvm/functions/Function1; Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->()V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->()V HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalImageVectorCache()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalImageVectorCache()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalLifecycleOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalLifecycleOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalSavedStateRegistryOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalSavedStateRegistryOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1; HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->onTrimMemory(I)V Landroidx/compose/ui/platform/AndroidTextToolbar; HSPLandroidx/compose/ui/platform/AndroidTextToolbar;->(Landroid/view/View;)V PLandroidx/compose/ui/platform/AndroidTextToolbar;->(Landroid/view/View;)V Landroidx/compose/ui/platform/AndroidUiDispatcher; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->()V PLandroidx/compose/ui/platform/AndroidUiDispatcher;->()V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;)V PLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler; PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object; PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy; PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List; PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V HPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V HPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer; PLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/ui/platform/AndroidUiFrameClock; PLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/ui/platform/AndroidUiFrameClock; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V HPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;->()V PLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;->()V Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1; HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V PLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V HPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V HPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V Landroidx/compose/ui/platform/AndroidUiFrameClock; HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V PLandroidx/compose/ui/platform/AndroidUiFrameClock;->(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; PLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; PLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; PLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1; HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V HPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V Landroidx/compose/ui/platform/AndroidUriHandler; HSPLandroidx/compose/ui/platform/AndroidUriHandler;->(Landroid/content/Context;)V PLandroidx/compose/ui/platform/AndroidUriHandler;->(Landroid/content/Context;)V Landroidx/compose/ui/platform/AndroidViewConfiguration; HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->(Landroid/view/ViewConfiguration;)V PLandroidx/compose/ui/platform/AndroidViewConfiguration;->(Landroid/view/ViewConfiguration;)V PLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F Landroidx/compose/ui/platform/AndroidViewsHandler; HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V PLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; HPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V PLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V HPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V PLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V Landroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$10(Landroid/graphics/RenderNode;F)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$10(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;I)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;I)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;F)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V HPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V HSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V PLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V Landroidx/compose/ui/platform/CalculateMatrixToWindow; Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29; HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->()V PLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->()V HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V HPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V Landroidx/compose/ui/platform/ClipboardManager; Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt; HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V PLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V Landroidx/compose/ui/platform/ComposeView; HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V PLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V PLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; PLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z PLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLandroidx/compose/ui/platform/ComposeView;->setContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V Landroidx/compose/ui/platform/ComposeView$Content$1; HSPLandroidx/compose/ui/platform/ComposeView$Content$1;->(Landroidx/compose/ui/platform/ComposeView;I)V PLandroidx/compose/ui/platform/ComposeView$Content$1;->(Landroidx/compose/ui/platform/ComposeView;I)V Landroidx/compose/ui/platform/CompositionLocalsKt; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->()V PLandroidx/compose/ui/platform/CompositionLocalsKt;->()V HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAccessibilityManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAccessibilityManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalHapticFeedback()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalHapticFeedback()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalUriHandler()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalUriHandler()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1; HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V PLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->(I)V PLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->(I)V HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->invoke()Ljava/lang/Object; PLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1; HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;II)V PLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;II)V HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Landroidx/compose/runtime/Composer;I)V PLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/DelegatingSoftwareKeyboardController; HSPLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;->(Landroidx/compose/ui/text/input/TextInputService;)V PLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;->(Landroidx/compose/ui/text/input/TextInputService;)V Landroidx/compose/ui/platform/DeviceRenderNode; Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z HPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->dispose()V HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1; HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1; HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V HPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->saveState()Landroid/os/Bundle; Landroidx/compose/ui/platform/GlobalSnapshotManager; HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V PLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V PLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1; HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2; HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/InfiniteAnimationPolicy; HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy;->()V PLandroidx/compose/ui/platform/InfiniteAnimationPolicy;->()V Landroidx/compose/ui/platform/InfiniteAnimationPolicy$Key; HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V PLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V PLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V Landroidx/compose/ui/platform/InspectableModifier; HSPLandroidx/compose/ui/platform/InspectableModifier;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/platform/InspectableModifier;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End; PLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End; Landroidx/compose/ui/platform/InspectableModifier$End; HSPLandroidx/compose/ui/platform/InspectableModifier$End;->()V HPLandroidx/compose/ui/platform/InspectableModifier$End;->()V Landroidx/compose/ui/platform/InspectableValueKt; HSPLandroidx/compose/ui/platform/InspectableValueKt;->()V PLandroidx/compose/ui/platform/InspectableValueKt;->()V HSPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1; HPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1; HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V PLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->(I)V PLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->(I)V HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; HPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/InspectorValueInfo; HSPLandroidx/compose/ui/platform/InspectorValueInfo;->(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/platform/InspectorValueInfo;->(Lkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/platform/LayerMatrixCache; HSPLandroidx/compose/ui/platform/LayerMatrixCache;->(Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/platform/LayerMatrixCache;->(Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F HPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F HPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V PLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V Landroidx/compose/ui/platform/MotionDurationScaleImpl; HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->()V PLandroidx/compose/ui/platform/MotionDurationScaleImpl;->()V HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F PLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; PLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V PLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V Landroidx/compose/ui/platform/OutlineResolver; HSPLandroidx/compose/ui/platform/OutlineResolver;->(Landroidx/compose/ui/unit/Density;)V HPLandroidx/compose/ui/platform/OutlineResolver;->(Landroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline; HPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline; HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z PLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z HSPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z PLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z HPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z HSPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V PLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V HPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V Landroidx/compose/ui/platform/RenderNodeApi29; HSPLandroidx/compose/ui/platform/RenderNodeApi29;->()V PLandroidx/compose/ui/platform/RenderNodeApi29;->()V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V HPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V PLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F HPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z PLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z HPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F HPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z HPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I HPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I HPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V PLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I PLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I HPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V PLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V PLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/runtime/Stack;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/runtime/Stack;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z PLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z PLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V HPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V Landroidx/compose/ui/platform/RenderNodeLayer; HSPLandroidx/compose/ui/platform/RenderNodeLayer;->()V PLandroidx/compose/ui/platform/RenderNodeLayer;->()V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V PLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V HPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z HPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J HPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V HPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V HPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V Landroidx/compose/ui/platform/ScrollObservationScope; Landroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds; HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V PLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getAdjustedBounds()Landroid/graphics/Rect; HPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getAdjustedBounds()Landroid/graphics/Rect; HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; HPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; Landroidx/compose/ui/platform/UriHandler; Landroidx/compose/ui/platform/ViewCompositionStrategy; Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1; HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;->(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V PLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;->(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1; HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V PLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V Landroidx/compose/ui/platform/ViewCompositionStrategy_androidKt; HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->()V PLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->()V HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z PLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z HPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z HPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z HPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z HPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Region;)V HPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Region;)V HSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap(Landroidx/compose/ui/semantics/SemanticsOwner;)Ljava/util/LinkedHashMap; HPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap(Landroidx/compose/ui/semantics/SemanticsOwner;)Ljava/util/LinkedHashMap; Landroidx/compose/ui/platform/ViewConfiguration; HSPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J HPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J Landroidx/compose/ui/platform/ViewLayer; HSPLandroidx/compose/ui/platform/ViewLayer;->()V PLandroidx/compose/ui/platform/ViewLayer;->()V HSPLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z PLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z Landroidx/compose/ui/platform/ViewLayer$Companion; HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->()V PLandroidx/compose/ui/platform/ViewLayer$Companion;->()V HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->()V PLandroidx/compose/ui/platform/ViewLayer$Companion;->()V HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->access$getIsShowingLayoutBounds()Z PLandroidx/compose/ui/platform/ViewLayer$Companion;->access$getIsShowingLayoutBounds()Z Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1; HSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;->()V PLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;->()V Landroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1; HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->()V PLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->()V HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->(I)V PLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->(I)V HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WeakCache; HSPLandroidx/compose/ui/platform/WeakCache;->()V PLandroidx/compose/ui/platform/WeakCache;->()V HSPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object; HPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object; HSPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V HPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V Landroidx/compose/ui/platform/WindowInfoImpl; HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V PLandroidx/compose/ui/platform/WindowInfoImpl;->()V HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V PLandroidx/compose/ui/platform/WindowInfoImpl;->()V HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V PLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V PLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V Landroidx/compose/ui/platform/WindowRecomposerFactory; HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;->()V PLandroidx/compose/ui/platform/WindowRecomposerFactory;->()V Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1; HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V PLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V PLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V Landroidx/compose/ui/platform/WindowRecomposerPolicy; HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V PLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; HPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1; HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->(Lkotlinx/coroutines/Job;)V PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->(Lkotlinx/coroutines/Job;)V HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1; HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WindowRecomposer_androidKt; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->()V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->()V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;->()V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;->()V Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1; HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;->(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;->(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V Landroidx/compose/ui/platform/WrappedComposition; HSPLandroidx/compose/ui/platform/WrappedComposition;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V PLandroidx/compose/ui/platform/WrappedComposition;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle; PLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle; HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z PLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V PLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V HSPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition; PLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition; HSPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView; PLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView; HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V PLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V Landroidx/compose/ui/platform/WrappedComposition$setContent$1; HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1; HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)V PLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)V HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V PLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1; HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods; HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V PLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V PLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V HPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V Landroidx/compose/ui/platform/WrapperVerificationHelperMethods; HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V PLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V PLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map; PLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map; Landroidx/compose/ui/platform/Wrapper_androidKt; HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->()V PLandroidx/compose/ui/platform/Wrapper_androidKt;->()V HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition; PLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition; Landroidx/compose/ui/platform/accessibility/CollectionInfoKt; HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/ArrayList;)Z HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/ArrayList;)Z HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V Landroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1; HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->()V PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->()V HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->(I)V PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->(I)V Landroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback; HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;->(Lkotlin/jvm/functions/Function0;)V Landroidx/compose/ui/res/ImageVectorCache; HSPLandroidx/compose/ui/res/ImageVectorCache;->()V PLandroidx/compose/ui/res/ImageVectorCache;->()V PLandroidx/compose/ui/res/ImageVectorCache;->clear()V HSPLandroidx/compose/ui/res/ImageVectorCache;->get(Landroidx/compose/ui/res/ImageVectorCache$Key;)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; PLandroidx/compose/ui/res/ImageVectorCache;->get(Landroidx/compose/ui/res/ImageVectorCache$Key;)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; HSPLandroidx/compose/ui/res/ImageVectorCache;->set(Landroidx/compose/ui/res/ImageVectorCache$Key;Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;)V PLandroidx/compose/ui/res/ImageVectorCache;->set(Landroidx/compose/ui/res/ImageVectorCache$Key;Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;)V Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; HSPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->(Landroidx/compose/ui/graphics/vector/ImageVector;I)V PLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->(Landroidx/compose/ui/graphics/vector/ImageVector;I)V HSPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector; Landroidx/compose/ui/res/ImageVectorCache$Key; HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->(ILandroid/content/res/Resources$Theme;)V PLandroidx/compose/ui/res/ImageVectorCache$Key;->(ILandroid/content/res/Resources$Theme;)V HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->hashCode()I PLandroidx/compose/ui/res/ImageVectorCache$Key;->hashCode()I Landroidx/compose/ui/semantics/AccessibilityAction; HSPLandroidx/compose/ui/semantics/AccessibilityAction;->(Ljava/lang/String;Lkotlin/Function;)V HPLandroidx/compose/ui/semantics/AccessibilityAction;->(Ljava/lang/String;Lkotlin/Function;)V HSPLandroidx/compose/ui/semantics/AccessibilityAction;->getLabel()Ljava/lang/String; HPLandroidx/compose/ui/semantics/AccessibilityAction;->getLabel()Ljava/lang/String; Landroidx/compose/ui/semantics/AppendedSemanticsElement; HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->(ZLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->(ZLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; HPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V PLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V Landroidx/compose/ui/semantics/ClearAndSetSemanticsElement; HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/semantics/CollectionInfo; HSPLandroidx/compose/ui/semantics/CollectionInfo;->(II)V PLandroidx/compose/ui/semantics/CollectionInfo;->(II)V PLandroidx/compose/ui/semantics/CollectionInfo;->getColumnCount()I PLandroidx/compose/ui/semantics/CollectionInfo;->getRowCount()I Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->(ZZLkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->(ZZLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldClearDescendantSemantics()Z HPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldClearDescendantSemantics()Z HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldMergeDescendantSemantics()Z HPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldMergeDescendantSemantics()Z HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setMergeDescendants(Z)V PLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setMergeDescendants(Z)V HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setProperties(Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setProperties(Lkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/semantics/CustomAccessibilityAction; Landroidx/compose/ui/semantics/EmptySemanticsElement; HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V PLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V PLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; PLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; Landroidx/compose/ui/semantics/EmptySemanticsModifier; HSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->()V PLandroidx/compose/ui/semantics/EmptySemanticsModifier;->()V HSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V PLandroidx/compose/ui/semantics/EmptySemanticsModifier;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V Landroidx/compose/ui/semantics/LiveRegionMode; Landroidx/compose/ui/semantics/ProgressBarRangeInfo; Landroidx/compose/ui/semantics/Role; HSPLandroidx/compose/ui/semantics/Role;->(I)V HPLandroidx/compose/ui/semantics/Role;->(I)V HSPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role; HPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role; HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/semantics/Role;->unbox-impl()I HPLandroidx/compose/ui/semantics/Role;->unbox-impl()I Landroidx/compose/ui/semantics/ScrollAxisRange; HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V PLandroidx/compose/ui/semantics/ScrollAxisRange;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getMaxValue()Lkotlin/jvm/functions/Function0; PLandroidx/compose/ui/semantics/ScrollAxisRange;->getMaxValue()Lkotlin/jvm/functions/Function0; HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getValue()Lkotlin/jvm/functions/Function0; PLandroidx/compose/ui/semantics/ScrollAxisRange;->getValue()Lkotlin/jvm/functions/Function0; Landroidx/compose/ui/semantics/SemanticsActions; HSPLandroidx/compose/ui/semantics/SemanticsActions;->()V PLandroidx/compose/ui/semantics/SemanticsActions;->()V HSPLandroidx/compose/ui/semantics/SemanticsActions;->getClearTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getClearTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCollapse()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getCollapse()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCopyText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getCopyText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCutText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getCutText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getExpand()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getExpand()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getOnImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnLongClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getOnLongClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageDown()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getPageDown()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageLeft()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getPageLeft()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageRight()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getPageRight()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageUp()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getPageUp()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPasteText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getPasteText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetProgress()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getSetProgress()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetSelection()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getSetSelection()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsActions;->getSetText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getSetTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsActions;->getShowTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsActions;->getShowTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey; Landroidx/compose/ui/semantics/SemanticsConfiguration; HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V HPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z HPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; HPLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElse(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; PLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElse(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; HPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z PLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isMergingSemanticsOfDescendants()Z HPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isMergingSemanticsOfDescendants()Z HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V HPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V PLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V PLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V Landroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1; HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V PLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V PLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V Landroidx/compose/ui/semantics/SemanticsModifier; Landroidx/compose/ui/semantics/SemanticsModifierKt; HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->()V PLandroidx/compose/ui/semantics/SemanticsModifierKt;->()V HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->generateSemanticsId()I HPLandroidx/compose/ui/semantics/SemanticsModifierKt;->generateSemanticsId()I HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; Landroidx/compose/ui/semantics/SemanticsNode; HSPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V HSPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; HPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V HPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V HSPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List; HPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; HPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getId()I HPLandroidx/compose/ui/semantics/SemanticsNode;->getId()I HSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutInfo()Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutInfo()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutNode$ui_release()Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutNode$ui_release()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; HPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List; HPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getTouchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HPLandroidx/compose/ui/semantics/SemanticsNode;->getTouchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; HPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; HSPLandroidx/compose/ui/semantics/SemanticsNode;->isFake$ui_release()Z HPLandroidx/compose/ui/semantics/SemanticsNode;->isFake$ui_release()Z HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z PLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z HSPLandroidx/compose/ui/semantics/SemanticsNode;->isUnmergedLeafNode$ui_release()Z HPLandroidx/compose/ui/semantics/SemanticsNode;->isUnmergedLeafNode$ui_release()Z HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List; HPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List; Landroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1; HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Ljava/lang/Object;I)V HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V PLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1; HSPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V HPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V Landroidx/compose/ui/semantics/SemanticsNode$parent$1; HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->()V PLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->(I)V PLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->(I)V HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; HPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/semantics/SemanticsNodeKt; HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->SemanticsNode(Landroidx/compose/ui/node/LayoutNode;Z)Landroidx/compose/ui/semantics/SemanticsNode; HPLandroidx/compose/ui/semantics/SemanticsNodeKt;->SemanticsNode(Landroidx/compose/ui/node/LayoutNode;Z)Landroidx/compose/ui/semantics/SemanticsNode; HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; HPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; HPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; HPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; Landroidx/compose/ui/semantics/SemanticsOwner; HSPLandroidx/compose/ui/semantics/SemanticsOwner;->(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/compose/ui/semantics/SemanticsOwner;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; HPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; Landroidx/compose/ui/semantics/SemanticsProperties; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->()V PLandroidx/compose/ui/semantics/SemanticsProperties;->()V HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getDisabled()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getDisabled()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getError()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getError()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHeading()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getHeading()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getInvisibleToUser()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getInvisibleToUser()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsTraversalGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getIsTraversalGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPassword()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getPassword()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelectableGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getSelectableGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; PLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; HPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid; Landroidx/compose/ui/semantics/SemanticsPropertiesKt; HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->()V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V HPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V HPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsConfiguration;Z)V HPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsConfiguration;Z)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V HPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelected(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V HPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelected(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTraversalGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTraversalGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1; HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V PLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V Landroidx/compose/ui/semantics/SemanticsPropertyKey; HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;)V PLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V PLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/Object;)V HPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/Object;)V Landroidx/compose/ui/semantics/SemanticsPropertyKey$1; HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V PLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->(I)V PLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->(I)V Landroidx/compose/ui/semantics/SemanticsPropertyReceiver; Landroidx/compose/ui/state/ToggleableState; Landroidx/compose/ui/text/AndroidParagraph; HSPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V HPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout; HPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout; HSPLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z PLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F PLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F PLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I PLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I HSPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; HPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F HPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V HPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/text/AndroidParagraph;->paint-LG529CI(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;I)V HPLandroidx/compose/ui/text/AndroidParagraph;->paint-LG529CI(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;I)V Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2; HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;->(Ljava/lang/Object;I)V HPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;->(Ljava/lang/Object;I)V Landroidx/compose/ui/text/AnnotatedString; HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/ArrayList;I)V PLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/ArrayList;I)V HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V HPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List; PLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List; HSPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String; PLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String; HSPLandroidx/compose/ui/text/AnnotatedString;->getTtsAnnotations(I)Ljava/util/List; HPLandroidx/compose/ui/text/AnnotatedString;->getTtsAnnotations(I)Ljava/util/List; HSPLandroidx/compose/ui/text/AnnotatedString;->getUrlAnnotations(I)Ljava/util/List; HPLandroidx/compose/ui/text/AnnotatedString;->getUrlAnnotations(I)Ljava/util/List; HSPLandroidx/compose/ui/text/AnnotatedString;->length()I HPLandroidx/compose/ui/text/AnnotatedString;->length()I Landroidx/compose/ui/text/AnnotatedString$Range; Landroidx/compose/ui/text/ParagraphIntrinsics; Landroidx/compose/ui/text/ParagraphStyle; HSPLandroidx/compose/ui/text/ParagraphStyle;->(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V HPLandroidx/compose/ui/text/ParagraphStyle;->(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens; PLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens; HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphensOrDefault-vmbZdU8$ui_text_release()I PLandroidx/compose/ui/text/ParagraphStyle;->getHyphensOrDefault-vmbZdU8$ui_text_release()I HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; PLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreakOrDefault-rAG3T2k$ui_text_release()I PLandroidx/compose/ui/text/ParagraphStyle;->getLineBreakOrDefault-rAG3T2k$ui_text_release()I HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J PLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; PLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; HSPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; PLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; PLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlignOrDefault-e0LSkKk$ui_text_release()I PLandroidx/compose/ui/text/ParagraphStyle;->getTextAlignOrDefault-e0LSkKk$ui_text_release()I HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; PLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; PLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; PLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; HPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; Landroidx/compose/ui/text/ParagraphStyleKt; HSPLandroidx/compose/ui/text/ParagraphStyleKt;->()V PLandroidx/compose/ui/text/ParagraphStyleKt;->()V HSPLandroidx/compose/ui/text/ParagraphStyleKt;->fastMerge-HtYhynw(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)Landroidx/compose/ui/text/ParagraphStyle; HPLandroidx/compose/ui/text/ParagraphStyleKt;->fastMerge-HtYhynw(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)Landroidx/compose/ui/text/ParagraphStyle; HSPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle; HPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle; Landroidx/compose/ui/text/PlatformParagraphStyle; HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->()V PLandroidx/compose/ui/text/PlatformParagraphStyle;->()V HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->()V PLandroidx/compose/ui/text/PlatformParagraphStyle;->()V HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(ZI)V PLandroidx/compose/ui/text/PlatformParagraphStyle;->(ZI)V Landroidx/compose/ui/text/PlatformTextStyle; HSPLandroidx/compose/ui/text/PlatformTextStyle;->()V PLandroidx/compose/ui/text/PlatformTextStyle;->()V HSPLandroidx/compose/ui/text/PlatformTextStyle;->(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)V PLandroidx/compose/ui/text/PlatformTextStyle;->(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)V HSPLandroidx/compose/ui/text/PlatformTextStyle;->getParagraphStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; PLandroidx/compose/ui/text/PlatformTextStyle;->getParagraphStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; HSPLandroidx/compose/ui/text/PlatformTextStyle;->getSpanStyle()Landroidx/compose/ui/text/PlatformSpanStyle; PLandroidx/compose/ui/text/PlatformTextStyle;->getSpanStyle()Landroidx/compose/ui/text/PlatformSpanStyle; Landroidx/compose/ui/text/SpanStyle; HSPLandroidx/compose/ui/text/SpanStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;I)V HPLandroidx/compose/ui/text/SpanStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;I)V HSPLandroidx/compose/ui/text/SpanStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V HPLandroidx/compose/ui/text/SpanStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V HSPLandroidx/compose/ui/text/SpanStyle;->(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V HPLandroidx/compose/ui/text/SpanStyle;->(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F HPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F HSPLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J PLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J HSPLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift; PLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift; HSPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; HPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J HPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J HSPLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; PLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; HSPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; HPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; HSPLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String; PLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String; HSPLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J PLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J HSPLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; PLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; HSPLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; PLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; HSPLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; PLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; HSPLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J PLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J HSPLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; PLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; HSPLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle; PLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle; HSPLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; PLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; HSPLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; PLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; HSPLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle; PLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle; HSPLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform; PLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform; HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z HPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z HSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z HPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; HPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; Landroidx/compose/ui/text/SpanStyleKt; HSPLandroidx/compose/ui/text/SpanStyleKt;->()V PLandroidx/compose/ui/text/SpanStyleKt;->()V HSPLandroidx/compose/ui/text/SpanStyleKt;->fastMerge-dSHsh3o(Landroidx/compose/ui/text/SpanStyle;JLandroidx/compose/ui/graphics/Brush;FJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/text/SpanStyle; HPLandroidx/compose/ui/text/SpanStyleKt;->fastMerge-dSHsh3o(Landroidx/compose/ui/text/SpanStyle;JLandroidx/compose/ui/graphics/Brush;FJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/text/SpanStyle; HSPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; HPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; Landroidx/compose/ui/text/StringKt; HSPLandroidx/compose/ui/text/StringKt;->()V HPLandroidx/compose/ui/text/StringKt;->()V HSPLandroidx/compose/ui/text/StringKt;->checkElementIndex$runtime_release(II)V PLandroidx/compose/ui/text/StringKt;->checkElementIndex$runtime_release(II)V PLandroidx/compose/ui/text/StringKt;->getExplore()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/text/StringKt;->getFilterList()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getFilterList()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/text/StringKt;->getHelpOutline()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getHelpOutline()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/text/StringKt;->getInfo()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getInfo()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getPalette()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/text/StringKt;->getRefresh()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getRefresh()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/text/StringKt;->getSearch()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getSearch()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/compose/ui/text/StringKt;->getSettings()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getSettings()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/compose/ui/text/StringKt;->getSync()Landroidx/compose/ui/graphics/vector/ImageVector; Landroidx/compose/ui/text/TextRange; HSPLandroidx/compose/ui/text/TextRange;->()V PLandroidx/compose/ui/text/TextRange;->()V HSPLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J PLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I PLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/ui/text/TextStyle;->()V PLandroidx/compose/ui/text/TextStyle;->()V HSPLandroidx/compose/ui/text/TextStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;JI)V HPLandroidx/compose/ui/text/TextStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;JI)V HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V HPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V HPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V HSPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow$default(IJJJJLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/graphics/drawscope/Stroke;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/TextAlign;)Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow$default(IJJJJLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/graphics/drawscope/Stroke;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/TextAlign;)Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/TextStyle;->getAlpha()F PLandroidx/compose/ui/text/TextStyle;->getAlpha()F HSPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; PLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J HPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J HSPLandroidx/compose/ui/text/TextStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; PLandroidx/compose/ui/text/TextStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; HSPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; HPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; HSPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; HPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; HSPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; HPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; HSPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; HPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; HSPLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J PLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J HSPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; PLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; HSPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J PLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J HSPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; PLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; HSPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; HPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; HSPLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle; PLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle; HSPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle; HPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle; HSPLandroidx/compose/ui/text/TextStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; PLandroidx/compose/ui/text/TextStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; HSPLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle; PLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle; HSPLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; PLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; HSPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; PLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; HSPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; HPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; HSPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; PLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; HSPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; HPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; HSPLandroidx/compose/ui/text/TextStyle;->hasSameDrawAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z HPLandroidx/compose/ui/text/TextStyle;->hasSameDrawAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z HSPLandroidx/compose/ui/text/TextStyle;->hasSameLayoutAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z HPLandroidx/compose/ui/text/TextStyle;->hasSameLayoutAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle; HPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle; HPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle; PLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle; Landroidx/compose/ui/text/android/BoringLayoutFactoryDefault; HSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; HPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; Landroidx/compose/ui/text/android/LayoutCompatKt; HSPLandroidx/compose/ui/text/android/LayoutCompatKt;->()V PLandroidx/compose/ui/text/android/LayoutCompatKt;->()V HSPLandroidx/compose/ui/text/android/LayoutCompatKt;->create(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout; HPLandroidx/compose/ui/text/android/LayoutCompatKt;->create(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout; Landroidx/compose/ui/text/android/LayoutIntrinsics; HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;I)V HPLandroidx/compose/ui/text/android/LayoutIntrinsics;->(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;I)V HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics; HPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics; HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F HPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0; HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V HPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode; PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode; HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()V PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()V HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I HPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas; PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas; HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z HPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V HPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V HPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V HPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map; PLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map; Landroidx/compose/ui/text/android/StaticLayoutFactory23; HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->()V PLandroidx/compose/ui/text/android/StaticLayoutFactory23;->()V HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout; HPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout; Landroidx/compose/ui/text/android/StaticLayoutFactory26; HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V PLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V Landroidx/compose/ui/text/android/StaticLayoutFactory28; HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V PLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V Landroidx/compose/ui/text/android/StaticLayoutFactory33; Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl; Landroidx/compose/ui/text/android/StaticLayoutParams; HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V HPLandroidx/compose/ui/text/android/StaticLayoutParams;->(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment; PLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment; HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt; PLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt; HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z PLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F PLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F PLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint; PLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint; HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence; PLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence; HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic; PLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic; HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z PLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I PLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I Landroidx/compose/ui/text/android/TextAlignmentAdapter; HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V PLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment; PLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment; Landroidx/compose/ui/text/android/TextAndroidCanvas; HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->()V PLandroidx/compose/ui/text/android/TextAndroidCanvas;->()V HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V HPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z HPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V PLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V Landroidx/compose/ui/text/android/TextLayout; HSPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V HPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V HSPLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z PLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I HPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I HSPLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z PLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F PLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F HSPLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I PLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence; HPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence; HSPLandroidx/compose/ui/text/android/TextLayout;->isFallbackLinespacingApplied$ui_text_release()Z HPLandroidx/compose/ui/text/android/TextLayout;->isFallbackLinespacingApplied$ui_text_release()Z HSPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V HPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2; HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->(Landroidx/compose/ui/text/android/TextLayout;)V HPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->(Landroidx/compose/ui/text/android/TextLayout;)V Landroidx/compose/ui/text/android/TextLayoutKt; HSPLandroidx/compose/ui/text/android/TextLayoutKt;->()V PLandroidx/compose/ui/text/android/TextLayoutKt;->()V HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings([Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J HPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings([Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getSharedTextAndroidCanvas$p()Landroidx/compose/ui/text/android/TextAndroidCanvas; PLandroidx/compose/ui/text/android/TextLayoutKt;->access$getSharedTextAndroidCanvas$p()Landroidx/compose/ui/text/android/TextAndroidCanvas; HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J HPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic; HPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic; Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm; Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx; Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->(FIZZF)V HPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->(FIZZF)V HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V HPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getFirstAscentDiff()I PLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getFirstAscentDiff()I HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getLastDescentDiff()I PLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getLastDescentDiff()I Landroidx/compose/ui/text/android/style/PlaceholderSpan; Landroidx/compose/ui/text/android/style/SkewXSpan; Landroidx/compose/ui/text/caches/ContainerHelpersKt; HSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;->()V PLandroidx/compose/ui/text/caches/ContainerHelpersKt;->()V Landroidx/compose/ui/text/caches/LruCache; HSPLandroidx/compose/ui/text/caches/LruCache;->()V PLandroidx/compose/ui/text/caches/LruCache;->()V HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/text/caches/LruCache;->size()I PLandroidx/compose/ui/text/caches/LruCache;->size()I Landroidx/compose/ui/text/caches/SimpleArrayMap; HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->()V PLandroidx/compose/ui/text/caches/SimpleArrayMap;->()V Landroidx/compose/ui/text/font/AndroidFontLoader; HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->(Landroid/content/Context;)V PLandroidx/compose/ui/text/font/AndroidFontLoader;->(Landroid/content/Context;)V Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->(I)V PLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->(I)V HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight; PLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight; Landroidx/compose/ui/text/font/AsyncTypefaceCache; HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->()V PLandroidx/compose/ui/text/font/AsyncTypefaceCache;->()V Landroidx/compose/ui/text/font/DefaultFontFamily; HSPLandroidx/compose/ui/text/font/DefaultFontFamily;->()V PLandroidx/compose/ui/text/font/DefaultFontFamily;->()V Landroidx/compose/ui/text/font/FileBasedFontFamily; Landroidx/compose/ui/text/font/FontFamily; HSPLandroidx/compose/ui/text/font/FontFamily;->()V PLandroidx/compose/ui/text/font/FontFamily;->()V HSPLandroidx/compose/ui/text/font/FontFamily;->()V PLandroidx/compose/ui/text/font/FontFamily;->()V HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily; PLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily; Landroidx/compose/ui/text/font/FontFamilyResolverImpl; HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/AndroidFontLoader;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V PLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/AndroidFontLoader;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1; PLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; PLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/runtime/Stack; PLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/runtime/Stack; HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/AndroidFontLoader; PLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/AndroidFontLoader; HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult; HPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult; Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1; HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->(Ljava/lang/Object;Landroidx/compose/ui/text/font/TypefaceRequest;I)V HPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->(Ljava/lang/Object;Landroidx/compose/ui/text/font/TypefaceRequest;I)V HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/text/font/FontFamilyResolverKt; HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->()V PLandroidx/compose/ui/text/font/FontFamilyResolverKt;->()V HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache; PLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache; HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache; PLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache; Landroidx/compose/ui/text/font/FontKt; HSPLandroidx/compose/ui/text/font/FontKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces; PLandroidx/compose/ui/text/font/FontKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces; HSPLandroidx/compose/ui/text/font/FontKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl; PLandroidx/compose/ui/text/font/FontKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl; Landroidx/compose/ui/text/font/FontListFontFamily; Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->()V PLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->()V HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V PLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AndroidFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; PLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AndroidFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1; HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V PLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V Landroidx/compose/ui/text/font/FontStyle; HSPLandroidx/compose/ui/text/font/FontStyle;->(I)V HPLandroidx/compose/ui/text/font/FontStyle;->(I)V HSPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle; HPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle; HSPLandroidx/compose/ui/text/font/FontStyle;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/font/FontStyle;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I PLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I Landroidx/compose/ui/text/font/FontStyle$Companion; HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->()V PLandroidx/compose/ui/text/font/FontStyle$Companion;->()V Landroidx/compose/ui/text/font/FontSynthesis; HSPLandroidx/compose/ui/text/font/FontSynthesis;->(I)V HPLandroidx/compose/ui/text/font/FontSynthesis;->(I)V HSPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis; HPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis; HSPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I PLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I Landroidx/compose/ui/text/font/FontWeight; HSPLandroidx/compose/ui/text/font/FontWeight;->()V PLandroidx/compose/ui/text/font/FontWeight;->()V HSPLandroidx/compose/ui/text/font/FontWeight;->(I)V PLandroidx/compose/ui/text/font/FontWeight;->(I)V HSPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight; PLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight; HSPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight; PLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight; HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I PLandroidx/compose/ui/text/font/FontWeight;->getWeight()I HSPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I PLandroidx/compose/ui/text/font/FontWeight;->hashCode()I Landroidx/compose/ui/text/font/GenericFontFamily; HSPLandroidx/compose/ui/text/font/GenericFontFamily;->(Ljava/lang/String;Ljava/lang/String;)V PLandroidx/compose/ui/text/font/GenericFontFamily;->(Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String; PLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String; Landroidx/compose/ui/text/font/PlatformResolveInterceptor; HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->()V PLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->()V Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion; HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V PLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V PLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1; HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;->()V PLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;->()V Landroidx/compose/ui/text/font/PlatformTypefaces; Landroidx/compose/ui/text/font/PlatformTypefacesApi; HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->(I)V PLandroidx/compose/ui/text/font/PlatformTypefacesApi;->(I)V HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; PLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; PLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; Landroidx/compose/ui/text/font/SystemFontFamily; HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V PLandroidx/compose/ui/text/font/SystemFontFamily;->()V Landroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0; HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationChannel;Z)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationChannel;Z)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Z)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Z)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;I)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;I)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Z)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Z)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;)V HPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V HPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel; PLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel; Landroidx/compose/ui/text/font/TypefaceCompatApi26$toAndroidString$1; HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$toAndroidString$1;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/text/font/TypefaceCompatApi26$toAndroidString$1;->(Ljava/lang/Object;I)V Landroidx/compose/ui/text/font/TypefaceRequest; HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V HPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; PLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I PLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; PLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I HPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I Landroidx/compose/ui/text/font/TypefaceRequestCache; HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->()V PLandroidx/compose/ui/text/font/TypefaceRequestCache;->()V HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; HPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; Landroidx/compose/ui/text/font/TypefaceResult; Landroidx/compose/ui/text/font/TypefaceResult$Immutable; HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;Z)V PLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;Z)V HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z PLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object; PLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object; Landroidx/compose/ui/text/input/CursorAnchorInfoController; HSPLandroidx/compose/ui/text/input/CursorAnchorInfoController;->(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V PLandroidx/compose/ui/text/input/CursorAnchorInfoController;->(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V Landroidx/compose/ui/text/input/ImeOptions; HSPLandroidx/compose/ui/text/input/ImeOptions;->()V PLandroidx/compose/ui/text/input/ImeOptions;->()V HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZII)V PLandroidx/compose/ui/text/input/ImeOptions;->(ZIZII)V HSPLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions; PLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions; Landroidx/compose/ui/text/input/InputMethodManager; Landroidx/compose/ui/text/input/InputMethodManagerImpl; HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->(Landroid/view/View;)V PLandroidx/compose/ui/text/input/InputMethodManagerImpl;->(Landroid/view/View;)V Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2; HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->(Ljava/lang/Object;I)V PLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->(Ljava/lang/Object;I)V Landroidx/compose/ui/text/input/OffsetMapping; Landroidx/compose/ui/text/input/PlatformTextInputService; Landroidx/compose/ui/text/input/TextFieldValue; HSPLandroidx/compose/ui/text/input/TextFieldValue;->()V PLandroidx/compose/ui/text/input/TextFieldValue;->()V HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V PLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JI)V PLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JI)V HSPLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String; PLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String; Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1; HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V PLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V PLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2; HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V PLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->(I)V PLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->(I)V Landroidx/compose/ui/text/input/TextInputService; HSPLandroidx/compose/ui/text/input/TextInputService;->(Landroidx/compose/ui/text/input/PlatformTextInputService;)V PLandroidx/compose/ui/text/input/TextInputService;->(Landroidx/compose/ui/text/input/PlatformTextInputService;)V Landroidx/compose/ui/text/input/TextInputServiceAndroid; HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;)V PLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;)V Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0; HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->(Landroid/view/Choreographer;)V PLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->(Landroid/view/Choreographer;)V Landroidx/compose/ui/text/input/VisualTransformation; HSPLandroidx/compose/ui/text/input/VisualTransformation;->()V PLandroidx/compose/ui/text/input/VisualTransformation;->()V Landroidx/compose/ui/text/input/VisualTransformation$Companion; HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V PLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V PLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->getNone()Landroidx/compose/ui/text/input/VisualTransformation; PLandroidx/compose/ui/text/input/VisualTransformation$Companion;->getNone()Landroidx/compose/ui/text/input/VisualTransformation; Landroidx/compose/ui/text/intl/AndroidLocale; HSPLandroidx/compose/ui/text/intl/AndroidLocale;->(Ljava/util/Locale;)V PLandroidx/compose/ui/text/intl/AndroidLocale;->(Ljava/util/Locale;)V Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24; HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->()V PLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->()V HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; HPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; Landroidx/compose/ui/text/intl/Locale; HSPLandroidx/compose/ui/text/intl/Locale;->()V PLandroidx/compose/ui/text/intl/Locale;->()V HSPLandroidx/compose/ui/text/intl/Locale;->(Landroidx/compose/ui/text/intl/AndroidLocale;)V PLandroidx/compose/ui/text/intl/Locale;->(Landroidx/compose/ui/text/intl/AndroidLocale;)V Landroidx/compose/ui/text/intl/LocaleList; HSPLandroidx/compose/ui/text/intl/LocaleList;->()V PLandroidx/compose/ui/text/intl/LocaleList;->()V HSPLandroidx/compose/ui/text/intl/LocaleList;->(Ljava/util/List;)V PLandroidx/compose/ui/text/intl/LocaleList;->(Ljava/util/List;)V HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/text/intl/PlatformLocaleKt; HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->()V PLandroidx/compose/ui/text/intl/PlatformLocaleKt;->()V HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24; PLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24; Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt; HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->()V PLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->()V HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->createCharSequence(Ljava/lang/String;FLandroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;Z)Ljava/lang/CharSequence; HPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->createCharSequence(Ljava/lang/String;FLandroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;Z)Ljava/lang/CharSequence; Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1; HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;->()V PLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;->()V Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics; HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V HPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence; PLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence; HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl; PLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl; HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z HPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics; PLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics; HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F HPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle; HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I PLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; HPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1; HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V HPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/compose/ui/text/platform/AndroidTextPaint; HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->(F)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->(F)V HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->getBlendMode-0nO6VwU()I PLandroidx/compose/ui/text/platform/AndroidTextPaint;->getBlendMode-0nO6VwU()I HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBlendMode-s9anfk8(I)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBlendMode-s9anfk8(I)V HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V HPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V Landroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface; PLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface; HSPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler; PLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler; HSPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)V PLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)V Landroidx/compose/ui/text/platform/DefaultImpl; HSPLandroidx/compose/ui/text/platform/DefaultImpl;->()V PLandroidx/compose/ui/text/platform/DefaultImpl;->()V HSPLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V PLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State; PLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State; HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State; HPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State; Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1; HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V PLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onFailed()V PLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onFailed()V Landroidx/compose/ui/text/platform/EmojiCompatStatus; HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V PLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V PLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State; HPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State; Landroidx/compose/ui/text/platform/EmojiCompatStatusDelegate; Landroidx/compose/ui/text/platform/EmojiCompatStatusKt; HSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->()V PLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->()V HSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getFalsey$p()Landroidx/compose/ui/text/platform/ImmutableBool; PLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getFalsey$p()Landroidx/compose/ui/text/platform/ImmutableBool; HSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z HPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z HSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/platform/URLSpanCache;)Landroid/text/SpannableString; HPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/platform/URLSpanCache;)Landroid/text/SpannableString; Landroidx/compose/ui/text/platform/ImmutableBool; HSPLandroidx/compose/ui/text/platform/ImmutableBool;->(Z)V PLandroidx/compose/ui/text/platform/ImmutableBool;->(Z)V HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object; HPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object; Landroidx/compose/ui/text/platform/URLSpanCache; HSPLandroidx/compose/ui/text/platform/URLSpanCache;->()V PLandroidx/compose/ui/text/platform/URLSpanCache;->()V Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods; Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt; HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F HPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-KmRG4DE(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/style/LineHeightStyle;)V HPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-KmRG4DE(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/style/LineHeightStyle;)V HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyles(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;)V HPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyles(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;)V Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1; HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V HPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V Landroidx/compose/ui/text/platform/style/ShaderBrushSpan; Landroidx/compose/ui/text/style/BaselineShift; HSPLandroidx/compose/ui/text/style/BaselineShift;->()V PLandroidx/compose/ui/text/style/BaselineShift;->()V HSPLandroidx/compose/ui/text/style/BaselineShift;->(F)V HPLandroidx/compose/ui/text/style/BaselineShift;->(F)V HSPLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift; PLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift; HSPLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F PLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F Landroidx/compose/ui/text/style/BrushStyle; Landroidx/compose/ui/text/style/ColorStyle; HSPLandroidx/compose/ui/text/style/ColorStyle;->(J)V HPLandroidx/compose/ui/text/style/ColorStyle;->(J)V HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F HPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; HPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J PLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J Landroidx/compose/ui/text/style/Hyphens; HSPLandroidx/compose/ui/text/style/Hyphens;->(I)V HPLandroidx/compose/ui/text/style/Hyphens;->(I)V HSPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens; PLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens; HSPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I PLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I Landroidx/compose/ui/text/style/LineBreak; HSPLandroidx/compose/ui/text/style/LineBreak;->(I)V HPLandroidx/compose/ui/text/style/LineBreak;->(I)V HSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I PLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I HSPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak; PLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak; HSPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I PLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I Landroidx/compose/ui/text/style/LineBreak$Strategy; HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->(I)V HPLandroidx/compose/ui/text/style/LineBreak$Strategy;->(I)V HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy; PLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy; HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I PLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I Landroidx/compose/ui/text/style/LineBreak$Strictness; HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->(I)V HPLandroidx/compose/ui/text/style/LineBreak$Strictness;->(I)V HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness; PLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness; HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I PLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I Landroidx/compose/ui/text/style/LineBreak$WordBreak; HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->(I)V HPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->(I)V HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak; PLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak; HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I PLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I Landroidx/compose/ui/text/style/LineHeightStyle; HSPLandroidx/compose/ui/text/style/LineHeightStyle;->()V PLandroidx/compose/ui/text/style/LineHeightStyle;->()V HSPLandroidx/compose/ui/text/style/LineHeightStyle;->(FI)V PLandroidx/compose/ui/text/style/LineHeightStyle;->(FI)V HSPLandroidx/compose/ui/text/style/LineHeightStyle;->access$getDefault$cp()Landroidx/compose/ui/text/style/LineHeightStyle; PLandroidx/compose/ui/text/style/LineHeightStyle;->access$getDefault$cp()Landroidx/compose/ui/text/style/LineHeightStyle; HSPLandroidx/compose/ui/text/style/LineHeightStyle;->getAlignment-PIaL0Z0()F PLandroidx/compose/ui/text/style/LineHeightStyle;->getAlignment-PIaL0Z0()F HSPLandroidx/compose/ui/text/style/LineHeightStyle;->getTrim-EVpEnUU()I PLandroidx/compose/ui/text/style/LineHeightStyle;->getTrim-EVpEnUU()I Landroidx/compose/ui/text/style/LineHeightStyle$Alignment; HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->()V PLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->()V HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getCenter$cp()F PLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getCenter$cp()F HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getProportional$cp()F PLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getProportional$cp()F HSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V PLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V Landroidx/compose/ui/text/style/TextAlign; HSPLandroidx/compose/ui/text/style/TextAlign;->(I)V HPLandroidx/compose/ui/text/style/TextAlign;->(I)V HSPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign; PLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign; HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I PLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I Landroidx/compose/ui/text/style/TextDecoration; HSPLandroidx/compose/ui/text/style/TextDecoration;->()V PLandroidx/compose/ui/text/style/TextDecoration;->()V HSPLandroidx/compose/ui/text/style/TextDecoration;->(I)V PLandroidx/compose/ui/text/style/TextDecoration;->(I)V HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration; PLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration; HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration; PLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration; HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/text/style/TextDirection; HSPLandroidx/compose/ui/text/style/TextDirection;->(I)V HPLandroidx/compose/ui/text/style/TextDirection;->(I)V HSPLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection; PLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection; HSPLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I PLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I Landroidx/compose/ui/text/style/TextForegroundStyle; HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle; HPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle; Landroidx/compose/ui/text/style/TextForegroundStyle$Companion; HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->()V PLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->()V HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle; HPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle; Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified; HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V PLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V PLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F PLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush; PLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J HPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J Landroidx/compose/ui/text/style/TextForegroundStyle$merge$1; HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;->(Landroidx/compose/ui/text/style/TextForegroundStyle;I)V HPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;->(Landroidx/compose/ui/text/style/TextForegroundStyle;I)V HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;->invoke()Ljava/lang/Object; PLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;->invoke()Ljava/lang/Object; Landroidx/compose/ui/text/style/TextGeometricTransform; HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->()V PLandroidx/compose/ui/text/style/TextGeometricTransform;->()V HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->(FF)V PLandroidx/compose/ui/text/style/TextGeometricTransform;->(FF)V HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform; PLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform; HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z Landroidx/compose/ui/text/style/TextIndent; HSPLandroidx/compose/ui/text/style/TextIndent;->()V PLandroidx/compose/ui/text/style/TextIndent;->()V HSPLandroidx/compose/ui/text/style/TextIndent;->(JJ)V PLandroidx/compose/ui/text/style/TextIndent;->(JJ)V HSPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent; PLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent; HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J PLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J HSPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J PLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J Landroidx/compose/ui/text/style/TextMotion; HSPLandroidx/compose/ui/text/style/TextMotion;->()V PLandroidx/compose/ui/text/style/TextMotion;->()V HSPLandroidx/compose/ui/text/style/TextMotion;->(ZI)V PLandroidx/compose/ui/text/style/TextMotion;->(ZI)V HSPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion; PLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion; HSPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I PLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I HSPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z PLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z Landroidx/compose/ui/text/style/TextOverflow; Landroidx/compose/ui/unit/Constraints; HSPLandroidx/compose/ui/unit/Constraints;->()V PLandroidx/compose/ui/unit/Constraints;->()V HSPLandroidx/compose/ui/unit/Constraints;->(J)V HPLandroidx/compose/ui/unit/Constraints;->(J)V HSPLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I PLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I HSPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints; HPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints; HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J HPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(IIII)J HPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(IIII)J HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z HPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z PLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z PLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z PLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z PLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I HPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I HPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I HPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I HPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I HSPLandroidx/compose/ui/unit/Constraints;->unbox-impl()J PLandroidx/compose/ui/unit/Constraints;->unbox-impl()J Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I HPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F PLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F HPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F HPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F HPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F HSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J HPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J Landroidx/compose/ui/unit/DensityImpl; HSPLandroidx/compose/ui/unit/DensityImpl;->(FF)V HPLandroidx/compose/ui/unit/DensityImpl;->(FF)V HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F HPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F HPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F Landroidx/compose/ui/unit/Dp; HSPLandroidx/compose/ui/unit/Dp;->()V PLandroidx/compose/ui/unit/Dp;->()V HSPLandroidx/compose/ui/unit/Dp;->(F)V HPLandroidx/compose/ui/unit/Dp;->(F)V HSPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp; PLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp; HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z HPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z HSPLandroidx/compose/ui/unit/Dp;->unbox-impl()F PLandroidx/compose/ui/unit/Dp;->unbox-impl()F Landroidx/compose/ui/unit/DpKt; HSPLandroidx/compose/ui/unit/DpKt;->Constraints$default(III)J HPLandroidx/compose/ui/unit/DpKt;->Constraints$default(III)J HSPLandroidx/compose/ui/unit/DpKt;->Constraints(IIII)J HPLandroidx/compose/ui/unit/DpKt;->Constraints(IIII)J HSPLandroidx/compose/ui/unit/DpKt;->Density$default()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/unit/DpKt;->Density$default()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/unit/DpKt;->Density()Landroidx/compose/ui/unit/Density; PLandroidx/compose/ui/unit/DpKt;->Density()Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/unit/DpKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density; HPLandroidx/compose/ui/unit/DpKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density; HSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J PLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J HSPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J HPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J HSPLandroidx/compose/ui/unit/DpKt;->IntOffset(II)J HPLandroidx/compose/ui/unit/DpKt;->IntOffset(II)J HSPLandroidx/compose/ui/unit/DpKt;->IntSize(II)J PLandroidx/compose/ui/unit/DpKt;->IntSize(II)J HSPLandroidx/compose/ui/unit/DpKt;->constrain-4WqzIAM(JJ)J HPLandroidx/compose/ui/unit/DpKt;->constrain-4WqzIAM(JJ)J HSPLandroidx/compose/ui/unit/DpKt;->constrain-N9IONVI(JJ)J HPLandroidx/compose/ui/unit/DpKt;->constrain-N9IONVI(JJ)J HSPLandroidx/compose/ui/unit/DpKt;->constrainHeight-K40F9xA(IJ)I HPLandroidx/compose/ui/unit/DpKt;->constrainHeight-K40F9xA(IJ)I HSPLandroidx/compose/ui/unit/DpKt;->constrainWidth-K40F9xA(IJ)I HPLandroidx/compose/ui/unit/DpKt;->constrainWidth-K40F9xA(IJ)I HSPLandroidx/compose/ui/unit/DpKt;->getSp(I)J HPLandroidx/compose/ui/unit/DpKt;->getSp(I)J HSPLandroidx/compose/ui/unit/DpKt;->isUnspecified--R2X_6o(J)Z HPLandroidx/compose/ui/unit/DpKt;->isUnspecified--R2X_6o(J)Z HSPLandroidx/compose/ui/unit/DpKt;->offset-NN6Ew-U(JII)J HPLandroidx/compose/ui/unit/DpKt;->offset-NN6Ew-U(JII)J HSPLandroidx/compose/ui/unit/DpKt;->pack(JF)J HPLandroidx/compose/ui/unit/DpKt;->pack(JF)J HSPLandroidx/compose/ui/unit/DpKt;->toSize-ozmzZPI(J)J HPLandroidx/compose/ui/unit/DpKt;->toSize-ozmzZPI(J)J Landroidx/compose/ui/unit/DpOffset; HSPLandroidx/compose/ui/unit/DpOffset;->()V PLandroidx/compose/ui/unit/DpOffset;->()V Landroidx/compose/ui/unit/DpSize; HSPLandroidx/compose/ui/unit/DpSize;->()V PLandroidx/compose/ui/unit/DpSize;->()V HSPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J PLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J HSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F HPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F HSPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F HPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F Landroidx/compose/ui/unit/IntOffset; HSPLandroidx/compose/ui/unit/IntOffset;->()V PLandroidx/compose/ui/unit/IntOffset;->()V HSPLandroidx/compose/ui/unit/IntOffset;->(J)V HPLandroidx/compose/ui/unit/IntOffset;->(J)V HSPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J HPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J HSPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset; HPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset; HPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z HPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I HPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I HSPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J PLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J Landroidx/compose/ui/unit/IntSize; HSPLandroidx/compose/ui/unit/IntSize;->()V PLandroidx/compose/ui/unit/IntSize;->()V HSPLandroidx/compose/ui/unit/IntSize;->(J)V HPLandroidx/compose/ui/unit/IntSize;->(J)V HSPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize; HPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize; HSPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z HPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/unit/IntSize;->equals-impl(JLjava/lang/Object;)Z PLandroidx/compose/ui/unit/IntSize;->equals-impl(JLjava/lang/Object;)Z HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z PLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I HPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I HSPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J PLandroidx/compose/ui/unit/IntSize;->unbox-impl()J Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/unit/LayoutDirection;->()V PLandroidx/compose/ui/unit/LayoutDirection;->()V HSPLandroidx/compose/ui/unit/LayoutDirection;->(Ljava/lang/String;I)V PLandroidx/compose/ui/unit/LayoutDirection;->(Ljava/lang/String;I)V Landroidx/compose/ui/unit/TextUnit; HSPLandroidx/compose/ui/unit/TextUnit;->()V PLandroidx/compose/ui/unit/TextUnit;->()V HSPLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J PLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z PLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J HPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F HPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F Landroidx/compose/ui/unit/TextUnitType; HSPLandroidx/compose/ui/unit/TextUnitType;->(J)V PLandroidx/compose/ui/unit/TextUnitType;->(J)V HSPLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType; PLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType; HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z PLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z HSPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J PLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J Landroidx/compose/ui/viewinterop/AndroidViewHolder; Landroidx/compose/ui/window/DialogWindowProvider; Landroidx/compose/ui/window/PopupPositionProvider; Landroidx/compose/ui/window/PopupProperties; HSPLandroidx/compose/ui/window/PopupProperties;->(ZZI)V PLandroidx/compose/ui/window/PopupProperties;->(ZZI)V PLandroidx/concurrent/futures/AbstractResolvableFuture;->()V PLandroidx/concurrent/futures/AbstractResolvableFuture;->()V PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V PLandroidx/concurrent/futures/AbstractResolvableFuture;->set(Ljava/lang/Object;)Z PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->()V PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->()V PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;->()V PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;->(I)V PLandroidx/concurrent/futures/ResolvableFuture;->()V PLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture; PLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z Landroidx/core/app/ActivityCompat$RequestPermissionsRequestCodeValidator; Landroidx/core/app/ComponentActivity; HSPLandroidx/core/app/ComponentActivity;->()V PLandroidx/core/app/ComponentActivity;->()V HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V PLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V PLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V Landroidx/core/app/CoreComponentFactory; HSPLandroidx/core/app/CoreComponentFactory;->()V PLandroidx/core/app/CoreComponentFactory;->()V HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity; PLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity; HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application; PLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application; HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider; PLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider; HSPLandroidx/core/app/CoreComponentFactory;->instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver; PLandroidx/core/app/CoreComponentFactory;->instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver; Landroidx/core/app/NavUtils; HSPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/content/Context;Landroid/content/ComponentName;)Ljava/lang/String; PLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/content/Context;Landroid/content/ComponentName;)Ljava/lang/String; Landroidx/core/app/NotificationChannelCompat; HSPLandroidx/core/app/NotificationChannelCompat;->(Ljava/lang/String;I)V PLandroidx/core/app/NotificationChannelCompat;->(Ljava/lang/String;I)V Landroidx/core/app/NotificationChannelCompat$Api26Impl; HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->createNotificationChannel(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel; PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->createNotificationChannel(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel; HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableLights(Landroid/app/NotificationChannel;Z)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableLights(Landroid/app/NotificationChannel;Z)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableVibration(Landroid/app/NotificationChannel;Z)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableVibration(Landroid/app/NotificationChannel;Z)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setDescription(Landroid/app/NotificationChannel;Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setDescription(Landroid/app/NotificationChannel;Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setGroup(Landroid/app/NotificationChannel;Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setGroup(Landroid/app/NotificationChannel;Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setLightColor(Landroid/app/NotificationChannel;I)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setLightColor(Landroid/app/NotificationChannel;I)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setShowBadge(Landroid/app/NotificationChannel;Z)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setShowBadge(Landroid/app/NotificationChannel;Z)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setSound(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setSound(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setVibrationPattern(Landroid/app/NotificationChannel;[J)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setVibrationPattern(Landroid/app/NotificationChannel;[J)V Landroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1; HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m$1()V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m$1()V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m()V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m()V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;I)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;I)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Z)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Z)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;[J)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;[J)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationManager;Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationManager;Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup; PLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup; Landroidx/core/app/NotificationChannelCompat$Builder; HSPLandroidx/core/app/NotificationChannelCompat$Builder;->(Ljava/lang/String;I)V PLandroidx/core/app/NotificationChannelCompat$Builder;->(Ljava/lang/String;I)V HSPLandroidx/core/app/NotificationChannelCompat$Builder;->build()Landroidx/core/app/NotificationChannelCompat; PLandroidx/core/app/NotificationChannelCompat$Builder;->build()Landroidx/core/app/NotificationChannelCompat; HSPLandroidx/core/app/NotificationChannelCompat$Builder;->setGroup(Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelCompat$Builder;->setGroup(Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelCompat$Builder;->setName(Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelCompat$Builder;->setName(Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelCompat$Builder;->setShowBadge()V PLandroidx/core/app/NotificationChannelCompat$Builder;->setShowBadge()V HSPLandroidx/core/app/NotificationChannelCompat$Builder;->setSound()V PLandroidx/core/app/NotificationChannelCompat$Builder;->setSound()V Landroidx/core/app/NotificationChannelGroupCompat; HSPLandroidx/core/app/NotificationChannelGroupCompat;->(Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelGroupCompat;->(Ljava/lang/String;)V Landroidx/core/app/NotificationChannelGroupCompat$Api26Impl; HSPLandroidx/core/app/NotificationChannelGroupCompat$Api26Impl;->createNotificationChannelGroup(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup; PLandroidx/core/app/NotificationChannelGroupCompat$Api26Impl;->createNotificationChannelGroup(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup; Landroidx/core/app/NotificationChannelGroupCompat$Api28Impl; HSPLandroidx/core/app/NotificationChannelGroupCompat$Api28Impl;->setDescription(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelGroupCompat$Api28Impl;->setDescription(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V Landroidx/core/app/NotificationChannelGroupCompat$Builder; HSPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->(Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelGroupCompat$Builder;->(Ljava/lang/String;)V HSPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->build()Landroidx/core/app/NotificationChannelGroupCompat; PLandroidx/core/app/NotificationChannelGroupCompat$Builder;->build()Landroidx/core/app/NotificationChannelGroupCompat; HSPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->setName(Ljava/lang/String;)V PLandroidx/core/app/NotificationChannelGroupCompat$Builder;->setName(Ljava/lang/String;)V Landroidx/core/app/NotificationManagerCompat; HSPLandroidx/core/app/NotificationManagerCompat;->()V PLandroidx/core/app/NotificationManagerCompat;->()V HSPLandroidx/core/app/NotificationManagerCompat;->(Landroid/content/Context;)V PLandroidx/core/app/NotificationManagerCompat;->(Landroid/content/Context;)V HSPLandroidx/core/app/NotificationManagerCompat;->cancel(I)V PLandroidx/core/app/NotificationManagerCompat;->cancel(I)V HSPLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelGroupsCompat(Ljava/util/List;)V PLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelGroupsCompat(Ljava/util/List;)V HSPLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelsCompat(Ljava/util/List;)V PLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelsCompat(Ljava/util/List;)V HSPLandroidx/core/app/NotificationManagerCompat;->deleteNotificationChannel(Ljava/lang/String;)V PLandroidx/core/app/NotificationManagerCompat;->deleteNotificationChannel(Ljava/lang/String;)V HSPLandroidx/core/app/NotificationManagerCompat;->from(Landroid/content/Context;)Landroidx/core/app/NotificationManagerCompat; PLandroidx/core/app/NotificationManagerCompat;->from(Landroid/content/Context;)Landroidx/core/app/NotificationManagerCompat; Landroidx/core/app/NotificationManagerCompat$Api26Impl; HSPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannelGroups(Landroid/app/NotificationManager;Ljava/util/List;)V PLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannelGroups(Landroid/app/NotificationManager;Ljava/util/List;)V HSPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannels(Landroid/app/NotificationManager;Ljava/util/List;)V PLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannels(Landroid/app/NotificationManager;Ljava/util/List;)V HSPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->deleteNotificationChannel(Landroid/app/NotificationManager;Ljava/lang/String;)V PLandroidx/core/app/NotificationManagerCompat$Api26Impl;->deleteNotificationChannel(Landroid/app/NotificationManager;Ljava/lang/String;)V Landroidx/core/app/TaskStackBuilder$SupportParentable; Landroidx/core/content/ContextCompat; HSPLandroidx/core/content/ContextCompat;->()V PLandroidx/core/content/ContextCompat;->()V HSPLandroidx/core/content/ContextCompat;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; PLandroidx/core/content/ContextCompat;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; HSPLandroidx/core/content/ContextCompat;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor; PLandroidx/core/content/ContextCompat;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor; Landroidx/core/content/ContextCompat$Api21Impl; HSPLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; PLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; Landroidx/core/content/ContextCompat$Api28Impl; HSPLandroidx/core/content/ContextCompat$Api28Impl;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor; PLandroidx/core/content/ContextCompat$Api28Impl;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor; Landroidx/core/content/FileProvider; HSPLandroidx/core/content/FileProvider;->()V PLandroidx/core/content/FileProvider;->()V HSPLandroidx/core/content/FileProvider;->()V PLandroidx/core/content/FileProvider;->()V HSPLandroidx/core/content/FileProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V PLandroidx/core/content/FileProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V HSPLandroidx/core/content/FileProvider;->onCreate()Z PLandroidx/core/content/FileProvider;->onCreate()Z Landroidx/core/content/res/ComplexColorCompat; HSPLandroidx/core/content/res/ComplexColorCompat;->(Landroid/graphics/Shader;Landroid/content/res/ColorStateList;I)V HPLandroidx/core/content/res/ComplexColorCompat;->(Landroid/graphics/Shader;Landroid/content/res/ColorStateList;I)V HSPLandroidx/core/content/res/ComplexColorCompat;->from(I)Landroidx/core/content/res/ComplexColorCompat; PLandroidx/core/content/res/ComplexColorCompat;->from(I)Landroidx/core/content/res/ComplexColorCompat; HSPLandroidx/core/content/res/ComplexColorCompat;->getColor()I PLandroidx/core/content/res/ComplexColorCompat;->getColor()I HSPLandroidx/core/content/res/ComplexColorCompat;->getShader()Landroid/graphics/Shader; PLandroidx/core/content/res/ComplexColorCompat;->getShader()Landroid/graphics/Shader; HSPLandroidx/core/content/res/ComplexColorCompat;->isGradient()Z PLandroidx/core/content/res/ComplexColorCompat;->isGradient()Z HSPLandroidx/core/content/res/ComplexColorCompat;->willDraw()Z PLandroidx/core/content/res/ComplexColorCompat;->willDraw()Z Landroidx/core/content/res/TypedArrayKt; HSPLandroidx/core/content/res/TypedArrayKt;->()V PLandroidx/core/content/res/TypedArrayKt;->()V HSPLandroidx/core/content/res/TypedArrayKt;->getColorOrThrow(Landroid/content/res/TypedArray;I)I HPLandroidx/core/content/res/TypedArrayKt;->getColorOrThrow(Landroid/content/res/TypedArray;I)I HSPLandroidx/core/content/res/TypedArrayKt;->getNamedComplexColor(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; HPLandroidx/core/content/res/TypedArrayKt;->getNamedComplexColor(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; HSPLandroidx/core/content/res/TypedArrayKt;->getNamedFloat(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IF)F HPLandroidx/core/content/res/TypedArrayKt;->getNamedFloat(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IF)F HSPLandroidx/core/content/res/TypedArrayKt;->getNamedInt(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;II)I HPLandroidx/core/content/res/TypedArrayKt;->getNamedInt(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;II)I HSPLandroidx/core/content/res/TypedArrayKt;->getResourceIdOrThrow(Landroid/content/res/TypedArray;I)I HPLandroidx/core/content/res/TypedArrayKt;->getResourceIdOrThrow(Landroid/content/res/TypedArray;I)I HSPLandroidx/core/content/res/TypedArrayKt;->hasAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z HPLandroidx/core/content/res/TypedArrayKt;->hasAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z HSPLandroidx/core/content/res/TypedArrayKt;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray; HPLandroidx/core/content/res/TypedArrayKt;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray; Landroidx/core/graphics/Insets; HSPLandroidx/core/graphics/Insets;->()V PLandroidx/core/graphics/Insets;->()V HSPLandroidx/core/graphics/Insets;->(IIII)V HPLandroidx/core/graphics/Insets;->(IIII)V HSPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z HPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z HSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; PLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; HSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; PLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; Landroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4()V PLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4()V HSPLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets$Builder; PLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets$Builder; Landroidx/core/graphics/PathParser; HSPLandroidx/core/graphics/PathParser;->copyOfRange([FI)[F HPLandroidx/core/graphics/PathParser;->copyOfRange([FI)[F HSPLandroidx/core/graphics/PathParser;->createNodesFromPathData(Ljava/lang/String;)[Landroidx/core/graphics/PathParser$PathDataNode; HPLandroidx/core/graphics/PathParser;->createNodesFromPathData(Ljava/lang/String;)[Landroidx/core/graphics/PathParser$PathDataNode; HSPLandroidx/core/graphics/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path; HPLandroidx/core/graphics/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path; Landroidx/core/graphics/PathParser$PathDataNode; HSPLandroidx/core/graphics/PathParser$PathDataNode;->(C[F)V PLandroidx/core/graphics/PathParser$PathDataNode;->(C[F)V HSPLandroidx/core/graphics/PathParser$PathDataNode;->nodesToPath([Landroidx/core/graphics/PathParser$PathDataNode;Landroid/graphics/Path;)V HPLandroidx/core/graphics/PathParser$PathDataNode;->nodesToPath([Landroidx/core/graphics/PathParser$PathDataNode;Landroid/graphics/Path;)V Landroidx/core/math/MathUtils; HSPLandroidx/core/math/MathUtils;->CornerRadius(FF)J HPLandroidx/core/math/MathUtils;->CornerRadius(FF)J HSPLandroidx/core/math/MathUtils;->Offset(FF)J HPLandroidx/core/math/MathUtils;->Offset(FF)J HSPLandroidx/core/math/MathUtils;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect; HPLandroidx/core/math/MathUtils;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect; HSPLandroidx/core/math/MathUtils;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect; PLandroidx/core/math/MathUtils;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect; HSPLandroidx/core/math/MathUtils;->Size(FF)J HPLandroidx/core/math/MathUtils;->Size(FF)J HSPLandroidx/core/math/MathUtils;->TextRange(II)J PLandroidx/core/math/MathUtils;->TextRange(II)J HSPLandroidx/core/math/MathUtils;->access$DistanceAndInLayer(FZ)J HPLandroidx/core/math/MathUtils;->access$DistanceAndInLayer(FZ)J HSPLandroidx/core/math/MathUtils;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I HPLandroidx/core/math/MathUtils;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I HSPLandroidx/core/math/MathUtils;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; HPLandroidx/core/math/MathUtils;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; HSPLandroidx/core/math/MathUtils;->access$lowestBitOf(J)I HPLandroidx/core/math/MathUtils;->access$lowestBitOf(J)I HSPLandroidx/core/math/MathUtils;->access$nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node; HPLandroidx/core/math/MathUtils;->access$nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node; PLandroidx/core/math/MathUtils;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object; HSPLandroidx/core/math/MathUtils;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; PLandroidx/core/math/MathUtils;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; HSPLandroidx/core/math/MathUtils;->binarySearch(I[I)I HPLandroidx/core/math/MathUtils;->binarySearch(I[I)I HSPLandroidx/core/math/MathUtils;->bitsForSlot(II)I PLandroidx/core/math/MathUtils;->bitsForSlot(II)I HSPLandroidx/core/math/MathUtils;->chromaticAdaptation([F[F[F)[F PLandroidx/core/math/MathUtils;->chromaticAdaptation([F[F[F)[F HSPLandroidx/core/math/MathUtils;->coerceIn-8ffj60Q(JI)J PLandroidx/core/math/MathUtils;->coerceIn-8ffj60Q(JI)J HSPLandroidx/core/math/MathUtils;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z PLandroidx/core/math/MathUtils;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z HSPLandroidx/core/math/MathUtils;->compareTo-S_HNhKs(JJ)I HPLandroidx/core/math/MathUtils;->compareTo-S_HNhKs(JJ)I HSPLandroidx/core/math/MathUtils;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; HPLandroidx/core/math/MathUtils;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; HSPLandroidx/core/math/MathUtils;->composableLambdaInstance(ZILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; HPLandroidx/core/math/MathUtils;->composableLambdaInstance(ZILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; HSPLandroidx/core/math/MathUtils;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; HPLandroidx/core/math/MathUtils;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; HSPLandroidx/core/math/MathUtils;->dataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; PLandroidx/core/math/MathUtils;->dataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; HSPLandroidx/core/math/MathUtils;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F HPLandroidx/core/math/MathUtils;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F HSPLandroidx/core/math/MathUtils;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F HPLandroidx/core/math/MathUtils;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F HSPLandroidx/core/math/MathUtils;->getGetApp()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/core/math/MathUtils;->getGetApp()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/core/math/MathUtils;->getLabel()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/core/math/MathUtils;->getLabel()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/core/math/MathUtils;->getMoreVert()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/core/math/MathUtils;->getMoreVert()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/core/math/MathUtils;->getQueryStats()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/core/math/MathUtils;->getQueryStats()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/core/math/MathUtils;->getSecurity()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/core/math/MathUtils;->getSettingsBackupRestore()Landroidx/compose/ui/graphics/vector/ImageVector; PLandroidx/core/math/MathUtils;->getSettingsBackupRestore()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLandroidx/core/math/MathUtils;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z HPLandroidx/core/math/MathUtils;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z HSPLandroidx/core/math/MathUtils;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V HPLandroidx/core/math/MathUtils;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V HSPLandroidx/core/math/MathUtils;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V PLandroidx/core/math/MathUtils;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V HSPLandroidx/core/math/MathUtils;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V HPLandroidx/core/math/MathUtils;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V HSPLandroidx/core/math/MathUtils;->inverse3x3([F)[F PLandroidx/core/math/MathUtils;->inverse3x3([F)[F HSPLandroidx/core/math/MathUtils;->invertTo-JiSxe2E([F[F)Z HPLandroidx/core/math/MathUtils;->invertTo-JiSxe2E([F[F)Z HSPLandroidx/core/math/MathUtils;->isAtEnd(Lorg/xmlpull/v1/XmlPullParser;)Z HPLandroidx/core/math/MathUtils;->isAtEnd(Lorg/xmlpull/v1/XmlPullParser;)Z HSPLandroidx/core/math/MathUtils;->isFinite-k-4lQ0M(J)Z HPLandroidx/core/math/MathUtils;->isFinite-k-4lQ0M(J)Z HSPLandroidx/core/math/MathUtils;->isInLayer-impl(J)Z HPLandroidx/core/math/MathUtils;->isInLayer-impl(J)Z HSPLandroidx/core/math/MathUtils;->isInOutline(Landroidx/compose/ui/graphics/BrushKt;FF)Z HPLandroidx/core/math/MathUtils;->isInOutline(Landroidx/compose/ui/graphics/BrushKt;FF)Z HSPLandroidx/core/math/MathUtils;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z HPLandroidx/core/math/MathUtils;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z HSPLandroidx/core/math/MathUtils;->lerp(FFF)F HPLandroidx/core/math/MathUtils;->lerp(FFF)F HSPLandroidx/core/math/MathUtils;->loadVectorResourceInner(Landroid/content/res/Resources$Theme;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; HPLandroidx/core/math/MathUtils;->loadVectorResourceInner(Landroid/content/res/Resources$Theme;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; HSPLandroidx/core/math/MathUtils;->modifierLocalMapOf(Lkotlin/Pair;)Landroidx/compose/ui/modifier/SingleLocalMap; PLandroidx/core/math/MathUtils;->modifierLocalMapOf(Lkotlin/Pair;)Landroidx/compose/ui/modifier/SingleLocalMap; HSPLandroidx/core/math/MathUtils;->mul3x3([F[F)[F PLandroidx/core/math/MathUtils;->mul3x3([F[F)[F HSPLandroidx/core/math/MathUtils;->mul3x3Diag([F[F)[F PLandroidx/core/math/MathUtils;->mul3x3Diag([F[F)[F HSPLandroidx/core/math/MathUtils;->mul3x3Float3([F[F)V PLandroidx/core/math/MathUtils;->mul3x3Float3([F[F)V HSPLandroidx/core/math/MathUtils;->mul3x3Float3_0(FFF[F)F PLandroidx/core/math/MathUtils;->mul3x3Float3_0(FFF[F)F HSPLandroidx/core/math/MathUtils;->mul3x3Float3_1(FFF[F)F PLandroidx/core/math/MathUtils;->mul3x3Float3_1(FFF[F)F HSPLandroidx/core/math/MathUtils;->mul3x3Float3_2(FFF[F)F PLandroidx/core/math/MathUtils;->mul3x3Float3_2(FFF[F)F HSPLandroidx/core/math/MathUtils;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V HPLandroidx/core/math/MathUtils;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V HSPLandroidx/core/math/MathUtils;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter; HPLandroidx/core/math/MathUtils;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter; HSPLandroidx/core/math/MathUtils;->persistentCompositionLocalHashMapOf()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; PLandroidx/core/math/MathUtils;->persistentCompositionLocalHashMapOf()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; HSPLandroidx/core/math/MathUtils;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z HPLandroidx/core/math/MathUtils;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z HSPLandroidx/core/math/MathUtils;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle; HPLandroidx/core/math/MathUtils;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle; HSPLandroidx/core/math/MathUtils;->resources(Landroidx/compose/runtime/Composer;)Landroid/content/res/Resources; HPLandroidx/core/math/MathUtils;->resources(Landroidx/compose/runtime/Composer;)Landroid/content/res/Resources; HSPLandroidx/core/math/MathUtils;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V HPLandroidx/core/math/MathUtils;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V HSPLandroidx/core/math/MathUtils;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V HPLandroidx/core/math/MathUtils;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V HSPLandroidx/core/math/MathUtils;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V HPLandroidx/core/math/MathUtils;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V HSPLandroidx/core/math/MathUtils;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V HPLandroidx/core/math/MathUtils;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V HSPLandroidx/core/math/MathUtils;->stringResource(ILandroidx/compose/runtime/Composer;)Ljava/lang/String; HPLandroidx/core/math/MathUtils;->stringResource(ILandroidx/compose/runtime/Composer;)Ljava/lang/String; HSPLandroidx/core/math/MathUtils;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect; PLandroidx/core/math/MathUtils;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect; HSPLandroidx/core/math/MathUtils;->vectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/ImageVector; HPLandroidx/core/math/MathUtils;->vectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/ImageVector; Landroidx/core/os/BuildCompat; HSPLandroidx/core/os/BuildCompat;->()V PLandroidx/core/os/BuildCompat;->()V HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z PLandroidx/core/os/BuildCompat;->isAtLeastT()Z Landroidx/core/os/BuildCompat$Api30Impl; HSPLandroidx/core/os/BuildCompat$Api30Impl;->()V PLandroidx/core/os/BuildCompat$Api30Impl;->()V HSPLandroidx/core/os/BuildCompat$Api30Impl;->()V PLandroidx/core/os/BuildCompat$Api30Impl;->()V HSPLandroidx/core/os/BuildCompat$Api30Impl;->getExtensionVersion(I)I PLandroidx/core/os/BuildCompat$Api30Impl;->getExtensionVersion(I)I Landroidx/core/os/BundleKt; HSPLandroidx/core/os/BundleKt;->createAsync$1(Landroid/os/Looper;)Landroid/os/Handler; PLandroidx/core/os/BundleKt;->createAsync$1(Landroid/os/Looper;)Landroid/os/Handler; Landroidx/core/os/CancellationSignal$OnCancelListener; Landroidx/core/os/LocaleListCompat; HSPLandroidx/core/os/LocaleListCompat;->()V PLandroidx/core/os/LocaleListCompat;->()V HSPLandroidx/core/os/LocaleListCompat;->(Landroidx/core/os/LocaleListPlatformWrapper;)V PLandroidx/core/os/LocaleListCompat;->(Landroidx/core/os/LocaleListPlatformWrapper;)V HSPLandroidx/core/os/LocaleListCompat;->create([Ljava/util/Locale;)Landroidx/core/os/LocaleListCompat; PLandroidx/core/os/LocaleListCompat;->create([Ljava/util/Locale;)Landroidx/core/os/LocaleListCompat; HSPLandroidx/core/os/LocaleListCompat;->forLanguageTags(Ljava/lang/String;)Landroidx/core/os/LocaleListCompat; PLandroidx/core/os/LocaleListCompat;->forLanguageTags(Ljava/lang/String;)Landroidx/core/os/LocaleListCompat; HSPLandroidx/core/os/LocaleListCompat;->isEmpty()Z PLandroidx/core/os/LocaleListCompat;->isEmpty()Z HSPLandroidx/core/os/LocaleListCompat;->wrap(Landroid/os/LocaleList;)Landroidx/core/os/LocaleListCompat; PLandroidx/core/os/LocaleListCompat;->wrap(Landroid/os/LocaleList;)Landroidx/core/os/LocaleListCompat; Landroidx/core/os/LocaleListCompat$Api21Impl; HSPLandroidx/core/os/LocaleListCompat$Api21Impl;->()V PLandroidx/core/os/LocaleListCompat$Api21Impl;->()V HSPLandroidx/core/os/LocaleListCompat$Api21Impl;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale; PLandroidx/core/os/LocaleListCompat$Api21Impl;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale; Landroidx/core/os/LocaleListCompat$Api24Impl; HSPLandroidx/core/os/LocaleListCompat$Api24Impl;->createLocaleList([Ljava/util/Locale;)Landroid/os/LocaleList; PLandroidx/core/os/LocaleListCompat$Api24Impl;->createLocaleList([Ljava/util/Locale;)Landroid/os/LocaleList; Landroidx/core/os/LocaleListInterface; Landroidx/core/os/LocaleListPlatformWrapper; HSPLandroidx/core/os/LocaleListPlatformWrapper;->(Ljava/lang/Object;)V PLandroidx/core/os/LocaleListPlatformWrapper;->(Ljava/lang/Object;)V HSPLandroidx/core/os/LocaleListPlatformWrapper;->isEmpty()Z PLandroidx/core/os/LocaleListPlatformWrapper;->isEmpty()Z Landroidx/core/os/TraceCompat; HSPLandroidx/core/os/TraceCompat;->()V PLandroidx/core/os/TraceCompat;->()V HSPLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V PLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V HSPLandroidx/core/os/TraceCompat;->endSection()V PLandroidx/core/os/TraceCompat;->endSection()V Landroidx/core/os/TraceCompat$Api18Impl; HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V PLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V PLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V Landroidx/core/splashscreen/MaskedDrawable; HSPLandroidx/core/splashscreen/MaskedDrawable;->(Landroid/graphics/drawable/Drawable;F)V PLandroidx/core/splashscreen/MaskedDrawable;->(Landroid/graphics/drawable/Drawable;F)V HSPLandroidx/core/splashscreen/MaskedDrawable;->draw(Landroid/graphics/Canvas;)V PLandroidx/core/splashscreen/MaskedDrawable;->draw(Landroid/graphics/Canvas;)V HSPLandroidx/core/splashscreen/MaskedDrawable;->getOpacity()I HPLandroidx/core/splashscreen/MaskedDrawable;->getOpacity()I HSPLandroidx/core/splashscreen/MaskedDrawable;->onBoundsChange(Landroid/graphics/Rect;)V PLandroidx/core/splashscreen/MaskedDrawable;->onBoundsChange(Landroid/graphics/Rect;)V Landroidx/core/splashscreen/SplashScreen; HSPLandroidx/core/splashscreen/SplashScreen;->(Landroid/app/Activity;)V PLandroidx/core/splashscreen/SplashScreen;->(Landroid/app/Activity;)V HSPLandroidx/core/splashscreen/SplashScreen;->access$install(Landroidx/core/splashscreen/SplashScreen;)V PLandroidx/core/splashscreen/SplashScreen;->access$install(Landroidx/core/splashscreen/SplashScreen;)V HSPLandroidx/core/splashscreen/SplashScreen;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V PLandroidx/core/splashscreen/SplashScreen;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V HSPLandroidx/core/splashscreen/SplashScreen;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V PLandroidx/core/splashscreen/SplashScreen;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V Landroidx/core/splashscreen/SplashScreen$Impl; HSPLandroidx/core/splashscreen/SplashScreen$Impl;->(Landroid/app/Activity;)V PLandroidx/core/splashscreen/SplashScreen$Impl;->(Landroid/app/Activity;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->access$getMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;)Landroidx/core/splashscreen/SplashScreenViewProvider; PLandroidx/core/splashscreen/SplashScreen$Impl;->access$getMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;)Landroidx/core/splashscreen/SplashScreenViewProvider; HSPLandroidx/core/splashscreen/SplashScreen$Impl;->access$setMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V PLandroidx/core/splashscreen/SplashScreen$Impl;->access$setMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->dispatchOnExitAnimation(Landroidx/core/splashscreen/SplashScreenViewProvider;)V PLandroidx/core/splashscreen/SplashScreen$Impl;->dispatchOnExitAnimation(Landroidx/core/splashscreen/SplashScreenViewProvider;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->getSplashScreenWaitPredicate()Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; PLandroidx/core/splashscreen/SplashScreen$Impl;->getSplashScreenWaitPredicate()Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; HSPLandroidx/core/splashscreen/SplashScreen$Impl;->install()V PLandroidx/core/splashscreen/SplashScreen$Impl;->install()V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V PLandroidx/core/splashscreen/SplashScreen$Impl;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V PLandroidx/core/splashscreen/SplashScreen$Impl;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V PLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V Landroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0; HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->(Landroidx/core/splashscreen/SplashScreenViewProvider;Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V PLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->(Landroidx/core/splashscreen/SplashScreenViewProvider;Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->run()V PLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->run()V Landroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1; HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;->()V PLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;->()V Landroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1; HSPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;->(Landroidx/core/splashscreen/SplashScreen$Impl;Landroid/view/View;I)V PLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;->(Landroidx/core/splashscreen/SplashScreen$Impl;Landroid/view/View;I)V HSPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;->onPreDraw()Z HPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;->onPreDraw()Z Landroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2; HSPLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;->(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V PLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;->(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;->onLayoutChange(Landroid/view/View;IIIIIIII)V PLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;->onLayoutChange(Landroid/view/View;IIIIIIII)V Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener; Landroidx/core/splashscreen/SplashScreenViewProvider; HSPLandroidx/core/splashscreen/SplashScreenViewProvider;->(Landroid/app/Activity;)V PLandroidx/core/splashscreen/SplashScreenViewProvider;->(Landroid/app/Activity;)V HSPLandroidx/core/splashscreen/SplashScreenViewProvider;->getIconView()Landroid/view/View; PLandroidx/core/splashscreen/SplashScreenViewProvider;->getIconView()Landroid/view/View; HSPLandroidx/core/splashscreen/SplashScreenViewProvider;->getView()Landroid/view/ViewGroup; PLandroidx/core/splashscreen/SplashScreenViewProvider;->getView()Landroid/view/ViewGroup; HSPLandroidx/core/splashscreen/SplashScreenViewProvider;->remove()V PLandroidx/core/splashscreen/SplashScreenViewProvider;->remove()V Landroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl; HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->(Landroid/app/Activity;)V PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->(Landroid/app/Activity;)V HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->createSplashScreenView()V PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->createSplashScreenView()V HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getActivity()Landroid/app/Activity; PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getActivity()Landroid/app/Activity; HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getIconView()Landroid/view/View; PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getIconView()Landroid/view/View; HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getSplashScreenView()Landroid/view/ViewGroup; PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getSplashScreenView()Landroid/view/ViewGroup; HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->remove()V PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->remove()V Landroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2; HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;->(Landroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;)V PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;->(Landroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;)V HSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;->invoke()Ljava/lang/Object; PLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;->invoke()Ljava/lang/Object; Landroidx/core/text/TextUtilsCompat; Landroidx/core/util/Consumer; Landroidx/core/util/DebugUtils; HSPLandroidx/core/util/DebugUtils;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V PLandroidx/core/util/DebugUtils;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V Landroidx/core/view/AccessibilityDelegateCompat; HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V PLandroidx/core/view/AccessibilityDelegateCompat;->()V HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V PLandroidx/core/view/AccessibilityDelegateCompat;->()V HSPLandroidx/core/view/AccessibilityDelegateCompat;->(Landroid/view/View$AccessibilityDelegate;)V PLandroidx/core/view/AccessibilityDelegateCompat;->(Landroid/view/View$AccessibilityDelegate;)V HSPLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate; PLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate; HSPLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V PLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V HSPLandroidx/core/view/AccessibilityDelegateCompat;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z PLandroidx/core/view/AccessibilityDelegateCompat;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z HSPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V PLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter; HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->(Landroidx/core/view/AccessibilityDelegateCompat;)V PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->(Landroidx/core/view/AccessibilityDelegateCompat;)V HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; HPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V Landroidx/core/view/ContentInfoCompat$Builder; HSPLandroidx/core/view/ContentInfoCompat$Builder;->()V PLandroidx/core/view/ContentInfoCompat$Builder;->()V HSPLandroidx/core/view/ContentInfoCompat$Builder;->(Landroid/view/View;)V PLandroidx/core/view/ContentInfoCompat$Builder;->(Landroid/view/View;)V HSPLandroidx/core/view/ContentInfoCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/ContentInfoCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat; Landroidx/core/view/ContentInfoCompat$Compat; Landroidx/core/view/DisplayCutoutCompat; HSPLandroidx/core/view/DisplayCutoutCompat;->wrap(Landroid/view/DisplayCutout;)Landroidx/core/view/DisplayCutoutCompat; PLandroidx/core/view/DisplayCutoutCompat;->wrap(Landroid/view/DisplayCutout;)Landroidx/core/view/DisplayCutoutCompat; Landroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0; HSPLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V PLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V HSPLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/Context;)Ljava/util/concurrent/Executor; PLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/Context;)Ljava/util/concurrent/Executor; Landroidx/core/view/KeyEventDispatcher$Component; Landroidx/core/view/NestedScrollingParent2; Landroidx/core/view/NestedScrollingParent3; Landroidx/core/view/OnApplyWindowInsetsListener; Landroidx/core/view/OnReceiveContentViewBehavior; Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl20; HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;->(Landroid/view/View;)V PLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;->(Landroid/view/View;)V Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl30; HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;->(Landroid/view/View;)V PLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;->(Landroid/view/View;)V Landroidx/core/view/ViewCompat; HSPLandroidx/core/view/ViewCompat;->()V PLandroidx/core/view/ViewCompat;->()V HSPLandroidx/core/view/ViewCompat;->getContentCaptureSession(Landroid/view/View;)Landroidx/core/view/contentcapture/ContentCaptureSessionCompat; PLandroidx/core/view/ViewCompat;->getContentCaptureSession(Landroid/view/View;)Landroidx/core/view/contentcapture/ContentCaptureSessionCompat; HSPLandroidx/core/view/ViewCompat;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; PLandroidx/core/view/ViewCompat;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; HSPLandroidx/core/view/ViewCompat;->hasOnClickListeners(Landroid/view/View;)Z PLandroidx/core/view/ViewCompat;->hasOnClickListeners(Landroid/view/View;)Z HSPLandroidx/core/view/ViewCompat;->isLaidOut(Landroid/view/View;)Z PLandroidx/core/view/ViewCompat;->isLaidOut(Landroid/view/View;)Z HSPLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V PLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V HSPLandroidx/core/view/ViewCompat;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;I)V PLandroidx/core/view/ViewCompat;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;I)V HSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V PLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V HSPLandroidx/core/view/ViewCompat;->setImportantForContentCapture(Landroid/view/View;)V PLandroidx/core/view/ViewCompat;->setImportantForContentCapture(Landroid/view/View;)V HSPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V PLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V HSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V PLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0; HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->()V PLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->()V Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager; HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;->()V PLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;->()V Landroidx/core/view/ViewCompat$Api15Impl; HSPLandroidx/core/view/ViewCompat$Api15Impl;->hasOnClickListeners(Landroid/view/View;)Z PLandroidx/core/view/ViewCompat$Api15Impl;->hasOnClickListeners(Landroid/view/View;)Z Landroidx/core/view/ViewCompat$Api16Impl; HSPLandroidx/core/view/ViewCompat$Api16Impl;->getImportantForAccessibility(Landroid/view/View;)I PLandroidx/core/view/ViewCompat$Api16Impl;->getImportantForAccessibility(Landroid/view/View;)I HSPLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; PLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; HSPLandroidx/core/view/ViewCompat$Api16Impl;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V PLandroidx/core/view/ViewCompat$Api16Impl;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V HSPLandroidx/core/view/ViewCompat$Api16Impl;->setImportantForAccessibility(Landroid/view/View;I)V PLandroidx/core/view/ViewCompat$Api16Impl;->setImportantForAccessibility(Landroid/view/View;I)V Landroidx/core/view/ViewCompat$Api19Impl; HSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z PLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z HSPLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z PLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z Landroidx/core/view/ViewCompat$Api20Impl; HSPLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; PLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; Landroidx/core/view/ViewCompat$Api21Impl; HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V PLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V Landroidx/core/view/ViewCompat$Api21Impl$1; HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V PLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; PLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; Landroidx/core/view/ViewCompat$Api23Impl; HSPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; Landroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationManager;Ljava/util/List;)V PLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationManager;Ljava/util/List;)V HSPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Ljava/util/List;)V PLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Ljava/util/List;)V Landroidx/core/view/ViewCompat$Api29Impl; HSPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession; PLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession; HSPLandroidx/core/view/ViewCompat$Api29Impl;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V PLandroidx/core/view/ViewCompat$Api29Impl;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V Landroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession; PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession; HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V HSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets; PLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets; Landroidx/core/view/ViewCompat$Api30Impl; HSPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V PLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V Landroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m()I PLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m()I HSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V PLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V HSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/WindowInsetsAnimation$Callback;)V PLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/WindowInsetsAnimation$Callback;)V HSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;Z)V PLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;Z)V Landroidx/core/view/ViewKt; HSPLandroidx/core/view/ViewKt;->()V PLandroidx/core/view/ViewKt;->()V PLandroidx/core/view/ViewKt;->getAncestors(Landroidx/compose/ui/platform/AbstractComposeView;)Lkotlin/sequences/Sequence; HSPLandroidx/core/view/ViewKt;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V PLandroidx/core/view/ViewKt;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V PLandroidx/core/view/ViewKt$ancestors$1;->()V PLandroidx/core/view/ViewKt$ancestors$1;->()V HPLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/core/view/ViewPropertyAnimatorListener; Landroidx/core/view/WindowCompat$Api30Impl; HSPLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V PLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V Landroidx/core/view/WindowInsetsAnimationCompat$Callback; HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->(I)V PLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->(I)V HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I PLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback; HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V PLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/WindowInsetsCompat;->()V PLandroidx/core/view/WindowInsetsCompat;->()V HSPLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V PLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V HSPLandroidx/core/view/WindowInsetsCompat;->(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/core/view/WindowInsetsCompat;->(Landroidx/core/view/WindowInsetsCompat;)V HSPLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V PLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V HSPLandroidx/core/view/WindowInsetsCompat;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; PLandroidx/core/view/WindowInsetsCompat;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; HSPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; PLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; PLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I PLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I HSPLandroidx/core/view/WindowInsetsCompat;->isVisible(I)Z PLandroidx/core/view/WindowInsetsCompat;->isVisible(I)Z HSPLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V PLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V HSPLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; PLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/View;Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; HPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/View;Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; Landroidx/core/view/WindowInsetsCompat$BuilderImpl; HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V PLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V PLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V Landroidx/core/view/WindowInsetsCompat$BuilderImpl29; HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; Landroidx/core/view/WindowInsetsCompat$BuilderImpl30; HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V PLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V Landroidx/core/view/WindowInsetsCompat$Impl; HSPLandroidx/core/view/WindowInsetsCompat$Impl;->()V PLandroidx/core/view/WindowInsetsCompat$Impl;->()V HSPLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V Landroidx/core/view/WindowInsetsCompat$Impl20; HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V PLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets; PLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V PLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V PLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V Landroidx/core/view/WindowInsetsCompat$Impl21; HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V PLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; Landroidx/core/view/WindowInsetsCompat$Impl28; HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V PLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; PLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; Landroidx/core/view/WindowInsetsCompat$Impl29; HSPLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V PLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V Landroidx/core/view/WindowInsetsCompat$Impl30; HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->()V PLandroidx/core/view/WindowInsetsCompat$Impl30;->()V HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V PLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V PLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; HPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; PLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z HPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z Landroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()I HPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; HPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;)V PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$2()I PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$2()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3()I PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/view/WindowInsetsController;)V PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/view/WindowInsetsController;)V HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$4()I PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$4()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$5()I PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$5()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$6()I PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$6()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()I HPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets; PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController; PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; HPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;)I PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;)I HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V HPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V Landroidx/core/view/WindowInsetsCompat$TypeImpl30; HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I HPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I Landroidx/core/view/WindowInsetsControllerCompat; HSPLandroidx/core/view/WindowInsetsControllerCompat;->(Landroid/view/View;Landroid/view/Window;)V PLandroidx/core/view/WindowInsetsControllerCompat;->(Landroid/view/View;Landroid/view/Window;)V HSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightNavigationBars()Z PLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightNavigationBars()Z HSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightStatusBars()Z PLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightStatusBars()Z HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V PLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V PLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V Landroidx/core/view/WindowInsetsControllerCompat$Impl30; HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/Window;Landroidx/core/view/ContentInfoCompat$Builder;)V PLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/Window;Landroidx/core/view/ContentInfoCompat$Builder;)V HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightNavigationBars()Z PLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightNavigationBars()Z HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightStatusBars()Z PLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightStatusBars()Z HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V PLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V PLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V Landroidx/core/view/accessibility/AccessibilityEventCompat; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(I)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(I)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addChild(Landroid/view/View;I)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addChild(Landroid/view/View;I)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList; HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocusable()Z HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocusable()Z HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocused()Z HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocused()Z HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->obtain()Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->obtain()Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setAccessibilityFocused(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setAccessibilityFocused(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setBoundsInScreen(Landroid/graphics/Rect;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setBoundsInScreen(Landroid/graphics/Rect;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCheckable(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCheckable(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClickable(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClickable(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;)V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;)V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setContentDescription(Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setContentDescription(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEditable(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEditable(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEnabled(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEnabled(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocusable(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocusable(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocused(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocused(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setImportantForAccessibility()V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setImportantForAccessibility()V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setLongClickable(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setLongClickable(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setMovementGranularities(I)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setMovementGranularities(I)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPackageName(Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPackageName(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPaneTitle(Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPaneTitle(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;I)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;I)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPassword(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPassword(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setRoleDescription(Ljava/lang/String;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setRoleDescription(Ljava/lang/String;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setScreenReaderFocusable(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setScreenReaderFocusable(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSelected(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSelected(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSource(Landroid/view/View;I)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSource(Landroid/view/View;I)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setText(Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setText(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTextSelection(II)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTextSelection(II)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setVisibleToUser(Z)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setVisibleToUser(Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landroid/view/accessibility/AccessibilityNodeInfo; HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landroid/view/accessibility/AccessibilityNodeInfo; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/Class;)V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/Class;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/String;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/String;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/String;Landroidx/core/view/accessibility/AccessibilityViewCommand;Ljava/lang/Class;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/String;Landroidx/core/view/accessibility/AccessibilityViewCommand;Ljava/lang/Class;)V Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;->getExtras(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/os/Bundle; HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;->getExtras(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/os/Bundle; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;->setStateDescription(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;->setStateDescription(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->obtain(IIIIZ)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->obtain(IIIIZ)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;->(Ljava/lang/Object;)V PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;->(Ljava/lang/Object;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;->obtain(III)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat; PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;->obtain(III)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat; Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->(Landroid/view/accessibility/AccessibilityNodeProvider;)V PLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->(Landroid/view/accessibility/AccessibilityNodeProvider;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->getProvider()Ljava/lang/Object; PLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->getProvider()Ljava/lang/Object; Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveAtGranularityArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveHtmlArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveWindowArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand$ScrollToPositionArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand$SetProgressArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand$SetSelectionArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand$SetTextArguments; Landroidx/customview/poolingcontainer/PoolingContainer; HSPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V PLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; PLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; Landroidx/customview/poolingcontainer/PoolingContainerListener; Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V PLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V PLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V Landroidx/datastore/core/CorruptionException; Landroidx/datastore/core/CorruptionHandler; Landroidx/datastore/core/Data; HSPLandroidx/datastore/core/Data;->(Ljava/lang/Object;I)V PLandroidx/datastore/core/Data;->(Ljava/lang/Object;I)V HSPLandroidx/datastore/core/Data;->getValue()Ljava/lang/Object; PLandroidx/datastore/core/Data;->getValue()Ljava/lang/Object; Landroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;->(Landroidx/datastore/core/SingleProcessDataStore$Companion;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;->(Landroidx/datastore/core/SingleProcessDataStore$Companion;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/core/DataStore; Landroidx/datastore/core/DataStoreFactory; HSPLandroidx/datastore/core/DataStoreFactory;->()V PLandroidx/datastore/core/DataStoreFactory;->()V HSPLandroidx/datastore/core/DataStoreFactory;->create(Landroidx/datastore/core/Serializer;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/SingleProcessDataStore; PLandroidx/datastore/core/DataStoreFactory;->create(Landroidx/datastore/core/Serializer;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/SingleProcessDataStore; Landroidx/datastore/core/Final; Landroidx/datastore/core/ReadException; Landroidx/datastore/core/Serializer; Landroidx/datastore/core/SimpleActor; HSPLandroidx/datastore/core/SimpleActor;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V PLandroidx/datastore/core/SimpleActor;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/datastore/core/SimpleActor;->access$getConsumeMessage$p(Landroidx/datastore/core/SimpleActor;)Lkotlin/jvm/functions/Function2; PLandroidx/datastore/core/SimpleActor;->access$getConsumeMessage$p(Landroidx/datastore/core/SimpleActor;)Lkotlin/jvm/functions/Function2; HSPLandroidx/datastore/core/SimpleActor;->access$getMessageQueue$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/channels/Channel; PLandroidx/datastore/core/SimpleActor;->access$getMessageQueue$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/channels/Channel; HSPLandroidx/datastore/core/SimpleActor;->access$getRemainingMessages$p(Landroidx/datastore/core/SimpleActor;)Ljava/util/concurrent/atomic/AtomicInteger; PLandroidx/datastore/core/SimpleActor;->access$getRemainingMessages$p(Landroidx/datastore/core/SimpleActor;)Ljava/util/concurrent/atomic/AtomicInteger; HSPLandroidx/datastore/core/SimpleActor;->access$getScope$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/CoroutineScope; PLandroidx/datastore/core/SimpleActor;->access$getScope$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/CoroutineScope; HSPLandroidx/datastore/core/SimpleActor;->offer(Ljava/lang/Object;)V PLandroidx/datastore/core/SimpleActor;->offer(Ljava/lang/Object;)V Landroidx/datastore/core/SimpleActor$1; HSPLandroidx/datastore/core/SimpleActor$1;->(Lkotlin/jvm/functions/Function1;Landroidx/datastore/core/SimpleActor;Lkotlin/jvm/functions/Function2;)V PLandroidx/datastore/core/SimpleActor$1;->(Lkotlin/jvm/functions/Function1;Landroidx/datastore/core/SimpleActor;Lkotlin/jvm/functions/Function2;)V Landroidx/datastore/core/SimpleActor$offer$2; HSPLandroidx/datastore/core/SimpleActor$offer$2;->(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SimpleActor$offer$2;->(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V HSPLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore; HSPLandroidx/datastore/core/SingleProcessDataStore;->()V PLandroidx/datastore/core/SingleProcessDataStore;->()V HSPLandroidx/datastore/core/SingleProcessDataStore;->(Lkotlin/jvm/functions/Function0;Landroidx/datastore/core/Serializer;Ljava/util/List;Lorg/acra/log/AndroidLogDelegate;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/datastore/core/SingleProcessDataStore;->(Lkotlin/jvm/functions/Function0;Landroidx/datastore/core/Serializer;Ljava/util/List;Lorg/acra/log/AndroidLogDelegate;Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFiles$cp()Ljava/util/LinkedHashSet; PLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFiles$cp()Ljava/util/LinkedHashSet; HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFilesLock$cp()Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFilesLock$cp()Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActor$p(Landroidx/datastore/core/SingleProcessDataStore;)Landroidx/datastore/core/SimpleActor; PLandroidx/datastore/core/SingleProcessDataStore;->access$getActor$p(Landroidx/datastore/core/SingleProcessDataStore;)Landroidx/datastore/core/SimpleActor; HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getDownstreamFlow$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlinx/coroutines/flow/MutableStateFlow; PLandroidx/datastore/core/SingleProcessDataStore;->access$getDownstreamFlow$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getProduceFile$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlin/jvm/functions/Function0; PLandroidx/datastore/core/SingleProcessDataStore;->access$getProduceFile$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlin/jvm/functions/Function0; HSPLandroidx/datastore/core/SingleProcessDataStore;->access$handleRead(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore;->access$handleRead(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/Flow; PLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/Flow; HSPLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File; PLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File; HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$Companion; HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->()V PLandroidx/datastore/core/SingleProcessDataStore$Companion;->()V HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->access$runMigrations(Landroidx/datastore/core/SingleProcessDataStore$Companion;Ljava/util/List;Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$Companion;->access$runMigrations(Landroidx/datastore/core/SingleProcessDataStore$Companion;Ljava/util/List;Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$Message; HSPLandroidx/datastore/core/SingleProcessDataStore$Message;->()V PLandroidx/datastore/core/SingleProcessDataStore$Message;->()V Landroidx/datastore/core/SingleProcessDataStore$Message$Read; HSPLandroidx/datastore/core/SingleProcessDataStore$Message$Read;->(Landroidx/datastore/core/State;)V PLandroidx/datastore/core/SingleProcessDataStore$Message$Read;->(Landroidx/datastore/core/State;)V Landroidx/datastore/core/SingleProcessDataStore$actor$1; HSPLandroidx/datastore/core/SingleProcessDataStore$actor$1;->(Landroidx/datastore/core/SingleProcessDataStore;)V PLandroidx/datastore/core/SingleProcessDataStore$actor$1;->(Landroidx/datastore/core/SingleProcessDataStore;)V Landroidx/datastore/core/SingleProcessDataStore$actor$2; HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V PLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V PLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V Landroidx/datastore/core/SingleProcessDataStore$actor$3; HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$actor$3;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$data$1; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$data$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$data$1$1; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;)V PLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;)V HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1; HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;->(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;->(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/SingleProcessDataStore$file$2; HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->(Landroidx/datastore/core/SingleProcessDataStore;)V PLandroidx/datastore/core/SingleProcessDataStore$file$2;->(Landroidx/datastore/core/SingleProcessDataStore;)V HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$readAndInit$1; HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1; HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V PLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1; HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;->(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;->(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1; HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/SingleProcessDataStore$readData$1; HSPLandroidx/datastore/core/SingleProcessDataStore$readData$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$readData$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1; HSPLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V PLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V Landroidx/datastore/core/State; HSPLandroidx/datastore/core/State;->()V PLandroidx/datastore/core/State;->()V Landroidx/datastore/core/UnInitialized; HSPLandroidx/datastore/core/UnInitialized;->()V PLandroidx/datastore/core/UnInitialized;->()V HSPLandroidx/datastore/core/UnInitialized;->()V PLandroidx/datastore/core/UnInitialized;->()V Landroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1; HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V PLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V PLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/datastore/preferences/PreferenceDataStoreFile; HSPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStore$default()Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate; PLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStore$default()Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate; HSPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; PLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate; HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)V HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->access$getName$p(Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)Ljava/lang/String; PLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->access$getName$p(Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)Ljava/lang/String; HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; PLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1; HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->(Landroid/content/Context;Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)V PLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->(Landroid/content/Context;Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)V HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/lang/Object; PLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/lang/Object; Landroidx/datastore/preferences/core/MutablePreferences; HSPLandroidx/datastore/preferences/core/MutablePreferences;->(Ljava/util/Map;Z)V PLandroidx/datastore/preferences/core/MutablePreferences;->(Ljava/util/Map;Z)V HSPLandroidx/datastore/preferences/core/MutablePreferences;->(Z)V PLandroidx/datastore/preferences/core/MutablePreferences;->(Z)V HSPLandroidx/datastore/preferences/core/MutablePreferences;->equals(Ljava/lang/Object;)Z PLandroidx/datastore/preferences/core/MutablePreferences;->equals(Ljava/lang/Object;)Z HSPLandroidx/datastore/preferences/core/MutablePreferences;->get(Landroidx/datastore/preferences/core/Preferences$Key;)Ljava/lang/Object; PLandroidx/datastore/preferences/core/MutablePreferences;->get(Landroidx/datastore/preferences/core/Preferences$Key;)Ljava/lang/Object; HSPLandroidx/datastore/preferences/core/MutablePreferences;->hashCode()I PLandroidx/datastore/preferences/core/MutablePreferences;->hashCode()I Landroidx/datastore/preferences/core/PreferenceDataStore; HSPLandroidx/datastore/preferences/core/PreferenceDataStore;->(Landroidx/datastore/core/SingleProcessDataStore;)V PLandroidx/datastore/preferences/core/PreferenceDataStore;->(Landroidx/datastore/core/SingleProcessDataStore;)V HSPLandroidx/datastore/preferences/core/PreferenceDataStore;->getData()Lkotlinx/coroutines/flow/Flow; PLandroidx/datastore/preferences/core/PreferenceDataStore;->getData()Lkotlinx/coroutines/flow/Flow; Landroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1; HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->(Lkotlin/jvm/functions/Function0;)V PLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/lang/Object; PLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/lang/Object; Landroidx/datastore/preferences/core/Preferences$Key; HSPLandroidx/datastore/preferences/core/Preferences$Key;->(Ljava/lang/String;)V PLandroidx/datastore/preferences/core/Preferences$Key;->(Ljava/lang/String;)V HSPLandroidx/datastore/preferences/core/Preferences$Key;->hashCode()I PLandroidx/datastore/preferences/core/Preferences$Key;->hashCode()I Landroidx/datastore/preferences/core/PreferencesSerializer; HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->()V PLandroidx/datastore/preferences/core/PreferencesSerializer;->()V HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->()V PLandroidx/datastore/preferences/core/PreferencesSerializer;->()V HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->create(Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/preferences/core/PreferenceDataStore; PLandroidx/datastore/preferences/core/PreferencesSerializer;->create(Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/preferences/core/PreferenceDataStore; HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Ljava/lang/Object; PLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Ljava/lang/Object; Landroidx/datastore/preferences/protobuf/InvalidProtocolBufferException; Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0; HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V PLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; PLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl; HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; PLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; Landroidx/emoji2/text/DefaultEmojiCompatConfig; HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;->()V PLandroidx/emoji2/text/DefaultEmojiCompatConfig;->()V Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory; HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->$r8$lambda$2V1iWTiAwNxOBlVvz73bbuEdzIw(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->$r8$lambda$2V1iWTiAwNxOBlVvz73bbuEdzIw(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->()V PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->()V HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->(Landroid/content/Context;)V PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->(Landroid/content/Context;)V HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->load(Landroidx/emoji2/text/DefaultEmojiCompatConfig;)V PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->load(Landroidx/emoji2/text/DefaultEmojiCompatConfig;)V Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19; HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List; PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List; Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28; HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V Landroidx/emoji2/text/DefaultGlyphChecker; HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V PLandroidx/emoji2/text/DefaultGlyphChecker;->()V HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V PLandroidx/emoji2/text/DefaultGlyphChecker;->()V Landroidx/emoji2/text/EmojiCompat; HSPLandroidx/emoji2/text/EmojiCompat;->()V PLandroidx/emoji2/text/EmojiCompat;->()V HSPLandroidx/emoji2/text/EmojiCompat;->(Landroidx/emoji2/text/EmojiCompat$Config;)V PLandroidx/emoji2/text/EmojiCompat;->(Landroidx/emoji2/text/EmojiCompat$Config;)V HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; PLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I PLandroidx/emoji2/text/EmojiCompat;->getLoadState()I HSPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)V PLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)V HSPLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z PLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z HSPLandroidx/emoji2/text/EmojiCompat;->load()V PLandroidx/emoji2/text/EmojiCompat;->load()V HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadFailed(Ljava/lang/Throwable;)V PLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadFailed(Ljava/lang/Throwable;)V HSPLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V PLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V Landroidx/emoji2/text/EmojiCompat$CompatInternal; HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;->(Landroidx/emoji2/text/EmojiCompat;)V PLandroidx/emoji2/text/EmojiCompat$CompatInternal;->(Landroidx/emoji2/text/EmojiCompat;)V Landroidx/emoji2/text/EmojiCompat$CompatInternal19; HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->(Landroidx/emoji2/text/EmojiCompat;)V PLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->(Landroidx/emoji2/text/EmojiCompat;)V Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1; HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V PLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onFailed(Ljava/lang/Throwable;)V PLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onFailed(Ljava/lang/Throwable;)V Landroidx/emoji2/text/EmojiCompat$Config; HSPLandroidx/emoji2/text/EmojiCompat$Config;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V PLandroidx/emoji2/text/EmojiCompat$Config;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory; HSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;->()V PLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;->()V Landroidx/emoji2/text/EmojiCompat$GlyphChecker; Landroidx/emoji2/text/EmojiCompat$InitCallback; HSPLandroidx/emoji2/text/EmojiCompat$InitCallback;->()V PLandroidx/emoji2/text/EmojiCompat$InitCallback;->()V Landroidx/emoji2/text/EmojiCompat$ListenerDispatcher; HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/List;ILjava/lang/Throwable;)V PLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/List;ILjava/lang/Throwable;)V HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V PLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; Landroidx/emoji2/text/EmojiCompatInitializer; HSPLandroidx/emoji2/text/EmojiCompatInitializer;->()V PLandroidx/emoji2/text/EmojiCompatInitializer;->()V HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean; PLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean; HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; PLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List; PLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List; Landroidx/emoji2/text/EmojiCompatInitializer$1; HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V PLandroidx/emoji2/text/EmojiCompatInitializer$1;->(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0; HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable; HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->()V PLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->()V HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V PLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback; Landroidx/emoji2/text/FontRequestEmojiCompatConfig; HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V PLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;)V PLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;)V Landroidx/fragment/app/DialogFragment$1; HSPLandroidx/fragment/app/DialogFragment$1;->(Ljava/lang/Object;I)V PLandroidx/fragment/app/DialogFragment$1;->(Ljava/lang/Object;I)V Landroidx/fragment/app/FragmentActivity; HSPLandroidx/fragment/app/FragmentActivity;->()V PLandroidx/fragment/app/FragmentActivity;->()V PLandroidx/fragment/app/FragmentActivity;->getSupportFragmentManager()Landroidx/fragment/app/FragmentManager; PLandroidx/fragment/app/FragmentActivity;->markFragmentsCreated()V PLandroidx/fragment/app/FragmentActivity;->markState(Landroidx/fragment/app/FragmentManager;)Z HSPLandroidx/fragment/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V PLandroidx/fragment/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V HSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; HPLandroidx/fragment/app/FragmentActivity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; HSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; HPLandroidx/fragment/app/FragmentActivity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; PLandroidx/fragment/app/FragmentActivity;->onDestroy()V PLandroidx/fragment/app/FragmentActivity;->onPause()V HSPLandroidx/fragment/app/FragmentActivity;->onPostResume()V PLandroidx/fragment/app/FragmentActivity;->onPostResume()V HSPLandroidx/fragment/app/FragmentActivity;->onResume()V PLandroidx/fragment/app/FragmentActivity;->onResume()V HSPLandroidx/fragment/app/FragmentActivity;->onStart()V PLandroidx/fragment/app/FragmentActivity;->onStart()V HSPLandroidx/fragment/app/FragmentActivity;->onStateNotSaved()V PLandroidx/fragment/app/FragmentActivity;->onStateNotSaved()V PLandroidx/fragment/app/FragmentActivity;->onStop()V Landroidx/fragment/app/FragmentActivity$1; HSPLandroidx/fragment/app/FragmentActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V PLandroidx/fragment/app/FragmentActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V PLandroidx/fragment/app/FragmentActivity$1;->saveState()Landroid/os/Bundle; Landroidx/fragment/app/FragmentActivity$2; HSPLandroidx/fragment/app/FragmentActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V PLandroidx/fragment/app/FragmentActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V HSPLandroidx/fragment/app/FragmentActivity$2;->onContextAvailable(Landroid/content/Context;)V PLandroidx/fragment/app/FragmentActivity$2;->onContextAvailable(Landroid/content/Context;)V Landroidx/fragment/app/FragmentActivity$HostCallbacks; HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->(Landroidx/appcompat/app/AppCompatActivity;)V PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->(Landroidx/appcompat/app/AppCompatActivity;)V HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getLifecycle()Landroidx/lifecycle/Lifecycle; PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getLifecycle()Landroidx/lifecycle/Lifecycle; HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; Landroidx/fragment/app/FragmentContainer; HSPLandroidx/fragment/app/FragmentContainer;->()V PLandroidx/fragment/app/FragmentContainer;->()V Landroidx/fragment/app/FragmentContainerView; Landroidx/fragment/app/FragmentController; HSPLandroidx/fragment/app/FragmentController;->(Landroidx/fragment/app/FragmentHostCallback;)V PLandroidx/fragment/app/FragmentController;->(Landroidx/fragment/app/FragmentHostCallback;)V HSPLandroidx/fragment/app/FragmentController;->attachHost()V PLandroidx/fragment/app/FragmentController;->attachHost()V HSPLandroidx/fragment/app/FragmentController;->createController(Landroidx/fragment/app/FragmentHostCallback;)Landroidx/fragment/app/FragmentController; PLandroidx/fragment/app/FragmentController;->createController(Landroidx/fragment/app/FragmentHostCallback;)Landroidx/fragment/app/FragmentController; HSPLandroidx/fragment/app/FragmentController;->dispatchActivityCreated()V PLandroidx/fragment/app/FragmentController;->dispatchActivityCreated()V HSPLandroidx/fragment/app/FragmentController;->dispatchCreate()V PLandroidx/fragment/app/FragmentController;->dispatchCreate()V PLandroidx/fragment/app/FragmentController;->dispatchDestroy()V PLandroidx/fragment/app/FragmentController;->dispatchPause()V HSPLandroidx/fragment/app/FragmentController;->dispatchResume()V PLandroidx/fragment/app/FragmentController;->dispatchResume()V HSPLandroidx/fragment/app/FragmentController;->dispatchStart()V PLandroidx/fragment/app/FragmentController;->dispatchStart()V PLandroidx/fragment/app/FragmentController;->dispatchStop()V HSPLandroidx/fragment/app/FragmentController;->execPendingActions()V PLandroidx/fragment/app/FragmentController;->execPendingActions()V PLandroidx/fragment/app/FragmentController;->getSupportFragmentManager()Landroidx/fragment/app/FragmentManager; HSPLandroidx/fragment/app/FragmentController;->noteStateNotSaved()V PLandroidx/fragment/app/FragmentController;->noteStateNotSaved()V HSPLandroidx/fragment/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; PLandroidx/fragment/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; PLandroidx/fragment/app/FragmentController;->saveAllState()Landroid/os/Parcelable; Landroidx/fragment/app/FragmentFactory; HSPLandroidx/fragment/app/FragmentFactory;->()V PLandroidx/fragment/app/FragmentFactory;->()V HSPLandroidx/fragment/app/FragmentFactory;->()V PLandroidx/fragment/app/FragmentFactory;->()V Landroidx/fragment/app/FragmentHostCallback; HSPLandroidx/fragment/app/FragmentHostCallback;->(Landroidx/appcompat/app/AppCompatActivity;)V PLandroidx/fragment/app/FragmentHostCallback;->(Landroidx/appcompat/app/AppCompatActivity;)V HSPLandroidx/fragment/app/FragmentHostCallback;->getHandler()Landroid/os/Handler; PLandroidx/fragment/app/FragmentHostCallback;->getHandler()Landroid/os/Handler; Landroidx/fragment/app/FragmentLayoutInflaterFactory; HSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->(Landroidx/fragment/app/FragmentManager;)V PLandroidx/fragment/app/FragmentLayoutInflaterFactory;->(Landroidx/fragment/app/FragmentManager;)V HSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; HPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; Landroidx/fragment/app/FragmentLifecycleCallbacksDispatcher; HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->(Landroidx/fragment/app/FragmentManager;)V PLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->(Landroidx/fragment/app/FragmentManager;)V Landroidx/fragment/app/FragmentManager; HSPLandroidx/fragment/app/FragmentManager;->()V HPLandroidx/fragment/app/FragmentManager;->()V HSPLandroidx/fragment/app/FragmentManager;->attachController(Landroidx/fragment/app/FragmentHostCallback;Landroidx/fragment/app/FragmentContainer;Landroidx/fragment/app/Fragment;)V PLandroidx/fragment/app/FragmentManager;->attachController(Landroidx/fragment/app/FragmentHostCallback;Landroidx/fragment/app/FragmentContainer;Landroidx/fragment/app/Fragment;)V HSPLandroidx/fragment/app/FragmentManager;->collectAllSpecialEffectsController()Ljava/util/HashSet; HPLandroidx/fragment/app/FragmentManager;->collectAllSpecialEffectsController()Ljava/util/HashSet; HSPLandroidx/fragment/app/FragmentManager;->dispatchActivityCreated()V PLandroidx/fragment/app/FragmentManager;->dispatchActivityCreated()V HSPLandroidx/fragment/app/FragmentManager;->dispatchCreate()V PLandroidx/fragment/app/FragmentManager;->dispatchCreate()V PLandroidx/fragment/app/FragmentManager;->dispatchDestroy()V PLandroidx/fragment/app/FragmentManager;->dispatchPause()V HSPLandroidx/fragment/app/FragmentManager;->dispatchResume()V PLandroidx/fragment/app/FragmentManager;->dispatchResume()V HSPLandroidx/fragment/app/FragmentManager;->dispatchStart()V PLandroidx/fragment/app/FragmentManager;->dispatchStart()V HSPLandroidx/fragment/app/FragmentManager;->dispatchStateChange(I)V HPLandroidx/fragment/app/FragmentManager;->dispatchStateChange(I)V PLandroidx/fragment/app/FragmentManager;->dispatchStop()V HSPLandroidx/fragment/app/FragmentManager;->doPendingDeferredStart()V PLandroidx/fragment/app/FragmentManager;->doPendingDeferredStart()V HSPLandroidx/fragment/app/FragmentManager;->ensureExecReady(Z)V HPLandroidx/fragment/app/FragmentManager;->ensureExecReady(Z)V HSPLandroidx/fragment/app/FragmentManager;->execPendingActions(Z)Z HPLandroidx/fragment/app/FragmentManager;->execPendingActions(Z)Z PLandroidx/fragment/app/FragmentManager;->forcePostponedTransactions()V HSPLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I PLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I PLandroidx/fragment/app/FragmentManager;->getFragments()Ljava/util/List; HSPLandroidx/fragment/app/FragmentManager;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2; PLandroidx/fragment/app/FragmentManager;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2; PLandroidx/fragment/app/FragmentManager;->isLoggingEnabled(I)Z HSPLandroidx/fragment/app/FragmentManager;->isStateSaved()Z PLandroidx/fragment/app/FragmentManager;->isStateSaved()Z HSPLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V PLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V HSPLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V PLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V PLandroidx/fragment/app/FragmentManager;->saveAllState()Landroid/os/Parcelable; HSPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V HPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V HSPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V HPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V Landroidx/fragment/app/FragmentManager$1; HSPLandroidx/fragment/app/FragmentManager$1;->(Landroidx/fragment/app/FragmentManager;)V PLandroidx/fragment/app/FragmentManager$1;->(Landroidx/fragment/app/FragmentManager;)V Landroidx/fragment/app/FragmentManager$2; HSPLandroidx/fragment/app/FragmentManager$2;->(Landroidx/fragment/app/FragmentManager;)V PLandroidx/fragment/app/FragmentManager$2;->(Landroidx/fragment/app/FragmentManager;)V Landroidx/fragment/app/FragmentManager$3; HSPLandroidx/fragment/app/FragmentManager$3;->(Landroidx/fragment/app/FragmentManager;)V PLandroidx/fragment/app/FragmentManager$3;->(Landroidx/fragment/app/FragmentManager;)V Landroidx/fragment/app/FragmentManager$9; HSPLandroidx/fragment/app/FragmentManager$9;->(Landroidx/fragment/app/FragmentManager;I)V PLandroidx/fragment/app/FragmentManager$9;->(Landroidx/fragment/app/FragmentManager;I)V Landroidx/fragment/app/FragmentManager$FragmentIntentSenderContract; HSPLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;->()V PLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;->()V Landroidx/fragment/app/FragmentManagerImpl; HSPLandroidx/fragment/app/FragmentManagerImpl;->()V PLandroidx/fragment/app/FragmentManagerImpl;->()V Landroidx/fragment/app/FragmentManagerViewModel; HSPLandroidx/fragment/app/FragmentManagerViewModel;->()V PLandroidx/fragment/app/FragmentManagerViewModel;->()V HSPLandroidx/fragment/app/FragmentManagerViewModel;->(Z)V PLandroidx/fragment/app/FragmentManagerViewModel;->(Z)V HSPLandroidx/fragment/app/FragmentManagerViewModel;->getInstance(Landroidx/lifecycle/ViewModelStore;)Landroidx/fragment/app/FragmentManagerViewModel; PLandroidx/fragment/app/FragmentManagerViewModel;->getInstance(Landroidx/lifecycle/ViewModelStore;)Landroidx/fragment/app/FragmentManagerViewModel; PLandroidx/fragment/app/FragmentManagerViewModel;->onCleared()V HSPLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V PLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V Landroidx/fragment/app/FragmentManagerViewModel$1; HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->()V PLandroidx/fragment/app/FragmentManagerViewModel$1;->()V HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; PLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; Landroidx/fragment/app/FragmentOnAttachListener; Landroidx/fragment/app/FragmentStore; HSPLandroidx/fragment/app/FragmentStore;->()V PLandroidx/fragment/app/FragmentStore;->()V HSPLandroidx/fragment/app/FragmentStore;->burpActive()V HPLandroidx/fragment/app/FragmentStore;->burpActive()V HSPLandroidx/fragment/app/FragmentStore;->dispatchStateChange(I)V HPLandroidx/fragment/app/FragmentStore;->dispatchStateChange(I)V HSPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/ArrayList; HPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/ArrayList; HSPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List; HPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List; HSPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V HPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V PLandroidx/fragment/app/FragmentStore;->saveActiveFragments()Ljava/util/ArrayList; HSPLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V PLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V Landroidx/glance/appwidget/GlanceAppWidget; HSPLandroidx/glance/appwidget/GlanceAppWidget;->()V PLandroidx/glance/appwidget/GlanceAppWidget;->()V Landroidx/glance/appwidget/GlanceAppWidgetKt; HSPLandroidx/glance/appwidget/GlanceAppWidgetKt;->updateAll(Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget;Landroid/content/Context;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetKt;->updateAll(Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget;Landroid/content/Context;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1; HSPLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;->(Lkotlin/coroutines/Continuation;)V PLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;->(Lkotlin/coroutines/Continuation;)V HSPLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/glance/appwidget/GlanceAppWidgetManager; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->()V PLandroidx/glance/appwidget/GlanceAppWidgetManager;->()V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->(Landroid/content/Context;)V PLandroidx/glance/appwidget/GlanceAppWidgetManager;->(Landroid/content/Context;)V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getOrCreateDataStore(Landroidx/glance/appwidget/GlanceAppWidgetManager;)Landroidx/datastore/core/DataStore; PLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getOrCreateDataStore(Landroidx/glance/appwidget/GlanceAppWidgetManager;)Landroidx/datastore/core/DataStore; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getState(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getState(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->getGlanceIds(Ljava/lang/Class;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; PLandroidx/glance/appwidget/GlanceAppWidgetManager;->getGlanceIds(Ljava/lang/Class;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->getState(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetManager;->getState(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Landroidx/glance/appwidget/GlanceAppWidgetManager$Companion; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;->()V PLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;->()V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;->()V PLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;->()V Landroidx/glance/appwidget/GlanceAppWidgetManager$State; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->()V PLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->()V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->(Ljava/util/Map;Ljava/util/Map;)V PLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->(Ljava/util/Map;Ljava/util/Map;)V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->getProviderNameToReceivers()Ljava/util/Map; PLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->getProviderNameToReceivers()Ljava/util/Map; Landroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;->(Ljava/lang/Object;I)V PLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;->(Ljava/lang/Object;I)V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;->invoke()Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;->invoke()Ljava/lang/Object; Landroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;->(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V PLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;->(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/glance/appwidget/GlanceAppWidgetManager$getState$1; HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;->(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V PLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;->(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V HSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/glance/appwidget/SizeMode; Landroidx/glance/appwidget/SizeMode$Exact; HSPLandroidx/glance/appwidget/SizeMode$Exact;->()V PLandroidx/glance/appwidget/SizeMode$Exact;->()V HSPLandroidx/glance/appwidget/SizeMode$Exact;->()V PLandroidx/glance/appwidget/SizeMode$Exact;->()V Landroidx/glance/session/Api33Impl$$ExternalSyntheticApiModelOutline0; HSPLandroidx/glance/session/Api33Impl$$ExternalSyntheticApiModelOutline0;->m(I)I PLandroidx/glance/session/Api33Impl$$ExternalSyntheticApiModelOutline0;->m(I)I Landroidx/glance/session/SessionManager; Landroidx/glance/session/SessionManagerImpl; HSPLandroidx/glance/session/SessionManagerImpl;->()V PLandroidx/glance/session/SessionManagerImpl;->()V Landroidx/glance/session/SessionManagerKt; HSPLandroidx/glance/session/SessionManagerKt;->()V PLandroidx/glance/session/SessionManagerKt;->()V HSPLandroidx/glance/session/SessionManagerKt;->getGlanceSessionManager()Landroidx/glance/session/SessionManagerImpl; PLandroidx/glance/session/SessionManagerKt;->getGlanceSessionManager()Landroidx/glance/session/SessionManagerImpl; Landroidx/glance/state/GlanceStateDefinition; Landroidx/glance/state/PreferencesGlanceStateDefinition; HSPLandroidx/glance/state/PreferencesGlanceStateDefinition;->()V PLandroidx/glance/state/PreferencesGlanceStateDefinition;->()V HSPLandroidx/glance/state/PreferencesGlanceStateDefinition;->()V PLandroidx/glance/state/PreferencesGlanceStateDefinition;->()V Landroidx/interpolator/view/animation/FastOutSlowInInterpolator; HSPLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;->()V PLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;->()V HSPLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;->()V PLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;->()V Landroidx/interpolator/view/animation/LinearOutSlowInInterpolator; HSPLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;->()V PLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;->()V HSPLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;->()V PLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;->()V Landroidx/interpolator/view/animation/LookupTableInterpolator; HSPLandroidx/interpolator/view/animation/LookupTableInterpolator;->([F)V PLandroidx/interpolator/view/animation/LookupTableInterpolator;->([F)V HSPLandroidx/interpolator/view/animation/LookupTableInterpolator;->getInterpolation(F)F HPLandroidx/interpolator/view/animation/LookupTableInterpolator;->getInterpolation(F)F Landroidx/lifecycle/DefaultLifecycleObserver; HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V Landroidx/lifecycle/DefaultLifecycleObserverAdapter; HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V HPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings; HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;->()V PLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;->()V Landroidx/lifecycle/EmptyActivityLifecycleCallbacks; HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->()V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->()V HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V HPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V Landroidx/lifecycle/HasDefaultViewModelProviderFactory; Landroidx/lifecycle/Lifecycle; HSPLandroidx/lifecycle/Lifecycle;->()V HPLandroidx/lifecycle/Lifecycle;->()V HSPLandroidx/lifecycle/Lifecycle;->getInternalScopeRef()Ljava/util/concurrent/atomic/AtomicReference; PLandroidx/lifecycle/Lifecycle;->getInternalScopeRef()Ljava/util/concurrent/atomic/AtomicReference; Landroidx/lifecycle/Lifecycle$Event; HSPLandroidx/lifecycle/Lifecycle$Event;->()V PLandroidx/lifecycle/Lifecycle$Event;->()V HSPLandroidx/lifecycle/Lifecycle$Event;->(Ljava/lang/String;I)V PLandroidx/lifecycle/Lifecycle$Event;->(Ljava/lang/String;I)V HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State; HPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State; HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event; PLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event; Landroidx/lifecycle/Lifecycle$Event$Companion; HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->()V PLandroidx/lifecycle/Lifecycle$Event$Companion;->()V HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event; HPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event; Landroidx/lifecycle/Lifecycle$Event$WhenMappings; HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;->()V PLandroidx/lifecycle/Lifecycle$Event$WhenMappings;->()V Landroidx/lifecycle/Lifecycle$State; HSPLandroidx/lifecycle/Lifecycle$State;->()V PLandroidx/lifecycle/Lifecycle$State;->()V HSPLandroidx/lifecycle/Lifecycle$State;->(Ljava/lang/String;I)V PLandroidx/lifecycle/Lifecycle$State;->(Ljava/lang/String;I)V HSPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z HPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z Landroidx/lifecycle/LifecycleCoroutineScopeImpl; HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V PLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; PLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getLifecycle$lifecycle_common()Landroidx/lifecycle/Lifecycle; PLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getLifecycle$lifecycle_common()Landroidx/lifecycle/Lifecycle; HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1; HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V PLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/lifecycle/LifecycleDispatcher; HSPLandroidx/lifecycle/LifecycleDispatcher;->()V PLandroidx/lifecycle/LifecycleDispatcher;->()V HSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V PLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback; HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->()V PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->()V HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V Landroidx/lifecycle/LifecycleEventObserver; Landroidx/lifecycle/LifecycleObserver; Landroidx/lifecycle/LifecycleOwner; Landroidx/lifecycle/LifecycleRegistry; HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;)V HPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V HPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State; HPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State; HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V HPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State; HPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State; HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V PLandroidx/lifecycle/LifecycleRegistry;->markState()V HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V HPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V HPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V PLandroidx/lifecycle/LifecycleRegistry;->setCurrentState()V HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V HPLandroidx/lifecycle/LifecycleRegistry;->sync()V Landroidx/lifecycle/LifecycleRegistry$ObserverWithState; HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V HPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->getState()Landroidx/lifecycle/Lifecycle$State; PLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->getState()Landroidx/lifecycle/Lifecycle$State; Landroidx/lifecycle/Lifecycling; HSPLandroidx/lifecycle/Lifecycling;->()V PLandroidx/lifecycle/Lifecycling;->()V HSPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver; HPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver; Landroidx/lifecycle/LiveData; HSPLandroidx/lifecycle/LiveData;->()V PLandroidx/lifecycle/LiveData;->()V HSPLandroidx/lifecycle/LiveData;->()V PLandroidx/lifecycle/LiveData;->()V HSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V PLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V HSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V PLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V HSPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V PLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V HSPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V PLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V Landroidx/lifecycle/LiveData$1; HSPLandroidx/lifecycle/LiveData$1;->(Landroidx/lifecycle/LiveData;)V PLandroidx/lifecycle/LiveData$1;->(Landroidx/lifecycle/LiveData;)V HSPLandroidx/lifecycle/LiveData$1;->run()V PLandroidx/lifecycle/LiveData$1;->run()V Landroidx/lifecycle/MutableLiveData; HSPLandroidx/lifecycle/MutableLiveData;->()V PLandroidx/lifecycle/MutableLiveData;->()V HSPLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V PLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V HSPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V PLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V Landroidx/lifecycle/ProcessLifecycleInitializer; HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->()V PLandroidx/lifecycle/ProcessLifecycleInitializer;->()V HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; PLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List; PLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List; Landroidx/lifecycle/ProcessLifecycleOwner; PLandroidx/lifecycle/ProcessLifecycleOwner;->$r8$lambda$8RHFmaqBQY2MpEYiTr99NwPTGEU(Landroidx/lifecycle/ProcessLifecycleOwner;)V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V PLandroidx/lifecycle/ProcessLifecycleOwner;->()V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V PLandroidx/lifecycle/ProcessLifecycleOwner;->()V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->access$getNewInstance$cp()Landroidx/lifecycle/ProcessLifecycleOwner; PLandroidx/lifecycle/ProcessLifecycleOwner;->access$getNewInstance$cp()Landroidx/lifecycle/ProcessLifecycleOwner; PLandroidx/lifecycle/ProcessLifecycleOwner;->activityPaused$lifecycle_process_release()V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V PLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted$lifecycle_process_release()V PLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted$lifecycle_process_release()V PLandroidx/lifecycle/ProcessLifecycleOwner;->activityStopped$lifecycle_process_release()V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach$lifecycle_process_release(Landroid/content/Context;)V PLandroidx/lifecycle/ProcessLifecycleOwner;->attach$lifecycle_process_release(Landroid/content/Context;)V HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; PLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; Landroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0; HSPLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V PLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V PLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;->run()V Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl; HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V PLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V Landroidx/lifecycle/ProcessLifecycleOwner$attach$1; HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPaused(Landroid/app/Activity;)V HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityStopped(Landroid/app/Activity;)V Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1; HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1; HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V PLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V Landroidx/lifecycle/ReportFragment; HSPLandroidx/lifecycle/ReportFragment;->()V PLandroidx/lifecycle/ReportFragment;->()V HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V PLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V PLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V PLandroidx/lifecycle/ReportFragment;->onDestroy()V PLandroidx/lifecycle/ReportFragment;->onPause()V HSPLandroidx/lifecycle/ReportFragment;->onResume()V PLandroidx/lifecycle/ReportFragment;->onResume()V HSPLandroidx/lifecycle/ReportFragment;->onStart()V PLandroidx/lifecycle/ReportFragment;->onStart()V PLandroidx/lifecycle/ReportFragment;->onStop()V Landroidx/lifecycle/ReportFragment$LifecycleCallbacks; HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V HPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V HPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion; HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->()V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->()V Landroidx/lifecycle/SavedStateHandleAttacher; HSPLandroidx/lifecycle/SavedStateHandleAttacher;->(Landroidx/lifecycle/SavedStateHandlesProvider;)V PLandroidx/lifecycle/SavedStateHandleAttacher;->(Landroidx/lifecycle/SavedStateHandlesProvider;)V HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1; HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V PLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V PLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V Landroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1; HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->()V PLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->()V HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->(I)V PLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->(I)V HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Landroid/view/View;)Landroid/view/View; HPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Landroid/view/View;)Landroid/view/View; HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/lifecycle/SavedStateHandlesProvider; HSPLandroidx/lifecycle/SavedStateHandlesProvider;->(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V HPLandroidx/lifecycle/SavedStateHandlesProvider;->(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V HSPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V PLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V HSPLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle; HPLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle; Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2; HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->(Landroidx/lifecycle/ViewModelStoreOwner;)V PLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->(Landroidx/lifecycle/ViewModelStoreOwner;)V HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object; PLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object; Landroidx/lifecycle/SavedStateHandlesVM; HSPLandroidx/lifecycle/SavedStateHandlesVM;->()V PLandroidx/lifecycle/SavedStateHandlesVM;->()V HSPLandroidx/lifecycle/SavedStateHandlesVM;->getHandles()Ljava/util/LinkedHashMap; PLandroidx/lifecycle/SavedStateHandlesVM;->getHandles()Ljava/util/LinkedHashMap; Landroidx/lifecycle/ViewModel; HSPLandroidx/lifecycle/ViewModel;->()V PLandroidx/lifecycle/ViewModel;->()V HPLandroidx/lifecycle/ViewModel;->clear()V PLandroidx/lifecycle/ViewModel;->onCleared()V Landroidx/lifecycle/ViewModelKt; HSPLandroidx/lifecycle/ViewModelKt;->()V PLandroidx/lifecycle/ViewModelKt;->()V HSPLandroidx/lifecycle/ViewModelKt;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/lifecycle/ViewModelKt;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/lifecycle/ViewModelKt;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V HPLandroidx/lifecycle/ViewModelKt;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V HSPLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; PLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; HSPLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; PLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; HSPLandroidx/lifecycle/ViewModelKt;->getLifecycleScope(Landroidx/lifecycle/LifecycleOwner;)Landroidx/lifecycle/LifecycleCoroutineScopeImpl; PLandroidx/lifecycle/ViewModelKt;->getLifecycleScope(Landroidx/lifecycle/LifecycleOwner;)Landroidx/lifecycle/LifecycleCoroutineScopeImpl; HSPLandroidx/lifecycle/ViewModelKt;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM; HPLandroidx/lifecycle/ViewModelKt;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM; HSPLandroidx/lifecycle/ViewModelKt;->injectIfNeededIn(Landroid/app/Activity;)V HPLandroidx/lifecycle/ViewModelKt;->injectIfNeededIn(Landroid/app/Activity;)V HSPLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V PLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V PLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory; HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->()V PLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->()V Landroidx/lifecycle/ViewModelProvider$Factory; HSPLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; PLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory; HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V PLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V Landroidx/lifecycle/ViewModelStore; HSPLandroidx/lifecycle/ViewModelStore;->()V PLandroidx/lifecycle/ViewModelStore;->()V HPLandroidx/lifecycle/ViewModelStore;->clear()V HSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel; HPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel; HSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V HPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V Landroidx/lifecycle/ViewModelStoreOwner; Landroidx/lifecycle/viewmodel/CreationExtras; HSPLandroidx/lifecycle/viewmodel/CreationExtras;->()V HPLandroidx/lifecycle/viewmodel/CreationExtras;->()V HSPLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/LinkedHashMap; PLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/LinkedHashMap; Landroidx/lifecycle/viewmodel/CreationExtras$Empty; HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V PLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V PLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V Landroidx/lifecycle/viewmodel/CreationExtras$Key; Landroidx/lifecycle/viewmodel/InitializerViewModelFactory; HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V PLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; HPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; Landroidx/lifecycle/viewmodel/MutableCreationExtras; HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->()V PLandroidx/lifecycle/viewmodel/MutableCreationExtras;->()V HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;)V HPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;)V HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V HPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V Landroidx/lifecycle/viewmodel/ViewModelInitializer; HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->(Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V HPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->(Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getClazz$lifecycle_viewmodel_release()Ljava/lang/Class; PLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getClazz$lifecycle_viewmodel_release()Ljava/lang/Class; HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getInitializer$lifecycle_viewmodel_release()Lkotlin/jvm/functions/Function1; PLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getInitializer$lifecycle_viewmodel_release()Lkotlin/jvm/functions/Function1; Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner; HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->()V PLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->()V HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->provides(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/compose/runtime/ProvidedValue; PLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->provides(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/compose/runtime/ProvidedValue; Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1; HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->()V PLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->()V HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->()V PLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->()V Landroidx/paging/ConflatedEventBus; HSPLandroidx/paging/ConflatedEventBus;->()V PLandroidx/paging/ConflatedEventBus;->()V HSPLandroidx/paging/ConflatedEventBus;->(Landroidx/compose/ui/node/InnerNodeCoordinator;)V PLandroidx/paging/ConflatedEventBus;->(Landroidx/compose/ui/node/InnerNodeCoordinator;)V HSPLandroidx/paging/ConflatedEventBus;->(Ljava/lang/Object;)V PLandroidx/paging/ConflatedEventBus;->(Ljava/lang/Object;)V HSPLandroidx/paging/ConflatedEventBus;->(Ljava/lang/Object;Ljava/lang/Object;)V HPLandroidx/paging/ConflatedEventBus;->(Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/paging/ConflatedEventBus;->access$getLookaheadSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet; PLandroidx/paging/ConflatedEventBus;->access$getLookaheadSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet; HSPLandroidx/paging/ConflatedEventBus;->access$getSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet; PLandroidx/paging/ConflatedEventBus;->access$getSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet; HSPLandroidx/paging/ConflatedEventBus;->add(ILjava/lang/Object;)V HPLandroidx/paging/ConflatedEventBus;->add(ILjava/lang/Object;)V HSPLandroidx/paging/ConflatedEventBus;->add(Landroidx/compose/ui/node/LayoutNode;Z)V HPLandroidx/paging/ConflatedEventBus;->add(Landroidx/compose/ui/node/LayoutNode;Z)V HSPLandroidx/paging/ConflatedEventBus;->addHitPath-KNwqfcY(JLandroidx/compose/ui/node/HitTestResult;)V HPLandroidx/paging/ConflatedEventBus;->addHitPath-KNwqfcY(JLandroidx/compose/ui/node/HitTestResult;)V HSPLandroidx/paging/ConflatedEventBus;->asList()Ljava/util/List; PLandroidx/paging/ConflatedEventBus;->asList()Ljava/util/List; HSPLandroidx/paging/ConflatedEventBus;->clear()V HPLandroidx/paging/ConflatedEventBus;->clear()V HSPLandroidx/paging/ConflatedEventBus;->contains(Landroidx/work/impl/model/WorkGenerationalId;)Z PLandroidx/paging/ConflatedEventBus;->contains(Landroidx/work/impl/model/WorkGenerationalId;)Z HSPLandroidx/paging/ConflatedEventBus;->dispatchChanges(Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HPLandroidx/paging/ConflatedEventBus;->dispatchChanges(Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z HSPLandroidx/paging/ConflatedEventBus;->get(I)Ljava/lang/Object; HPLandroidx/paging/ConflatedEventBus;->get(I)Ljava/lang/Object; HSPLandroidx/paging/ConflatedEventBus;->getSize()I HPLandroidx/paging/ConflatedEventBus;->getSize()I HSPLandroidx/paging/ConflatedEventBus;->getVector()Landroidx/compose/runtime/collection/MutableVector; PLandroidx/paging/ConflatedEventBus;->getVector()Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/paging/ConflatedEventBus;->isEmpty()Z HPLandroidx/paging/ConflatedEventBus;->isEmpty()Z HSPLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;)V PLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;Z)Z PLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;Z)Z HSPLandroidx/paging/ConflatedEventBus;->removeAt(I)Ljava/lang/Object; HPLandroidx/paging/ConflatedEventBus;->removeAt(I)Ljava/lang/Object; HSPLandroidx/paging/ConflatedEventBus;->removeDetachedPointerInputFilters()V PLandroidx/paging/ConflatedEventBus;->removeDetachedPointerInputFilters()V Landroidx/preference/PreferenceManager; HSPLandroidx/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences; PLandroidx/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences; HSPLandroidx/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String; PLandroidx/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String; Landroidx/profileinstaller/ProfileInstallReceiver; HSPLandroidx/profileinstaller/ProfileInstallReceiver;->()V PLandroidx/profileinstaller/ProfileInstallReceiver;->()V HSPLandroidx/profileinstaller/ProfileInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V HPLandroidx/profileinstaller/ProfileInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V Landroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics; HSPLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->(Landroidx/profileinstaller/ProfileInstallReceiver;)V PLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->(Landroidx/profileinstaller/ProfileInstallReceiver;)V HSPLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->onResultReceived(ILjava/lang/Object;)V PLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->onResultReceived(ILjava/lang/Object;)V Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0; HSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;->(IILjava/lang/Object;Ljava/io/Serializable;)V PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;->(IILjava/lang/Object;Ljava/io/Serializable;)V HSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;->run()V PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;->run()V Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1; HSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;->(I)V PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;->(I)V HSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V PLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V Landroidx/profileinstaller/ProfileInstaller$1; HSPLandroidx/profileinstaller/ProfileInstaller$1;->(I)V PLandroidx/profileinstaller/ProfileInstaller$1;->(I)V HSPLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback; Landroidx/profileinstaller/ProfileInstallerInitializer; HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$QGpANLTF0YGY0pXfe2eje4OKwkc(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V PLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$QGpANLTF0YGY0pXfe2eje4OKwkc(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->()V PLandroidx/profileinstaller/ProfileInstallerInitializer;->()V HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; PLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List; PLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List; Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0; HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->(Landroid/content/Context;I)V PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->(Landroid/content/Context;I)V PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl; HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V PLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0; HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V PLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V PLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl; HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; PLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; PLandroidx/profileinstaller/ProfileVerifier;->()V PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus; PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V PLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;->(I)V Landroidx/profileinstaller/ProfileVersion; HSPLandroidx/profileinstaller/ProfileVersion;->()V PLandroidx/profileinstaller/ProfileVersion;->()V HSPLandroidx/profileinstaller/ProfileVersion;->noteProfileWrittenFor(Landroid/content/pm/PackageInfo;Ljava/io/File;)V PLandroidx/profileinstaller/ProfileVersion;->noteProfileWrittenFor(Landroid/content/pm/PackageInfo;Ljava/io/File;)V PLandroidx/profileinstaller/ProfileVersion;->writeProfile(Landroid/content/Context;)V PLandroidx/profileinstaller/ProfileVersion;->writeProfile(Landroid/content/Context;Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V Landroidx/recyclerview/widget/ListUpdateCallback; Landroidx/room/AutoCloser$Companion; HSPLandroidx/room/AutoCloser$Companion;->(I)V PLandroidx/room/AutoCloser$Companion;->(I)V HSPLandroidx/room/AutoCloser$Companion;->(II)V PLandroidx/room/AutoCloser$Companion;->(II)V HSPLandroidx/room/AutoCloser$Companion;->bitsNeedForSize(I)I HPLandroidx/room/AutoCloser$Companion;->bitsNeedForSize(I)I HSPLandroidx/room/AutoCloser$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J HPLandroidx/room/AutoCloser$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J HSPLandroidx/room/AutoCloser$Companion;->fixed-JhjzzOo(II)J HPLandroidx/room/AutoCloser$Companion;->fixed-JhjzzOo(II)J Landroidx/room/AutoClosingRoomOpenHelper; Landroidx/room/DatabaseConfiguration; HSPLandroidx/room/DatabaseConfiguration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/ArrayList;ZLandroidx/room/RoomDatabase$JournalMode;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;ZZLjava/util/LinkedHashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;)V PLandroidx/room/DatabaseConfiguration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/ArrayList;ZLandroidx/room/RoomDatabase$JournalMode;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;ZZLjava/util/LinkedHashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;)V Landroidx/room/DelegatingOpenHelper; Landroidx/room/EntityInsertionAdapter; HSPLandroidx/room/EntityInsertionAdapter;->(Landroidx/room/RoomDatabase;I)V PLandroidx/room/EntityInsertionAdapter;->(Landroidx/room/RoomDatabase;I)V HSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V PLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V Landroidx/room/InvalidationLiveDataContainer; HSPLandroidx/room/InvalidationLiveDataContainer;->(Landroidx/room/RoomDatabase;)V PLandroidx/room/InvalidationLiveDataContainer;->(Landroidx/room/RoomDatabase;)V Landroidx/room/InvalidationTracker; HSPLandroidx/room/InvalidationTracker;->()V PLandroidx/room/InvalidationTracker;->()V HSPLandroidx/room/InvalidationTracker;->(Landroidx/room/RoomDatabase;Ljava/util/HashMap;Ljava/util/HashMap;[Ljava/lang/String;)V PLandroidx/room/InvalidationTracker;->(Landroidx/room/RoomDatabase;Ljava/util/HashMap;Ljava/util/HashMap;[Ljava/lang/String;)V HSPLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z PLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z HSPLandroidx/room/InvalidationTracker;->getDatabase$room_runtime_release()Landroidx/room/RoomDatabase; PLandroidx/room/InvalidationTracker;->getDatabase$room_runtime_release()Landroidx/room/RoomDatabase; HSPLandroidx/room/InvalidationTracker;->getPendingRefresh()Ljava/util/concurrent/atomic/AtomicBoolean; PLandroidx/room/InvalidationTracker;->getPendingRefresh()Ljava/util/concurrent/atomic/AtomicBoolean; HSPLandroidx/room/InvalidationTracker;->internalInit$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/InvalidationTracker;->internalInit$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/room/InvalidationTracker;->refreshVersionsAsync()V PLandroidx/room/InvalidationTracker;->refreshVersionsAsync()V HSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V Landroidx/room/InvalidationTracker$ObservedTableTracker; HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->(I)V PLandroidx/room/InvalidationTracker$ObservedTableTracker;->(I)V HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I PLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I Landroidx/room/InvalidationTracker$refreshRunnable$1; HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->(Landroidx/room/InvalidationTracker;)V PLandroidx/room/InvalidationTracker$refreshRunnable$1;->(Landroidx/room/InvalidationTracker;)V HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Ljava/util/Set; PLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Ljava/util/Set; HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V PLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V Landroidx/room/RoomDatabase; HSPLandroidx/room/RoomDatabase;->()V PLandroidx/room/RoomDatabase;->()V HSPLandroidx/room/RoomDatabase;->assertNotMainThread()V PLandroidx/room/RoomDatabase;->assertNotMainThread()V HSPLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V PLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V HSPLandroidx/room/RoomDatabase;->beginTransaction()V PLandroidx/room/RoomDatabase;->beginTransaction()V HSPLandroidx/room/RoomDatabase;->endTransaction()V PLandroidx/room/RoomDatabase;->endTransaction()V HSPLandroidx/room/RoomDatabase;->getCloseLock$room_runtime_release()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock; PLandroidx/room/RoomDatabase;->getCloseLock$room_runtime_release()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock; HSPLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper; PLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper; HSPLandroidx/room/RoomDatabase;->getQueryExecutor()Ljava/util/concurrent/Executor; PLandroidx/room/RoomDatabase;->getQueryExecutor()Ljava/util/concurrent/Executor; HSPLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V PLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V HSPLandroidx/room/RoomDatabase;->internalBeginTransaction()V PLandroidx/room/RoomDatabase;->internalBeginTransaction()V HSPLandroidx/room/RoomDatabase;->internalEndTransaction()V PLandroidx/room/RoomDatabase;->internalEndTransaction()V HSPLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/room/RoomDatabase;->isOpen()Z PLandroidx/room/RoomDatabase;->isOpen()Z HSPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; PLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; HSPLandroidx/room/RoomDatabase;->runInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object; PLandroidx/room/RoomDatabase;->runInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object; HSPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V PLandroidx/room/RoomDatabase;->setTransactionSuccessful()V HSPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object; PLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object; Landroidx/room/RoomDatabase$Builder; HSPLandroidx/room/RoomDatabase$Builder;->(Landroid/content/Context;Ljava/lang/String;)V PLandroidx/room/RoomDatabase$Builder;->(Landroid/content/Context;Ljava/lang/String;)V HSPLandroidx/room/RoomDatabase$Builder;->addCallback()V PLandroidx/room/RoomDatabase$Builder;->addCallback()V HSPLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)V PLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)V HSPLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase; PLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase; HSPLandroidx/room/RoomDatabase$Builder;->fallbackToDestructiveMigration()V PLandroidx/room/RoomDatabase$Builder;->fallbackToDestructiveMigration()V HSPLandroidx/room/RoomDatabase$Builder;->openHelperFactory(Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;)V PLandroidx/room/RoomDatabase$Builder;->openHelperFactory(Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;)V HSPLandroidx/room/RoomDatabase$Builder;->setQueryExecutor(Landroidx/work/impl/utils/SerialExecutorImpl;)V PLandroidx/room/RoomDatabase$Builder;->setQueryExecutor(Landroidx/work/impl/utils/SerialExecutorImpl;)V Landroidx/room/RoomDatabase$Callback; HSPLandroidx/room/RoomDatabase$Callback;->()V PLandroidx/room/RoomDatabase$Callback;->()V Landroidx/room/RoomDatabase$JournalMode; HSPLandroidx/room/RoomDatabase$JournalMode;->()V PLandroidx/room/RoomDatabase$JournalMode;->()V HSPLandroidx/room/RoomDatabase$JournalMode;->(Ljava/lang/String;I)V PLandroidx/room/RoomDatabase$JournalMode;->(Ljava/lang/String;I)V Landroidx/room/RoomDatabase$MigrationContainer; HSPLandroidx/room/RoomDatabase$MigrationContainer;->()V PLandroidx/room/RoomDatabase$MigrationContainer;->()V HSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V PLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V HSPLandroidx/room/RoomDatabase$MigrationContainer;->contains(II)Z PLandroidx/room/RoomDatabase$MigrationContainer;->contains(II)Z Landroidx/room/RoomOpenHelper; HSPLandroidx/room/RoomOpenHelper;->(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;)V PLandroidx/room/RoomOpenHelper;->(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;)V HSPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V Landroidx/room/RoomOpenHelper$Delegate; HSPLandroidx/room/RoomOpenHelper$Delegate;->()V PLandroidx/room/RoomOpenHelper$Delegate;->()V Landroidx/room/RoomSQLiteQuery; HSPLandroidx/room/RoomSQLiteQuery;->()V PLandroidx/room/RoomSQLiteQuery;->()V HSPLandroidx/room/RoomSQLiteQuery;->(I)V PLandroidx/room/RoomSQLiteQuery;->(I)V HSPLandroidx/room/RoomSQLiteQuery;->acquire(ILjava/lang/String;)Landroidx/room/RoomSQLiteQuery; PLandroidx/room/RoomSQLiteQuery;->acquire(ILjava/lang/String;)Landroidx/room/RoomSQLiteQuery; HSPLandroidx/room/RoomSQLiteQuery;->bindLong(IJ)V PLandroidx/room/RoomSQLiteQuery;->bindLong(IJ)V HSPLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V PLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V HSPLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V PLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V HSPLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String; PLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String; HSPLandroidx/room/RoomSQLiteQuery;->init(ILjava/lang/String;)V PLandroidx/room/RoomSQLiteQuery;->init(ILjava/lang/String;)V HSPLandroidx/room/RoomSQLiteQuery;->release()V PLandroidx/room/RoomSQLiteQuery;->release()V Landroidx/room/SQLiteCopyOpenHelper; Landroidx/room/SharedSQLiteStatement; HSPLandroidx/room/SharedSQLiteStatement;->(Landroidx/room/RoomDatabase;)V PLandroidx/room/SharedSQLiteStatement;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/room/SharedSQLiteStatement;->access$createNewStatement(Landroidx/room/SharedSQLiteStatement;)Landroidx/sqlite/db/SupportSQLiteStatement; PLandroidx/room/SharedSQLiteStatement;->access$createNewStatement(Landroidx/room/SharedSQLiteStatement;)Landroidx/sqlite/db/SupportSQLiteStatement; HSPLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement; PLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement; HSPLandroidx/room/SharedSQLiteStatement;->createNewStatement()Landroidx/sqlite/db/SupportSQLiteStatement; PLandroidx/room/SharedSQLiteStatement;->createNewStatement()Landroidx/sqlite/db/SupportSQLiteStatement; HSPLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V PLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V Landroidx/room/SharedSQLiteStatement$stmt$2; HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->(Landroidx/room/SharedSQLiteStatement;)V PLandroidx/room/SharedSQLiteStatement$stmt$2;->(Landroidx/room/SharedSQLiteStatement;)V HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object; PLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object; Landroidx/room/TransactionExecutor; HSPLandroidx/room/TransactionExecutor;->(Ljava/util/concurrent/Executor;)V PLandroidx/room/TransactionExecutor;->(Ljava/util/concurrent/Executor;)V Landroidx/room/migration/Migration; HSPLandroidx/room/migration/Migration;->(II)V PLandroidx/room/migration/Migration;->(II)V Landroidx/savedstate/Recreator; HSPLandroidx/savedstate/Recreator;->(Landroidx/savedstate/SavedStateRegistryOwner;)V PLandroidx/savedstate/Recreator;->(Landroidx/savedstate/SavedStateRegistryOwner;)V HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/savedstate/SavedStateRegistry; HSPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/savedstate/SavedStateRegistry;->()V PLandroidx/savedstate/SavedStateRegistry;->()V HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle; HPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle; HSPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider()Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; PLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider()Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V PLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V HSPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V PLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V HSPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V HPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V HPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V PLandroidx/savedstate/SavedStateRegistry;->unregisterSavedStateProvider(Ljava/lang/String;)V Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0; HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->(Landroidx/savedstate/SavedStateRegistry;)V PLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->(Landroidx/savedstate/SavedStateRegistry;)V HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; Landroidx/savedstate/SavedStateRegistryController; HSPLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;)V PLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;)V HSPLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; PLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V PLandroidx/savedstate/SavedStateRegistryController;->performAttach()V HSPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V PLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V HSPLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V HPLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V Landroidx/savedstate/SavedStateRegistryOwner; Landroidx/savedstate/ViewTreeSavedStateRegistryOwner; HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; PLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V PLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1; HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V PLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->(I)V PLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->(I)V HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Landroidx/sqlite/db/SimpleSQLiteQuery; HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;)V PLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;)V HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;[Ljava/lang/Object;)V PLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;[Ljava/lang/Object;)V HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V PLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String; PLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String; Landroidx/sqlite/db/SupportSQLiteDatabase; Landroidx/sqlite/db/SupportSQLiteOpenHelper; Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->()V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->()V HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->(I)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->(I)V HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion; HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;->()V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;->()V Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->(Landroid/content/Context;)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->(Landroid/content/Context;)V HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->allowDataLossOnRecovery()V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->allowDataLossOnRecovery()V HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->build()Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->build()Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->callback(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->callback(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->name(Ljava/lang/String;)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->name(Ljava/lang/String;)V HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->noBackupDirectory(Z)V PLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->noBackupDirectory(Z)V Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory; Landroidx/sqlite/db/SupportSQLiteProgram; Landroidx/sqlite/db/SupportSQLiteQuery; Landroidx/sqlite/db/SupportSQLiteStatement; Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->()V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->()V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->(Landroid/database/sqlite/SQLiteDatabase;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->(Landroid/database/sqlite/SQLiteDatabase;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isDelegate(Landroid/database/sqlite/SQLiteDatabase;)Z PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isDelegate(Landroid/database/sqlite/SQLiteDatabase;)Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->(Landroidx/sqlite/db/SupportSQLiteQuery;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->(Landroidx/sqlite/db/SupportSQLiteQuery;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getAllowDataLossOnRecovery$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getAllowDataLossOnRecovery$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getCallback$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getCallback$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getContext$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroid/content/Context; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getContext$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroid/content/Context; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getName$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Ljava/lang/String; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getName$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Ljava/lang/String; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getUseNoBackupDirectory$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getUseNoBackupDirectory$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getWriteAheadLoggingEnabled$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getWriteAheadLoggingEnabled$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->()V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->()V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->getDb()Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->getDb()Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->setDb(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->setDb(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$CallbackException; Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object; PLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object; Landroidx/sqlite/db/framework/FrameworkSQLiteProgram; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->(Landroid/database/sqlite/SQLiteProgram;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->(Landroid/database/sqlite/SQLiteProgram;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V PLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(IJ)V PLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(IJ)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindNull(I)V PLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindNull(I)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V Landroidx/sqlite/db/framework/FrameworkSQLiteStatement; HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->(Landroid/database/sqlite/SQLiteStatement;)V PLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->(Landroid/database/sqlite/SQLiteStatement;)V HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J PLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I PLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I Landroidx/sqlite/util/ProcessLock; HSPLandroidx/sqlite/util/ProcessLock;->()V PLandroidx/sqlite/util/ProcessLock;->()V HSPLandroidx/sqlite/util/ProcessLock;->(Ljava/lang/String;Ljava/io/File;Z)V PLandroidx/sqlite/util/ProcessLock;->(Ljava/lang/String;Ljava/io/File;Z)V HSPLandroidx/sqlite/util/ProcessLock;->lock(Z)V PLandroidx/sqlite/util/ProcessLock;->lock(Z)V HSPLandroidx/sqlite/util/ProcessLock;->unlock()V PLandroidx/sqlite/util/ProcessLock;->unlock()V Landroidx/startup/AppInitializer; HSPLandroidx/startup/AppInitializer;->()V PLandroidx/startup/AppInitializer;->()V HSPLandroidx/startup/AppInitializer;->(Landroid/content/Context;)V PLandroidx/startup/AppInitializer;->(Landroid/content/Context;)V HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V PLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object; PLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object; HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer; PLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer; HSPLandroidx/startup/AppInitializer;->initializeComponent()Ljava/lang/Object; PLandroidx/startup/AppInitializer;->initializeComponent()Ljava/lang/Object; HSPLandroidx/startup/AppInitializer;->isEagerlyInitialized()Z PLandroidx/startup/AppInitializer;->isEagerlyInitialized()Z Landroidx/startup/InitializationProvider; HSPLandroidx/startup/InitializationProvider;->()V PLandroidx/startup/InitializationProvider;->()V HSPLandroidx/startup/InitializationProvider;->onCreate()Z PLandroidx/startup/InitializationProvider;->onCreate()Z Landroidx/startup/Initializer; Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0; HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)V PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)V HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLParameters;[Ljava/lang/String;)V PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLParameters;[Ljava/lang/String;)V HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)V PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)V HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Z PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Z Landroidx/vectordrawable/graphics/drawable/VectorDrawableCommon; Landroidx/vectordrawable/graphics/drawable/VectorDrawableCompat; Landroidx/work/BackoffPolicy; HSPLandroidx/work/BackoffPolicy;->()V PLandroidx/work/BackoffPolicy;->()V HSPLandroidx/work/BackoffPolicy;->(Ljava/lang/String;I)V PLandroidx/work/BackoffPolicy;->(Ljava/lang/String;I)V Landroidx/work/Configuration; HSPLandroidx/work/Configuration;->(Lorg/acra/log/AndroidLogDelegate;)V PLandroidx/work/Configuration;->(Lorg/acra/log/AndroidLogDelegate;)V HSPLandroidx/work/Configuration;->createDefaultExecutor(Z)Ljava/util/concurrent/ExecutorService; PLandroidx/work/Configuration;->createDefaultExecutor(Z)Ljava/util/concurrent/ExecutorService; HSPLandroidx/work/Configuration;->getMaxJobSchedulerId()I PLandroidx/work/Configuration;->getMaxJobSchedulerId()I HSPLandroidx/work/Configuration;->getMaxSchedulerLimit()I PLandroidx/work/Configuration;->getMaxSchedulerLimit()I HSPLandroidx/work/Configuration;->getMinimumLoggingLevel()I PLandroidx/work/Configuration;->getMinimumLoggingLevel()I HSPLandroidx/work/Configuration;->getRunnableScheduler()Landroidx/compose/runtime/Stack; PLandroidx/work/Configuration;->getRunnableScheduler()Landroidx/compose/runtime/Stack; HSPLandroidx/work/Configuration;->getTaskExecutor()Ljava/util/concurrent/ExecutorService; PLandroidx/work/Configuration;->getTaskExecutor()Ljava/util/concurrent/ExecutorService; Landroidx/work/Configuration$1; HSPLandroidx/work/Configuration$1;->(Z)V PLandroidx/work/Configuration$1;->(Z)V HSPLandroidx/work/Configuration$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; PLandroidx/work/Configuration$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; Landroidx/work/Constraints; HSPLandroidx/work/Constraints;->()V PLandroidx/work/Constraints;->()V HSPLandroidx/work/Constraints;->(Landroidx/work/Constraints;)V PLandroidx/work/Constraints;->(Landroidx/work/Constraints;)V HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZI)V PLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZI)V HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;)V PLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;)V HSPLandroidx/work/Constraints;->getContentTriggerMaxDelayMillis()J PLandroidx/work/Constraints;->getContentTriggerMaxDelayMillis()J HSPLandroidx/work/Constraints;->getContentTriggerUpdateDelayMillis()J PLandroidx/work/Constraints;->getContentTriggerUpdateDelayMillis()J HSPLandroidx/work/Constraints;->getContentUriTriggers()Ljava/util/Set; PLandroidx/work/Constraints;->getContentUriTriggers()Ljava/util/Set; HSPLandroidx/work/Constraints;->getRequiredNetworkType()Landroidx/work/NetworkType; PLandroidx/work/Constraints;->getRequiredNetworkType()Landroidx/work/NetworkType; HSPLandroidx/work/Constraints;->hasContentUriTriggers()Z PLandroidx/work/Constraints;->hasContentUriTriggers()Z HSPLandroidx/work/Constraints;->requiresBatteryNotLow()Z PLandroidx/work/Constraints;->requiresBatteryNotLow()Z HSPLandroidx/work/Constraints;->requiresCharging()Z PLandroidx/work/Constraints;->requiresCharging()Z HSPLandroidx/work/Constraints;->requiresDeviceIdle()Z PLandroidx/work/Constraints;->requiresDeviceIdle()Z HSPLandroidx/work/Constraints;->requiresStorageNotLow()Z PLandroidx/work/Constraints;->requiresStorageNotLow()Z Landroidx/work/CoroutineWorker; Landroidx/work/CoroutineWorker$$ExternalSyntheticLambda0; HSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V PLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V HSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->run()V PLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->run()V Landroidx/work/Data; HSPLandroidx/work/Data;->()V PLandroidx/work/Data;->()V HSPLandroidx/work/Data;->(Landroidx/work/Data;)V PLandroidx/work/Data;->(Landroidx/work/Data;)V HSPLandroidx/work/Data;->(Ljava/util/HashMap;)V PLandroidx/work/Data;->(Ljava/util/HashMap;)V HSPLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data; PLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data; HSPLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B PLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B Landroidx/work/Data$Builder; HSPLandroidx/work/Data$Builder;->()V PLandroidx/work/Data$Builder;->()V HSPLandroidx/work/Data$Builder;->build()Landroidx/work/Data; PLandroidx/work/Data$Builder;->build()Landroidx/work/Data; HSPLandroidx/work/Data$Builder;->put(Ljava/lang/Object;Ljava/lang/String;)V PLandroidx/work/Data$Builder;->put(Ljava/lang/Object;Ljava/lang/String;)V Landroidx/work/InputMergerFactory$1; HSPLandroidx/work/InputMergerFactory$1;->()V PLandroidx/work/InputMergerFactory$1;->()V Landroidx/work/ListenableWorker; Landroidx/work/Logger$LogcatLogger; HSPLandroidx/work/Logger$LogcatLogger;->()V PLandroidx/work/Logger$LogcatLogger;->()V HSPLandroidx/work/Logger$LogcatLogger;->(I)V PLandroidx/work/Logger$LogcatLogger;->(I)V HSPLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;)V PLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/work/Logger$LogcatLogger;->get()Landroidx/work/Logger$LogcatLogger; PLandroidx/work/Logger$LogcatLogger;->get()Landroidx/work/Logger$LogcatLogger; HSPLandroidx/work/Logger$LogcatLogger;->setLogger(Landroidx/work/Logger$LogcatLogger;)V PLandroidx/work/Logger$LogcatLogger;->setLogger(Landroidx/work/Logger$LogcatLogger;)V HSPLandroidx/work/Logger$LogcatLogger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String; PLandroidx/work/Logger$LogcatLogger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String; Landroidx/work/NetworkType; HSPLandroidx/work/NetworkType;->()V PLandroidx/work/NetworkType;->()V HSPLandroidx/work/NetworkType;->(Ljava/lang/String;I)V PLandroidx/work/NetworkType;->(Ljava/lang/String;I)V Landroidx/work/Operation; HSPLandroidx/work/Operation;->()V PLandroidx/work/Operation;->()V Landroidx/work/Operation$State$FAILURE; Landroidx/work/Operation$State$IN_PROGRESS; HSPLandroidx/work/Operation$State$IN_PROGRESS;->()V PLandroidx/work/Operation$State$IN_PROGRESS;->()V Landroidx/work/Operation$State$SUCCESS; HSPLandroidx/work/Operation$State$SUCCESS;->()V PLandroidx/work/Operation$State$SUCCESS;->()V Landroidx/work/OutOfQuotaPolicy; HSPLandroidx/work/OutOfQuotaPolicy;->()V PLandroidx/work/OutOfQuotaPolicy;->()V HSPLandroidx/work/OutOfQuotaPolicy;->(Ljava/lang/String;I)V PLandroidx/work/OutOfQuotaPolicy;->(Ljava/lang/String;I)V Landroidx/work/PeriodicWorkRequest; HSPLandroidx/work/PeriodicWorkRequest;->(Landroidx/work/PeriodicWorkRequest$Builder;)V PLandroidx/work/PeriodicWorkRequest;->(Landroidx/work/PeriodicWorkRequest$Builder;)V Landroidx/work/PeriodicWorkRequest$Builder; HSPLandroidx/work/PeriodicWorkRequest$Builder;->(Ljava/lang/Class;JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;)V PLandroidx/work/PeriodicWorkRequest$Builder;->(Ljava/lang/Class;JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;)V HSPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest; PLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest; HSPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder; PLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder; Landroidx/work/WorkInfo$State; HSPLandroidx/work/WorkInfo$State;->()V PLandroidx/work/WorkInfo$State;->()V HSPLandroidx/work/WorkInfo$State;->(Ljava/lang/String;I)V PLandroidx/work/WorkInfo$State;->(Ljava/lang/String;I)V Landroidx/work/WorkManager; HSPLandroidx/work/WorkManager;->()V PLandroidx/work/WorkManager;->()V Landroidx/work/WorkManagerInitializer; HSPLandroidx/work/WorkManagerInitializer;->()V PLandroidx/work/WorkManagerInitializer;->()V HSPLandroidx/work/WorkManagerInitializer;->()V PLandroidx/work/WorkManagerInitializer;->()V HSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; PLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; HSPLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List; PLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List; Landroidx/work/WorkRequest; HSPLandroidx/work/WorkRequest;->(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/Set;)V PLandroidx/work/WorkRequest;->(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/Set;)V HSPLandroidx/work/WorkRequest;->getStringId()Ljava/lang/String; PLandroidx/work/WorkRequest;->getStringId()Ljava/lang/String; HSPLandroidx/work/WorkRequest;->getTags()Ljava/util/Set; PLandroidx/work/WorkRequest;->getTags()Ljava/util/Set; HSPLandroidx/work/WorkRequest;->getWorkSpec()Landroidx/work/impl/model/WorkSpec; PLandroidx/work/WorkRequest;->getWorkSpec()Landroidx/work/impl/model/WorkSpec; Landroidx/work/WorkRequest$Builder; HSPLandroidx/work/WorkRequest$Builder;->(Ljava/lang/Class;)V PLandroidx/work/WorkRequest$Builder;->(Ljava/lang/Class;)V HSPLandroidx/work/WorkRequest$Builder;->addTag(Ljava/lang/String;)Landroidx/work/WorkRequest$Builder; PLandroidx/work/WorkRequest$Builder;->addTag(Ljava/lang/String;)Landroidx/work/WorkRequest$Builder; HSPLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/WorkRequest; PLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/WorkRequest; HSPLandroidx/work/WorkRequest$Builder;->getBackoffCriteriaSet$work_runtime_release()Z PLandroidx/work/WorkRequest$Builder;->getBackoffCriteriaSet$work_runtime_release()Z HSPLandroidx/work/WorkRequest$Builder;->getId$work_runtime_release()Ljava/util/UUID; PLandroidx/work/WorkRequest$Builder;->getId$work_runtime_release()Ljava/util/UUID; HSPLandroidx/work/WorkRequest$Builder;->getTags$work_runtime_release()Ljava/util/Set; PLandroidx/work/WorkRequest$Builder;->getTags$work_runtime_release()Ljava/util/Set; HSPLandroidx/work/WorkRequest$Builder;->getWorkSpec$work_runtime_release()Landroidx/work/impl/model/WorkSpec; PLandroidx/work/WorkRequest$Builder;->getWorkSpec$work_runtime_release()Landroidx/work/impl/model/WorkSpec; HSPLandroidx/work/WorkRequest$Builder;->setBackoffCriteria(Lj$/time/Duration;)Landroidx/work/WorkRequest$Builder; PLandroidx/work/WorkRequest$Builder;->setBackoffCriteria(Lj$/time/Duration;)Landroidx/work/WorkRequest$Builder; HSPLandroidx/work/WorkRequest$Builder;->setInputData(Landroidx/work/Data;)Landroidx/work/WorkRequest$Builder; PLandroidx/work/WorkRequest$Builder;->setInputData(Landroidx/work/Data;)Landroidx/work/WorkRequest$Builder; Landroidx/work/WorkerFactory; HSPLandroidx/work/WorkerFactory;->()V PLandroidx/work/WorkerFactory;->()V HSPLandroidx/work/WorkerFactory;->()V PLandroidx/work/WorkerFactory;->()V Landroidx/work/WorkerFactory$1; HSPLandroidx/work/WorkerFactory$1;->()V PLandroidx/work/WorkerFactory$1;->()V Landroidx/work/impl/CleanupCallback; HSPLandroidx/work/impl/CleanupCallback;->()V PLandroidx/work/impl/CleanupCallback;->()V HSPLandroidx/work/impl/CleanupCallback;->()V PLandroidx/work/impl/CleanupCallback;->()V Landroidx/work/impl/ExecutionListener; Landroidx/work/impl/Migration_11_12; HSPLandroidx/work/impl/Migration_11_12;->()V PLandroidx/work/impl/Migration_11_12;->()V HSPLandroidx/work/impl/Migration_11_12;->()V PLandroidx/work/impl/Migration_11_12;->()V Landroidx/work/impl/Migration_12_13; HSPLandroidx/work/impl/Migration_12_13;->()V PLandroidx/work/impl/Migration_12_13;->()V HSPLandroidx/work/impl/Migration_12_13;->()V PLandroidx/work/impl/Migration_12_13;->()V Landroidx/work/impl/Migration_15_16; HSPLandroidx/work/impl/Migration_15_16;->()V PLandroidx/work/impl/Migration_15_16;->()V HSPLandroidx/work/impl/Migration_15_16;->()V PLandroidx/work/impl/Migration_15_16;->()V Landroidx/work/impl/Migration_1_2; HSPLandroidx/work/impl/Migration_1_2;->()V PLandroidx/work/impl/Migration_1_2;->()V HSPLandroidx/work/impl/Migration_1_2;->()V PLandroidx/work/impl/Migration_1_2;->()V Landroidx/work/impl/Migration_3_4; HSPLandroidx/work/impl/Migration_3_4;->()V PLandroidx/work/impl/Migration_3_4;->()V HSPLandroidx/work/impl/Migration_3_4;->()V PLandroidx/work/impl/Migration_3_4;->()V Landroidx/work/impl/Migration_4_5; HSPLandroidx/work/impl/Migration_4_5;->()V PLandroidx/work/impl/Migration_4_5;->()V HSPLandroidx/work/impl/Migration_4_5;->()V PLandroidx/work/impl/Migration_4_5;->()V Landroidx/work/impl/Migration_6_7; HSPLandroidx/work/impl/Migration_6_7;->()V PLandroidx/work/impl/Migration_6_7;->()V HSPLandroidx/work/impl/Migration_6_7;->()V PLandroidx/work/impl/Migration_6_7;->()V Landroidx/work/impl/Migration_7_8; HSPLandroidx/work/impl/Migration_7_8;->()V PLandroidx/work/impl/Migration_7_8;->()V HSPLandroidx/work/impl/Migration_7_8;->()V PLandroidx/work/impl/Migration_7_8;->()V Landroidx/work/impl/Migration_8_9; HSPLandroidx/work/impl/Migration_8_9;->()V PLandroidx/work/impl/Migration_8_9;->()V HSPLandroidx/work/impl/Migration_8_9;->()V PLandroidx/work/impl/Migration_8_9;->()V Landroidx/work/impl/OperationImpl; HSPLandroidx/work/impl/OperationImpl;->()V PLandroidx/work/impl/OperationImpl;->()V HSPLandroidx/work/impl/OperationImpl;->markState(Landroidx/work/WorkManager;)V PLandroidx/work/impl/OperationImpl;->markState(Landroidx/work/WorkManager;)V Landroidx/work/impl/Processor; HSPLandroidx/work/impl/Processor;->()V PLandroidx/work/impl/Processor;->()V HSPLandroidx/work/impl/Processor;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V PLandroidx/work/impl/Processor;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V HSPLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V PLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V Landroidx/work/impl/Scheduler; Landroidx/work/impl/Schedulers; HSPLandroidx/work/impl/Schedulers;->()V PLandroidx/work/impl/Schedulers;->()V HSPLandroidx/work/impl/Schedulers;->createBestAvailableBackgroundScheduler(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Landroidx/work/impl/background/systemjob/SystemJobScheduler; PLandroidx/work/impl/Schedulers;->createBestAvailableBackgroundScheduler(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Landroidx/work/impl/background/systemjob/SystemJobScheduler; HSPLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V PLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V Landroidx/work/impl/WorkContinuationImpl; HSPLandroidx/work/impl/WorkContinuationImpl;->()V PLandroidx/work/impl/WorkContinuationImpl;->()V HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;)V PLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;)V HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;I)V PLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;I)V HSPLandroidx/work/impl/WorkContinuationImpl;->getExistingWorkPolicy$enumunboxing$()I PLandroidx/work/impl/WorkContinuationImpl;->getExistingWorkPolicy$enumunboxing$()I HSPLandroidx/work/impl/WorkContinuationImpl;->getName()Ljava/lang/String; PLandroidx/work/impl/WorkContinuationImpl;->getName()Ljava/lang/String; HSPLandroidx/work/impl/WorkContinuationImpl;->getWork()Ljava/util/List; PLandroidx/work/impl/WorkContinuationImpl;->getWork()Ljava/util/List; HSPLandroidx/work/impl/WorkContinuationImpl;->getWorkManagerImpl()Landroidx/work/impl/WorkManagerImpl; PLandroidx/work/impl/WorkContinuationImpl;->getWorkManagerImpl()Landroidx/work/impl/WorkManagerImpl; HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles()Z PLandroidx/work/impl/WorkContinuationImpl;->hasCycles()Z HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/HashSet;)Z PLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/HashSet;)Z HSPLandroidx/work/impl/WorkContinuationImpl;->markEnqueued()V PLandroidx/work/impl/WorkContinuationImpl;->markEnqueued()V HSPLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/HashSet; PLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/HashSet; Landroidx/work/impl/WorkDatabase; HSPLandroidx/work/impl/WorkDatabase;->()V PLandroidx/work/impl/WorkDatabase;->()V Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0; HSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V PLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V HSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; PLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; Landroidx/work/impl/WorkDatabaseKt; HSPLandroidx/work/impl/WorkDatabaseKt;->()V PLandroidx/work/impl/WorkDatabaseKt;->()V HSPLandroidx/work/impl/WorkDatabaseKt;->access$getPRUNE_THRESHOLD_MILLIS$p()J PLandroidx/work/impl/WorkDatabaseKt;->access$getPRUNE_THRESHOLD_MILLIS$p()J Landroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl; HSPLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;->()V PLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;->()V Landroidx/work/impl/WorkDatabase_Impl; HSPLandroidx/work/impl/WorkDatabase_Impl;->()V PLandroidx/work/impl/WorkDatabase_Impl;->()V HSPLandroidx/work/impl/WorkDatabase_Impl;->access$1000(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->access$1000(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->access$300(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->access$300(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->access$400(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->access$400(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->access$500(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->access$500(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->access$602(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/work/impl/WorkDatabase_Impl;->access$602(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/work/impl/WorkDatabase_Impl;->access$700(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/work/impl/WorkDatabase_Impl;->access$700(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/work/impl/WorkDatabase_Impl;->access$800(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->access$800(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->access$900(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->access$900(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; PLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; HSPLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; PLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; HSPLandroidx/work/impl/WorkDatabase_Impl;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List; PLandroidx/work/impl/WorkDatabase_Impl;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List; HSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; PLandroidx/work/impl/WorkDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; HSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; PLandroidx/work/impl/WorkDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; HSPLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao_Impl; PLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao_Impl; HSPLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao_Impl; PLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao_Impl; HSPLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao_Impl; PLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao_Impl; HSPLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao_Impl; PLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao_Impl; HSPLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao_Impl; PLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao_Impl; HSPLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao_Impl; PLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao_Impl; Landroidx/work/impl/WorkDatabase_Impl$1; HSPLandroidx/work/impl/WorkDatabase_Impl$1;->(Landroidx/work/impl/WorkDatabase_Impl;)V PLandroidx/work/impl/WorkDatabase_Impl$1;->(Landroidx/work/impl/WorkDatabase_Impl;)V HSPLandroidx/work/impl/WorkDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/work/impl/WorkDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/work/impl/WorkDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V Landroidx/work/impl/WorkManagerImpl; HSPLandroidx/work/impl/WorkManagerImpl;->()V PLandroidx/work/impl/WorkManagerImpl;->()V HSPLandroidx/work/impl/WorkManagerImpl;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V PLandroidx/work/impl/WorkManagerImpl;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V HSPLandroidx/work/impl/WorkManagerImpl;->cancelUniqueWork(Ljava/lang/String;)Landroidx/work/impl/OperationImpl; PLandroidx/work/impl/WorkManagerImpl;->cancelUniqueWork(Ljava/lang/String;)Landroidx/work/impl/OperationImpl; HSPLandroidx/work/impl/WorkManagerImpl;->enqueueUniquePeriodicWork(Ljava/lang/String;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/Operation; PLandroidx/work/impl/WorkManagerImpl;->enqueueUniquePeriodicWork(Ljava/lang/String;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/Operation; HSPLandroidx/work/impl/WorkManagerImpl;->getApplicationContext()Landroid/content/Context; PLandroidx/work/impl/WorkManagerImpl;->getApplicationContext()Landroid/content/Context; HSPLandroidx/work/impl/WorkManagerImpl;->getConfiguration()Landroidx/work/Configuration; PLandroidx/work/impl/WorkManagerImpl;->getConfiguration()Landroidx/work/Configuration; HSPLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; PLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; HSPLandroidx/work/impl/WorkManagerImpl;->getPreferenceUtils()Landroidx/work/impl/utils/IdGenerator; PLandroidx/work/impl/WorkManagerImpl;->getPreferenceUtils()Landroidx/work/impl/utils/IdGenerator; HSPLandroidx/work/impl/WorkManagerImpl;->getProcessor()Landroidx/work/impl/Processor; PLandroidx/work/impl/WorkManagerImpl;->getProcessor()Landroidx/work/impl/Processor; HSPLandroidx/work/impl/WorkManagerImpl;->getSchedulers()Ljava/util/List; PLandroidx/work/impl/WorkManagerImpl;->getSchedulers()Ljava/util/List; HSPLandroidx/work/impl/WorkManagerImpl;->getWorkDatabase()Landroidx/work/impl/WorkDatabase; PLandroidx/work/impl/WorkManagerImpl;->getWorkDatabase()Landroidx/work/impl/WorkDatabase; HSPLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V PLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V HSPLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V PLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V Landroidx/work/impl/WorkManagerImpl$Api24Impl; HSPLandroidx/work/impl/WorkManagerImpl$Api24Impl;->isDeviceProtectedStorage(Landroid/content/Context;)Z PLandroidx/work/impl/WorkManagerImpl$Api24Impl;->isDeviceProtectedStorage(Landroid/content/Context;)Z Landroidx/work/impl/WorkMigration9To10; HSPLandroidx/work/impl/WorkMigration9To10;->()V PLandroidx/work/impl/WorkMigration9To10;->()V HSPLandroidx/work/impl/WorkMigration9To10;->(Landroid/content/Context;)V PLandroidx/work/impl/WorkMigration9To10;->(Landroid/content/Context;)V HSPLandroidx/work/impl/WorkMigration9To10;->(Landroid/content/Context;II)V PLandroidx/work/impl/WorkMigration9To10;->(Landroid/content/Context;II)V Landroidx/work/impl/WorkerUpdater; HSPLandroidx/work/impl/WorkerUpdater;->$r8$lambda$7opHgdrAWKd7YI0k0hRwdd6vZCE(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V PLandroidx/work/impl/WorkerUpdater;->$r8$lambda$7opHgdrAWKd7YI0k0hRwdd6vZCE(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V HSPLandroidx/work/impl/WorkerUpdater;->migrateDatabase(Landroid/content/Context;)V PLandroidx/work/impl/WorkerUpdater;->migrateDatabase(Landroid/content/Context;)V Landroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0; HSPLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V PLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V HSPLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;->run()V PLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;->run()V Landroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1; HSPLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;->(Landroidx/work/WorkRequest;Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;)V PLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;->(Landroidx/work/WorkRequest;Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;)V HSPLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;->invoke()Ljava/lang/Object; PLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;->invoke()Ljava/lang/Object; Landroidx/work/impl/background/greedy/DelayedWorkTracker; HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->()V PLandroidx/work/impl/background/greedy/DelayedWorkTracker;->()V HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->(Landroidx/work/impl/background/greedy/GreedyScheduler;Landroidx/compose/runtime/Stack;)V PLandroidx/work/impl/background/greedy/DelayedWorkTracker;->(Landroidx/work/impl/background/greedy/GreedyScheduler;Landroidx/compose/runtime/Stack;)V HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->schedule(Landroidx/work/impl/model/WorkSpec;)V PLandroidx/work/impl/background/greedy/DelayedWorkTracker;->schedule(Landroidx/work/impl/model/WorkSpec;)V Landroidx/work/impl/background/greedy/DelayedWorkTracker$1; HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;->(Landroidx/work/impl/background/greedy/DelayedWorkTracker;Landroidx/work/impl/model/WorkSpec;)V PLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;->(Landroidx/work/impl/background/greedy/DelayedWorkTracker;Landroidx/work/impl/model/WorkSpec;)V Landroidx/work/impl/background/greedy/GreedyScheduler; HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->()V PLandroidx/work/impl/background/greedy/GreedyScheduler;->()V HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/WorkManagerImpl;)V PLandroidx/work/impl/background/greedy/GreedyScheduler;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/WorkManagerImpl;)V HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z PLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V PLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V Landroidx/work/impl/background/systemalarm/RescheduleReceiver; Landroidx/work/impl/background/systemjob/SystemJobInfoConverter; HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->()V PLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->()V HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->(Landroid/content/Context;)V PLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->(Landroid/content/Context;)V HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convert(Landroidx/work/impl/model/WorkSpec;I)Landroid/app/job/JobInfo; PLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convert(Landroidx/work/impl/model/WorkSpec;I)Landroid/app/job/JobInfo; Landroidx/work/impl/background/systemjob/SystemJobScheduler; HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->()V PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->()V HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/ArrayList; PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/ArrayList; HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->reconcileJobs(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Z PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->reconcileJobs(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Z HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V PLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V Landroidx/work/impl/background/systemjob/SystemJobService; Landroidx/work/impl/constraints/WorkConstraintsCallback; Landroidx/work/impl/constraints/WorkConstraintsTrackerImpl; HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerImpl;->(Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/constraints/WorkConstraintsCallback;)V PLandroidx/work/impl/constraints/WorkConstraintsTrackerImpl;->(Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/constraints/WorkConstraintsCallback;)V Landroidx/work/impl/constraints/controllers/BatteryNotLowController; HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;)V PLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;)V HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;I)V PLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;I)V Landroidx/work/impl/constraints/controllers/ConstraintController; HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V PLandroidx/work/impl/constraints/controllers/ConstraintController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V Landroidx/work/impl/constraints/controllers/NetworkMeteredController; HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->()V PLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->()V HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V PLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V Landroidx/work/impl/constraints/controllers/NetworkNotRoamingController; HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->()V PLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->()V HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V PLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; HSPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;I)V PLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;I)V Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker; HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V PLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1; HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;->(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V PLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;->(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V Landroidx/work/impl/constraints/trackers/ConstraintTracker; HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V PLandroidx/work/impl/constraints/trackers/ConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->getAppContext()Landroid/content/Context; PLandroidx/work/impl/constraints/trackers/ConstraintTracker;->getAppContext()Landroid/content/Context; Landroidx/work/impl/constraints/trackers/NetworkStateTracker24; HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V PLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V Landroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1; HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;->(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)V PLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;->(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)V Landroidx/work/impl/constraints/trackers/NetworkStateTrackerKt; HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->()V PLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->()V Landroidx/work/impl/constraints/trackers/Trackers; HSPLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V PLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V HSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryChargingTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; PLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryChargingTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; HSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryNotLowTracker()Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; PLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryNotLowTracker()Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; HSPLandroidx/work/impl/constraints/trackers/Trackers;->getNetworkStateTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; PLandroidx/work/impl/constraints/trackers/Trackers;->getNetworkStateTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; HSPLandroidx/work/impl/constraints/trackers/Trackers;->getStorageNotLowTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; PLandroidx/work/impl/constraints/trackers/Trackers;->getStorageNotLowTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; Landroidx/work/impl/foreground/ForegroundProcessor; Landroidx/work/impl/model/DependencyDao_Impl; Landroidx/work/impl/model/Preference; HSPLandroidx/work/impl/model/Preference;->(Ljava/lang/Long;Ljava/lang/String;)V PLandroidx/work/impl/model/Preference;->(Ljava/lang/Long;Ljava/lang/String;)V HSPLandroidx/work/impl/model/Preference;->getKey()Ljava/lang/String; PLandroidx/work/impl/model/Preference;->getKey()Ljava/lang/String; HSPLandroidx/work/impl/model/Preference;->getValue()Ljava/lang/Long; PLandroidx/work/impl/model/Preference;->getValue()Ljava/lang/Long; Landroidx/work/impl/model/PreferenceDao_Impl; HSPLandroidx/work/impl/model/PreferenceDao_Impl;->(Landroidx/work/impl/WorkDatabase;)V PLandroidx/work/impl/model/PreferenceDao_Impl;->(Landroidx/work/impl/WorkDatabase;)V HSPLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long; PLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long; HSPLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V PLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V Landroidx/work/impl/model/RawWorkInfoDao_Impl; Landroidx/work/impl/model/SystemIdInfo; HSPLandroidx/work/impl/model/SystemIdInfo;->(Ljava/lang/String;II)V PLandroidx/work/impl/model/SystemIdInfo;->(Ljava/lang/String;II)V HSPLandroidx/work/impl/model/SystemIdInfo;->getGeneration()I PLandroidx/work/impl/model/SystemIdInfo;->getGeneration()I Landroidx/work/impl/model/SystemIdInfoDao_Impl; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->(Landroidx/room/RoomDatabase;)V PLandroidx/work/impl/model/SystemIdInfoDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(ILjava/lang/String;)Landroidx/work/impl/model/SystemIdInfo; PLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(ILjava/lang/String;)Landroidx/work/impl/model/SystemIdInfo; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; PLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getWorkSpecIds()Ljava/util/ArrayList; PLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getWorkSpecIds()Ljava/util/ArrayList; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V PLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V Landroidx/work/impl/model/WorkGenerationalId; HSPLandroidx/work/impl/model/WorkGenerationalId;->(Ljava/lang/String;I)V PLandroidx/work/impl/model/WorkGenerationalId;->(Ljava/lang/String;I)V HSPLandroidx/work/impl/model/WorkGenerationalId;->getGeneration()I PLandroidx/work/impl/model/WorkGenerationalId;->getGeneration()I HSPLandroidx/work/impl/model/WorkGenerationalId;->getWorkSpecId()Ljava/lang/String; PLandroidx/work/impl/model/WorkGenerationalId;->getWorkSpecId()Ljava/lang/String; HSPLandroidx/work/impl/model/WorkGenerationalId;->hashCode()I PLandroidx/work/impl/model/WorkGenerationalId;->hashCode()I Landroidx/work/impl/model/WorkName; HSPLandroidx/work/impl/model/WorkName;->(Ljava/lang/String;Ljava/lang/String;)V PLandroidx/work/impl/model/WorkName;->(Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/work/impl/model/WorkName;->getName()Ljava/lang/String; PLandroidx/work/impl/model/WorkName;->getName()Ljava/lang/String; HSPLandroidx/work/impl/model/WorkName;->getWorkSpecId()Ljava/lang/String; PLandroidx/work/impl/model/WorkName;->getWorkSpecId()Ljava/lang/String; Landroidx/work/impl/model/WorkNameDao_Impl; HSPLandroidx/work/impl/model/WorkNameDao_Impl;->(Landroidx/room/RoomDatabase;)V PLandroidx/work/impl/model/WorkNameDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/WorkNameDao_Impl;->insert(Landroidx/work/impl/model/WorkName;)V PLandroidx/work/impl/model/WorkNameDao_Impl;->insert(Landroidx/work/impl/model/WorkName;)V Landroidx/work/impl/model/WorkProgressDao_Impl; HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->(Landroidx/room/RoomDatabase;)V PLandroidx/work/impl/model/WorkProgressDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V PLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V Landroidx/work/impl/model/WorkProgressDao_Impl$2; HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->(Landroidx/room/RoomDatabase;I)V PLandroidx/work/impl/model/WorkProgressDao_Impl$2;->(Landroidx/room/RoomDatabase;I)V HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String; PLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String; Landroidx/work/impl/model/WorkSpec; HSPLandroidx/work/impl/model/WorkSpec;->()V PLandroidx/work/impl/model/WorkSpec;->()V HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;II)V PLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;II)V HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;III)V PLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;III)V HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/impl/model/WorkSpec;)V PLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/impl/model/WorkSpec;)V HSPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J PLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J HSPLandroidx/work/impl/model/WorkSpec;->getGeneration()I PLandroidx/work/impl/model/WorkSpec;->getGeneration()I HSPLandroidx/work/impl/model/WorkSpec;->getPeriodCount()I PLandroidx/work/impl/model/WorkSpec;->getPeriodCount()I HSPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z PLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z HSPLandroidx/work/impl/model/WorkSpec;->setBackoffDelayDuration(J)V PLandroidx/work/impl/model/WorkSpec;->setBackoffDelayDuration(J)V HSPLandroidx/work/impl/model/WorkSpec;->setPeriodic(JJ)V PLandroidx/work/impl/model/WorkSpec;->setPeriodic(JJ)V Landroidx/work/impl/model/WorkSpec$IdAndState; Landroidx/work/impl/model/WorkSpecDao_Impl; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->(Landroidx/room/RoomDatabase;)V PLandroidx/work/impl/model/WorkSpecDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling()Ljava/util/ArrayList; PLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling()Ljava/util/ArrayList; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/ArrayList; PLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/ArrayList; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/ArrayList; PLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/ArrayList; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getUnfinishedWorkWithName(Ljava/lang/String;)Ljava/util/ArrayList; PLandroidx/work/impl/model/WorkSpecDao_Impl;->getUnfinishedWorkWithName(Ljava/lang/String;)Ljava/util/ArrayList; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; PLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/ArrayList; PLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/ArrayList; HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->insertWorkSpec(Landroidx/work/impl/model/WorkSpec;)V PLandroidx/work/impl/model/WorkSpecDao_Impl;->insertWorkSpec(Landroidx/work/impl/model/WorkSpec;)V HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(JLjava/lang/String;)V PLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(JLjava/lang/String;)V Landroidx/work/impl/model/WorkSpecDao_Impl$2; HSPLandroidx/work/impl/model/WorkSpecDao_Impl$2;->(Landroidx/room/RoomDatabase;)V PLandroidx/work/impl/model/WorkSpecDao_Impl$2;->(Landroidx/room/RoomDatabase;)V Landroidx/work/impl/model/WorkSpecDao_Impl$3; HSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->(Landroidx/room/RoomDatabase;I)V PLandroidx/work/impl/model/WorkSpecDao_Impl$3;->(Landroidx/room/RoomDatabase;I)V HSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->createQuery()Ljava/lang/String; PLandroidx/work/impl/model/WorkSpecDao_Impl$3;->createQuery()Ljava/lang/String; Landroidx/work/impl/model/WorkTag; HSPLandroidx/work/impl/model/WorkTag;->(Ljava/lang/String;Ljava/lang/String;)V PLandroidx/work/impl/model/WorkTag;->(Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/work/impl/model/WorkTag;->getTag()Ljava/lang/String; PLandroidx/work/impl/model/WorkTag;->getTag()Ljava/lang/String; HSPLandroidx/work/impl/model/WorkTag;->getWorkSpecId()Ljava/lang/String; PLandroidx/work/impl/model/WorkTag;->getWorkSpecId()Ljava/lang/String; Landroidx/work/impl/model/WorkTagDao_Impl; HSPLandroidx/work/impl/model/WorkTagDao_Impl;->(Landroidx/room/RoomDatabase;)V PLandroidx/work/impl/model/WorkTagDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/WorkTagDao_Impl;->insert(Landroidx/work/impl/model/WorkTag;)V PLandroidx/work/impl/model/WorkTagDao_Impl;->insert(Landroidx/work/impl/model/WorkTag;)V HSPLandroidx/work/impl/model/WorkTagDao_Impl;->insertTags(Ljava/lang/String;Ljava/util/Set;)V PLandroidx/work/impl/model/WorkTagDao_Impl;->insertTags(Ljava/lang/String;Ljava/util/Set;)V Landroidx/work/impl/model/WorkTagDao_Impl$1; HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V PLandroidx/work/impl/model/WorkTagDao_Impl$1;->(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V PLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String; PLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String; Landroidx/work/impl/model/WorkTagDao_Impl$2; HSPLandroidx/work/impl/model/WorkTagDao_Impl$2;->(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V PLandroidx/work/impl/model/WorkTagDao_Impl$2;->(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V Landroidx/work/impl/utils/Api28Impl; HSPLandroidx/work/impl/utils/Api28Impl;->()V PLandroidx/work/impl/utils/Api28Impl;->()V HSPLandroidx/work/impl/utils/Api28Impl;->()V PLandroidx/work/impl/utils/Api28Impl;->()V HSPLandroidx/work/impl/utils/Api28Impl;->getProcessName()Ljava/lang/String; PLandroidx/work/impl/utils/Api28Impl;->getProcessName()Ljava/lang/String; Landroidx/work/impl/utils/CancelWorkRunnable$3; HSPLandroidx/work/impl/utils/CancelWorkRunnable$3;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Z)V PLandroidx/work/impl/utils/CancelWorkRunnable$3;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Z)V HSPLandroidx/work/impl/utils/CancelWorkRunnable$3;->runInternal()V PLandroidx/work/impl/utils/CancelWorkRunnable$3;->runInternal()V Landroidx/work/impl/utils/DurationApi26Impl; HSPLandroidx/work/impl/utils/DurationApi26Impl;->toMillisCompat(Lj$/time/Duration;)J PLandroidx/work/impl/utils/DurationApi26Impl;->toMillisCompat(Lj$/time/Duration;)J Landroidx/work/impl/utils/EnqueueRunnable; HSPLandroidx/work/impl/utils/EnqueueRunnable;->()V PLandroidx/work/impl/utils/EnqueueRunnable;->()V HSPLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;Landroidx/work/impl/OperationImpl;)V PLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;Landroidx/work/impl/OperationImpl;)V HSPLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z PLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z HSPLandroidx/work/impl/utils/EnqueueRunnable;->run()V PLandroidx/work/impl/utils/EnqueueRunnable;->run()V Landroidx/work/impl/utils/ForceStopRunnable; HSPLandroidx/work/impl/utils/ForceStopRunnable;->()V PLandroidx/work/impl/utils/ForceStopRunnable;->()V HSPLandroidx/work/impl/utils/ForceStopRunnable;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V PLandroidx/work/impl/utils/ForceStopRunnable;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V HSPLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V PLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V HSPLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z PLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z HSPLandroidx/work/impl/utils/ForceStopRunnable;->run()V PLandroidx/work/impl/utils/ForceStopRunnable;->run()V Landroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0; HSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()Landroid/util/CloseGuard; PLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()Landroid/util/CloseGuard; HSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()V PLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()V HSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ActivityManager;)Ljava/util/List; PLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ActivityManager;)Ljava/util/List; HSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/InstallSourceInfo;)Ljava/lang/String; PLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/InstallSourceInfo;)Ljava/lang/String; HSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo; PLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo; HSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/util/CloseGuard;Ljava/lang/String;)V PLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/util/CloseGuard;Ljava/lang/String;)V Landroidx/work/impl/utils/ForceStopRunnable$BroadcastReceiver; Landroidx/work/impl/utils/IdGenerator; HSPLandroidx/work/impl/utils/IdGenerator;->$r8$lambda$LyUC9fmKDw6AhARQq6V7VCdkafU(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer; PLandroidx/work/impl/utils/IdGenerator;->$r8$lambda$LyUC9fmKDw6AhARQq6V7VCdkafU(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer; HSPLandroidx/work/impl/utils/IdGenerator;->(Landroidx/work/impl/WorkDatabase;I)V PLandroidx/work/impl/utils/IdGenerator;->(Landroidx/work/impl/WorkDatabase;I)V HSPLandroidx/work/impl/utils/IdGenerator;->getNeedsReschedule()Z PLandroidx/work/impl/utils/IdGenerator;->getNeedsReschedule()Z HSPLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange(I)I PLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange(I)I Landroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1; HSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->(Landroidx/work/impl/utils/IdGenerator;I)V PLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->(Landroidx/work/impl/utils/IdGenerator;I)V HSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; PLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; Landroidx/work/impl/utils/LiveDataUtils$1$1; HSPLandroidx/work/impl/utils/LiveDataUtils$1$1;->(Landroidx/work/impl/utils/SerialExecutorImpl;Ljava/lang/Runnable;)V PLandroidx/work/impl/utils/LiveDataUtils$1$1;->(Landroidx/work/impl/utils/SerialExecutorImpl;Ljava/lang/Runnable;)V HSPLandroidx/work/impl/utils/LiveDataUtils$1$1;->run()V PLandroidx/work/impl/utils/LiveDataUtils$1$1;->run()V Landroidx/work/impl/utils/PackageManagerHelper; HSPLandroidx/work/impl/utils/PackageManagerHelper;->()V PLandroidx/work/impl/utils/PackageManagerHelper;->()V HSPLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V PLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V Landroidx/work/impl/utils/ProcessUtils; HSPLandroidx/work/impl/utils/ProcessUtils;->()V PLandroidx/work/impl/utils/ProcessUtils;->()V HSPLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z PLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z Landroidx/work/impl/utils/RawQueries; HSPLandroidx/work/impl/utils/RawQueries;->access$nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I PLandroidx/work/impl/utils/RawQueries;->access$nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I Landroidx/work/impl/utils/SerialExecutorImpl; HSPLandroidx/work/impl/utils/SerialExecutorImpl;->(Ljava/util/concurrent/ExecutorService;)V PLandroidx/work/impl/utils/SerialExecutorImpl;->(Ljava/util/concurrent/ExecutorService;)V HSPLandroidx/work/impl/utils/SerialExecutorImpl;->execute(Ljava/lang/Runnable;)V PLandroidx/work/impl/utils/SerialExecutorImpl;->execute(Ljava/lang/Runnable;)V HSPLandroidx/work/impl/utils/SerialExecutorImpl;->scheduleNext()V PLandroidx/work/impl/utils/SerialExecutorImpl;->scheduleNext()V Landroidx/work/impl/utils/StatusRunnable; HSPLandroidx/work/impl/utils/StatusRunnable;->(I)V PLandroidx/work/impl/utils/StatusRunnable;->(I)V HSPLandroidx/work/impl/utils/StatusRunnable;->forName(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;)Landroidx/work/impl/utils/StatusRunnable; PLandroidx/work/impl/utils/StatusRunnable;->forName(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;)Landroidx/work/impl/utils/StatusRunnable; HSPLandroidx/work/impl/utils/StatusRunnable;->getOperation()Landroidx/work/impl/OperationImpl; PLandroidx/work/impl/utils/StatusRunnable;->getOperation()Landroidx/work/impl/OperationImpl; HSPLandroidx/work/impl/utils/StatusRunnable;->run()V PLandroidx/work/impl/utils/StatusRunnable;->run()V Landroidx/work/impl/utils/futures/AbstractFuture; HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V PLandroidx/work/impl/utils/futures/AbstractFuture;->()V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V PLandroidx/work/impl/utils/futures/AbstractFuture;->()V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V PLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->set(Ljava/lang/Object;)Z PLandroidx/work/impl/utils/futures/AbstractFuture;->set(Ljava/lang/Object;)Z Landroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper; HSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->()V PLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->()V Landroidx/work/impl/utils/futures/AbstractFuture$Listener; HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->()V PLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->()V HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V PLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V Landroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper; HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V PLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casListeners(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Z PLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casListeners(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Z HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z PLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casWaiters(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;)Z PLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casWaiters(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;)Z Landroidx/work/impl/utils/futures/AbstractFuture$Waiter; HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->()V PLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->()V HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->(I)V PLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->(I)V Landroidx/work/impl/utils/futures/SettableFuture; HSPLandroidx/work/impl/utils/futures/SettableFuture;->()V PLandroidx/work/impl/utils/futures/SettableFuture;->()V HSPLandroidx/work/impl/utils/futures/SettableFuture;->create()Landroidx/work/impl/utils/futures/SettableFuture; PLandroidx/work/impl/utils/futures/SettableFuture;->create()Landroidx/work/impl/utils/futures/SettableFuture; HSPLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z PLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor; HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->(Ljava/util/concurrent/ExecutorService;)V PLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->(Ljava/util/concurrent/ExecutorService;)V HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->executeOnTaskThread(Ljava/lang/Runnable;)V PLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->executeOnTaskThread(Ljava/lang/Runnable;)V HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor$1()Landroidx/work/impl/utils/SerialExecutorImpl; PLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor$1()Landroidx/work/impl/utils/SerialExecutorImpl; Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1; HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V PLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V Lapp/cash/sqldelight/ColumnAdapter; Lapp/cash/sqldelight/ExecutableQuery; HSPLapp/cash/sqldelight/ExecutableQuery;->(Lkotlin/jvm/functions/Function1;)V PLapp/cash/sqldelight/ExecutableQuery;->(Lkotlin/jvm/functions/Function1;)V HSPLapp/cash/sqldelight/ExecutableQuery;->getMapper()Lkotlin/jvm/functions/Function1; PLapp/cash/sqldelight/ExecutableQuery;->getMapper()Lkotlin/jvm/functions/Function1; Lapp/cash/sqldelight/Query; HSPLapp/cash/sqldelight/Query;->(Lkotlin/jvm/functions/Function1;)V PLapp/cash/sqldelight/Query;->(Lkotlin/jvm/functions/Function1;)V Lapp/cash/sqldelight/Query$Listener; Lapp/cash/sqldelight/QueryKt; HSPLapp/cash/sqldelight/QueryKt;->Query(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/Query; PLapp/cash/sqldelight/QueryKt;->Query(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/Query; Lapp/cash/sqldelight/SimpleQuery; HSPLapp/cash/sqldelight/SimpleQuery;->(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V PLapp/cash/sqldelight/SimpleQuery;->(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V HSPLapp/cash/sqldelight/SimpleQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V PLapp/cash/sqldelight/SimpleQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V HSPLapp/cash/sqldelight/SimpleQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; PLapp/cash/sqldelight/SimpleQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; Lapp/cash/sqldelight/Transacter; Lapp/cash/sqldelight/TransacterImpl; HSPLapp/cash/sqldelight/TransacterImpl;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLapp/cash/sqldelight/TransacterImpl;->(Lapp/cash/sqldelight/db/SqlDriver;)V HSPLapp/cash/sqldelight/TransacterImpl;->getDriver()Lapp/cash/sqldelight/db/SqlDriver; PLapp/cash/sqldelight/TransacterImpl;->getDriver()Lapp/cash/sqldelight/db/SqlDriver; Lapp/cash/sqldelight/async/coroutines/QueryExtensionsKt; HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;->awaitAsList(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;->awaitAsList(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2; HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->(Lapp/cash/sqldelight/Query;I)V PLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->(Lapp/cash/sqldelight/Query;I)V HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult; PLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult; HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/coroutines/FlowQuery; HSPLapp/cash/sqldelight/coroutines/FlowQuery;->toFlow(Lapp/cash/sqldelight/Query;)Lkotlinx/coroutines/flow/Flow; PLapp/cash/sqldelight/coroutines/FlowQuery;->toFlow(Lapp/cash/sqldelight/Query;)Lkotlinx/coroutines/flow/Flow; Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1; HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V PLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0; HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/Channel;)V PLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/Channel;)V Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1; HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->(Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->(Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1; HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V PLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1; HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineDispatcher;I)V PLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineDispatcher;I)V HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2; HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;I)V PLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;I)V HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lapp/cash/sqldelight/db/AfterVersion; Lapp/cash/sqldelight/db/QueryResult; HSPLapp/cash/sqldelight/db/QueryResult;->()V PLapp/cash/sqldelight/db/QueryResult;->()V Lapp/cash/sqldelight/db/QueryResult$AsyncValue; Lapp/cash/sqldelight/db/QueryResult$Companion; HSPLapp/cash/sqldelight/db/QueryResult$Companion;->()V PLapp/cash/sqldelight/db/QueryResult$Companion;->()V HSPLapp/cash/sqldelight/db/QueryResult$Companion;->()V PLapp/cash/sqldelight/db/QueryResult$Companion;->()V Lapp/cash/sqldelight/db/QueryResult$Value; HSPLapp/cash/sqldelight/db/QueryResult$Value;->(Ljava/lang/Object;)V PLapp/cash/sqldelight/db/QueryResult$Value;->(Ljava/lang/Object;)V HSPLapp/cash/sqldelight/db/QueryResult$Value;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLapp/cash/sqldelight/db/QueryResult$Value;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLapp/cash/sqldelight/db/QueryResult$Value;->box-impl(Ljava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult$Value; PLapp/cash/sqldelight/db/QueryResult$Value;->box-impl(Ljava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult$Value; HSPLapp/cash/sqldelight/db/QueryResult$Value;->getValue()Ljava/lang/Object; PLapp/cash/sqldelight/db/QueryResult$Value;->getValue()Ljava/lang/Object; Lapp/cash/sqldelight/db/SqlCursor; Lapp/cash/sqldelight/db/SqlDriver; Lapp/cash/sqldelight/db/SqlPreparedStatement; Lapp/cash/sqldelight/db/SqlSchema; Lapp/cash/sqldelight/driver/android/AndroidCursor; HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->(Landroid/database/Cursor;)V PLapp/cash/sqldelight/driver/android/AndroidCursor;->(Landroid/database/Cursor;)V HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->getLong(I)Ljava/lang/Long; PLapp/cash/sqldelight/driver/android/AndroidCursor;->getLong(I)Ljava/lang/Long; HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->getString(I)Ljava/lang/String; PLapp/cash/sqldelight/driver/android/AndroidCursor;->getString(I)Ljava/lang/String; HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->next()Lapp/cash/sqldelight/db/QueryResult$Value; PLapp/cash/sqldelight/driver/android/AndroidCursor;->next()Lapp/cash/sqldelight/db/QueryResult$Value; Lapp/cash/sqldelight/driver/android/AndroidPreparedStatement; HSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->(Landroidx/sqlite/db/SupportSQLiteStatement;)V PLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->(Landroidx/sqlite/db/SupportSQLiteStatement;)V HSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->close()V PLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->close()V HSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->execute()J PLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->execute()J Lapp/cash/sqldelight/driver/android/AndroidQuery; HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->(Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V PLapp/cash/sqldelight/driver/android/AndroidQuery;->(Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindBoolean(ILjava/lang/Boolean;)V PLapp/cash/sqldelight/driver/android/AndroidQuery;->bindBoolean(ILjava/lang/Boolean;)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindLong(ILjava/lang/Long;)V PLapp/cash/sqldelight/driver/android/AndroidQuery;->bindLong(ILjava/lang/Long;)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindString(ILjava/lang/String;)V PLapp/cash/sqldelight/driver/android/AndroidQuery;->bindString(ILjava/lang/String;)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V PLapp/cash/sqldelight/driver/android/AndroidQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->executeQuery(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidQuery;->executeQuery(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->getSql()Ljava/lang/String; PLapp/cash/sqldelight/driver/android/AndroidQuery;->getSql()Ljava/lang/String; Lapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1; HSPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->(IILjava/lang/Object;)V PLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->(IILjava/lang/Object;)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Landroidx/sqlite/db/SupportSQLiteProgram;)V PLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Landroidx/sqlite/db/SupportSQLiteProgram;)V HSPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Ltachiyomi/data/data/DatabaseImpl$Schema;Landroid/app/Application;Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;Leu/kanade/tachiyomi/AppModule$registerInjectables$1$1;)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Ltachiyomi/data/data/DatabaseImpl$Schema;Landroid/app/Application;Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;Leu/kanade/tachiyomi/AppModule$registerInjectables$1$1;)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getDatabase(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteDatabase; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getDatabase(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteDatabase; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getOpenHelper$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getOpenHelper$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->addListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->addListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute-zeHU3Mk(Ljava/lang/Integer;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute-zeHU3Mk(Ljava/lang/Integer;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->executeQuery(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->executeQuery(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Ljava/lang/Object;I)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Ljava/lang/Object;I)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Ljava/lang/Object; Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->(Ljava/lang/String;Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;I)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->(Ljava/lang/String;Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;I)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Ljava/lang/Object; Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->(Lkotlin/jvm/functions/Function1;)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->(Lkotlin/jvm/functions/Function1;)V HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1; HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->(I)V PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->(I)V Lapp/cash/sqldelight/driver/android/AndroidStatement; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->()V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->()V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->()V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->()V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$LifecycleDisposableEffect(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$LifecycleDisposableEffect(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$getHooks(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;)Ljava/util/List; HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$getHooks(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;)Ljava/util/List; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStart(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStart(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStop(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStop(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$performSave(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$performSave(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$registerLifecycleListener(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$registerLifecycleListener(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->onDispose(Lcafe/adriel/voyager/core/screen/Screen;)V Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion;->get(Lcafe/adriel/voyager/core/screen/Screen;)Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion;->get(Lcafe/adriel/voyager/core/screen/Screen;)Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->()V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->()V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->()V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->()V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->(IILjava/lang/Object;)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->(IILjava/lang/Object;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->()V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->()V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->()V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->()V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->invoke()Ljava/lang/Object; HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Lkotlin/jvm/functions/Function2;I)V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Lkotlin/jvm/functions/Function2;I)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;->(Landroidx/lifecycle/Lifecycle;Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;)V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;->(Landroidx/lifecycle/Lifecycle;Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;)V HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;->invoke()Ljava/lang/Object; PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1; HSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;->(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V PLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;->onStop(Landroidx/lifecycle/LifecycleOwner;)V Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; HSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->()V PLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->()V HSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->entrySet()Ljava/util/Set; PLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->entrySet()Ljava/util/Set; HSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/concurrent/ThreadSafeSet; HSPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->()V PLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->()V HSPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->add(Ljava/lang/Object;)Z HPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->add(Ljava/lang/Object;)Z PLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->iterator()Ljava/util/Iterator; PLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->remove(Ljava/lang/Object;)Z Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker; HSPLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;->(Landroid/app/Activity;)V PLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;->(Landroid/app/Activity;)V PLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;->isChangingConfigurations()Z Lcafe/adriel/voyager/core/lifecycle/DefaultNavigatorScreenLifecycleProvider; HSPLcafe/adriel/voyager/core/lifecycle/DefaultNavigatorScreenLifecycleProvider;->()V PLcafe/adriel/voyager/core/lifecycle/DefaultNavigatorScreenLifecycleProvider;->()V Lcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner; HSPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->()V PLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->()V HSPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->()V PLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->()V HSPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V HPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V Lcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl; HSPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->(Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;Lkotlin/jvm/functions/Function1;)V PLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->(Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;Lkotlin/jvm/functions/Function1;)V PLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->onForgotten()V HSPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->onRemembered()V PLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->onRemembered()V Lcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1; HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;->(Ljava/util/List;)V PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;->(Ljava/util/List;)V HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;->invoke()Ljava/lang/Object; PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$1; HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$1;->(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/jvm/functions/Function4;)V PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$1;->(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/jvm/functions/Function4;)V Lcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2; HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3; HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;->(Lkotlin/jvm/functions/Function4;I)V PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;->(Lkotlin/jvm/functions/Function4;I)V HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4; HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;->(Lkotlin/jvm/functions/Function2;I)V PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;->(Lkotlin/jvm/functions/Function2;I)V HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5; HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V PLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt; HSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;->()V PLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;->()V HSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;->getLocalNavigatorScreenLifecycleProvider()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;->getLocalNavigatorScreenLifecycleProvider()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Lcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1; HSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->()V PLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->()V HSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->()V PLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->()V HSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->invoke()Ljava/lang/Object; PLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt; HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->()V PLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->()V HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->DisposableEffectIgnoringConfiguration(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V PLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->DisposableEffectIgnoringConfiguration(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->MultipleProvideBeforeScreenContent(Ljava/util/List;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->MultipleProvideBeforeScreenContent(Ljava/util/List;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope; PLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope; HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->getConfigurationChecker(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker; PLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->getConfigurationChecker(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker; Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner; Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore; HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->()V PLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->()V HSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->register(Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;)Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner; HPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->register(Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;)Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner; HPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->remove(Lcafe/adriel/voyager/core/screen/Screen;)V Lcafe/adriel/voyager/core/model/ScreenModel; Lcafe/adriel/voyager/core/model/ScreenModelKt; HSPLcafe/adriel/voyager/core/model/ScreenModelKt;->getCoroutineScope(Lcafe/adriel/voyager/core/model/ScreenModel;)Lkotlinx/coroutines/CoroutineScope; PLcafe/adriel/voyager/core/model/ScreenModelKt;->getCoroutineScope(Lcafe/adriel/voyager/core/model/ScreenModel;)Lkotlinx/coroutines/CoroutineScope; Lcafe/adriel/voyager/core/model/ScreenModelStore; HSPLcafe/adriel/voyager/core/model/ScreenModelStore;->()V PLcafe/adriel/voyager/core/model/ScreenModelStore;->()V HSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencies()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; PLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencies()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; HSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencyKey(Lcafe/adriel/voyager/core/model/ScreenModel;Ljava/lang/String;)Ljava/lang/String; HPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencyKey(Lcafe/adriel/voyager/core/model/ScreenModel;Ljava/lang/String;)Ljava/lang/String; HSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getLastScreenModelKey()Lkotlinx/coroutines/flow/MutableStateFlow; PLcafe/adriel/voyager/core/model/ScreenModelStore;->getLastScreenModelKey()Lkotlinx/coroutines/flow/MutableStateFlow; HSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getScreenModels()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; PLcafe/adriel/voyager/core/model/ScreenModelStore;->getScreenModels()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; PLcafe/adriel/voyager/core/model/ScreenModelStore;->onEach(Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/jvm/functions/Function1;)V PLcafe/adriel/voyager/core/model/ScreenModelStore;->remove(Lcafe/adriel/voyager/core/screen/Screen;)V PLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$1;->(Lcafe/adriel/voyager/core/screen/Screen;)V HPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2; HSPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->()V PLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->()V HSPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->(I)V PLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->(I)V HSPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/core/model/StateScreenModel; HSPLcafe/adriel/voyager/core/model/StateScreenModel;->(Ljava/lang/Object;)V PLcafe/adriel/voyager/core/model/StateScreenModel;->(Ljava/lang/Object;)V HSPLcafe/adriel/voyager/core/model/StateScreenModel;->getMutableState()Lkotlinx/coroutines/flow/MutableStateFlow; PLcafe/adriel/voyager/core/model/StateScreenModel;->getMutableState()Lkotlinx/coroutines/flow/MutableStateFlow; HSPLcafe/adriel/voyager/core/model/StateScreenModel;->getState()Lkotlinx/coroutines/flow/StateFlow; PLcafe/adriel/voyager/core/model/StateScreenModel;->getState()Lkotlinx/coroutines/flow/StateFlow; Lcafe/adriel/voyager/core/screen/Screen; Lcafe/adriel/voyager/core/stack/SnapshotStateStack; HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->(Ljava/util/List;)V HPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->(Ljava/util/List;)V PLcafe/adriel/voyager/core/stack/SnapshotStateStack;->clearEvent()V HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getCanPop()Z HPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getCanPop()Z HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getItems()Ljava/util/List; HPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getItems()Ljava/util/List; HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent; HPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent; HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastItemOrNull()Ljava/lang/Object; HPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastItemOrNull()Ljava/lang/Object; HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getStateStack()Landroidx/compose/runtime/snapshots/SnapshotStateList; PLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getStateStack()Landroidx/compose/runtime/snapshots/SnapshotStateList; PLcafe/adriel/voyager/core/stack/SnapshotStateStack;->push(Ljava/lang/Object;)V HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->replaceAll(Ljava/lang/Object;)V PLcafe/adriel/voyager/core/stack/SnapshotStateStack;->replaceAll(Ljava/lang/Object;)V HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->setLastEvent(Lcafe/adriel/voyager/core/stack/StackEvent;)V PLcafe/adriel/voyager/core/stack/SnapshotStateStack;->setLastEvent(Lcafe/adriel/voyager/core/stack/StackEvent;)V Lcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2; HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;->(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;)V PLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;->(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;)V HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;->invoke()Ljava/lang/Object; HPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2; HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;->(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;I)V HPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;->(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;I)V HSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;->invoke()Ljava/lang/Object; HPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/core/stack/StackEvent; HSPLcafe/adriel/voyager/core/stack/StackEvent;->()V PLcafe/adriel/voyager/core/stack/StackEvent;->()V HSPLcafe/adriel/voyager/core/stack/StackEvent;->(Ljava/lang/String;I)V PLcafe/adriel/voyager/core/stack/StackEvent;->(Ljava/lang/String;I)V Lcafe/adriel/voyager/navigator/Navigator; HSPLcafe/adriel/voyager/navigator/Navigator;->(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V HPLcafe/adriel/voyager/navigator/Navigator;->(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V HSPLcafe/adriel/voyager/navigator/Navigator;->access$getStateHolder$p(Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaveableStateHolder; PLcafe/adriel/voyager/navigator/Navigator;->access$getStateHolder$p(Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaveableStateHolder; HSPLcafe/adriel/voyager/navigator/Navigator;->access$saveableState$provideSaveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/navigator/Navigator;->access$saveableState$provideSaveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V PLcafe/adriel/voyager/navigator/Navigator;->clearEvent()V PLcafe/adriel/voyager/navigator/Navigator;->dispose(Lcafe/adriel/voyager/core/screen/Screen;)V HSPLcafe/adriel/voyager/navigator/Navigator;->getCanPop()Z PLcafe/adriel/voyager/navigator/Navigator;->getCanPop()Z HSPLcafe/adriel/voyager/navigator/Navigator;->getDisposeBehavior()Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior; PLcafe/adriel/voyager/navigator/Navigator;->getDisposeBehavior()Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior; HSPLcafe/adriel/voyager/navigator/Navigator;->getItems()Ljava/util/List; PLcafe/adriel/voyager/navigator/Navigator;->getItems()Ljava/util/List; HSPLcafe/adriel/voyager/navigator/Navigator;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent; PLcafe/adriel/voyager/navigator/Navigator;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent; HSPLcafe/adriel/voyager/navigator/Navigator;->getLastItem()Lcafe/adriel/voyager/core/screen/Screen; HPLcafe/adriel/voyager/navigator/Navigator;->getLastItem()Lcafe/adriel/voyager/core/screen/Screen; HSPLcafe/adriel/voyager/navigator/Navigator;->getLastItemOrNull()Lcafe/adriel/voyager/core/screen/Screen; PLcafe/adriel/voyager/navigator/Navigator;->getLastItemOrNull()Lcafe/adriel/voyager/core/screen/Screen; HSPLcafe/adriel/voyager/navigator/Navigator;->getParent()Lcafe/adriel/voyager/navigator/Navigator; PLcafe/adriel/voyager/navigator/Navigator;->getParent()Lcafe/adriel/voyager/navigator/Navigator; PLcafe/adriel/voyager/navigator/Navigator;->push(Lcafe/adriel/voyager/core/screen/Screen;)V HSPLcafe/adriel/voyager/navigator/Navigator;->replaceAll(Lcafe/adriel/voyager/core/screen/Screen;)V PLcafe/adriel/voyager/navigator/Navigator;->replaceAll(Lcafe/adriel/voyager/core/screen/Screen;)V HSPLcafe/adriel/voyager/navigator/Navigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLcafe/adriel/voyager/navigator/Navigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V PLcafe/adriel/voyager/navigator/Navigator$dispose$1;->(Lcafe/adriel/voyager/core/screen/Screen;)V HPLcafe/adriel/voyager/navigator/Navigator$dispose$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/Navigator$last$2; HSPLcafe/adriel/voyager/navigator/Navigator$last$2;->(Lcafe/adriel/voyager/navigator/Navigator;I)V PLcafe/adriel/voyager/navigator/Navigator$last$2;->(Lcafe/adriel/voyager/navigator/Navigator;I)V HSPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Lcafe/adriel/voyager/core/screen/Screen; PLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Lcafe/adriel/voyager/core/screen/Screen; HSPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/navigator/Navigator$saveableState$1; HSPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;->(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/Navigator$saveableState$1;->(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;)V HSPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/Navigator$saveableState$2; HSPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;->(Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;I)V PLcafe/adriel/voyager/navigator/Navigator$saveableState$2;->(Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;I)V HSPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/Navigator$saveableState$3; Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior; HSPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->(ZZ)V PLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->(ZZ)V PLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->equals(Ljava/lang/Object;)Z HSPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeNestedNavigators()Z PLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeNestedNavigators()Z HSPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeSteps()Z PLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeSteps()Z Lcafe/adriel/voyager/navigator/NavigatorKt; HSPLcafe/adriel/voyager/navigator/NavigatorKt;->()V PLcafe/adriel/voyager/navigator/NavigatorKt;->()V HSPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Lcafe/adriel/voyager/core/screen/Screen;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Lcafe/adriel/voyager/core/screen/Screen;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Ljava/util/List;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Ljava/util/List;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLcafe/adriel/voyager/navigator/NavigatorKt;->compositionUniqueId(Landroidx/compose/runtime/Composer;)Ljava/lang/String; HPLcafe/adriel/voyager/navigator/NavigatorKt;->compositionUniqueId(Landroidx/compose/runtime/Composer;)Ljava/lang/String; HSPLcafe/adriel/voyager/navigator/NavigatorKt;->getCurrentOrThrow(Landroidx/compose/runtime/StaticProvidableCompositionLocal;Landroidx/compose/runtime/Composer;)Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/NavigatorKt;->getCurrentOrThrow(Landroidx/compose/runtime/StaticProvidableCompositionLocal;Landroidx/compose/runtime/Composer;)Ljava/lang/Object; HSPLcafe/adriel/voyager/navigator/NavigatorKt;->getLocalNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLcafe/adriel/voyager/navigator/NavigatorKt;->getLocalNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Lcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1; HSPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->()V PLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->()V HSPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->(I)V PLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->(I)V HSPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->invoke()Ljava/lang/Object; PLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1; HSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;->()V PLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;->()V HSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;->()V PLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;->()V Lcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6; HSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;->(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V PLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;->(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V HSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1; HSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;->(Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function3;)V PLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;->(Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function3;)V HSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/NavigatorSaver; Lcafe/adriel/voyager/navigator/NavigatorSaverKt; HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt;->()V PLcafe/adriel/voyager/navigator/NavigatorSaverKt;->()V HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt;->getLocalNavigatorSaver()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLcafe/adriel/voyager/navigator/NavigatorSaverKt;->getLocalNavigatorSaver()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Lcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1; HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->()V PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->()V HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->()V PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->()V HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->saver(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->saver(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; Lcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1; HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->()V PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->()V HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->()V PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->()V HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$2; HSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$2;->(Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$2;->(Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V Lcafe/adriel/voyager/navigator/internal/ActualsKt; HSPLcafe/adriel/voyager/navigator/internal/ActualsKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/navigator/internal/ActualsKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/navigator/internal/ActualsKt;->NavigatorBackHandler(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/navigator/internal/ActualsKt;->NavigatorBackHandler(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V Lcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$1;->(Lkotlin/jvm/functions/Function1;Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$1;->(Lkotlin/jvm/functions/Function1;Lcafe/adriel/voyager/navigator/Navigator;)V Lcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2; HSPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;->(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;I)V PLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;->(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;I)V PLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt; HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->()V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->()V HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->NavigatorDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->NavigatorDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->StepDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V HPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->StepDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->access$getDisposableEvents$p()Ljava/util/Set; Lcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V Lcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;->(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;->(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;->(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;->(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V HPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V Lcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2; HSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;->(Lcafe/adriel/voyager/navigator/Navigator;II)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;->(Lcafe/adriel/voyager/navigator/Navigator;II)V PLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt; HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->()V PLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->()V HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->getLocalNavigatorStateHolder()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->getLocalNavigatorStateHolder()Landroidx/compose/runtime/StaticProvidableCompositionLocal; HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->rememberNavigator(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)Lcafe/adriel/voyager/navigator/Navigator; HPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->rememberNavigator(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)Lcafe/adriel/voyager/navigator/Navigator; Lcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;->()V PLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;->()V HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;->()V PLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;->()V Lcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1; HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;->(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;->(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V HSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;->invoke()Ljava/lang/Object; PLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;->invoke()Ljava/lang/Object; Lcafe/adriel/voyager/navigator/tab/Tab; Lcafe/adriel/voyager/navigator/tab/TabNavigator; HSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLcafe/adriel/voyager/navigator/tab/TabNavigator;->(Lcafe/adriel/voyager/navigator/Navigator;)V HSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->getCurrent()Lcafe/adriel/voyager/navigator/tab/Tab; HPLcafe/adriel/voyager/navigator/tab/TabNavigator;->getCurrent()Lcafe/adriel/voyager/navigator/tab/Tab; HSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/tab/Tab;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLcafe/adriel/voyager/navigator/tab/TabNavigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/tab/Tab;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->setCurrent(Leu/kanade/presentation/util/Tab;)V PLcafe/adriel/voyager/navigator/tab/TabNavigator;->setCurrent(Leu/kanade/presentation/util/Tab;)V Lcafe/adriel/voyager/navigator/tab/TabNavigatorKt; HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->()V PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->()V HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->TabNavigator(Lcafe/adriel/voyager/navigator/tab/Tab;ZLkotlin/jvm/functions/Function3;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->TabNavigator(Lcafe/adriel/voyager/navigator/tab/Tab;ZLkotlin/jvm/functions/Function3;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->getLocalTabNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->getLocalTabNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Lcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1; HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;->()V PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;->()V HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;->()V PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;->()V Lcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1; HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;->(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;)V PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;->(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;)V HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1; HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;->(Lkotlin/jvm/functions/Function3;Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;->(Lkotlin/jvm/functions/Function3;Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V HSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lcafe/adriel/voyager/navigator/tab/TabOptions; HSPLcafe/adriel/voyager/navigator/tab/TabOptions;->(SLjava/lang/String;Landroidx/compose/ui/graphics/vector/VectorPainter;)V HPLcafe/adriel/voyager/navigator/tab/TabOptions;->(SLjava/lang/String;Landroidx/compose/ui/graphics/vector/VectorPainter;)V HSPLcafe/adriel/voyager/navigator/tab/TabOptions;->getIcon()Landroidx/compose/ui/graphics/painter/Painter; PLcafe/adriel/voyager/navigator/tab/TabOptions;->getIcon()Landroidx/compose/ui/graphics/painter/Painter; HSPLcafe/adriel/voyager/navigator/tab/TabOptions;->getTitle()Ljava/lang/String; PLcafe/adriel/voyager/navigator/tab/TabOptions;->getTitle()Ljava/lang/String; Lcoil/EventListener$Factory$$ExternalSyntheticLambda0; HSPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->(I)V PLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->(I)V HSPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->invoke(D)D PLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->invoke(D)D Lcoil/ImageLoaderFactory; Lcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0; HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String; PLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String; HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout; PLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout; HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; PLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V HPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V HSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V HPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V Lcoil/network/NetworkObserver; Lcoil/request/RequestService; HSPLcoil/request/RequestService;->()V HPLcoil/request/RequestService;->()V HSPLcoil/request/RequestService;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V PLcoil/request/RequestService;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V HSPLcoil/request/RequestService;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V HPLcoil/request/RequestService;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V HSPLcoil/request/RequestService;->(Ljava/lang/Runnable;)V PLcoil/request/RequestService;->(Ljava/lang/Runnable;)V HSPLcoil/request/RequestService;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; PLcoil/request/RequestService;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; HSPLcoil/request/RequestService;->get(Ljava/lang/Class;Ljava/lang/String;)Landroidx/lifecycle/ViewModel; HPLcoil/request/RequestService;->get(Ljava/lang/Class;Ljava/lang/String;)Landroidx/lifecycle/ViewModel; HSPLcoil/request/RequestService;->parsePathString(Ljava/lang/String;)V HPLcoil/request/RequestService;->parsePathString(Ljava/lang/String;)V HSPLcoil/request/RequestService;->toNodes()Ljava/util/List; PLcoil/request/RequestService;->toNodes()Ljava/util/List; Lcoil/size/-Sizes; HSPLcoil/size/-Sizes;->bind(Landroidx/sqlite/db/SupportSQLiteProgram;[Ljava/lang/Object;)V PLcoil/size/-Sizes;->bind(Landroidx/sqlite/db/SupportSQLiteProgram;[Ljava/lang/Object;)V HSPLcoil/size/-Sizes;->execute$default(Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/Integer;Ljava/lang/String;)V PLcoil/size/-Sizes;->execute$default(Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/Integer;Ljava/lang/String;)V HSPLcoil/size/-Sizes;->generationalId(Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkGenerationalId; PLcoil/size/-Sizes;->generationalId(Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkGenerationalId; HSPLcoil/size/-Sizes;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I PLcoil/size/-Sizes;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I HSPLcoil/size/-Sizes;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I PLcoil/size/-Sizes;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I HSPLcoil/size/-Sizes;->getKey(Lcafe/adriel/voyager/core/screen/Screen;)Ljava/lang/String; HPLcoil/size/-Sizes;->getKey(Lcafe/adriel/voyager/core/screen/Screen;)Ljava/lang/String; HSPLcoil/size/-Sizes;->getMultiplatformName(Lkotlin/reflect/KClass;)Ljava/lang/String; HPLcoil/size/-Sizes;->getMultiplatformName(Lkotlin/reflect/KClass;)Ljava/lang/String; HSPLcoil/size/-Sizes;->query(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;Z)Landroid/database/Cursor; PLcoil/size/-Sizes;->query(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;Z)Landroid/database/Cursor; Lcoil/size/Scale$EnumUnboxingLocalUtility; HSPLcoil/size/Scale$EnumUnboxingLocalUtility;->m(Ljava/lang/String;J)Ljava/lang/String; PLcoil/size/Scale$EnumUnboxingLocalUtility;->m(Ljava/lang/String;J)Ljava/lang/String; Lcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0; HSPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/job/JobInfo$Builder;Z)V PLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/job/JobInfo$Builder;Z)V HSPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; PLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; HSPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobInfo$Builder;Z)V PLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobInfo$Builder;Z)V Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController; HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->(Landroid/view/View;Landroid/view/Window;)V PLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->(Landroid/view/View;Landroid/view/Window;)V HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZLkotlin/jvm/functions/Function1;)V PLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZLkotlin/jvm/functions/Function1;)V HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V PLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt; HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->()V PLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->()V Lcom/google/accompanist/themeadapter/core/FontFamilyWithWeight; HSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->(Landroidx/compose/ui/text/font/FontFamily;)V PLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->(Landroidx/compose/ui/text/font/FontFamily;)V HSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;)V HPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;)V HSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; PLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; HSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getWeight()Landroidx/compose/ui/text/font/FontWeight; PLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getWeight()Landroidx/compose/ui/text/font/FontWeight; Lcom/google/accompanist/themeadapter/core/R$styleable; HSPLcom/google/accompanist/themeadapter/core/R$styleable;->()V PLcom/google/accompanist/themeadapter/core/R$styleable;->()V Lcom/google/accompanist/themeadapter/core/ResourceUtilsKt; HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->()V PLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->()V HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseColor-mxwnekA$default(Landroid/content/res/TypedArray;I)J HPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseColor-mxwnekA$default(Landroid/content/res/TypedArray;I)J HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseCornerSize(Landroid/content/res/TypedArray;I)Landroidx/compose/foundation/shape/CornerSize; HPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseCornerSize(Landroid/content/res/TypedArray;I)Landroidx/compose/foundation/shape/CornerSize; HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseFontFamily(Landroid/content/res/TypedArray;I)Lcom/google/accompanist/themeadapter/core/FontFamilyWithWeight; HPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseFontFamily(Landroid/content/res/TypedArray;I)Lcom/google/accompanist/themeadapter/core/FontFamilyWithWeight; HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseShapeAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/shape/CornerBasedShape;)Landroidx/compose/foundation/shape/CornerBasedShape; HPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseShapeAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/shape/CornerBasedShape;)Landroidx/compose/foundation/shape/CornerBasedShape; HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/Density;ZLandroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle; HPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/Density;ZLandroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle; HSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextUnit-lGoEivg(Landroid/content/res/TypedArray;ILandroidx/compose/ui/unit/Density;J)J HPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextUnit-lGoEivg(Landroid/content/res/TypedArray;ILandroidx/compose/ui/unit/Density;J)J Lcom/google/accompanist/themeadapter/material3/Mdc3Theme; HSPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;->()V PLcom/google/accompanist/themeadapter/material3/Mdc3Theme;->()V HSPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;->createMdc3Theme$default(Landroid/content/Context;Landroidx/compose/ui/unit/LayoutDirection;)Lcom/google/accompanist/themeadapter/material3/Theme3Parameters; HPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;->createMdc3Theme$default(Landroid/content/Context;Landroidx/compose/ui/unit/LayoutDirection;)Lcom/google/accompanist/themeadapter/material3/Theme3Parameters; Lcom/google/accompanist/themeadapter/material3/R$styleable; HSPLcom/google/accompanist/themeadapter/material3/R$styleable;->()V PLcom/google/accompanist/themeadapter/material3/R$styleable;->()V Lcom/google/accompanist/themeadapter/material3/Theme3Parameters; HSPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Typography;Landroidx/compose/material3/Shapes;)V PLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Typography;Landroidx/compose/material3/Shapes;)V HSPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component1()Landroidx/compose/material3/ColorScheme; PLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component1()Landroidx/compose/material3/ColorScheme; HSPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component2()Landroidx/compose/material3/Typography; PLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component2()Landroidx/compose/material3/Typography; Lcom/google/android/material/color/DynamicColors; HSPLcom/google/android/material/color/DynamicColors;->()V PLcom/google/android/material/color/DynamicColors;->()V HSPLcom/google/android/material/color/DynamicColors;->isDynamicColorAvailable()Z PLcom/google/android/material/color/DynamicColors;->isDynamicColorAvailable()Z Lcom/google/android/material/color/DynamicColors$1; HSPLcom/google/android/material/color/DynamicColors$1;->()V PLcom/google/android/material/color/DynamicColors$1;->()V Lcom/google/android/material/color/DynamicColors$2; HSPLcom/google/android/material/color/DynamicColors$2;->()V PLcom/google/android/material/color/DynamicColors$2;->()V Lcom/google/android/material/color/DynamicColors$DeviceSupportCondition; Lcom/google/android/material/theme/MaterialComponentsViewInflater; HSPLcom/google/android/material/theme/MaterialComponentsViewInflater;->()V PLcom/google/android/material/theme/MaterialComponentsViewInflater;->()V Lcom/google/common/util/concurrent/ListenableFuture; Lcom/hippo/unifile/RawFile; HSPLcom/hippo/unifile/RawFile;->(Ljava/io/File;)V PLcom/hippo/unifile/RawFile;->(Ljava/io/File;)V HSPLcom/hippo/unifile/RawFile;->exists()Z PLcom/hippo/unifile/RawFile;->exists()Z Lcom/hippo/unifile/UniFile; HSPLcom/hippo/unifile/UniFile;->()V PLcom/hippo/unifile/UniFile;->()V HSPLcom/hippo/unifile/UniFile;->fromUri(Landroid/content/Context;Landroid/net/Uri;)Lcom/hippo/unifile/UniFile; PLcom/hippo/unifile/UniFile;->fromUri(Landroid/content/Context;Landroid/net/Uri;)Lcom/hippo/unifile/UniFile; Lcom/jakewharton/disklrucache/DiskLruCache; HSPLcom/jakewharton/disklrucache/DiskLruCache;->()V PLcom/jakewharton/disklrucache/DiskLruCache;->()V HSPLcom/jakewharton/disklrucache/DiskLruCache;->(Ljava/io/File;)V PLcom/jakewharton/disklrucache/DiskLruCache;->(Ljava/io/File;)V HSPLcom/jakewharton/disklrucache/DiskLruCache;->getDirectory()Ljava/io/File; PLcom/jakewharton/disklrucache/DiskLruCache;->getDirectory()Ljava/io/File; HSPLcom/jakewharton/disklrucache/DiskLruCache;->open(Ljava/io/File;)Lcom/jakewharton/disklrucache/DiskLruCache; PLcom/jakewharton/disklrucache/DiskLruCache;->open(Ljava/io/File;)Lcom/jakewharton/disklrucache/DiskLruCache; HSPLcom/jakewharton/disklrucache/DiskLruCache;->rebuildJournal()V PLcom/jakewharton/disklrucache/DiskLruCache;->rebuildJournal()V HSPLcom/jakewharton/disklrucache/DiskLruCache;->renameTo(Ljava/io/File;Ljava/io/File;Z)V PLcom/jakewharton/disklrucache/DiskLruCache;->renameTo(Ljava/io/File;Ljava/io/File;Z)V Lcom/jakewharton/disklrucache/DiskLruCache$1; HSPLcom/jakewharton/disklrucache/DiskLruCache$1;->(Lcom/jakewharton/disklrucache/DiskLruCache;)V PLcom/jakewharton/disklrucache/DiskLruCache$1;->(Lcom/jakewharton/disklrucache/DiskLruCache;)V Lcom/jakewharton/disklrucache/DiskLruCache$2; HSPLcom/jakewharton/disklrucache/DiskLruCache$2;->()V PLcom/jakewharton/disklrucache/DiskLruCache$2;->()V Lcom/jakewharton/disklrucache/Util; HSPLcom/jakewharton/disklrucache/Util;->()V PLcom/jakewharton/disklrucache/Util;->()V Lcom/mikepenz/aboutlibraries/entity/Library; Leu/kanade/core/preference/PreferenceMutableState; HSPLeu/kanade/core/preference/PreferenceMutableState;->(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)V PLeu/kanade/core/preference/PreferenceMutableState;->(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)V HSPLeu/kanade/core/preference/PreferenceMutableState;->access$getState$p(Leu/kanade/core/preference/PreferenceMutableState;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; PLeu/kanade/core/preference/PreferenceMutableState;->access$getState$p(Leu/kanade/core/preference/PreferenceMutableState;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; HSPLeu/kanade/core/preference/PreferenceMutableState;->getValue()Ljava/lang/Object; PLeu/kanade/core/preference/PreferenceMutableState;->getValue()Ljava/lang/Object; Leu/kanade/core/preference/PreferenceMutableState$1; HSPLeu/kanade/core/preference/PreferenceMutableState$1;->(Leu/kanade/core/preference/PreferenceMutableState;Lkotlin/coroutines/Continuation;)V PLeu/kanade/core/preference/PreferenceMutableState$1;->(Leu/kanade/core/preference/PreferenceMutableState;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/core/preference/PreferenceMutableState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/core/preference/PreferenceMutableState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/core/preference/PreferenceMutableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/core/preference/PreferenceMutableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/core/preference/PreferenceMutableState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/core/preference/PreferenceMutableState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/core/preference/PreferenceMutableStateKt; HSPLeu/kanade/core/preference/PreferenceMutableStateKt;->asState(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)Leu/kanade/core/preference/PreferenceMutableState; PLeu/kanade/core/preference/PreferenceMutableStateKt;->asState(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)Leu/kanade/core/preference/PreferenceMutableState; Leu/kanade/core/util/CollectionUtilsKt; HSPLeu/kanade/core/util/CollectionUtilsKt;->insertSeparators(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function2;)Ljava/util/List; PLeu/kanade/core/util/CollectionUtilsKt;->insertSeparators(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function2;)Ljava/util/List; Leu/kanade/domain/DomainModule; HSPLeu/kanade/domain/DomainModule;->()V PLeu/kanade/domain/DomainModule;->()V HSPLeu/kanade/domain/DomainModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$10; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$10;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$10;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$11; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$11;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$11;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$12; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$12;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$12;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$13; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$13;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$13;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$14; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$14;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$14;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$15; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$15;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$15;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$16; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$16;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$16;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$17; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$17;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$17;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$18; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$18;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$18;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$19; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$19;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$19;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$20; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$20;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$20;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$21; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$21;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$21;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$22; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$22;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$22;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$23; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$23;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$23;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$24; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$24;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$24;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$25; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$25;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$25;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$26; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$26;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$26;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$27; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$27;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$27;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$28; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$28;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$28;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$29; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$29;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$29;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$3; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$3;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$3;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$30; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$30;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$30;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$31; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$31;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$31;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$32; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$32;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$32;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$33; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$33;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$33;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$34; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$34;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$34;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$35; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$35;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$35;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$36; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$36;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$36;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$37; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$37;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$37;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$38; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$38;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$38;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$39; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$39;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$39;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$4; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$4;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$4;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$40; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$40;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$40;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$41; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$41;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$41;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$42; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$42;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$42;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$43; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$43;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$43;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$44; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$44;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$44;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$45; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$45;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$45;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$46; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$46;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$46;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$47; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$47;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$47;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$48; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$48;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$48;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$49; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$49;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$49;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$5; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$5;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$5;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$50; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$50;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$50;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$51; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$51;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$51;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$52; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$52;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$52;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$53; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$53;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$53;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$54; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$54;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$54;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$6; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$6;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$6;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$7; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$7;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$7;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$8; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$8;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$8;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$9; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$9;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$9;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$3; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$3;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$3;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$4; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$4;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$4;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$5; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$5;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$5;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$6; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$6;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$6;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$7; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$7;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$7;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$8; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$8;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$8;->()V Leu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$9; HSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$9;->()V PLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$9;->()V Leu/kanade/domain/DomainModule$registerInjectables$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$1;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$1;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$1;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$1;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$1$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$1$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$1$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$10; HSPLeu/kanade/domain/DomainModule$registerInjectables$10;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$10;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$11; HSPLeu/kanade/domain/DomainModule$registerInjectables$11;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$11;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$11;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$11;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$11$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$11$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$11$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$12; HSPLeu/kanade/domain/DomainModule$registerInjectables$12;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$12;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$13; HSPLeu/kanade/domain/DomainModule$registerInjectables$13;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$13;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$14; HSPLeu/kanade/domain/DomainModule$registerInjectables$14;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$14;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$14;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$14;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$14$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$14$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$14$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$15; HSPLeu/kanade/domain/DomainModule$registerInjectables$15;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$15;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$16; HSPLeu/kanade/domain/DomainModule$registerInjectables$16;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$16;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$16;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$16;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$16$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$16$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$16$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$17; HSPLeu/kanade/domain/DomainModule$registerInjectables$17;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$17;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$17;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$17;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$3; HSPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$3;->()V PLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$3;->()V Leu/kanade/domain/DomainModule$registerInjectables$18; HSPLeu/kanade/domain/DomainModule$registerInjectables$18;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$18;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$19; HSPLeu/kanade/domain/DomainModule$registerInjectables$19;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$19;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$2;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$2;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$2;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$2;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$2$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$2$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$2$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$20; HSPLeu/kanade/domain/DomainModule$registerInjectables$20;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$20;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$20;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$20;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$20$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$20$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$20$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$21; HSPLeu/kanade/domain/DomainModule$registerInjectables$21;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$21;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$22; HSPLeu/kanade/domain/DomainModule$registerInjectables$22;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$22;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$23; HSPLeu/kanade/domain/DomainModule$registerInjectables$23;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$23;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$24; HSPLeu/kanade/domain/DomainModule$registerInjectables$24;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$24;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$24;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$24;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$25; HSPLeu/kanade/domain/DomainModule$registerInjectables$25;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$25;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$25;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$25;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$25$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$25$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$25$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$26; HSPLeu/kanade/domain/DomainModule$registerInjectables$26;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$26;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$27; HSPLeu/kanade/domain/DomainModule$registerInjectables$27;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$27;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$28; HSPLeu/kanade/domain/DomainModule$registerInjectables$28;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$28;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$28;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$28;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$28$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$28$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$28$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$29; HSPLeu/kanade/domain/DomainModule$registerInjectables$29;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$29;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$3; HSPLeu/kanade/domain/DomainModule$registerInjectables$3;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$3;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$30; HSPLeu/kanade/domain/DomainModule$registerInjectables$30;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$30;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$31; HSPLeu/kanade/domain/DomainModule$registerInjectables$31;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$31;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$31;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$31;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$31$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$31$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$31$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$32; HSPLeu/kanade/domain/DomainModule$registerInjectables$32;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$32;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$33; HSPLeu/kanade/domain/DomainModule$registerInjectables$33;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$33;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$34; HSPLeu/kanade/domain/DomainModule$registerInjectables$34;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$34;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$34;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$34;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$34$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$34$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$34$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$35; HSPLeu/kanade/domain/DomainModule$registerInjectables$35;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$35;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$35;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$35;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$35$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$35$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$35$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$36; HSPLeu/kanade/domain/DomainModule$registerInjectables$36;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$36;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$36;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$36;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$36$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$36$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$36$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$37; HSPLeu/kanade/domain/DomainModule$registerInjectables$37;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$37;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$37;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$37;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$37$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$37$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$37$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$38; HSPLeu/kanade/domain/DomainModule$registerInjectables$38;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$38;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$38;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$38;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$3; HSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$3;->()V PLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$3;->()V Leu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$4; HSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$4;->()V PLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$4;->()V Leu/kanade/domain/DomainModule$registerInjectables$39; HSPLeu/kanade/domain/DomainModule$registerInjectables$39;->()V PLeu/kanade/domain/DomainModule$registerInjectables$39;->()V HSPLeu/kanade/domain/DomainModule$registerInjectables$39;->()V PLeu/kanade/domain/DomainModule$registerInjectables$39;->()V Leu/kanade/domain/DomainModule$registerInjectables$4; HSPLeu/kanade/domain/DomainModule$registerInjectables$4;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$4;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$4;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$4;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$4$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$4$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$4$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$40; HSPLeu/kanade/domain/DomainModule$registerInjectables$40;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$40;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$41; HSPLeu/kanade/domain/DomainModule$registerInjectables$41;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$41;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$42; HSPLeu/kanade/domain/DomainModule$registerInjectables$42;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$42;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$42;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$42;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$42$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$42$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$42$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$43; HSPLeu/kanade/domain/DomainModule$registerInjectables$43;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$43;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$43;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$43;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$43$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$43$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$43$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$44; HSPLeu/kanade/domain/DomainModule$registerInjectables$44;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$44;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$45; HSPLeu/kanade/domain/DomainModule$registerInjectables$45;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$45;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$45;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$45;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$45$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$45$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$45$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$46; HSPLeu/kanade/domain/DomainModule$registerInjectables$46;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$46;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$47; HSPLeu/kanade/domain/DomainModule$registerInjectables$47;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$47;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$47;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$47;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$48; HSPLeu/kanade/domain/DomainModule$registerInjectables$48;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$48;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$49; HSPLeu/kanade/domain/DomainModule$registerInjectables$49;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$49;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$5; HSPLeu/kanade/domain/DomainModule$registerInjectables$5;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$5;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$5;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$5;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$2; HSPLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$2;->()V PLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$2;->()V Leu/kanade/domain/DomainModule$registerInjectables$50; HSPLeu/kanade/domain/DomainModule$registerInjectables$50;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$50;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$51; HSPLeu/kanade/domain/DomainModule$registerInjectables$51;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$51;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$51;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$51;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$51$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$51$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$51$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$52; HSPLeu/kanade/domain/DomainModule$registerInjectables$52;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$52;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$52;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$52;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$52$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$52$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$52$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$53; HSPLeu/kanade/domain/DomainModule$registerInjectables$53;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$53;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$54; HSPLeu/kanade/domain/DomainModule$registerInjectables$54;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$54;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/domain/DomainModule$registerInjectables$54;->invoke()Ljava/lang/Object; PLeu/kanade/domain/DomainModule$registerInjectables$54;->invoke()Ljava/lang/Object; Leu/kanade/domain/DomainModule$registerInjectables$54$invoke$$inlined$get$1; HSPLeu/kanade/domain/DomainModule$registerInjectables$54$invoke$$inlined$get$1;->()V PLeu/kanade/domain/DomainModule$registerInjectables$54$invoke$$inlined$get$1;->()V Leu/kanade/domain/DomainModule$registerInjectables$55; HSPLeu/kanade/domain/DomainModule$registerInjectables$55;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$55;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$56; HSPLeu/kanade/domain/DomainModule$registerInjectables$56;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$56;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$57; HSPLeu/kanade/domain/DomainModule$registerInjectables$57;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$57;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$58; HSPLeu/kanade/domain/DomainModule$registerInjectables$58;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$58;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$59; HSPLeu/kanade/domain/DomainModule$registerInjectables$59;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$59;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$6; HSPLeu/kanade/domain/DomainModule$registerInjectables$6;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$6;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$60; HSPLeu/kanade/domain/DomainModule$registerInjectables$60;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$60;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$61; HSPLeu/kanade/domain/DomainModule$registerInjectables$61;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$61;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$62; HSPLeu/kanade/domain/DomainModule$registerInjectables$62;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$62;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$63; HSPLeu/kanade/domain/DomainModule$registerInjectables$63;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$63;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$7; HSPLeu/kanade/domain/DomainModule$registerInjectables$7;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$7;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$8; HSPLeu/kanade/domain/DomainModule$registerInjectables$8;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$8;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/DomainModule$registerInjectables$9; HSPLeu/kanade/domain/DomainModule$registerInjectables$9;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/domain/DomainModule$registerInjectables$9;->(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/domain/base/BasePreferences; HSPLeu/kanade/domain/base/BasePreferences;->(Landroid/app/Application;Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/domain/base/BasePreferences;->(Landroid/app/Application;Ltachiyomi/core/preference/PreferenceStore;)V HSPLeu/kanade/domain/base/BasePreferences;->downloadedOnly()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/base/BasePreferences;->downloadedOnly()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/base/BasePreferences;->incognitoMode()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/base/BasePreferences;->incognitoMode()Ltachiyomi/core/preference/Preference; Leu/kanade/domain/chapter/interactor/SetReadStatus; HSPLeu/kanade/domain/chapter/interactor/SetReadStatus;->(Ltachiyomi/domain/download/service/DownloadPreferences;Leu/kanade/domain/download/interactor/DeleteDownload;Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/chapter/repository/ChapterRepository;)V PLeu/kanade/domain/chapter/interactor/SetReadStatus;->(Ltachiyomi/domain/download/service/DownloadPreferences;Leu/kanade/domain/download/interactor/DeleteDownload;Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/chapter/repository/ChapterRepository;)V Leu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1; HSPLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;->()V PLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;->()V HSPLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;->()V PLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;->()V Leu/kanade/domain/chapter/interactor/SyncChaptersWithSource; Leu/kanade/domain/chapter/interactor/SyncChaptersWithTrackServiceTwoWay; Leu/kanade/domain/download/interactor/DeleteDownload; HSPLeu/kanade/domain/download/interactor/DeleteDownload;->(Ltachiyomi/domain/source/service/SourceManager;Leu/kanade/tachiyomi/data/download/DownloadManager;)V PLeu/kanade/domain/download/interactor/DeleteDownload;->(Ltachiyomi/domain/source/service/SourceManager;Leu/kanade/tachiyomi/data/download/DownloadManager;)V Leu/kanade/domain/extension/interactor/GetExtensionLanguages; Leu/kanade/domain/extension/interactor/GetExtensionSources; Leu/kanade/domain/extension/interactor/GetExtensionsByType; Leu/kanade/domain/manga/interactor/SetMangaViewerFlags; Leu/kanade/domain/manga/interactor/UpdateManga; HSPLeu/kanade/domain/manga/interactor/UpdateManga;->(Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/manga/interactor/SetFetchInterval;)V PLeu/kanade/domain/manga/interactor/UpdateManga;->(Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/manga/interactor/SetFetchInterval;)V Leu/kanade/domain/source/interactor/GetEnabledSources; Leu/kanade/domain/source/interactor/GetLanguagesWithSources; Leu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount; Leu/kanade/domain/source/interactor/SetMigrateSorting; Leu/kanade/domain/source/interactor/ToggleLanguage; Leu/kanade/domain/source/interactor/ToggleSource; Leu/kanade/domain/source/interactor/ToggleSourcePin; Leu/kanade/domain/source/service/SourcePreferences; HSPLeu/kanade/domain/source/service/SourcePreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/domain/source/service/SourcePreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V HSPLeu/kanade/domain/source/service/SourcePreferences;->enabledLanguages()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/source/service/SourcePreferences;->enabledLanguages()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/source/service/SourcePreferences;->extensionUpdatesCount()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/source/service/SourcePreferences;->extensionUpdatesCount()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/source/service/SourcePreferences;->trustedSignatures()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/source/service/SourcePreferences;->trustedSignatures()Ltachiyomi/core/preference/Preference; Leu/kanade/domain/track/interactor/TrackChapter; Leu/kanade/domain/track/service/TrackPreferences; HSPLeu/kanade/domain/track/service/TrackPreferences;->()V PLeu/kanade/domain/track/service/TrackPreferences;->()V HSPLeu/kanade/domain/track/service/TrackPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/domain/track/service/TrackPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V HSPLeu/kanade/domain/track/service/TrackPreferences;->anilistScoreType()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/track/service/TrackPreferences;->anilistScoreType()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/track/service/TrackPreferences;->trackUsername(Leu/kanade/tachiyomi/data/track/TrackService;)Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/track/service/TrackPreferences;->trackUsername(Leu/kanade/tachiyomi/data/track/TrackService;)Ltachiyomi/core/preference/Preference; Leu/kanade/domain/track/service/TrackPreferences$Companion; HSPLeu/kanade/domain/track/service/TrackPreferences$Companion;->()V PLeu/kanade/domain/track/service/TrackPreferences$Companion;->()V HSPLeu/kanade/domain/track/service/TrackPreferences$Companion;->(I)V PLeu/kanade/domain/track/service/TrackPreferences$Companion;->(I)V Leu/kanade/domain/track/store/DelayedTrackingStore; Leu/kanade/domain/ui/UiPreferences; HSPLeu/kanade/domain/ui/UiPreferences;->()V PLeu/kanade/domain/ui/UiPreferences;->()V HSPLeu/kanade/domain/ui/UiPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/domain/ui/UiPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V HSPLeu/kanade/domain/ui/UiPreferences;->appTheme()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/ui/UiPreferences;->appTheme()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/ui/UiPreferences;->tabletUiMode()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/ui/UiPreferences;->tabletUiMode()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/ui/UiPreferences;->themeDarkAmoled()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/ui/UiPreferences;->themeDarkAmoled()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/domain/ui/UiPreferences;->themeMode()Ltachiyomi/core/preference/Preference; PLeu/kanade/domain/ui/UiPreferences;->themeMode()Ltachiyomi/core/preference/Preference; Leu/kanade/domain/ui/UiPreferences$Companion; HSPLeu/kanade/domain/ui/UiPreferences$Companion;->()V PLeu/kanade/domain/ui/UiPreferences$Companion;->()V HSPLeu/kanade/domain/ui/UiPreferences$Companion;->(I)V PLeu/kanade/domain/ui/UiPreferences$Companion;->(I)V Leu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1; HSPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;->()V PLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;->()V HSPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;->()V PLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;->()V Leu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$2; HSPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$2;->(Leu/kanade/domain/ui/model/AppTheme;)V PLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$2;->(Leu/kanade/domain/ui/model/AppTheme;)V Leu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1; HSPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;->()V PLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;->()V HSPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;->()V PLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;->()V Leu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$2; HSPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$2;->()V PLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$2;->()V Leu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1; HSPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;->()V PLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;->()V HSPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;->()V PLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;->()V Leu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$2; HSPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$2;->(Leu/kanade/domain/ui/model/ThemeMode;)V PLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$2;->(Leu/kanade/domain/ui/model/ThemeMode;)V Leu/kanade/domain/ui/model/AppTheme; HSPLeu/kanade/domain/ui/model/AppTheme;->()V PLeu/kanade/domain/ui/model/AppTheme;->()V HSPLeu/kanade/domain/ui/model/AppTheme;->(Ljava/lang/String;ILjava/lang/Integer;)V PLeu/kanade/domain/ui/model/AppTheme;->(Ljava/lang/String;ILjava/lang/Integer;)V Leu/kanade/domain/ui/model/TabletUiMode; HSPLeu/kanade/domain/ui/model/TabletUiMode;->()V PLeu/kanade/domain/ui/model/TabletUiMode;->()V HSPLeu/kanade/domain/ui/model/TabletUiMode;->(Ljava/lang/String;II)V PLeu/kanade/domain/ui/model/TabletUiMode;->(Ljava/lang/String;II)V Leu/kanade/domain/ui/model/ThemeMode; HSPLeu/kanade/domain/ui/model/ThemeMode;->()V PLeu/kanade/domain/ui/model/ThemeMode;->()V HSPLeu/kanade/domain/ui/model/ThemeMode;->(Ljava/lang/String;I)V PLeu/kanade/domain/ui/model/ThemeMode;->(Ljava/lang/String;I)V Leu/kanade/domain/ui/model/ThemeModeKt; HSPLeu/kanade/domain/ui/model/ThemeModeKt;->setAppCompatDelegateThemeMode(Leu/kanade/domain/ui/model/ThemeMode;)V PLeu/kanade/domain/ui/model/ThemeModeKt;->setAppCompatDelegateThemeMode(Leu/kanade/domain/ui/model/ThemeMode;)V Leu/kanade/presentation/components/AppBar$Action; HSPLeu/kanade/presentation/components/AppBar$Action;->(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function0;ZI)V HPLeu/kanade/presentation/components/AppBar$Action;->(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function0;ZI)V HSPLeu/kanade/presentation/components/AppBar$Action;->getEnabled()Z PLeu/kanade/presentation/components/AppBar$Action;->getEnabled()Z HSPLeu/kanade/presentation/components/AppBar$Action;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; PLeu/kanade/presentation/components/AppBar$Action;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLeu/kanade/presentation/components/AppBar$Action;->getIconTint-QN2ZGVo()Landroidx/compose/ui/graphics/Color; PLeu/kanade/presentation/components/AppBar$Action;->getIconTint-QN2ZGVo()Landroidx/compose/ui/graphics/Color; HSPLeu/kanade/presentation/components/AppBar$Action;->getOnClick()Lkotlin/jvm/functions/Function0; PLeu/kanade/presentation/components/AppBar$Action;->getOnClick()Lkotlin/jvm/functions/Function0; HSPLeu/kanade/presentation/components/AppBar$Action;->getTitle()Ljava/lang/String; PLeu/kanade/presentation/components/AppBar$Action;->getTitle()Ljava/lang/String; Leu/kanade/presentation/components/AppBar$AppBarAction; Leu/kanade/presentation/components/AppBar$OverflowAction; HSPLeu/kanade/presentation/components/AppBar$OverflowAction;->(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V HPLeu/kanade/presentation/components/AppBar$OverflowAction;->(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V Leu/kanade/presentation/components/AppBarKt; HSPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/components/AppBarKt;->AppBarActions(Ljava/util/List;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/components/AppBarKt;->AppBarActions(Ljava/util/List;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/presentation/components/AppBarKt;->AppBarTitle(Ljava/lang/String;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/components/AppBarKt;->AppBarTitle(Ljava/lang/String;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/components/AppBarKt;->SearchToolbar(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V HPLeu/kanade/presentation/components/AppBarKt;->SearchToolbar(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V PLeu/kanade/presentation/components/AppBarKt;->UpIcon(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/components/AppBarKt;->UpIcon(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/components/AppBarKt;->access$AppBar$lambda$1(Landroidx/compose/runtime/State;)Z PLeu/kanade/presentation/components/AppBarKt;->access$AppBar$lambda$1(Landroidx/compose/runtime/State;)Z Leu/kanade/presentation/components/AppBarKt$AppBar$2; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$2;->(ILjava/lang/String;Ljava/lang/String;ILandroidx/compose/runtime/State;)V PLeu/kanade/presentation/components/AppBarKt$AppBar$2;->(ILjava/lang/String;Ljava/lang/String;ILandroidx/compose/runtime/State;)V HSPLeu/kanade/presentation/components/AppBarKt$AppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$AppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBar$3; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$3;->(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;)V PLeu/kanade/presentation/components/AppBarKt$AppBar$3;->(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;)V HSPLeu/kanade/presentation/components/AppBarKt$AppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$AppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBar$4; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$4;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V PLeu/kanade/presentation/components/AppBarKt$AppBar$4;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V Leu/kanade/presentation/components/AppBarKt$AppBar$5; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$5;->()V PLeu/kanade/presentation/components/AppBarKt$AppBar$5;->()V HSPLeu/kanade/presentation/components/AppBarKt$AppBar$5;->()V PLeu/kanade/presentation/components/AppBarKt$AppBar$5;->()V Leu/kanade/presentation/components/AppBarKt$AppBar$6$1; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;->(ZLkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;)V PLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;->(ZLkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;)V HSPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBar$7; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$7;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V PLeu/kanade/presentation/components/AppBarKt$AppBar$7;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V Leu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1; HSPLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;->(I)V PLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;->(I)V HSPLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;->invoke()Ljava/lang/Object; PLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;->invoke()Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBarActions$1$1; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$1;->(Leu/kanade/presentation/components/AppBar$Action;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$1;->(Leu/kanade/presentation/components/AppBar$Action;)V Leu/kanade/presentation/components/AppBarKt$AppBarActions$1$2; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;->(Leu/kanade/presentation/components/AppBar$Action;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;->(Leu/kanade/presentation/components/AppBar$Action;)V HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;->(Leu/kanade/presentation/components/AppBar$Action;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;->(Leu/kanade/presentation/components/AppBar$Action;)V HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBarActions$2; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;->(Landroidx/compose/runtime/MutableState;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;->(Landroidx/compose/runtime/MutableState;)V HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$AppBarActions$2$1$1; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2$1$1;->(Landroidx/compose/runtime/MutableState;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$2$1$1;->(Landroidx/compose/runtime/MutableState;)V Leu/kanade/presentation/components/AppBarKt$AppBarActions$3$1; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$3$1;->(Landroidx/compose/runtime/MutableState;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$3$1;->(Landroidx/compose/runtime/MutableState;)V Leu/kanade/presentation/components/AppBarKt$AppBarActions$4; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$4;->(Landroidx/compose/runtime/MutableState;Ljava/util/ArrayList;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$4;->(Landroidx/compose/runtime/MutableState;Ljava/util/ArrayList;)V Leu/kanade/presentation/components/AppBarKt$AppBarActions$5; HSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$5;->(ILjava/util/List;)V PLeu/kanade/presentation/components/AppBarKt$AppBarActions$5;->(ILjava/util/List;)V Leu/kanade/presentation/components/AppBarKt$SearchToolbar$1; HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;->()V PLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;->()V HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;->()V PLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;->()V Leu/kanade/presentation/components/AppBarKt$SearchToolbar$2$1; HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$2$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/components/AppBarKt$SearchToolbar$2$1;->(Lkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/components/AppBarKt$SearchToolbar$4; HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILandroidx/compose/ui/focus/FocusRequester;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;ILkotlin/jvm/functions/Function1;Ljava/lang/String;)V HPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILandroidx/compose/ui/focus/FocusRequester;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;ILkotlin/jvm/functions/Function1;Ljava/lang/String;)V HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$SearchToolbar$5; HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;->(Lkotlin/jvm/functions/Function1;IZLjava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/focus/FocusRequester;)V HPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;->(Lkotlin/jvm/functions/Function1;IZLjava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/focus/FocusRequester;)V HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1; HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;->(Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/AppBarKt$SearchToolbar$5$onClick$1$1; HSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$onClick$1$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$onClick$1$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/components/AppBarKt$UpIcon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;II)V Leu/kanade/presentation/components/BannersKt; HSPLeu/kanade/presentation/components/BannersKt;->AppStateBanners(ZZZLandroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/components/BannersKt;->AppStateBanners(ZZZLandroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;->(ZILandroidx/compose/foundation/layout/AndroidWindowInsets;ZIZ)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;->(ZILandroidx/compose/foundation/layout/AndroidWindowInsets;ZIZ)V HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;->(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;II)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;->(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;II)V HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;->(IIIZ)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;->(IIIZ)V HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1$1;->(II)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1$1;->(II)V Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;->(IIIIZ)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;->(IIIIZ)V HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1$1;->(III)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1$1;->(III)V Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;->(ZILandroidx/compose/foundation/layout/WindowInsets;)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;->(ZILandroidx/compose/foundation/layout/WindowInsets;)V HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1$1; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1$1;->(Landroidx/compose/foundation/layout/WindowInsets;)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1$1;->(Landroidx/compose/foundation/layout/WindowInsets;)V Leu/kanade/presentation/components/BannersKt$AppStateBanners$2; HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;->(ZZZLandroidx/compose/ui/Modifier;II)V PLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;->(ZZZLandroidx/compose/ui/Modifier;II)V HSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/ComposableSingletons$AppBarKt; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;->()V Leu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1; HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;->()V HSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;->()V PLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;->()V Leu/kanade/presentation/components/DropdownMenuKt; HSPLeu/kanade/presentation/components/DropdownMenuKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/components/DropdownMenuKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt; HSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;->()V PLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;->()V HSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;->()V PLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;->()V Leu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1; HSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->()V PLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->()V HSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->()V PLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->()V HSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/history/HistoryScreenKt; HSPLeu/kanade/presentation/history/HistoryScreenKt;->HistoryScreen(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Landroidx/compose/material3/SnackbarHostState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/history/HistoryScreenKt;->HistoryScreen(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Landroidx/compose/material3/SnackbarHostState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V Leu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1; HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)V HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)V HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1; HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;->(ILkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;->(ILkotlin/jvm/functions/Function1;)V HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1$1$1; HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1$1$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1$1$1;->(Lkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2; HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;->(Landroidx/compose/material3/SnackbarHostState;I)V HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;->(Landroidx/compose/material3/SnackbarHostState;I)V HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3; HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V HSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/library/components/LibraryToolbarKt; HSPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryRegularToolbar(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryRegularToolbar(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryToolbar(ZILeu/kanade/presentation/library/components/LibraryToolbarTitle;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryToolbar(ZILeu/kanade/presentation/library/components/LibraryToolbarTitle;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1; HSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;->(Leu/kanade/presentation/library/components/LibraryToolbarTitle;F)V PLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;->(Leu/kanade/presentation/library/components/LibraryToolbarTitle;F)V HSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2; HSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;->(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;->(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$3; HSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$3;->(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V PLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$3;->(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V Leu/kanade/presentation/library/components/LibraryToolbarTitle; HSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->(Ljava/lang/String;Ljava/lang/Integer;)V PLeu/kanade/presentation/library/components/LibraryToolbarTitle;->(Ljava/lang/String;Ljava/lang/Integer;)V HSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->equals(Ljava/lang/Object;)Z PLeu/kanade/presentation/library/components/LibraryToolbarTitle;->equals(Ljava/lang/Object;)Z HSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getNumberOfManga()Ljava/lang/Integer; PLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getNumberOfManga()Ljava/lang/Integer; HSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getText()Ljava/lang/String; PLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getText()Ljava/lang/String; Leu/kanade/presentation/manga/components/MangaBottomActionMenuKt; HSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->LibraryBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->LibraryBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->MangaBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->MangaBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/manga/components/MangaBottomActionMenuKt$LibraryBottomActionMenu$1; HSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$LibraryBottomActionMenu$1;->(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$LibraryBottomActionMenu$1;->(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V Leu/kanade/presentation/manga/components/MangaBottomActionMenuKt$MangaBottomActionMenu$1; HSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$MangaBottomActionMenu$1;->(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$MangaBottomActionMenu$1;->(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V Leu/kanade/presentation/more/ComposableSingletons$MoreScreenKt; HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;->()V Leu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1; HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1; HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1; HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->()V PLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->()V HSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/LogoHeaderKt; HSPLeu/kanade/presentation/more/LogoHeaderKt;->LogoHeader(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/more/LogoHeaderKt;->LogoHeader(Landroidx/compose/runtime/Composer;I)V Leu/kanade/presentation/more/LogoHeaderKt$LogoHeader$2; HSPLeu/kanade/presentation/more/LogoHeaderKt$LogoHeader$2;->(I)V PLeu/kanade/presentation/more/LogoHeaderKt$LogoHeader$2;->(I)V Leu/kanade/presentation/more/MoreScreenKt; HSPLeu/kanade/presentation/more/MoreScreenKt;->MoreScreen(Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/more/MoreScreenKt;->MoreScreen(Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$1; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;->(ZLandroidx/compose/ui/platform/UriHandler;)V HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;->(ZLandroidx/compose/ui/platform/UriHandler;)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;->(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;->(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;->(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;->(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;->(ILkotlin/jvm/functions/Function1;Z)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;->(ILkotlin/jvm/functions/Function1;Z)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;->(ILkotlin/jvm/functions/Function1;Z)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;->(ILkotlin/jvm/functions/Function1;Z)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;->(ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;->(ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;->(Lkotlin/jvm/functions/Function0;I)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;->(Lkotlin/jvm/functions/Function0;I)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;->(Lkotlin/jvm/functions/Function0;I)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;->(Lkotlin/jvm/functions/Function0;I)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;->(Lkotlin/jvm/functions/Function0;I)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;->(Lkotlin/jvm/functions/Function0;I)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;->(Lkotlin/jvm/functions/Function0;I)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;->(Lkotlin/jvm/functions/Function0;I)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;->(Lkotlin/jvm/functions/Function0;I)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;->(Lkotlin/jvm/functions/Function0;I)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;->(Landroidx/compose/ui/platform/UriHandler;)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;->(Landroidx/compose/ui/platform/UriHandler;)V HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9$1; HSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9$1;->(Landroidx/compose/ui/platform/UriHandler;)V PLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9$1;->(Landroidx/compose/ui/platform/UriHandler;)V Leu/kanade/presentation/more/settings/PreferenceItemKt; HSPLeu/kanade/presentation/more/settings/PreferenceItemKt;->()V PLeu/kanade/presentation/more/settings/PreferenceItemKt;->()V HSPLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceHighlighted()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceHighlighted()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; HSPLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceMinHeight()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; PLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceMinHeight()Landroidx/compose/runtime/DynamicProvidableCompositionLocal; Leu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1; HSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->()V PLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->()V HSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->()V PLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->()V HSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->invoke()Ljava/lang/Object; PLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->invoke()Ljava/lang/Object; Leu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1; HSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->()V PLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->()V HSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->()V PLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->()V HSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->invoke()Ljava/lang/Object; PLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->invoke()Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt;->()V PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt;->()V PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;->()V PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;->()V PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;->()V PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;->()V PLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsBackupScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsBackupScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsBrowseScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsBrowseScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsDownloadScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsDownloadScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsLibraryScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsLibraryScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->Content(Landroidx/compose/runtime/Composer;I)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->Content(ZLandroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->Content(ZLandroidx/compose/runtime/Composer;I)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->access$getItems$p()Ljava/util/List; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2;->(Lkotlin/jvm/functions/Function0;Lcafe/adriel/voyager/navigator/Navigator;Z)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1$1$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2;->(Lcafe/adriel/voyager/navigator/Navigator;Z)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2$1;->(Lcafe/adriel/voyager/navigator/Navigator;Z)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3;->(ZLcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/TopAppBarState;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1;->(Ljava/lang/Integer;ZLcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$1;->()V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$1;->()V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Leu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;Lcafe/adriel/voyager/navigator/Navigator;Z)V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1$1;->(Lcafe/adriel/voyager/navigator/Navigator;Leu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;Z)V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1$1;->(Lcafe/adriel/voyager/navigator/Navigator;Leu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;Z)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$2;->(Ljava/util/List;)V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$3;->(Ljava/util/List;Ljava/lang/Integer;ZLcafe/adriel/voyager/navigator/Navigator;)V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$4;->(Leu/kanade/presentation/more/settings/screen/SettingsMainScreen;ZI)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->(IILandroidx/compose/ui/graphics/vector/ImageVector;Leu/kanade/presentation/more/settings/screen/SearchableSettings;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->(IILkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/vector/ImageVector;Lcafe/adriel/voyager/core/screen/Screen;)V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->getFormatSubtitle()Lkotlin/jvm/functions/Function2; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->getTitleRes()I HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->hashCode()I PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item$1;->(I)V HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;->()V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;->()V PLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/more/settings/screen/SettingsReaderScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsReaderScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsSecurityScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsSecurityScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsTrackingScreen;->()V PLeu/kanade/presentation/more/settings/screen/SettingsTrackingScreen;->()V PLeu/kanade/presentation/more/settings/screen/about/AboutScreen;->()V PLeu/kanade/presentation/more/settings/screen/about/AboutScreen;->()V PLeu/kanade/presentation/more/settings/screen/about/AboutScreen;->getVersionName(Z)Ljava/lang/String; Leu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt; HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->()V PLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->()V HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->BasePreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->BasePreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getPrefsHorizontalPadding()F PLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getPrefsHorizontalPadding()F HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getTrailingWidgetBuffer()F PLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getTrailingWidgetBuffer()F Leu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1; HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;->(Lkotlin/jvm/functions/Function0;)V HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;->invoke()Ljava/lang/Object; Leu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$3; Leu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1; HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;->(Z)V HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;->(Z)V HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1; HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->(ZLandroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->(ZLandroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt; HSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt;->SwitchPreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt;->SwitchPreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1; HSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;->(IZ)V PLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;->(IZ)V HSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$2$1; HSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$2$1;->(ZLkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$2$1;->(ZLkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt; HSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt;->TextPreferenceWidget-3f6hBDE(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt;->TextPreferenceWidget-3f6hBDE(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V Leu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1; HSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;->(Ljava/lang/String;I)V PLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;->(Ljava/lang/String;I)V HSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2; HSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;->(IJLandroidx/compose/ui/graphics/vector/ImageVector;)V PLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;->(IJLandroidx/compose/ui/graphics/vector/ImageVector;)V HSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$3; HSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$3;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V PLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$3;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V Leu/kanade/presentation/theme/TachiyomiThemeKt; HSPLeu/kanade/presentation/theme/TachiyomiThemeKt;->TachiyomiTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V PLeu/kanade/presentation/theme/TachiyomiThemeKt;->TachiyomiTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V Leu/kanade/presentation/updates/UpdatesScreenKt; HSPLeu/kanade/presentation/updates/UpdatesScreenKt;->UpdateScreen(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Landroidx/compose/material3/SnackbarHostState;JLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/updates/UpdatesScreenKt;->UpdateScreen(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Landroidx/compose/material3/SnackbarHostState;JLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$1$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$1$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$1$1;->(Lkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;->(Lkotlin/jvm/functions/Function0;ILeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;->(Lkotlin/jvm/functions/Function0;ILeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$1$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$1$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$1$1;->(Lkotlin/jvm/functions/Function0;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$2$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$2$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$2$1;->(Lkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$3$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$3$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$3$1;->(Lkotlin/jvm/functions/Function0;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$4$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$4$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$4$1;->(Lkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;II)V HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;II)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;->(Landroidx/compose/material3/SnackbarHostState;I)V HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;->(Landroidx/compose/material3/SnackbarHostState;I)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function0;JLandroid/content/Context;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function0;JLandroid/content/Context;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;->(Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$2; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$3; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$3;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$3;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$1; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$11; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$11;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$11;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$3; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$3;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$3;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$5; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$5;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$5;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$7; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$7;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$7;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V Leu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$9; HSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$9;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$9;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V Leu/kanade/presentation/util/ComposableSingletons$NavigatorKt; HSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;->()V PLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;->()V HSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;->()V PLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;->()V Leu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1; HSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->()V PLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->()V HSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->()V PLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->()V HSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/util/NavigatorKt; HSPLeu/kanade/presentation/util/NavigatorKt;->()V PLeu/kanade/presentation/util/NavigatorKt;->()V HSPLeu/kanade/presentation/util/NavigatorKt;->DefaultNavigatorScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/presentation/util/NavigatorKt;->DefaultNavigatorScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/presentation/util/NavigatorKt;->ScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V HPLeu/kanade/presentation/util/NavigatorKt;->ScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V PLeu/kanade/presentation/util/NavigatorKt;->getLocalBackPress()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Leu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1; HSPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;->(Lcafe/adriel/voyager/navigator/Navigator;I)V PLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;->(Lcafe/adriel/voyager/navigator/Navigator;I)V HSPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/util/NavigatorKt$LocalBackPress$1; HSPLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;->()V PLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;->()V HSPLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;->()V PLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;->()V Leu/kanade/presentation/util/NavigatorKt$ScreenTransition$1; HSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;->(Lcafe/adriel/voyager/navigator/Navigator;ILkotlin/jvm/functions/Function4;)V PLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;->(Lcafe/adriel/voyager/navigator/Navigator;ILkotlin/jvm/functions/Function4;)V HSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1; HSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;->(Lkotlin/jvm/functions/Function4;Landroidx/compose/animation/AnimatedContentScope;Lcafe/adriel/voyager/core/screen/Screen;I)V HPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;->(Lkotlin/jvm/functions/Function4;Landroidx/compose/animation/AnimatedContentScope;Lcafe/adriel/voyager/core/screen/Screen;I)V HSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/util/NavigatorKt$ScreenTransition$2; HSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;->(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;II)V PLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;->(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;II)V PLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/presentation/util/Screen; HSPLeu/kanade/presentation/util/Screen;->()V HPLeu/kanade/presentation/util/Screen;->()V HSPLeu/kanade/presentation/util/Screen;->getKey()Ljava/lang/String; HPLeu/kanade/presentation/util/Screen;->getKey()Ljava/lang/String; Leu/kanade/presentation/util/Tab; Leu/kanade/presentation/util/WindowSizeKt; HSPLeu/kanade/presentation/util/WindowSizeKt;->isTabletUi(Landroidx/compose/runtime/Composer;)Z HPLeu/kanade/presentation/util/WindowSizeKt;->isTabletUi(Landroidx/compose/runtime/Composer;)Z Leu/kanade/tachiyomi/App; HSPLeu/kanade/tachiyomi/App;->()V PLeu/kanade/tachiyomi/App;->()V HSPLeu/kanade/tachiyomi/App;->access$getDisableIncognitoReceiver$p(Leu/kanade/tachiyomi/App;)Leu/kanade/tachiyomi/App$DisableIncognitoReceiver; PLeu/kanade/tachiyomi/App;->access$getDisableIncognitoReceiver$p(Leu/kanade/tachiyomi/App;)Leu/kanade/tachiyomi/App$DisableIncognitoReceiver; HSPLeu/kanade/tachiyomi/App;->getPackageName()Ljava/lang/String; HPLeu/kanade/tachiyomi/App;->getPackageName()Ljava/lang/String; HSPLeu/kanade/tachiyomi/App;->onCreate()V PLeu/kanade/tachiyomi/App;->onCreate()V HSPLeu/kanade/tachiyomi/App;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLeu/kanade/tachiyomi/App;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLeu/kanade/tachiyomi/App;->onStop(Landroidx/lifecycle/LifecycleOwner;)V Leu/kanade/tachiyomi/App$DisableIncognitoReceiver; HSPLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;->(Leu/kanade/tachiyomi/App;)V PLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;->(Leu/kanade/tachiyomi/App;)V HSPLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;->unregister()V PLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;->unregister()V Leu/kanade/tachiyomi/App$onCreate$$inlined$get$1; HSPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$1;->()V PLeu/kanade/tachiyomi/App$onCreate$$inlined$get$1;->()V Leu/kanade/tachiyomi/App$onCreate$$inlined$get$2; HSPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$2;->()V PLeu/kanade/tachiyomi/App$onCreate$$inlined$get$2;->()V Leu/kanade/tachiyomi/App$onCreate$$inlined$get$3; HSPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$3;->()V PLeu/kanade/tachiyomi/App$onCreate$$inlined$get$3;->()V Leu/kanade/tachiyomi/App$onCreate$1; HSPLeu/kanade/tachiyomi/App$onCreate$1;->(Leu/kanade/tachiyomi/App;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/App$onCreate$1;->(Leu/kanade/tachiyomi/App;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/App$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/App$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/App$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/App$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/App$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/App$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/App$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/App$special$$inlined$injectLazy$1$1; HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1$1;->()V PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1$1;->()V Leu/kanade/tachiyomi/App$special$$inlined$injectLazy$2; HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/App$special$$inlined$injectLazy$2$1; HSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2$1;->()V PLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2$1;->()V Leu/kanade/tachiyomi/AppModule; HSPLeu/kanade/tachiyomi/AppModule;->$r8$lambda$0RHLTm-bvsDpST_-bhuVCJga1ss(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule;->$r8$lambda$0RHLTm-bvsDpST_-bhuVCJga1ss(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/AppModule;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/AppModule;->getApp()Landroid/app/Application; PLeu/kanade/tachiyomi/AppModule;->getApp()Landroid/app/Application; HSPLeu/kanade/tachiyomi/AppModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingleton$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingleton$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingleton$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$10; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$10;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$10;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$11; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$11;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$11;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$12; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$12;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$12;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$13; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$13;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$13;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$14; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$14;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$14;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$15; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$15;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$15;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$16; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$16;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$16;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$17; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$17;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$17;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$18; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$18;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$18;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$19; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$19;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$19;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$2; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$2;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$2;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$3; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$3;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$3;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$4; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$4;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$4;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$5; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$5;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$5;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$6; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$6;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$6;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$7; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$7;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$7;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$8; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$8;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$8;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$9; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$9;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$9;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$1;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$1$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->setPragma(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->setPragma(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;)V Leu/kanade/tachiyomi/AppModule$registerInjectables$10; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10;->(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$10;->(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$10;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$2; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$2;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$2;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$11; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$11;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$11;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$11;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$11;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$12; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$12;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$12;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$12;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$12;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$13; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$13;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$13;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$13;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$13;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$14; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$14;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$14;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$14;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$14;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$15; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$15;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$15;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$15;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$15;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$16; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$16;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$16;->(Leu/kanade/tachiyomi/AppModule;)V Leu/kanade/tachiyomi/AppModule$registerInjectables$17; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$17;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$17;->(Leu/kanade/tachiyomi/AppModule;)V Leu/kanade/tachiyomi/AppModule$registerInjectables$18; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$18;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$18;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$18;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$18;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$19; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$19;->(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$19;->(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$19;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$19;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$19$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$19$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$19$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$2; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$2;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$2;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$2$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$2$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$2$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$3; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$3;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$3;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$2; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$2;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$2;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$4; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$4$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$5; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$5$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->()V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$6; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$6;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$6;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$6;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$6;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$7; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$7;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$7;->(Leu/kanade/tachiyomi/AppModule;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$7;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$7;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$8; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$8;->(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$8;->(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$8;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/AppModule$registerInjectables$8;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/AppModule$registerInjectables$8$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$8$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$8$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$9; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$9;->(Leu/kanade/tachiyomi/AppModule;)V PLeu/kanade/tachiyomi/AppModule$registerInjectables$9;->(Leu/kanade/tachiyomi/AppModule;)V Leu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$1; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$1;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$1;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$2; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$2;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$2;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$3; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$3;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$3;->()V Leu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$4; HSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$4;->()V PLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$4;->()V Leu/kanade/tachiyomi/Migrations; HSPLeu/kanade/tachiyomi/Migrations;->()V PLeu/kanade/tachiyomi/Migrations;->()V HSPLeu/kanade/tachiyomi/Migrations;->()V PLeu/kanade/tachiyomi/Migrations;->()V Leu/kanade/tachiyomi/PreferenceModule; HSPLeu/kanade/tachiyomi/PreferenceModule;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/PreferenceModule;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/PreferenceModule;->getApplication()Landroid/app/Application; PLeu/kanade/tachiyomi/PreferenceModule;->getApplication()Landroid/app/Application; HSPLeu/kanade/tachiyomi/PreferenceModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$10; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$10;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$10;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$11; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$11;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$11;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$12; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$12;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$12;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$13; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$13;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$13;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$2; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$2;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$2;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$3; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$3;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$3;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$4; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$4;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$4;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$5; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$5;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$5;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$6; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$6;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$6;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$7; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$7;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$7;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$8; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$8;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$8;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$9; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$9;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$9;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;->(Leu/kanade/tachiyomi/PreferenceModule;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;->(Leu/kanade/tachiyomi/PreferenceModule;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$10; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;->(Leu/kanade/tachiyomi/PreferenceModule;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;->(Leu/kanade/tachiyomi/PreferenceModule;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$11; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$2; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$2;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$2;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$12; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$12$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$13; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;->(Leu/kanade/tachiyomi/PreferenceModule;Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;->(Leu/kanade/tachiyomi/PreferenceModule;Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$13$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$2; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$2$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$3; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$3$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$4; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$4$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$5; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$5$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$6; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$6$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$7; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$7$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$8; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;->(Leu/kanade/tachiyomi/PreferenceModule;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;->(Leu/kanade/tachiyomi/PreferenceModule;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$9; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$1; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$1;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$1;->()V Leu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$2; HSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$2;->()V PLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$2;->()V Leu/kanade/tachiyomi/core/security/SecurityPreferences; HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/tachiyomi/core/security/SecurityPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->secureScreen()Ltachiyomi/core/preference/Preference; PLeu/kanade/tachiyomi/core/security/SecurityPreferences;->secureScreen()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->useAuthenticator()Ltachiyomi/core/preference/Preference; PLeu/kanade/tachiyomi/core/security/SecurityPreferences;->useAuthenticator()Ltachiyomi/core/preference/Preference; Leu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode; HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;->()V PLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;->()V HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;->(Ljava/lang/String;II)V PLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;->(Ljava/lang/String;II)V Leu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1; HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;->()V PLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;->()V HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;->()V PLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;->()V Leu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$2; HSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$2;->()V PLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$2;->()V Leu/kanade/tachiyomi/crash/CrashActivity; Leu/kanade/tachiyomi/crash/GlobalExceptionHandler; HSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;->()V PLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;->()V HSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;->(Landroid/content/Context;Ljava/lang/Thread$UncaughtExceptionHandler;)V PLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;->(Landroid/content/Context;Ljava/lang/Thread$UncaughtExceptionHandler;)V Leu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion; HSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;->()V PLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;->()V HSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;->(I)V PLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;->(I)V Leu/kanade/tachiyomi/data/backup/BackupCreateJob; HSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob;->()V PLeu/kanade/tachiyomi/data/backup/BackupCreateJob;->()V Leu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion; HSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->()V PLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->()V HSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->(I)V PLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->(I)V HSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V PLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V Leu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion$setupTask$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion$setupTask$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion$setupTask$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/cache/ChapterCache; HSPLeu/kanade/tachiyomi/data/cache/ChapterCache;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/cache/ChapterCache;->(Landroid/app/Application;)V Leu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/cache/CoverCache; HSPLeu/kanade/tachiyomi/data/cache/CoverCache;->()V PLeu/kanade/tachiyomi/data/cache/CoverCache;->()V HSPLeu/kanade/tachiyomi/data/cache/CoverCache;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/cache/CoverCache;->(Landroid/app/Application;)V Leu/kanade/tachiyomi/data/cache/CoverCache$Companion; HSPLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;->()V PLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;->()V HSPLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;->(I)V PLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;->(I)V Leu/kanade/tachiyomi/data/download/DownloadCache; HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/download/DownloadCache;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDirectoryFromPreference(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lcom/hippo/unifile/UniFile; PLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDirectoryFromPreference(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lcom/hippo/unifile/UniFile; HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDiskCacheFile(Leu/kanade/tachiyomi/data/download/DownloadCache;)Ljava/io/File; PLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDiskCacheFile(Leu/kanade/tachiyomi/data/download/DownloadCache;)Ljava/io/File; HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getRootDownloadsDirLock$p(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lkotlinx/coroutines/sync/Mutex; PLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getRootDownloadsDirLock$p(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lkotlinx/coroutines/sync/Mutex; HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$setRootDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadCache;Leu/kanade/tachiyomi/data/download/RootDirectory;)V PLeu/kanade/tachiyomi/data/download/DownloadCache;->access$setRootDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadCache;Leu/kanade/tachiyomi/data/download/RootDirectory;)V HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->getChanges()Lkotlinx/coroutines/flow/SharedFlow; PLeu/kanade/tachiyomi/data/download/DownloadCache;->getChanges()Lkotlinx/coroutines/flow/SharedFlow; HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->invalidateCache()V PLeu/kanade/tachiyomi/data/download/DownloadCache;->invalidateCache()V HSPLeu/kanade/tachiyomi/data/download/DownloadCache;->isInitializing()Lkotlinx/coroutines/flow/StateFlow; PLeu/kanade/tachiyomi/data/download/DownloadCache;->isInitializing()Lkotlinx/coroutines/flow/StateFlow; Leu/kanade/tachiyomi/data/download/DownloadCache$1; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadCache$1;->(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/DownloadCache$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadCache$2; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadCache$2;->(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/DownloadCache$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadCache$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadCache$changes$1; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/data/download/DownloadManager; HSPLeu/kanade/tachiyomi/data/download/DownloadManager;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/download/DownloadManager;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/data/download/DownloadManager;->getQueueState()Lkotlinx/coroutines/flow/StateFlow; PLeu/kanade/tachiyomi/data/download/DownloadManager;->getQueueState()Lkotlinx/coroutines/flow/StateFlow; HSPLeu/kanade/tachiyomi/data/download/DownloadManager;->progressFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; PLeu/kanade/tachiyomi/data/download/DownloadManager;->progressFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; HSPLeu/kanade/tachiyomi/data/download/DownloadManager;->statusFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; PLeu/kanade/tachiyomi/data/download/DownloadManager;->statusFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; Leu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$5; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$5;->()V PLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$5;->()V Leu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadPendingDeleter; HSPLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter;->(Landroid/app/Application;)V Leu/kanade/tachiyomi/data/download/DownloadPendingDeleter$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/download/DownloadProvider; HSPLeu/kanade/tachiyomi/data/download/DownloadProvider;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/download/DownloadProvider;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$getContext$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;)Landroid/content/Context; PLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$getContext$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;)Landroid/content/Context; HSPLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$setDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lcom/hippo/unifile/UniFile;)V PLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$setDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lcom/hippo/unifile/UniFile;)V Leu/kanade/tachiyomi/data/download/DownloadProvider$1; HSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/DownloadProvider$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/download/DownloadProvider$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/download/DownloadProvider$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/download/DownloadService; HSPLeu/kanade/tachiyomi/data/download/DownloadService;->()V PLeu/kanade/tachiyomi/data/download/DownloadService;->()V HSPLeu/kanade/tachiyomi/data/download/DownloadService;->access$isRunning$cp()Lkotlinx/coroutines/flow/StateFlow; PLeu/kanade/tachiyomi/data/download/DownloadService;->access$isRunning$cp()Lkotlinx/coroutines/flow/StateFlow; Leu/kanade/tachiyomi/data/download/DownloadService$Companion; HSPLeu/kanade/tachiyomi/data/download/DownloadService$Companion;->()V PLeu/kanade/tachiyomi/data/download/DownloadService$Companion;->()V HSPLeu/kanade/tachiyomi/data/download/DownloadService$Companion;->(I)V PLeu/kanade/tachiyomi/data/download/DownloadService$Companion;->(I)V Leu/kanade/tachiyomi/data/download/DownloadStore; HSPLeu/kanade/tachiyomi/data/download/DownloadStore;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/download/DownloadStore;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/data/download/DownloadStore;->addAll(Ljava/util/List;)V PLeu/kanade/tachiyomi/data/download/DownloadStore;->addAll(Ljava/util/List;)V HSPLeu/kanade/tachiyomi/data/download/DownloadStore;->clear()V PLeu/kanade/tachiyomi/data/download/DownloadStore;->clear()V HSPLeu/kanade/tachiyomi/data/download/DownloadStore;->restore()Ljava/util/ArrayList; PLeu/kanade/tachiyomi/data/download/DownloadStore;->restore()Ljava/util/ArrayList; Leu/kanade/tachiyomi/data/download/DownloadStore$restore$$inlined$sortedBy$1; HSPLeu/kanade/tachiyomi/data/download/DownloadStore$restore$$inlined$sortedBy$1;->()V PLeu/kanade/tachiyomi/data/download/DownloadStore$restore$$inlined$sortedBy$1;->()V Leu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/data/download/Downloader; HSPLeu/kanade/tachiyomi/data/download/Downloader;->()V PLeu/kanade/tachiyomi/data/download/Downloader;->()V HSPLeu/kanade/tachiyomi/data/download/Downloader;->(Landroid/app/Application;Leu/kanade/tachiyomi/data/download/DownloadProvider;Leu/kanade/tachiyomi/data/download/DownloadCache;)V PLeu/kanade/tachiyomi/data/download/Downloader;->(Landroid/app/Application;Leu/kanade/tachiyomi/data/download/DownloadProvider;Leu/kanade/tachiyomi/data/download/DownloadCache;)V HSPLeu/kanade/tachiyomi/data/download/Downloader;->access$addAllToQueue(Leu/kanade/tachiyomi/data/download/Downloader;Ljava/util/List;)V PLeu/kanade/tachiyomi/data/download/Downloader;->access$addAllToQueue(Leu/kanade/tachiyomi/data/download/Downloader;Ljava/util/List;)V HSPLeu/kanade/tachiyomi/data/download/Downloader;->access$getStore$p(Leu/kanade/tachiyomi/data/download/Downloader;)Leu/kanade/tachiyomi/data/download/DownloadStore; PLeu/kanade/tachiyomi/data/download/Downloader;->access$getStore$p(Leu/kanade/tachiyomi/data/download/Downloader;)Leu/kanade/tachiyomi/data/download/DownloadStore; HSPLeu/kanade/tachiyomi/data/download/Downloader;->addAllToQueue(Ljava/util/List;)V PLeu/kanade/tachiyomi/data/download/Downloader;->addAllToQueue(Ljava/util/List;)V HSPLeu/kanade/tachiyomi/data/download/Downloader;->getQueueState()Lkotlinx/coroutines/flow/StateFlow; PLeu/kanade/tachiyomi/data/download/Downloader;->getQueueState()Lkotlinx/coroutines/flow/StateFlow; Leu/kanade/tachiyomi/data/download/Downloader$1; HSPLeu/kanade/tachiyomi/data/download/Downloader$1;->(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/Downloader$1;->(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/Downloader$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/Downloader$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/Downloader$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/Downloader$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/data/download/Downloader$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/Downloader$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/Downloader$1$chapters$1; HSPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/download/Downloader$Companion; HSPLeu/kanade/tachiyomi/data/download/Downloader$Companion;->()V PLeu/kanade/tachiyomi/data/download/Downloader$Companion;->()V HSPLeu/kanade/tachiyomi/data/download/Downloader$Companion;->(I)V PLeu/kanade/tachiyomi/data/download/Downloader$Companion;->(I)V Leu/kanade/tachiyomi/data/download/Downloader$notifier$2; HSPLeu/kanade/tachiyomi/data/download/Downloader$notifier$2;->(Leu/kanade/tachiyomi/data/download/Downloader;)V PLeu/kanade/tachiyomi/data/download/Downloader$notifier$2;->(Leu/kanade/tachiyomi/data/download/Downloader;)V Leu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$5; HSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$5;->()V PLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$5;->()V Leu/kanade/tachiyomi/data/download/RootDirectory; HSPLeu/kanade/tachiyomi/data/download/RootDirectory;->()V PLeu/kanade/tachiyomi/data/download/RootDirectory;->()V HSPLeu/kanade/tachiyomi/data/download/RootDirectory;->(Lcom/hippo/unifile/UniFile;)V PLeu/kanade/tachiyomi/data/download/RootDirectory;->(Lcom/hippo/unifile/UniFile;)V Leu/kanade/tachiyomi/data/download/RootDirectory$Companion; HSPLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;->()V PLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;->()V HSPLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;->(I)V PLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;->(I)V Leu/kanade/tachiyomi/data/download/SourceDirectory$$serializer; HSPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->()V PLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->()V HSPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->()V PLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->()V HSPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Leu/kanade/tachiyomi/data/library/LibraryUpdateJob; HSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob;->()V PLeu/kanade/tachiyomi/data/library/LibraryUpdateJob;->()V Leu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion; HSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->()V PLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->()V HSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->(I)V PLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->(I)V HSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V PLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V Leu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion$setupTask$$inlined$get$1; HSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion$setupTask$$inlined$get$1;->()V PLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion$setupTask$$inlined$get$1;->()V Leu/kanade/tachiyomi/data/notification/Notifications; HSPLeu/kanade/tachiyomi/data/notification/Notifications;->()V PLeu/kanade/tachiyomi/data/notification/Notifications;->()V HSPLeu/kanade/tachiyomi/data/notification/Notifications;->()V PLeu/kanade/tachiyomi/data/notification/Notifications;->()V HSPLeu/kanade/tachiyomi/data/notification/Notifications;->createChannels(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications;->createChannels(Landroid/content/Context;)V Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$10; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$11; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$12; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$13; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$14; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$15; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$16; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$17; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$2; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$3; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$4; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$5; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$6; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$7; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$8; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/notification/Notifications$createChannels$9; HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;->(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/data/saver/ImageSaver; Leu/kanade/tachiyomi/data/track/DeletableTrackService; Leu/kanade/tachiyomi/data/track/EnhancedTrackService; Leu/kanade/tachiyomi/data/track/TrackManager; HSPLeu/kanade/tachiyomi/data/track/TrackManager;->()V PLeu/kanade/tachiyomi/data/track/TrackManager;->()V HSPLeu/kanade/tachiyomi/data/track/TrackManager;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/track/TrackManager;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/data/track/TrackManager;->getServices()Ljava/util/List; PLeu/kanade/tachiyomi/data/track/TrackManager;->getServices()Ljava/util/List; Leu/kanade/tachiyomi/data/track/TrackManager$Companion; HSPLeu/kanade/tachiyomi/data/track/TrackManager$Companion;->()V PLeu/kanade/tachiyomi/data/track/TrackManager$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/TrackManager$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/TrackManager$Companion;->(I)V Leu/kanade/tachiyomi/data/track/TrackService; HSPLeu/kanade/tachiyomi/data/track/TrackService;->(J)V PLeu/kanade/tachiyomi/data/track/TrackService;->(J)V HSPLeu/kanade/tachiyomi/data/track/TrackService;->getId()J PLeu/kanade/tachiyomi/data/track/TrackService;->getId()J HSPLeu/kanade/tachiyomi/data/track/TrackService;->getNetworkService()Leu/kanade/tachiyomi/network/NetworkHelper; PLeu/kanade/tachiyomi/data/track/TrackService;->getNetworkService()Leu/kanade/tachiyomi/network/NetworkHelper; HSPLeu/kanade/tachiyomi/data/track/TrackService;->getTrackPreferences()Leu/kanade/domain/track/service/TrackPreferences; PLeu/kanade/tachiyomi/data/track/TrackService;->getTrackPreferences()Leu/kanade/domain/track/service/TrackPreferences; HSPLeu/kanade/tachiyomi/data/track/TrackService;->getUsername()Ljava/lang/String; PLeu/kanade/tachiyomi/data/track/TrackService;->getUsername()Ljava/lang/String; HSPLeu/kanade/tachiyomi/data/track/TrackService;->isLogged()Z PLeu/kanade/tachiyomi/data/track/TrackService;->isLogged()Z Leu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2; HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2$1; HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2$1;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2$1;->()V Leu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3; HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->()V HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->()V HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3$1; HSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3$1;->()V PLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3$1;->()V Leu/kanade/tachiyomi/data/track/anilist/Anilist; HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist;->()V PLeu/kanade/tachiyomi/data/track/anilist/Anilist;->()V HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist;->()V PLeu/kanade/tachiyomi/data/track/anilist/Anilist;->()V Leu/kanade/tachiyomi/data/track/anilist/Anilist$Companion; HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;->()V PLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;->(I)V Leu/kanade/tachiyomi/data/track/anilist/Anilist$api$2; HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$api$2;->(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V PLeu/kanade/tachiyomi/data/track/anilist/Anilist$api$2;->(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V Leu/kanade/tachiyomi/data/track/anilist/Anilist$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$interceptor$2;->(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V PLeu/kanade/tachiyomi/data/track/anilist/Anilist$interceptor$2;->(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V Leu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/track/bangumi/Bangumi; HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;->()V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;->()V HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;->()V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;->()V Leu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion; HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;->()V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;->(I)V Leu/kanade/tachiyomi/data/track/bangumi/Bangumi$api$2; HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$api$2;->(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$api$2;->(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V Leu/kanade/tachiyomi/data/track/bangumi/Bangumi$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$interceptor$2;->(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$interceptor$2;->(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V Leu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/track/kavita/Kavita; HSPLeu/kanade/tachiyomi/data/track/kavita/Kavita;->()V PLeu/kanade/tachiyomi/data/track/kavita/Kavita;->()V HSPLeu/kanade/tachiyomi/data/track/kavita/Kavita;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/track/kavita/Kavita;->(Landroid/app/Application;)V Leu/kanade/tachiyomi/data/track/kavita/Kavita$Companion; HSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;->()V PLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;->(I)V Leu/kanade/tachiyomi/data/track/kavita/Kavita$api$2; HSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$api$2;->(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V PLeu/kanade/tachiyomi/data/track/kavita/Kavita$api$2;->(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V Leu/kanade/tachiyomi/data/track/kavita/Kavita$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$interceptor$2;->(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V PLeu/kanade/tachiyomi/data/track/kavita/Kavita$interceptor$2;->(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V Leu/kanade/tachiyomi/data/track/kitsu/Kitsu; HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;->()V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;->()V HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;->()V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;->()V Leu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion; HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;->()V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;->(I)V Leu/kanade/tachiyomi/data/track/kitsu/Kitsu$api$2; HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$api$2;->(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$api$2;->(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V Leu/kanade/tachiyomi/data/track/kitsu/Kitsu$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$interceptor$2;->(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$interceptor$2;->(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V Leu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/track/komga/Komga; HSPLeu/kanade/tachiyomi/data/track/komga/Komga;->()V PLeu/kanade/tachiyomi/data/track/komga/Komga;->()V HSPLeu/kanade/tachiyomi/data/track/komga/Komga;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/data/track/komga/Komga;->(Landroid/app/Application;)V Leu/kanade/tachiyomi/data/track/komga/Komga$Companion; HSPLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;->()V PLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;->(I)V Leu/kanade/tachiyomi/data/track/komga/Komga$api$2; HSPLeu/kanade/tachiyomi/data/track/komga/Komga$api$2;->(Leu/kanade/tachiyomi/data/track/komga/Komga;)V PLeu/kanade/tachiyomi/data/track/komga/Komga$api$2;->(Leu/kanade/tachiyomi/data/track/komga/Komga;)V Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates; HSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;->()V PLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;->()V HSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;->()V HPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;->()V Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion; HSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;->()V PLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;->(I)V Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$api$2; HSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$api$2;->(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V PLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$api$2;->(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$interceptor$2;->(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V PLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$interceptor$2;->(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList; HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;->()V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;->()V HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;->()V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;->()V Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion; HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;->()V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;->(I)V Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$api$2; HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$api$2;->(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$api$2;->(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$interceptor$2;->(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$interceptor$2;->(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/track/shikimori/Shikimori; HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;->()V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;->()V HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;->()V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;->()V Leu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion; HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;->()V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;->(I)V Leu/kanade/tachiyomi/data/track/shikimori/Shikimori$api$2; HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$api$2;->(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$api$2;->(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V Leu/kanade/tachiyomi/data/track/shikimori/Shikimori$interceptor$2; HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$interceptor$2;->(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$interceptor$2;->(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V Leu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/data/track/suwayomi/Suwayomi; HSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;->()V PLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;->()V HSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;->()V PLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;->()V Leu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion; HSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;->()V PLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;->()V HSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;->(I)V PLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;->(I)V Leu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2; HSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;->()V PLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;->()V HSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;->()V PLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;->()V Leu/kanade/tachiyomi/extension/ExtensionManager; HSPLeu/kanade/tachiyomi/extension/ExtensionManager;->(Landroid/app/Application;)V PLeu/kanade/tachiyomi/extension/ExtensionManager;->(Landroid/app/Application;)V HSPLeu/kanade/tachiyomi/extension/ExtensionManager;->getInstalledExtensionsFlow()Lkotlinx/coroutines/flow/StateFlow; PLeu/kanade/tachiyomi/extension/ExtensionManager;->getInstalledExtensionsFlow()Lkotlinx/coroutines/flow/StateFlow; Leu/kanade/tachiyomi/extension/ExtensionManager$InstallationListener; HSPLeu/kanade/tachiyomi/extension/ExtensionManager$InstallationListener;->(Leu/kanade/tachiyomi/extension/ExtensionManager;)V PLeu/kanade/tachiyomi/extension/ExtensionManager$InstallationListener;->(Leu/kanade/tachiyomi/extension/ExtensionManager;)V Leu/kanade/tachiyomi/extension/ExtensionManager$installer$2; HSPLeu/kanade/tachiyomi/extension/ExtensionManager$installer$2;->(Leu/kanade/tachiyomi/extension/ExtensionManager;)V PLeu/kanade/tachiyomi/extension/ExtensionManager$installer$2;->(Leu/kanade/tachiyomi/extension/ExtensionManager;)V Leu/kanade/tachiyomi/extension/ExtensionManager$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/extension/ExtensionManager$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/extension/ExtensionManager$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getJson(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Lkotlinx/serialization/json/Json; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getJson(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Lkotlinx/serialization/json/Json; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getNetworkService(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Leu/kanade/tachiyomi/network/NetworkHelper; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getNetworkService(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Leu/kanade/tachiyomi/network/NetworkHelper; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getPreferenceStore(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Ltachiyomi/core/preference/PreferenceStore; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getPreferenceStore(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Ltachiyomi/core/preference/PreferenceStore; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getRequiresFallbackSource$p(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Z PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getRequiresFallbackSource$p(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Z HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$toExtensions(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Ljava/util/List;)Ljava/util/ArrayList; HPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$toExtensions(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Ljava/util/List;)Ljava/util/ArrayList; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->checkForUpdates(Landroid/content/Context;Lkotlin/coroutines/Continuation;Z)Ljava/io/Serializable; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->checkForUpdates(Landroid/content/Context;Lkotlin/coroutines/Continuation;Z)Ljava/io/Serializable; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->findExtensions(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->findExtensions(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;->(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;->(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;->(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;->(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1$1; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1$1;->()V Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2$1; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2$1;->()V Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;->()V Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4$1; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4$1;->()V Leu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;->access$getExtensionSourceMapper$p()Lkotlin/jvm/functions/Function1; PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;->access$getExtensionSourceMapper$p()Lkotlin/jvm/functions/Function1; Leu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1; HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;IIILjava/util/List;)V HPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;IIILjava/util/List;)V HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->access$get$childSerializers$cp()[Lkotlinx/serialization/KSerializer; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->access$get$childSerializers$cp()[Lkotlinx/serialization/KSerializer; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getApk()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getApk()Ljava/lang/String; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getCode()J PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getCode()J HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasChangelog()I PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasChangelog()I HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasReadme()I PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasReadme()I HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getLang()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getLang()Ljava/lang/String; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getName()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getName()Ljava/lang/String; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getNsfw()I PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getNsfw()I HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getPkg()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getPkg()Ljava/lang/String; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getSources()Ljava/util/List; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getSources()Ljava/util/List; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getVersion()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getVersion()Ljava/lang/String; Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject; HPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion; HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->(I)V PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->(I)V HSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->serializer()Lkotlinx/serialization/KSerializer; PLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->serializer()Lkotlinx/serialization/KSerializer; Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->(IJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->(IJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getBaseUrl()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getBaseUrl()Ljava/lang/String; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getId()J PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getId()J HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getLang()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getLang()Ljava/lang/String; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getName()Ljava/lang/String; PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getName()Ljava/lang/String; Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->childSerializers()[Lkotlinx/serialization/KSerializer; PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->childSerializers()[Lkotlinx/serialization/KSerializer; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject; HPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->typeParametersSerializers()[Lkotlinx/serialization/KSerializer; PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->typeParametersSerializers()[Lkotlinx/serialization/KSerializer; Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion; HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;->()V PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;->()V HSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;->(I)V PLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;->(I)V Leu/kanade/tachiyomi/extension/model/Extension; HSPLeu/kanade/tachiyomi/extension/model/Extension;->()V PLeu/kanade/tachiyomi/extension/model/Extension;->()V HSPLeu/kanade/tachiyomi/extension/model/Extension;->(I)V PLeu/kanade/tachiyomi/extension/model/Extension;->(I)V Leu/kanade/tachiyomi/extension/model/Extension$Available; HSPLeu/kanade/tachiyomi/extension/model/Extension$Available;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JDLjava/lang/String;ZZZLjava/util/List;Ljava/lang/String;Ljava/lang/String;)V HPLeu/kanade/tachiyomi/extension/model/Extension$Available;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JDLjava/lang/String;ZZZLjava/util/List;Ljava/lang/String;Ljava/lang/String;)V Leu/kanade/tachiyomi/extension/model/Extension$Available$Source; HSPLeu/kanade/tachiyomi/extension/model/Extension$Available$Source;->(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HPLeu/kanade/tachiyomi/extension/model/Extension$Available$Source;->(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V Leu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver; HSPLeu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver;->(Leu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver$Listener;)V PLeu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver;->(Leu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver$Listener;)V Leu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver$Listener; Leu/kanade/tachiyomi/extension/util/ExtensionLoader; HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->()V HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->()V HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->isPackageAnExtension(Landroid/content/pm/PackageInfo;)Z PLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->isPackageAnExtension(Landroid/content/pm/PackageInfo;)Z HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->loadExtensions(Landroid/content/Context;)Ljava/util/List; PLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->loadExtensions(Landroid/content/Context;)Ljava/util/List; Leu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2; HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;->()V HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;->()V Leu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1$1; HSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1$1;->()V PLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1$1;->()V Leu/kanade/tachiyomi/network/AndroidCookieJar; HSPLeu/kanade/tachiyomi/network/AndroidCookieJar;->()V PLeu/kanade/tachiyomi/network/AndroidCookieJar;->()V HSPLeu/kanade/tachiyomi/network/AndroidCookieJar;->get(Lokhttp3/HttpUrl;)Ljava/util/List; PLeu/kanade/tachiyomi/network/AndroidCookieJar;->get(Lokhttp3/HttpUrl;)Ljava/util/List; HSPLeu/kanade/tachiyomi/network/AndroidCookieJar;->loadForRequest(Lokhttp3/HttpUrl;)Ljava/util/List; PLeu/kanade/tachiyomi/network/AndroidCookieJar;->loadForRequest(Lokhttp3/HttpUrl;)Ljava/util/List; Leu/kanade/tachiyomi/network/JavaScriptEngine; Leu/kanade/tachiyomi/network/NetworkHelper; HSPLeu/kanade/tachiyomi/network/NetworkHelper;->(Landroid/content/Context;Leu/kanade/tachiyomi/network/NetworkPreferences;)V PLeu/kanade/tachiyomi/network/NetworkHelper;->(Landroid/content/Context;Leu/kanade/tachiyomi/network/NetworkPreferences;)V HSPLeu/kanade/tachiyomi/network/NetworkHelper;->defaultUserAgentProvider()Ljava/lang/String; PLeu/kanade/tachiyomi/network/NetworkHelper;->defaultUserAgentProvider()Ljava/lang/String; HSPLeu/kanade/tachiyomi/network/NetworkHelper;->getClient()Lokhttp3/OkHttpClient; PLeu/kanade/tachiyomi/network/NetworkHelper;->getClient()Lokhttp3/OkHttpClient; Leu/kanade/tachiyomi/network/NetworkHelper$client$1$1; HSPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$1;->(Ljava/lang/Object;)V PLeu/kanade/tachiyomi/network/NetworkHelper$client$1$1;->(Ljava/lang/Object;)V Leu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1; HSPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;->(Ljava/lang/Object;)V PLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;->(Ljava/lang/Object;)V HSPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/network/NetworkPreferences; HSPLeu/kanade/tachiyomi/network/NetworkPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/tachiyomi/network/NetworkPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V HSPLeu/kanade/tachiyomi/network/NetworkPreferences;->defaultUserAgent()Ltachiyomi/core/preference/Preference; PLeu/kanade/tachiyomi/network/NetworkPreferences;->defaultUserAgent()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/tachiyomi/network/NetworkPreferences;->dohProvider()Ltachiyomi/core/preference/Preference; PLeu/kanade/tachiyomi/network/NetworkPreferences;->dohProvider()Ltachiyomi/core/preference/Preference; HSPLeu/kanade/tachiyomi/network/NetworkPreferences;->verboseLogging()Ltachiyomi/core/preference/Preference; PLeu/kanade/tachiyomi/network/NetworkPreferences;->verboseLogging()Ltachiyomi/core/preference/Preference; Leu/kanade/tachiyomi/network/OkHttpExtensionsKt; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->()V PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->()V HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->await(Lokhttp3/Call;[Ljava/lang/StackTraceElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->await(Lokhttp3/Call;[Ljava/lang/StackTraceElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->awaitSuccess(Lokhttp3/Call;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->awaitSuccess(Lokhttp3/Call;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->decodeFromJsonResponse(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokhttp3/Response;)Ljava/lang/Object; PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->decodeFromJsonResponse(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokhttp3/Response;)Ljava/lang/Object; Leu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$1; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$1;->(Lokhttp3/Call;)V PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$1;->(Lokhttp3/Call;)V Leu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;[Ljava/lang/StackTraceElement;)V PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;[Ljava/lang/StackTraceElement;)V HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;->onResponse(Lokhttp3/Call;Lokhttp3/Response;)V PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;->onResponse(Lokhttp3/Call;Lokhttp3/Response;)V Leu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1$onResponse$1; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1$onResponse$1;->(Lokhttp3/Response;)V PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1$onResponse$1;->(Lokhttp3/Response;)V Leu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1; HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/network/RequestsKt; HSPLeu/kanade/tachiyomi/network/RequestsKt;->()V PLeu/kanade/tachiyomi/network/RequestsKt;->()V HSPLeu/kanade/tachiyomi/network/RequestsKt;->GET$default(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;ILjava/lang/Object;)Lokhttp3/Request; PLeu/kanade/tachiyomi/network/RequestsKt;->GET$default(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;ILjava/lang/Object;)Lokhttp3/Request; HSPLeu/kanade/tachiyomi/network/RequestsKt;->GET(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request; PLeu/kanade/tachiyomi/network/RequestsKt;->GET(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request; HSPLeu/kanade/tachiyomi/network/RequestsKt;->GET(Lokhttp3/HttpUrl;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request; PLeu/kanade/tachiyomi/network/RequestsKt;->GET(Lokhttp3/HttpUrl;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request; Leu/kanade/tachiyomi/network/interceptor/CloudflareBypassException; Leu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor; HSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;->(Landroid/content/Context;Leu/kanade/tachiyomi/network/AndroidCookieJar;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;->(Landroid/content/Context;Leu/kanade/tachiyomi/network/AndroidCookieJar;Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;->shouldIntercept(Lokhttp3/Response;)Z PLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;->shouldIntercept(Lokhttp3/Response;)Z Leu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt; HSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;->()V PLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;->()V HSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;->access$getERROR_CODES$p()Ljava/util/List; PLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;->access$getERROR_CODES$p()Ljava/util/List; Leu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor; HSPLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;->()V PLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;->()V HSPLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Leu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor; HSPLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;->(Lkotlin/jvm/functions/Function0;)V PLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;->(Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Leu/kanade/tachiyomi/network/interceptor/WebViewInterceptor; HSPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;->(Landroid/content/Context;Lkotlin/jvm/functions/Function0;)V PLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;->(Landroid/content/Context;Lkotlin/jvm/functions/Function0;)V HSPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Leu/kanade/tachiyomi/network/interceptor/WebViewInterceptor$initWebView$2; HSPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor$initWebView$2;->(Leu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;)V PLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor$initWebView$2;->(Leu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;)V Leu/kanade/tachiyomi/source/AndroidSourceManager; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->(Landroid/app/Application;Leu/kanade/tachiyomi/extension/ExtensionManager;Ltachiyomi/domain/source/repository/StubSourceRepository;)V PLeu/kanade/tachiyomi/source/AndroidSourceManager;->(Landroid/app/Application;Leu/kanade/tachiyomi/extension/ExtensionManager;Ltachiyomi/domain/source/repository/StubSourceRepository;)V HSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getContext$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Landroid/content/Context; PLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getContext$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Landroid/content/Context; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getExtensionManager$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Leu/kanade/tachiyomi/extension/ExtensionManager; PLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getExtensionManager$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Leu/kanade/tachiyomi/extension/ExtensionManager; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourceRepository$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ltachiyomi/domain/source/repository/StubSourceRepository; PLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourceRepository$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ltachiyomi/domain/source/repository/StubSourceRepository; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourcesMapFlow$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Lkotlinx/coroutines/flow/MutableStateFlow; PLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourcesMapFlow$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getStubSourcesMap$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ljava/util/concurrent/ConcurrentHashMap; PLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getStubSourcesMap$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ljava/util/concurrent/ConcurrentHashMap; Leu/kanade/tachiyomi/source/AndroidSourceManager$1; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/source/AndroidSourceManager$1$1; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$1; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$1;->()V PLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$1;->()V Leu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$2; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$2;->()V PLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$2;->()V Leu/kanade/tachiyomi/source/AndroidSourceManager$2; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/source/AndroidSourceManager$2$1; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;->()V Leu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$map$1; HSPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V PLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V Leu/kanade/tachiyomi/source/CatalogueSource; Leu/kanade/tachiyomi/source/Source; Leu/kanade/tachiyomi/source/UnmeteredSource; Leu/kanade/tachiyomi/source/model/Filter; HSPLeu/kanade/tachiyomi/source/model/Filter;->(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLeu/kanade/tachiyomi/source/model/Filter;->(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V Leu/kanade/tachiyomi/source/model/Filter$Sort; HSPLeu/kanade/tachiyomi/source/model/Filter$Sort;->(Ljava/lang/String;[Ljava/lang/String;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V PLeu/kanade/tachiyomi/source/model/Filter$Sort;->(Ljava/lang/String;[Ljava/lang/String;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection; HSPLeu/kanade/tachiyomi/source/model/Filter$Sort$Selection;->(IZ)V PLeu/kanade/tachiyomi/source/model/Filter$Sort$Selection;->(IZ)V Leu/kanade/tachiyomi/source/model/FilterList; HSPLeu/kanade/tachiyomi/source/model/FilterList;->(Ljava/util/List;)V PLeu/kanade/tachiyomi/source/model/FilterList;->(Ljava/util/List;)V HSPLeu/kanade/tachiyomi/source/model/FilterList;->([Leu/kanade/tachiyomi/source/model/Filter;)V PLeu/kanade/tachiyomi/source/model/FilterList;->([Leu/kanade/tachiyomi/source/model/Filter;)V Leu/kanade/tachiyomi/ui/base/activity/BaseActivity; HSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->()V PLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->()V HSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->attachBaseContext(Landroid/content/Context;)V PLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->attachBaseContext(Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->onCreate(Landroid/os/Bundle;)V PLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->onCreate(Landroid/os/Bundle;)V HSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V PLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate;->()V Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->onApplicationStart()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->onApplicationStart()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->onApplicationStopped()V Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStart$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStart$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStart$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStopped$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onResume(Landroidx/lifecycle/LifecycleOwner;)V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onResume(Landroidx/lifecycle/LifecycleOwner;)V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;->(Landroid/view/Window;)V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;->(Landroid/view/Window;)V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1$1; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1$1;->()V Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2$1; HSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2$1;->()V Leu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate; HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate;->()V PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate;->()V Leu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion; HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->()V PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->()V PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->getThemeResIds(Leu/kanade/domain/ui/model/AppTheme;Z)Ljava/util/ArrayList; PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->getThemeResIds(Leu/kanade/domain/ui/model/AppTheme;Z)Ljava/util/ArrayList; Leu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl; HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;->()V PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;->()V HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;->applyAppTheme(Landroid/app/Activity;)V PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;->applyAppTheme(Landroid/app/Activity;)V Leu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl$applyAppTheme$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl$applyAppTheme$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl$applyAppTheme$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/browse/BrowseTab; HSPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->(Z)V PLeu/kanade/tachiyomi/ui/browse/BrowseTab;->(Z)V HSPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->equals(Ljava/lang/Object;)Z PLeu/kanade/tachiyomi/ui/browse/BrowseTab;->equals(Ljava/lang/Object;)Z HSPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; HPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->(I)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->(I)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getGetHistory$p(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Ltachiyomi/domain/history/interactor/GetHistory; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getGetHistory$p(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Ltachiyomi/domain/history/interactor/GetHistory; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$2$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$2$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$2$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/StateFlow;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/StateFlow;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog$Delete; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog$DeleteAll; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->(Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;)V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->(Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->equals(Ljava/lang/Object;)Z HPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->equals(Ljava/lang/Object;)Z HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getList()Ljava/util/List; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getList()Ljava/util/List; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getSearchQuery()Ljava/lang/String; PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getSearchQuery()Ljava/lang/String; Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2; HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;->()V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;->()V HSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;->()V PLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;->()V Leu/kanade/tachiyomi/ui/history/HistoryTab; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->()V PLeu/kanade/tachiyomi/ui/history/HistoryTab;->()V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->()V PLeu/kanade/tachiyomi/ui/history/HistoryTab;->()V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->Content(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/history/HistoryTab;->Content(Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->access$getResumeLastChapterReadEvent$p()Lkotlinx/coroutines/channels/Channel; PLeu/kanade/tachiyomi/ui/history/HistoryTab;->access$getResumeLastChapterReadEvent$p()Lkotlinx/coroutines/channels/Channel; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getKey()Ljava/lang/String; HPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getKey()Ljava/lang/String; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; HPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$10; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;->(Leu/kanade/tachiyomi/ui/history/HistoryTab;I)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;->(Leu/kanade/tachiyomi/ui/history/HistoryTab;I)V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$2; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$2;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$2;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$3; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$3;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$3;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$4; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$4;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$4;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$7; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$8; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$8$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8$1;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8$1;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$9; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$9$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9$1;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9$1;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/history/HistoryTab$Content$onDismissRequest$1; HSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$onDismissRequest$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V PLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$onDismissRequest$1;->(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;->()V Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V Leu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1; HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V HSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->()V PLeu/kanade/tachiyomi/ui/home/HomeScreen;->()V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->()V PLeu/kanade/tachiyomi/ui/home/HomeScreen;->()V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->Content(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/home/HomeScreen;->Content(Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationBarItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationBarItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationIconItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationIconItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getLibrarySearchEvent$p()Lkotlinx/coroutines/channels/Channel; PLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getLibrarySearchEvent$p()Lkotlinx/coroutines/channels/Channel; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getOpenTabEvent$p()Lkotlinx/coroutines/channels/Channel; PLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getOpenTabEvent$p()Lkotlinx/coroutines/channels/Channel; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getShowBottomNavEvent$p()Lkotlinx/coroutines/channels/Channel; PLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getShowBottomNavEvent$p()Lkotlinx/coroutines/channels/Channel; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getTabs$p()Ljava/util/List; PLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getTabs$p()Ljava/util/List; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->showBottomNav(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen;->showBottomNav(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->()V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->()V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->()V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->()V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;->(Lcafe/adriel/voyager/navigator/tab/Tab;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;->(Lcafe/adriel/voyager/navigator/tab/Tab;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->(Lkotlin/jvm/functions/Function0;Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->(Lkotlin/jvm/functions/Function0;Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$goToLibraryTab$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$goToLibraryTab$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$goToLibraryTab$1;->(Lcafe/adriel/voyager/navigator/tab/TabNavigator;)V Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;->(ZLcafe/adriel/voyager/navigator/tab/TabNavigator;Leu/kanade/presentation/util/Tab;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;->(ZLcafe/adriel/voyager/navigator/tab/TabNavigator;Leu/kanade/presentation/util/Tab;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;->(Leu/kanade/presentation/util/Tab;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;->(Leu/kanade/presentation/util/Tab;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;->(Leu/kanade/presentation/util/Tab;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;->(Leu/kanade/presentation/util/Tab;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;->(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;->(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;->(Leu/kanade/presentation/util/Tab;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;->(Leu/kanade/presentation/util/Tab;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$invokeSuspend$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$invokeSuspend$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$invokeSuspend$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$invokeSuspend$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$invokeSuspend$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$invokeSuspend$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2; HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;->(Leu/kanade/presentation/util/Tab;I)V PLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;->(Leu/kanade/presentation/util/Tab;I)V HSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->(I)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->(I)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$applyFilters(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$applyFilters(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getGetTracksPerManga$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Ltachiyomi/domain/track/interactor/GetTracksPerManga; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getGetTracksPerManga$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Ltachiyomi/domain/track/interactor/GetTracksPerManga; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getLibraryFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getLibraryFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getTrackingFilterFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/Flow; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getTrackingFilterFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/Flow; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getActiveCategoryIndex()I PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getActiveCategoryIndex()I HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getLibraryItemPreferencesFlow()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getLibraryItemPreferencesFlow()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getTrackingFilterFlow()Lkotlinx/coroutines/flow/Flow; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getTrackingFilterFlow()Lkotlinx/coroutines/flow/Flow; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/StateFlow;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/StateFlow;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$4; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$5; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog$ChangeCategory; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog$DeleteManga; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog$SettingsSheet; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->(ZZZZLtachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->(ZZZZLtachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterBookmarked()Ltachiyomi/core/preference/TriState; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterBookmarked()Ltachiyomi/core/preference/TriState; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterCompleted()Ltachiyomi/core/preference/TriState; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterCompleted()Ltachiyomi/core/preference/TriState; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterDownloaded()Ltachiyomi/core/preference/TriState; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterDownloaded()Ltachiyomi/core/preference/TriState; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterStarted()Ltachiyomi/core/preference/TriState; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterStarted()Ltachiyomi/core/preference/TriState; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterUnread()Ltachiyomi/core/preference/TriState; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterUnread()Ltachiyomi/core/preference/TriState; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getGlobalFilterDownloaded()Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getGlobalFilterDownloaded()Z Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->(I)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->(I)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->(ZLjava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->(ZLjava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->access$getLibraryCount(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)I PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->access$getLibraryCount(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)I HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;Ljava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;Ljava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->equals(Ljava/lang/Object;)Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->equals(Ljava/lang/Object;)Z HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getCategories()Ljava/util/List; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getCategories()Ljava/util/List; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getHasActiveFilters()Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getHasActiveFilters()Z HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getLibrary()Ljava/util/Map; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getLibrary()Ljava/util/Map; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSearchQuery()Ljava/lang/String; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSearchQuery()Ljava/lang/String; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelection()Ljava/util/List; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelection()Ljava/util/List; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelectionMode()Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelectionMode()Z HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getShowCategoryTabs()Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getShowCategoryTabs()Z HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getToolbarTitle(ILjava/lang/String;Ljava/lang/String;)Leu/kanade/presentation/library/components/LibraryToolbarTitle; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getToolbarTitle(ILjava/lang/String;Ljava/lang/String;)Leu/kanade/presentation/library/components/LibraryToolbarTitle; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLibraryEmpty()Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLibraryEmpty()Z HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLoading()Z PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLoading()Z Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFn$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFn$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFn$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnBookmarked$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnBookmarked$1;->(Ltachiyomi/core/preference/TriState;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnBookmarked$1;->(Ltachiyomi/core/preference/TriState;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnCompleted$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnCompleted$1;->(Ltachiyomi/core/preference/TriState;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnCompleted$1;->(Ltachiyomi/core/preference/TriState;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnDownloaded$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnDownloaded$1;->(Ltachiyomi/core/preference/TriState;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnDownloaded$1;->(Ltachiyomi/core/preference/TriState;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnStarted$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnStarted$1;->(Ltachiyomi/core/preference/TriState;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnStarted$1;->(Ltachiyomi/core/preference/TriState;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnTracking$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnTracking$1;->(ZZLjava/util/Map;Ljava/util/ArrayList;Ljava/util/ArrayList;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnTracking$1;->(ZZLjava/util/Map;Ljava/util/ArrayList;Ljava/util/ArrayList;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnUnread$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnUnread$1;->(Ltachiyomi/core/preference/TriState;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnUnread$1;->(Ltachiyomi/core/preference/TriState;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$lambda$7$$inlined$thenComparator$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$lambda$7$$inlined$thenComparator$1;->(Ljava/util/Comparator;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$lambda$7$$inlined$thenComparator$1;->(Ljava/util/Comparator;Lkotlin/jvm/functions/Function2;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortAlphabetically$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortAlphabetically$1;->(Ljava/text/Collator;Ljava/util/Locale;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortAlphabetically$1;->(Ljava/text/Collator;Ljava/util/Locale;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortFn$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortFn$1;->(Ljava/util/Map;Lkotlin/jvm/functions/Function2;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortFn$1;->(Ljava/util/Map;Lkotlin/jvm/functions/Function2;)V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$10; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$10;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$10;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$11; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$11;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$11;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$12; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$12;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$12;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$13; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$13;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$13;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$14; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$14;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$14;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$15; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$15;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$15;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$5; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$5;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$5;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$6; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$6;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$6;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$7; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$7;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$7;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$8; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$8;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$8;->()V Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$9; HSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$9;->()V PLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$9;->()V Leu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel; HSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel;->(I)V PLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel;->(I)V Leu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$5; HSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$5;->()V PLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$5;->()V Leu/kanade/tachiyomi/ui/library/LibraryTab; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->()V PLeu/kanade/tachiyomi/ui/library/LibraryTab;->()V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->()V PLeu/kanade/tachiyomi/ui/library/LibraryTab;->()V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->Content(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/library/LibraryTab;->Content(Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$Content$lambda$2(Landroidx/compose/runtime/State;)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State; HPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$Content$lambda$2(Landroidx/compose/runtime/State;)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getQueryEvent$p()Lkotlinx/coroutines/channels/Channel; PLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getQueryEvent$p()Lkotlinx/coroutines/channels/Channel; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getRequestSettingsSheetEvent$p()Lkotlinx/coroutines/channels/Channel; PLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getRequestSettingsSheetEvent$p()Lkotlinx/coroutines/channels/Channel; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getKey()Ljava/lang/String; HPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getKey()Ljava/lang/String; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; HPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$4; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$4;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$4;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$5; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$5;->(Lkotlin/jvm/functions/Function1;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/State;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$5;->(Lkotlin/jvm/functions/Function1;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/State;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$6$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$6$1;->(Lkotlin/jvm/functions/Function1;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$6$1;->(Lkotlin/jvm/functions/Function1;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$7; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$7;->(Lkotlinx/coroutines/CoroutineScope;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$7;->(Lkotlinx/coroutines/CoroutineScope;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$8; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$8;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$8;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$10; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$10;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$10;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$12; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$13; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$14; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;->(Leu/kanade/tachiyomi/ui/library/LibraryTab;I)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;->(Leu/kanade/tachiyomi/ui/library/LibraryTab;I)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$2; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$2;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$3;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$4; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$4;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$4;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$6; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$6;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$6;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$3; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;->(Landroidx/compose/material3/SnackbarHostState;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;->(Landroidx/compose/material3/SnackbarHostState;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$4; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lcafe/adriel/voyager/navigator/Navigator;Lkotlinx/coroutines/CoroutineScope;Landroid/content/Context;Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lcafe/adriel/voyager/navigator/Navigator;Lkotlinx/coroutines/CoroutineScope;Landroid/content/Context;Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;)V HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$4$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4$1;->(Landroidx/compose/ui/platform/UriHandler;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4$1;->(Landroidx/compose/ui/platform/UriHandler;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$onClickRefresh$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onClickRefresh$1;->(Landroid/content/Context;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/SnackbarHostState;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onClickRefresh$1;->(Landroid/content/Context;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/SnackbarHostState;)V Leu/kanade/tachiyomi/ui/library/LibraryTab$Content$onDismissRequest$1; HSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onDismissRequest$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V PLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onDismissRequest$1;->(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V Leu/kanade/tachiyomi/ui/main/MainActivity; HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$CheckForUpdates(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroidx/compose/runtime/Composer;I)V PLeu/kanade/tachiyomi/ui/main/MainActivity;->access$CheckForUpdates(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$HandleOnNewIntent(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V PLeu/kanade/tachiyomi/ui/main/MainActivity;->access$HandleOnNewIntent(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getDownloadCache(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/tachiyomi/data/download/DownloadCache; PLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getDownloadCache(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/tachiyomi/data/download/DownloadCache; HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getPreferences(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/domain/base/BasePreferences; PLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getPreferences(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/domain/base/BasePreferences; HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$handleIntentAction(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Intent;Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/main/MainActivity;->access$handleIntentAction(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Intent;Lcafe/adriel/voyager/navigator/Navigator;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$setNavigator$p(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/main/MainActivity;->access$setNavigator$p(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->getReady()Z PLeu/kanade/tachiyomi/ui/main/MainActivity;->getReady()Z HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->onCreate(Landroid/os/Bundle;)V HPLeu/kanade/tachiyomi/ui/main/MainActivity;->onCreate(Landroid/os/Bundle;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity;->setReady()V PLeu/kanade/tachiyomi/ui/main/MainActivity;->setReady()V Leu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->(Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->(Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$Companion; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;->(I)V PLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;->(I)V Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->(Landroid/content/Context;Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;->(Landroidx/activity/ComponentActivity;Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;->(Landroidx/activity/ComponentActivity;Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$2;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$2;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$2;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$2;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$3; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$3;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$3;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$4; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$4;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$4;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$5; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$5;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$5;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$6; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$6;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$6;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;JLkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;JLkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Landroid/content/Context;JZLkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Landroid/content/Context;JZLkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;ZLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;ZLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;ZLkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;ZLkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;->(Lcafe/adriel/voyager/navigator/Navigator;I)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;->(Lcafe/adriel/voyager/navigator/Navigator;I)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$2;->(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$2;->(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V Leu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;->(JLeu/kanade/tachiyomi/ui/main/MainActivity;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;->(JLeu/kanade/tachiyomi/ui/main/MainActivity;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;->shouldKeepOnScreen()Z HPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;->shouldKeepOnScreen()Z Leu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;->(Landroid/view/View;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;->(Landroid/view/View;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;->onSplashScreenExit(Landroidx/core/splashscreen/SplashScreenViewProvider;)V HPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;->onSplashScreenExit(Landroidx/core/splashscreen/SplashScreenViewProvider;)V Leu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V PLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;->(Ljava/lang/Object;I)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V HPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V Leu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->(Landroidx/core/splashscreen/SplashScreenViewProvider;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->(Landroidx/core/splashscreen/SplashScreenViewProvider;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationEnd(Landroid/animation/Animator;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationEnd(Landroid/animation/Animator;)V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationStart(Landroid/animation/Animator;)V PLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationStart(Landroid/animation/Animator;)V Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5$1; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5$1;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5$1;->()V Leu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6; HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;->()V HSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;->()V PLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;->()V Leu/kanade/tachiyomi/ui/more/DownloadQueueState; Leu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped; HSPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->()V PLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->()V HSPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->()V PLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->()V HSPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->equals(Ljava/lang/Object;)Z PLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->equals(Ljava/lang/Object;)Z Leu/kanade/tachiyomi/ui/more/MoreScreenModel; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->(I)V PLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->(I)V HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$get_state$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$get_state$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadQueueState()Lkotlinx/coroutines/flow/StateFlow; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadQueueState()Lkotlinx/coroutines/flow/StateFlow; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadedOnly()Z PLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadedOnly()Z HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getIncognitoMode()Z PLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getIncognitoMode()Z Leu/kanade/tachiyomi/ui/more/MoreScreenModel$1; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/ui/more/MoreTab; HSPLeu/kanade/tachiyomi/ui/more/MoreTab;->()V PLeu/kanade/tachiyomi/ui/more/MoreTab;->()V HSPLeu/kanade/tachiyomi/ui/more/MoreTab;->()V PLeu/kanade/tachiyomi/ui/more/MoreTab;->()V HSPLeu/kanade/tachiyomi/ui/more/MoreTab;->Content(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/more/MoreTab;->Content(Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/more/MoreTab;->getKey()Ljava/lang/String; HPLeu/kanade/tachiyomi/ui/more/MoreTab;->getKey()Ljava/lang/String; HSPLeu/kanade/tachiyomi/ui/more/MoreTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; HPLeu/kanade/tachiyomi/ui/more/MoreTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; Leu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;->(Landroidx/compose/runtime/MutableState;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;->(Landroidx/compose/runtime/MutableState;)V HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/more/MoreTab$Content$10; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$10;->(Leu/kanade/tachiyomi/ui/more/MoreTab;I)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$10;->(Leu/kanade/tachiyomi/ui/more/MoreTab;I)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$2; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$2;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$2;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$3; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$3;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$3;->(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$4; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$4;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$4;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$5; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$5;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$5;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$6; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$6;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$6;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$7; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$7;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$7;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/more/MoreTab$Content$8; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/ui/more/MoreTab$Content$9; HSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$9;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/more/MoreTab$Content$9;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences; HSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;->()V PLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;->()V HSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V Leu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion; HSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;->()V PLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;->()V HSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;->(I)V PLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;->(I)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen;->()V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen;->(ZZ)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen;->Content(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/setting/SettingsScreen;->Content(Landroidx/compose/runtime/Composer;I)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Companion;->()V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Companion;->(I)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$1;->(Lcafe/adriel/voyager/navigator/Navigator;I)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$pop$1;->(Lcafe/adriel/voyager/navigator/Navigator;Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$3;->(Leu/kanade/tachiyomi/ui/setting/SettingsScreen;I)V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->(I)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->(I)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getGetUpdates$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Ltachiyomi/domain/updates/interactor/GetUpdates; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getGetUpdates$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Ltachiyomi/domain/updates/interactor/GetUpdates; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$toUpdateItems(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Ljava/util/List;)Ljava/util/ArrayList; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$toUpdateItems(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Ljava/util/List;)Ljava/util/ArrayList; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getLastUpdated()J PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getLastUpdated()J HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getSnackbarHostState()Landroidx/compose/material3/SnackbarHostState; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getSnackbarHostState()Landroidx/compose/material3/SnackbarHostState; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->resetNewUpdatesCount()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->resetNewUpdatesCount()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->(Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$2; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$1;->(Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$1;->(Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$2; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog; Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog$DeleteConfirmation; Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->(I)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->(I)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->(ZLjava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->(ZLjava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Ljava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog$DeleteConfirmation;I)Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Ljava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog$DeleteConfirmation;I)Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->equals(Ljava/lang/Object;)Z HPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->equals(Ljava/lang/Object;)Z HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getItems()Ljava/util/List; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getItems()Ljava/util/List; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelected()Ljava/util/ArrayList; PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelected()Ljava/util/ArrayList; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelectionMode()Z PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelectionMode()Z HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->isLoading()Z PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->isLoading()Z Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$1;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$1;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$2; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$2;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$2;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$3; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$3;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$3;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$4; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$4;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$4;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$5; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$5;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$5;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$6; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$6;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$6;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$7; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$7;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$7;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$8; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$8;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$8;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$9; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$9;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$9;->()V Leu/kanade/tachiyomi/ui/updates/UpdatesTab; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->()V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->()V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->()V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->Content(Landroidx/compose/runtime/Composer;I)V HPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->Content(Landroidx/compose/runtime/Composer;I)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getKey()Ljava/lang/String; HPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getKey()Ljava/lang/String; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; HPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions; Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$1;->(Lcafe/adriel/voyager/navigator/Navigator;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$10; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$10;->(Landroid/content/Context;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$10;->(Landroid/content/Context;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;->dispose()V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;->dispose()V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$16; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$16;->(Leu/kanade/tachiyomi/ui/updates/UpdatesTab;I)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$16;->(Leu/kanade/tachiyomi/ui/updates/UpdatesTab;I)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$2; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$2;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$3; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$3;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$3;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$4; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$4;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$4;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$5; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$5;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$5;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$6; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$6;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$6;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$7; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$7;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$7;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$8; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$8;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$8;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$9; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$9;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$9;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$onDismissDialog$1; HSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$onDismissDialog$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V PLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$onDismissDialog$1;->(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V Leu/kanade/tachiyomi/util/storage/DiskUtil; HSPLeu/kanade/tachiyomi/util/storage/DiskUtil;->()V PLeu/kanade/tachiyomi/util/storage/DiskUtil;->()V HSPLeu/kanade/tachiyomi/util/storage/DiskUtil;->()V PLeu/kanade/tachiyomi/util/storage/DiskUtil;->()V HSPLeu/kanade/tachiyomi/util/storage/DiskUtil;->createNoMediaFile(Lcom/hippo/unifile/UniFile;Landroid/content/Context;)V PLeu/kanade/tachiyomi/util/storage/DiskUtil;->createNoMediaFile(Lcom/hippo/unifile/UniFile;Landroid/content/Context;)V Leu/kanade/tachiyomi/util/system/ContextExtensionsKt; HSPLeu/kanade/tachiyomi/util/system/ContextExtensionsKt;->isInstalledFromFDroid(Landroid/content/Context;)Z HPLeu/kanade/tachiyomi/util/system/ContextExtensionsKt;->isInstalledFromFDroid(Landroid/content/Context;)Z Leu/kanade/tachiyomi/util/system/DensityExtensionsKt; HSPLeu/kanade/tachiyomi/util/system/DensityExtensionsKt;->getDpToPx(I)I PLeu/kanade/tachiyomi/util/system/DensityExtensionsKt;->getDpToPx(I)I Leu/kanade/tachiyomi/util/system/DeviceUtil; HSPLeu/kanade/tachiyomi/util/system/DeviceUtil;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil;->isSamsung()Z PLeu/kanade/tachiyomi/util/system/DeviceUtil;->isSamsung()Z Leu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2; HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;->()V Leu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2; HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2; HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;->()V Leu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2; HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;->()V Leu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt; HSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;->isDynamicColorAvailable(Leu/kanade/tachiyomi/util/system/DeviceUtil;)Z PLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;->isDynamicColorAvailable(Leu/kanade/tachiyomi/util/system/DeviceUtil;)Z Leu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2; HSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->()V PLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->()V HSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->invoke()Ljava/lang/Object; PLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->invoke()Ljava/lang/Object; Leu/kanade/tachiyomi/util/system/DisplayExtensionsKt; HSPLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt;->prepareTabletUiContext(Landroid/content/Context;)Landroid/content/Context; PLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt;->prepareTabletUiContext(Landroid/content/Context;)Landroid/content/Context; Leu/kanade/tachiyomi/util/system/DisplayExtensionsKt$prepareTabletUiContext$$inlined$get$1; HSPLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt$prepareTabletUiContext$$inlined$get$1;->()V PLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt$prepareTabletUiContext$$inlined$get$1;->()V Leu/kanade/tachiyomi/util/system/InternalResourceHelper; HSPLeu/kanade/tachiyomi/util/system/InternalResourceHelper;->()V PLeu/kanade/tachiyomi/util/system/InternalResourceHelper;->()V HSPLeu/kanade/tachiyomi/util/system/InternalResourceHelper;->()V PLeu/kanade/tachiyomi/util/system/InternalResourceHelper;->()V Leu/kanade/tachiyomi/util/system/LocaleHelper; HSPLeu/kanade/tachiyomi/util/system/LocaleHelper;->()V PLeu/kanade/tachiyomi/util/system/LocaleHelper;->()V HSPLeu/kanade/tachiyomi/util/system/LocaleHelper;->()V PLeu/kanade/tachiyomi/util/system/LocaleHelper;->()V Leu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1; HSPLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;->()V PLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;->()V HSPLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;->()V PLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;->()V Leu/kanade/tachiyomi/util/system/NotificationExtensionsKt; HSPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannel(Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelCompat; PLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannel(Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelCompat; HSPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannelGroup(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelGroupCompat; PLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannelGroup(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelGroupCompat; HSPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->cancelNotification(Landroid/content/Context;I)V PLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->cancelNotification(Landroid/content/Context;I)V Leu/kanade/tachiyomi/util/system/WorkManagerExtensionsKt; HSPLeu/kanade/tachiyomi/util/system/WorkManagerExtensionsKt;->getWorkManager(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; PLeu/kanade/tachiyomi/util/system/WorkManagerExtensionsKt;->getWorkManager(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; Leu/kanade/tachiyomi/util/view/WindowExtensionsKt; Lio/requery/android/database/AbstractCursor; HSPLio/requery/android/database/AbstractCursor;->()V PLio/requery/android/database/AbstractCursor;->()V HSPLio/requery/android/database/AbstractCursor;->checkPosition()V PLio/requery/android/database/AbstractCursor;->checkPosition()V HSPLio/requery/android/database/AbstractCursor;->close()V PLio/requery/android/database/AbstractCursor;->close()V HSPLio/requery/android/database/AbstractCursor;->finalize()V PLio/requery/android/database/AbstractCursor;->finalize()V HSPLio/requery/android/database/AbstractCursor;->moveToFirst()Z PLio/requery/android/database/AbstractCursor;->moveToFirst()Z HSPLio/requery/android/database/AbstractCursor;->moveToNext()Z PLio/requery/android/database/AbstractCursor;->moveToNext()Z HSPLio/requery/android/database/AbstractCursor;->moveToPosition(I)Z PLio/requery/android/database/AbstractCursor;->moveToPosition(I)Z HSPLio/requery/android/database/AbstractCursor;->onDeactivateOrClose()V PLio/requery/android/database/AbstractCursor;->onDeactivateOrClose()V Lio/requery/android/database/AbstractWindowedCursor; HSPLio/requery/android/database/AbstractWindowedCursor;->()V PLio/requery/android/database/AbstractWindowedCursor;->()V HSPLio/requery/android/database/AbstractWindowedCursor;->checkPosition()V PLio/requery/android/database/AbstractWindowedCursor;->checkPosition()V HSPLio/requery/android/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V PLio/requery/android/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V HSPLio/requery/android/database/AbstractWindowedCursor;->closeWindow()V PLio/requery/android/database/AbstractWindowedCursor;->closeWindow()V HSPLio/requery/android/database/AbstractWindowedCursor;->getLong(I)J PLio/requery/android/database/AbstractWindowedCursor;->getLong(I)J HSPLio/requery/android/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String; PLio/requery/android/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String; HSPLio/requery/android/database/AbstractWindowedCursor;->isNull(I)Z PLio/requery/android/database/AbstractWindowedCursor;->isNull(I)Z HSPLio/requery/android/database/AbstractWindowedCursor;->onDeactivateOrClose()V PLio/requery/android/database/AbstractWindowedCursor;->onDeactivateOrClose()V Lio/requery/android/database/CursorWindow; HSPLio/requery/android/database/CursorWindow;->(Ljava/lang/String;)V PLio/requery/android/database/CursorWindow;->(Ljava/lang/String;)V HSPLio/requery/android/database/CursorWindow;->(Ljava/lang/String;I)V PLio/requery/android/database/CursorWindow;->(Ljava/lang/String;I)V HSPLio/requery/android/database/CursorWindow;->dispose()V PLio/requery/android/database/CursorWindow;->dispose()V HSPLio/requery/android/database/CursorWindow;->finalize()V PLio/requery/android/database/CursorWindow;->finalize()V HSPLio/requery/android/database/CursorWindow;->getLong(II)J PLio/requery/android/database/CursorWindow;->getLong(II)J HSPLio/requery/android/database/CursorWindow;->getNumRows()I PLio/requery/android/database/CursorWindow;->getNumRows()I HSPLio/requery/android/database/CursorWindow;->getStartPosition()I PLio/requery/android/database/CursorWindow;->getStartPosition()I HSPLio/requery/android/database/CursorWindow;->getString(II)Ljava/lang/String; PLio/requery/android/database/CursorWindow;->getString(II)Ljava/lang/String; HSPLio/requery/android/database/CursorWindow;->getType(II)I PLio/requery/android/database/CursorWindow;->getType(II)I HSPLio/requery/android/database/CursorWindow;->onAllReferencesReleased()V PLio/requery/android/database/CursorWindow;->onAllReferencesReleased()V HSPLio/requery/android/database/CursorWindow;->setStartPosition(I)V PLio/requery/android/database/CursorWindow;->setStartPosition(I)V Lio/requery/android/database/DatabaseErrorHandler; Lio/requery/android/database/sqlite/CloseGuard; HSPLio/requery/android/database/sqlite/CloseGuard;->()V PLio/requery/android/database/sqlite/CloseGuard;->()V HSPLio/requery/android/database/sqlite/CloseGuard;->()V PLio/requery/android/database/sqlite/CloseGuard;->()V HSPLio/requery/android/database/sqlite/CloseGuard;->get()Lio/requery/android/database/sqlite/CloseGuard; PLio/requery/android/database/sqlite/CloseGuard;->get()Lio/requery/android/database/sqlite/CloseGuard; HSPLio/requery/android/database/sqlite/CloseGuard;->open(Ljava/lang/String;)V PLio/requery/android/database/sqlite/CloseGuard;->open(Ljava/lang/String;)V Lio/requery/android/database/sqlite/CloseGuard$DefaultReporter; HSPLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;->()V PLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;->()V HSPLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;->(I)V PLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;->(I)V Lio/requery/android/database/sqlite/CloseGuard$Reporter; Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory; HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->()V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->()V HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->(Ljava/lang/Iterable;)V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->(Ljava/lang/Iterable;)V HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackDatabaseErrorHandler; HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackDatabaseErrorHandler;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackDatabaseErrorHandler;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper; HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Ljava/lang/Iterable;)V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Ljava/lang/Iterable;)V HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration; PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration; HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onConfigure(Lio/requery/android/database/sqlite/SQLiteDatabase;)V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onConfigure(Lio/requery/android/database/sqlite/SQLiteDatabase;)V HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onCreate(Lio/requery/android/database/sqlite/SQLiteDatabase;)V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onCreate(Lio/requery/android/database/sqlite/SQLiteDatabase;)V HSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onOpen(Lio/requery/android/database/sqlite/SQLiteDatabase;)V PLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onOpen(Lio/requery/android/database/sqlite/SQLiteDatabase;)V Lio/requery/android/database/sqlite/SQLiteClosable; HSPLio/requery/android/database/sqlite/SQLiteClosable;->()V PLio/requery/android/database/sqlite/SQLiteClosable;->()V HSPLio/requery/android/database/sqlite/SQLiteClosable;->acquireReference()V PLio/requery/android/database/sqlite/SQLiteClosable;->acquireReference()V HSPLio/requery/android/database/sqlite/SQLiteClosable;->close()V PLio/requery/android/database/sqlite/SQLiteClosable;->close()V HSPLio/requery/android/database/sqlite/SQLiteClosable;->releaseReference()V PLio/requery/android/database/sqlite/SQLiteClosable;->releaseReference()V Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnection;->()V PLio/requery/android/database/sqlite/SQLiteConnection;->()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)V PLio/requery/android/database/sqlite/SQLiteConnection;->(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement; PLio/requery/android/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement; HSPLio/requery/android/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V PLio/requery/android/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->bindArguments(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V PLio/requery/android/database/sqlite/SQLiteConnection;->bindArguments(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)I PLio/requery/android/database/sqlite/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)I HSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZLandroidx/core/os/CancellationSignal;)I PLio/requery/android/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZLandroidx/core/os/CancellationSignal;)I HSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)J PLio/requery/android/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)J HSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V PLio/requery/android/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->getTypeOfObject(Ljava/lang/Object;)I PLio/requery/android/database/sqlite/SQLiteConnection;->getTypeOfObject(Ljava/lang/Object;)I HSPLio/requery/android/database/sqlite/SQLiteConnection;->hasCodec()Z PLio/requery/android/database/sqlite/SQLiteConnection;->hasCodec()Z HSPLio/requery/android/database/sqlite/SQLiteConnection;->isCacheable(I)Z PLio/requery/android/database/sqlite/SQLiteConnection;->isCacheable(I)Z HSPLio/requery/android/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z PLio/requery/android/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z HSPLio/requery/android/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement; PLio/requery/android/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement; HSPLio/requery/android/database/sqlite/SQLiteConnection;->open()V PLio/requery/android/database/sqlite/SQLiteConnection;->open()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->open(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)Lio/requery/android/database/sqlite/SQLiteConnection; PLio/requery/android/database/sqlite/SQLiteConnection;->open(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V PLio/requery/android/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V PLio/requery/android/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->releasePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V PLio/requery/android/database/sqlite/SQLiteConnection;->releasePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V PLio/requery/android/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V PLio/requery/android/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V PLio/requery/android/database/sqlite/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setJournalSizeLimit()V PLio/requery/android/database/sqlite/SQLiteConnection;->setJournalSizeLimit()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setLocaleFromConfiguration()V PLio/requery/android/database/sqlite/SQLiteConnection;->setLocaleFromConfiguration()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V PLio/requery/android/database/sqlite/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setPageSize()V PLio/requery/android/database/sqlite/SQLiteConnection;->setPageSize()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V PLio/requery/android/database/sqlite/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V HSPLio/requery/android/database/sqlite/SQLiteConnection;->setWalModeFromConfiguration()V PLio/requery/android/database/sqlite/SQLiteConnection;->setWalModeFromConfiguration()V HSPLio/requery/android/database/sqlite/SQLiteConnection;->throwIfStatementForbidden(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V PLio/requery/android/database/sqlite/SQLiteConnection;->throwIfStatementForbidden(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V Lio/requery/android/database/sqlite/SQLiteConnection$Operation; HSPLio/requery/android/database/sqlite/SQLiteConnection$Operation;->()V PLio/requery/android/database/sqlite/SQLiteConnection$Operation;->()V HSPLio/requery/android/database/sqlite/SQLiteConnection$Operation;->()V PLio/requery/android/database/sqlite/SQLiteConnection$Operation;->()V HSPLio/requery/android/database/sqlite/SQLiteConnection$Operation;->(I)V PLio/requery/android/database/sqlite/SQLiteConnection$Operation;->(I)V Lio/requery/android/database/sqlite/SQLiteConnection$OperationLog; HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->()V PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->()V HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->(I)V PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->(I)V HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->getOperationLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection$Operation; PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->getOperationLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection$Operation; HSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I PLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement; HSPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;->()V PLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;->()V HSPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;->(I)V PLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;->(I)V Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatementCache; HSPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatementCache;->(Lio/requery/android/database/sqlite/SQLiteConnection;I)V PLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatementCache;->(Lio/requery/android/database/sqlite/SQLiteConnection;I)V Lio/requery/android/database/sqlite/SQLiteConnectionPool; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;I)V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;I)V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->getPriority(I)I PLio/requery/android/database/sqlite/SQLiteConnectionPool;->getPriority(I)I HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->obtainConnectionWaiterLocked(Ljava/lang/Thread;JIZLjava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->obtainConnectionWaiterLocked(Ljava/lang/Thread;JIZLjava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->open()V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->open()V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->open(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)Lio/requery/android/database/sqlite/SQLiteConnectionPool; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->open(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)Lio/requery/android/database/sqlite/SQLiteConnectionPool; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->openConnectionLocked(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Z)Lio/requery/android/database/sqlite/SQLiteConnection; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->openConnectionLocked(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Z)Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z PLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->releaseConnection(Lio/requery/android/database/sqlite/SQLiteConnection;)V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->releaseConnection(Lio/requery/android/database/sqlite/SQLiteConnection;)V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnection; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection; PLio/requery/android/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V PLio/requery/android/database/sqlite/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->$values()[Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus; PLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->$values()[Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->()V PLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->()V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->(Ljava/lang/String;I)V PLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->(Ljava/lang/String;I)V Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter; HSPLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;->()V PLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;->()V HSPLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;->(I)V PLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;->(I)V Lio/requery/android/database/sqlite/SQLiteCursor; HSPLio/requery/android/database/sqlite/SQLiteCursor;->(Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)V PLio/requery/android/database/sqlite/SQLiteCursor;->(Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)V HSPLio/requery/android/database/sqlite/SQLiteCursor;->close()V PLio/requery/android/database/sqlite/SQLiteCursor;->close()V HSPLio/requery/android/database/sqlite/SQLiteCursor;->cursorPickFillWindowStartPosition(II)I PLio/requery/android/database/sqlite/SQLiteCursor;->cursorPickFillWindowStartPosition(II)I HSPLio/requery/android/database/sqlite/SQLiteCursor;->fillWindow(I)V PLio/requery/android/database/sqlite/SQLiteCursor;->fillWindow(I)V HSPLio/requery/android/database/sqlite/SQLiteCursor;->finalize()V PLio/requery/android/database/sqlite/SQLiteCursor;->finalize()V HSPLio/requery/android/database/sqlite/SQLiteCursor;->getCount()I PLio/requery/android/database/sqlite/SQLiteCursor;->getCount()I HSPLio/requery/android/database/sqlite/SQLiteCursor;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase; PLio/requery/android/database/sqlite/SQLiteCursor;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase; HSPLio/requery/android/database/sqlite/SQLiteCursor;->onMove(II)Z PLio/requery/android/database/sqlite/SQLiteCursor;->onMove(II)Z Lio/requery/android/database/sqlite/SQLiteCursorDriver; Lio/requery/android/database/sqlite/SQLiteCustomFunction; Lio/requery/android/database/sqlite/SQLiteDatabase; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->-$$Nest$fgetmCursorFactory(Lio/requery/android/database/sqlite/SQLiteDatabase;)Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory; PLio/requery/android/database/sqlite/SQLiteDatabase;->-$$Nest$fgetmCursorFactory(Lio/requery/android/database/sqlite/SQLiteDatabase;)Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->()V PLio/requery/android/database/sqlite/SQLiteDatabase;->()V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)V PLio/requery/android/database/sqlite/SQLiteDatabase;->(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction()V PLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction()V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;I)V PLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;I)V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; PLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteStatement; PLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteStatement; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->createSession()Lio/requery/android/database/sqlite/SQLiteSession; PLio/requery/android/database/sqlite/SQLiteDatabase;->createSession()Lio/requery/android/database/sqlite/SQLiteSession; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->endTransaction()V PLio/requery/android/database/sqlite/SQLiteDatabase;->endTransaction()V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->ensureFile(Ljava/lang/String;)V PLio/requery/android/database/sqlite/SQLiteDatabase;->ensureFile(Ljava/lang/String;)V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V PLio/requery/android/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I PLio/requery/android/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I HSPLio/requery/android/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I PLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I HSPLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadSession()Lio/requery/android/database/sqlite/SQLiteSession; PLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadSession()Lio/requery/android/database/sqlite/SQLiteSession; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->getVersion()I PLio/requery/android/database/sqlite/SQLiteDatabase;->getVersion()I HSPLio/requery/android/database/sqlite/SQLiteDatabase;->hasCodec()Z PLio/requery/android/database/sqlite/SQLiteDatabase;->hasCodec()Z HSPLio/requery/android/database/sqlite/SQLiteDatabase;->isMainThread()Z PLio/requery/android/database/sqlite/SQLiteDatabase;->isMainThread()Z HSPLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnly()Z PLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnly()Z HSPLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z PLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z HSPLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Lio/requery/android/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J PLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Lio/requery/android/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J HSPLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Ljava/lang/String;[Ljava/lang/String;)J PLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Ljava/lang/String;[Ljava/lang/String;)J HSPLio/requery/android/database/sqlite/SQLiteDatabase;->open()V PLio/requery/android/database/sqlite/SQLiteDatabase;->open()V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->openDatabase(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)Lio/requery/android/database/sqlite/SQLiteDatabase; PLio/requery/android/database/sqlite/SQLiteDatabase;->openDatabase(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)Lio/requery/android/database/sqlite/SQLiteDatabase; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->openInner()V PLio/requery/android/database/sqlite/SQLiteDatabase;->openInner()V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; PLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor; PLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; PLio/requery/android/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor; PLio/requery/android/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor; HSPLio/requery/android/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V PLio/requery/android/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->setVersion(I)V PLio/requery/android/database/sqlite/SQLiteDatabase;->setVersion(I)V HSPLio/requery/android/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V PLio/requery/android/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V Lio/requery/android/database/sqlite/SQLiteDatabase$1; HSPLio/requery/android/database/sqlite/SQLiteDatabase$1;->(Lio/requery/android/database/sqlite/SQLiteDatabase;)V PLio/requery/android/database/sqlite/SQLiteDatabase$1;->(Lio/requery/android/database/sqlite/SQLiteDatabase;)V HSPLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Lio/requery/android/database/sqlite/SQLiteSession; PLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Lio/requery/android/database/sqlite/SQLiteSession; HSPLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Ljava/lang/Object; PLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Ljava/lang/Object; Lio/requery/android/database/sqlite/SQLiteDatabase$4; HSPLio/requery/android/database/sqlite/SQLiteDatabase$4;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;)V PLio/requery/android/database/sqlite/SQLiteDatabase$4;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;)V HSPLio/requery/android/database/sqlite/SQLiteDatabase$4;->newCursor(Lio/requery/android/database/sqlite/SQLiteDatabase;Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; PLio/requery/android/database/sqlite/SQLiteDatabase$4;->newCursor(Lio/requery/android/database/sqlite/SQLiteDatabase;Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory; Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration; HSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->()V PLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->()V HSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V PLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V HSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->(Ljava/lang/String;I)V PLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->(Ljava/lang/String;I)V HSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->isInMemoryDb()Z PLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->isInMemoryDb()Z HSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V PLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V Lio/requery/android/database/sqlite/SQLiteDebug; HSPLio/requery/android/database/sqlite/SQLiteDebug;->()V PLio/requery/android/database/sqlite/SQLiteDebug;->()V Lio/requery/android/database/sqlite/SQLiteDebug$PagerStats; Lio/requery/android/database/sqlite/SQLiteDirectCursorDriver; HSPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->cursorClosed()V PLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->cursorClosed()V HSPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->query(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor; PLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->query(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor; Lio/requery/android/database/sqlite/SQLiteFunction; Lio/requery/android/database/sqlite/SQLiteGlobal; HSPLio/requery/android/database/sqlite/SQLiteGlobal;->()V PLio/requery/android/database/sqlite/SQLiteGlobal;->()V HSPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultPageSize()I PLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultPageSize()I HSPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteGlobal;->getJournalSizeLimit()I PLio/requery/android/database/sqlite/SQLiteGlobal;->getJournalSizeLimit()I HSPLio/requery/android/database/sqlite/SQLiteGlobal;->getWALAutoCheckpoint()I PLio/requery/android/database/sqlite/SQLiteGlobal;->getWALAutoCheckpoint()I Lio/requery/android/database/sqlite/SQLiteOpenHelper; HSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;ILio/requery/android/database/DatabaseErrorHandler;)V PLio/requery/android/database/sqlite/SQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;ILio/requery/android/database/DatabaseErrorHandler;)V HSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration; PLio/requery/android/database/sqlite/SQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration; HSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getDatabaseLocked(Z)Lio/requery/android/database/sqlite/SQLiteDatabase; PLio/requery/android/database/sqlite/SQLiteOpenHelper;->getDatabaseLocked(Z)Lio/requery/android/database/sqlite/SQLiteDatabase; HSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; PLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; HSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase; PLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase; Lio/requery/android/database/sqlite/SQLiteProgram; HSPLio/requery/android/database/sqlite/SQLiteProgram;->()V PLio/requery/android/database/sqlite/SQLiteProgram;->()V HSPLio/requery/android/database/sqlite/SQLiteProgram;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteProgram;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteProgram;->bind(ILjava/lang/Object;)V PLio/requery/android/database/sqlite/SQLiteProgram;->bind(ILjava/lang/Object;)V HSPLio/requery/android/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V PLio/requery/android/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V HSPLio/requery/android/database/sqlite/SQLiteProgram;->bindLong(IJ)V PLio/requery/android/database/sqlite/SQLiteProgram;->bindLong(IJ)V HSPLio/requery/android/database/sqlite/SQLiteProgram;->bindString(ILjava/lang/String;)V PLio/requery/android/database/sqlite/SQLiteProgram;->bindString(ILjava/lang/String;)V HSPLio/requery/android/database/sqlite/SQLiteProgram;->clearBindings()V PLio/requery/android/database/sqlite/SQLiteProgram;->clearBindings()V HSPLio/requery/android/database/sqlite/SQLiteProgram;->getBindArgs()[Ljava/lang/Object; PLio/requery/android/database/sqlite/SQLiteProgram;->getBindArgs()[Ljava/lang/Object; HSPLio/requery/android/database/sqlite/SQLiteProgram;->getColumnNames()[Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteProgram;->getColumnNames()[Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteProgram;->getConnectionFlags()I PLio/requery/android/database/sqlite/SQLiteProgram;->getConnectionFlags()I HSPLio/requery/android/database/sqlite/SQLiteProgram;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase; PLio/requery/android/database/sqlite/SQLiteProgram;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase; HSPLio/requery/android/database/sqlite/SQLiteProgram;->getSession()Lio/requery/android/database/sqlite/SQLiteSession; PLio/requery/android/database/sqlite/SQLiteProgram;->getSession()Lio/requery/android/database/sqlite/SQLiteSession; HSPLio/requery/android/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String; PLio/requery/android/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String; HSPLio/requery/android/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V PLio/requery/android/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V Lio/requery/android/database/sqlite/SQLiteQuery; HSPLio/requery/android/database/sqlite/SQLiteQuery;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteQuery;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteQuery;->fillWindow(Lio/requery/android/database/CursorWindow;IIZ)I PLio/requery/android/database/sqlite/SQLiteQuery;->fillWindow(Lio/requery/android/database/CursorWindow;IIZ)I Lio/requery/android/database/sqlite/SQLiteSession; HSPLio/requery/android/database/sqlite/SQLiteSession;->(Lio/requery/android/database/sqlite/SQLiteConnectionPool;)V PLio/requery/android/database/sqlite/SQLiteSession;->(Lio/requery/android/database/sqlite/SQLiteConnectionPool;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->endTransaction(Landroidx/core/os/CancellationSignal;)V PLio/requery/android/database/sqlite/SQLiteSession;->endTransaction(Landroidx/core/os/CancellationSignal;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroidx/core/os/CancellationSignal;Z)V PLio/requery/android/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroidx/core/os/CancellationSignal;Z)V HSPLio/requery/android/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)I PLio/requery/android/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)I HSPLio/requery/android/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZILandroidx/core/os/CancellationSignal;)I PLio/requery/android/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZILandroidx/core/os/CancellationSignal;)I HSPLio/requery/android/database/sqlite/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)J PLio/requery/android/database/sqlite/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)J HSPLio/requery/android/database/sqlite/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)Z PLio/requery/android/database/sqlite/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)Z HSPLio/requery/android/database/sqlite/SQLiteSession;->obtainTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;)Lio/requery/android/database/sqlite/SQLiteSession$Transaction; PLio/requery/android/database/sqlite/SQLiteSession;->obtainTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;)Lio/requery/android/database/sqlite/SQLiteSession$Transaction; HSPLio/requery/android/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V PLio/requery/android/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->recycleTransaction(Lio/requery/android/database/sqlite/SQLiteSession$Transaction;)V PLio/requery/android/database/sqlite/SQLiteSession;->recycleTransaction(Lio/requery/android/database/sqlite/SQLiteSession$Transaction;)V HSPLio/requery/android/database/sqlite/SQLiteSession;->releaseConnection()V PLio/requery/android/database/sqlite/SQLiteSession;->releaseConnection()V HSPLio/requery/android/database/sqlite/SQLiteSession;->setTransactionSuccessful()V PLio/requery/android/database/sqlite/SQLiteSession;->setTransactionSuccessful()V HSPLio/requery/android/database/sqlite/SQLiteSession;->throwIfNoTransaction()V PLio/requery/android/database/sqlite/SQLiteSession;->throwIfNoTransaction()V HSPLio/requery/android/database/sqlite/SQLiteSession;->throwIfTransactionMarkedSuccessful()V PLio/requery/android/database/sqlite/SQLiteSession;->throwIfTransactionMarkedSuccessful()V Lio/requery/android/database/sqlite/SQLiteSession$Transaction; HSPLio/requery/android/database/sqlite/SQLiteSession$Transaction;->()V PLio/requery/android/database/sqlite/SQLiteSession$Transaction;->()V HSPLio/requery/android/database/sqlite/SQLiteSession$Transaction;->(I)V PLio/requery/android/database/sqlite/SQLiteSession$Transaction;->(I)V Lio/requery/android/database/sqlite/SQLiteStatement; HSPLio/requery/android/database/sqlite/SQLiteStatement;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V PLio/requery/android/database/sqlite/SQLiteStatement;->(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V HSPLio/requery/android/database/sqlite/SQLiteStatement;->executeUpdateDelete()I PLio/requery/android/database/sqlite/SQLiteStatement;->executeUpdateDelete()I HSPLio/requery/android/database/sqlite/SQLiteStatement;->simpleQueryForLong()J PLio/requery/android/database/sqlite/SQLiteStatement;->simpleQueryForLong()J Lio/requery/android/database/sqlite/SQLiteStatementInfo; HSPLio/requery/android/database/sqlite/SQLiteStatementInfo;->()V PLio/requery/android/database/sqlite/SQLiteStatementInfo;->()V Lio/requery/android/database/sqlite/SQLiteStatementType; HSPLio/requery/android/database/sqlite/SQLiteStatementType;->getSqlStatementType(Ljava/lang/String;)I HPLio/requery/android/database/sqlite/SQLiteStatementType;->getSqlStatementType(Ljava/lang/String;)I HSPLio/requery/android/database/sqlite/SQLiteStatementType;->stripLeadingSqlComments(Ljava/lang/String;)Ljava/lang/String; HPLio/requery/android/database/sqlite/SQLiteStatementType;->stripLeadingSqlComments(Ljava/lang/String;)Ljava/lang/String; Lj$/time/Duration; HSPLj$/time/Duration;->()V PLj$/time/Duration;->()V HSPLj$/time/Duration;->(JI)V PLj$/time/Duration;->(JI)V HSPLj$/time/Duration;->l(JI)Lj$/time/Duration; PLj$/time/Duration;->l(JI)Lj$/time/Duration; HSPLj$/time/Duration;->ofSeconds(JJ)Lj$/time/Duration; PLj$/time/Duration;->ofSeconds(JJ)Lj$/time/Duration; HSPLj$/time/Duration;->toMillis()J PLj$/time/Duration;->toMillis()J Lj$/util/DesugarTimeZone; HSPLj$/util/DesugarTimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone; PLj$/util/DesugarTimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone; Lkotlin/ExceptionsKt; Lkotlin/ExceptionsKt__ExceptionsKt; Lkotlin/Function; Lkotlin/InitializedLazyImpl; HSPLkotlin/InitializedLazyImpl;->(Ljava/lang/Object;)V PLkotlin/InitializedLazyImpl;->(Ljava/lang/Object;)V Lkotlin/KotlinNothingValueException; Lkotlin/KotlinVersion; HSPLkotlin/KotlinVersion;->()V PLkotlin/KotlinVersion;->()V HSPLkotlin/KotlinVersion;->(III)V PLkotlin/KotlinVersion;->(III)V HSPLkotlin/KotlinVersion;->compareTo(Lkotlin/KotlinVersion;)I PLkotlin/KotlinVersion;->compareTo(Lkotlin/KotlinVersion;)I Lkotlin/KotlinVersion$Companion; HSPLkotlin/KotlinVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/KotlinVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/KotlinVersionCurrentValue; HSPLkotlin/KotlinVersionCurrentValue;->()V PLkotlin/KotlinVersionCurrentValue;->()V HSPLkotlin/KotlinVersionCurrentValue;->()V PLkotlin/KotlinVersionCurrentValue;->()V HSPLkotlin/KotlinVersionCurrentValue;->get()Lkotlin/KotlinVersion; PLkotlin/KotlinVersionCurrentValue;->get()Lkotlin/KotlinVersion; Lkotlin/Lazy; Lkotlin/LazyKt; Lkotlin/LazyKt__LazyJVMKt; HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; HPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; HPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; Lkotlin/LazyKt__LazyJVMKt$WhenMappings; HSPLkotlin/LazyKt__LazyJVMKt$WhenMappings;->()V PLkotlin/LazyKt__LazyJVMKt$WhenMappings;->()V Lkotlin/LazyKt__LazyKt; Lkotlin/LazyThreadSafetyMode; HSPLkotlin/LazyThreadSafetyMode;->()V PLkotlin/LazyThreadSafetyMode;->()V HSPLkotlin/LazyThreadSafetyMode;->(Ljava/lang/String;I)V PLkotlin/LazyThreadSafetyMode;->(Ljava/lang/String;I)V HSPLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode; PLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode; Lkotlin/NoWhenBranchMatchedException; Lkotlin/Pair; HSPLkotlin/Pair;->(Ljava/lang/Object;Ljava/lang/Object;)V HPLkotlin/Pair;->(Ljava/lang/Object;Ljava/lang/Object;)V HSPLkotlin/Pair;->component1()Ljava/lang/Object; PLkotlin/Pair;->component1()Ljava/lang/Object; HSPLkotlin/Pair;->component2()Ljava/lang/Object; PLkotlin/Pair;->component2()Ljava/lang/Object; HSPLkotlin/Pair;->getFirst()Ljava/lang/Object; PLkotlin/Pair;->getFirst()Ljava/lang/Object; HSPLkotlin/Pair;->getSecond()Ljava/lang/Object; PLkotlin/Pair;->getSecond()Ljava/lang/Object; Lkotlin/Result; HSPLkotlin/Result;->()V PLkotlin/Result;->()V HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable; HPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable; Lkotlin/Result$Companion; HSPLkotlin/Result$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/Result$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/Result$Failure; HSPLkotlin/Result$Failure;->(Ljava/lang/Throwable;)V PLkotlin/Result$Failure;->(Ljava/lang/Throwable;)V Lkotlin/ResultKt; HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object; HPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object; HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V HPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V Lkotlin/SafePublicationLazyImpl; HSPLkotlin/SafePublicationLazyImpl;->()V PLkotlin/SafePublicationLazyImpl;->()V HSPLkotlin/SafePublicationLazyImpl;->(Lkotlin/jvm/functions/Function0;)V HPLkotlin/SafePublicationLazyImpl;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object; HPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object; Lkotlin/SafePublicationLazyImpl$Companion; HSPLkotlin/SafePublicationLazyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/SafePublicationLazyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/SynchronizedLazyImpl; HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V HPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object; HPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object; HSPLkotlin/SynchronizedLazyImpl;->isInitialized()Z PLkotlin/SynchronizedLazyImpl;->isInitialized()Z Lkotlin/UByte; HSPLkotlin/UByte;->()V PLkotlin/UByte;->()V Lkotlin/UByte$Companion; HSPLkotlin/UByte$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/UByte$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/UByteArray; Lkotlin/UInt; HSPLkotlin/UInt;->()V PLkotlin/UInt;->()V Lkotlin/UInt$Companion; HSPLkotlin/UInt$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/UInt$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/UIntArray; Lkotlin/ULong; HSPLkotlin/ULong;->()V PLkotlin/ULong;->()V HSPLkotlin/ULong;->equals-impl0(JJ)Z HPLkotlin/ULong;->equals-impl0(JJ)Z Lkotlin/ULong$Companion; HSPLkotlin/ULong$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/ULong$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/ULongArray; Lkotlin/UNINITIALIZED_VALUE; HSPLkotlin/UNINITIALIZED_VALUE;->()V PLkotlin/UNINITIALIZED_VALUE;->()V HSPLkotlin/UNINITIALIZED_VALUE;->()V PLkotlin/UNINITIALIZED_VALUE;->()V Lkotlin/UShort; HSPLkotlin/UShort;->()V PLkotlin/UShort;->()V Lkotlin/UShort$Companion; HSPLkotlin/UShort$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/UShort$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/UShortArray; Lkotlin/UninitializedPropertyAccessException; Lkotlin/Unit; HSPLkotlin/Unit;->()V PLkotlin/Unit;->()V HSPLkotlin/Unit;->()V PLkotlin/Unit;->()V Lkotlin/UnsafeLazyImpl; HSPLkotlin/UnsafeLazyImpl;->(Lkotlin/jvm/functions/Function0;)V PLkotlin/UnsafeLazyImpl;->(Lkotlin/jvm/functions/Function0;)V Lkotlin/UnsignedKt; HSPLkotlin/UnsignedKt;->ulongToDouble(J)D PLkotlin/UnsignedKt;->ulongToDouble(J)D Lkotlin/collections/AbstractCollection; HSPLkotlin/collections/AbstractCollection;->()V HPLkotlin/collections/AbstractCollection;->()V HSPLkotlin/collections/AbstractCollection;->isEmpty()Z PLkotlin/collections/AbstractCollection;->isEmpty()Z HSPLkotlin/collections/AbstractCollection;->size()I HPLkotlin/collections/AbstractCollection;->size()I Lkotlin/collections/AbstractList; HSPLkotlin/collections/AbstractList;->()V PLkotlin/collections/AbstractList;->()V HSPLkotlin/collections/AbstractList;->()V PLkotlin/collections/AbstractList;->()V HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z HPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z Lkotlin/collections/AbstractList$Companion; HSPLkotlin/collections/AbstractList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/AbstractList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/collections/AbstractList$Companion;->checkBoundsIndexes$kotlin_stdlib(III)V HPLkotlin/collections/AbstractList$Companion;->checkBoundsIndexes$kotlin_stdlib(III)V HSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V PLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V HSPLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z HPLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z Lkotlin/collections/AbstractMap; HSPLkotlin/collections/AbstractMap;->()V PLkotlin/collections/AbstractMap;->()V HSPLkotlin/collections/AbstractMap;->()V HPLkotlin/collections/AbstractMap;->()V HSPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z HPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set; PLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set; HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z HPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z HSPLkotlin/collections/AbstractMap;->size()I HPLkotlin/collections/AbstractMap;->size()I Lkotlin/collections/AbstractMap$Companion; HSPLkotlin/collections/AbstractMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/AbstractMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/collections/AbstractMutableList; HSPLkotlin/collections/AbstractMutableList;->()V HPLkotlin/collections/AbstractMutableList;->()V HSPLkotlin/collections/AbstractMutableList;->size()I HPLkotlin/collections/AbstractMutableList;->size()I Lkotlin/collections/AbstractMutableMap; HSPLkotlin/collections/AbstractMutableMap;->()V HPLkotlin/collections/AbstractMutableMap;->()V HSPLkotlin/collections/AbstractMutableMap;->size()I PLkotlin/collections/AbstractMutableMap;->size()I Lkotlin/collections/AbstractMutableSet; HSPLkotlin/collections/AbstractMutableSet;->()V PLkotlin/collections/AbstractMutableSet;->()V Lkotlin/collections/AbstractSet; HSPLkotlin/collections/AbstractSet;->()V PLkotlin/collections/AbstractSet;->()V HSPLkotlin/collections/AbstractSet;->()V PLkotlin/collections/AbstractSet;->()V HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z PLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z Lkotlin/collections/AbstractSet$Companion; HSPLkotlin/collections/AbstractSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/AbstractSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z PLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z Lkotlin/collections/ArrayAsCollection; HSPLkotlin/collections/ArrayAsCollection;->([Ljava/lang/Object;Z)V PLkotlin/collections/ArrayAsCollection;->([Ljava/lang/Object;Z)V HSPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object; HPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object; Lkotlin/collections/ArrayDeque; HSPLkotlin/collections/ArrayDeque;->()V PLkotlin/collections/ArrayDeque;->()V HSPLkotlin/collections/ArrayDeque;->()V HPLkotlin/collections/ArrayDeque;->()V HSPLkotlin/collections/ArrayDeque;->addFirst(Ljava/lang/Object;)V PLkotlin/collections/ArrayDeque;->addFirst(Ljava/lang/Object;)V HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V HPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V HPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V HSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object; HPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object; HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object; HPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object; HSPLkotlin/collections/ArrayDeque;->getSize()I HPLkotlin/collections/ArrayDeque;->getSize()I HSPLkotlin/collections/ArrayDeque;->incremented(I)I HPLkotlin/collections/ArrayDeque;->incremented(I)I HSPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I HPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I HSPLkotlin/collections/ArrayDeque;->isEmpty()Z HPLkotlin/collections/ArrayDeque;->isEmpty()Z HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I HPLkotlin/collections/ArrayDeque;->positiveMod(I)I HSPLkotlin/collections/ArrayDeque;->remove(Ljava/lang/Object;)Z PLkotlin/collections/ArrayDeque;->remove(Ljava/lang/Object;)Z HSPLkotlin/collections/ArrayDeque;->removeAt(I)Ljava/lang/Object; HPLkotlin/collections/ArrayDeque;->removeAt(I)Ljava/lang/Object; HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object; HPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object; HSPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object; PLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object; HSPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object; PLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object; HSPLkotlin/collections/ArrayDeque;->removeLastOrNull()Ljava/lang/Object; PLkotlin/collections/ArrayDeque;->removeLastOrNull()Ljava/lang/Object; Lkotlin/collections/ArrayDeque$Companion; HSPLkotlin/collections/ArrayDeque$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/ArrayDeque$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/collections/ArrayDeque$Companion;->newCapacity$kotlin_stdlib(II)I PLkotlin/collections/ArrayDeque$Companion;->newCapacity$kotlin_stdlib(II)I Lkotlin/collections/ArraysKt; HSPLkotlin/collections/ArraysKt;->copyInto$default([B[BIII)V PLkotlin/collections/ArraysKt;->copyInto$default([B[BIII)V HSPLkotlin/collections/ArraysKt;->copyInto$default([F[F)V PLkotlin/collections/ArraysKt;->copyInto$default([F[F)V HSPLkotlin/collections/ArraysKt;->copyInto$default([I[III)V PLkotlin/collections/ArraysKt;->copyInto$default([I[III)V HSPLkotlin/collections/ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;II)[Ljava/lang/Object; PLkotlin/collections/ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;II)[Ljava/lang/Object; HSPLkotlin/collections/ArraysKt;->copyInto([C[CIII)V PLkotlin/collections/ArraysKt;->copyInto([C[CIII)V HSPLkotlin/collections/ArraysKt;->copyInto([I[IIII)V HPLkotlin/collections/ArraysKt;->copyInto([I[IIII)V HSPLkotlin/collections/ArraysKt;->fill$default([II)V PLkotlin/collections/ArraysKt;->fill$default([II)V HSPLkotlin/collections/ArraysKt;->fill$default([Ljava/lang/Object;Lkotlinx/coroutines/internal/Symbol;)V HPLkotlin/collections/ArraysKt;->fill$default([Ljava/lang/Object;Lkotlinx/coroutines/internal/Symbol;)V HSPLkotlin/collections/ArraysKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;I)V PLkotlin/collections/ArraysKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;I)V Lkotlin/collections/ArraysKt__ArraysJVMKt; HSPLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V PLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V Lkotlin/collections/ArraysKt__ArraysKt; Lkotlin/collections/ArraysKt___ArraysJvmKt; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; HPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([B[BIIIILjava/lang/Object;)[B PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([B[BIIIILjava/lang/Object;)[B HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object; HPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B HPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([C[CIII)[C PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([C[CIII)[C HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I HPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object; HPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([BII)[B PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([BII)[B HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object; PLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V PLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V HPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V PLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V HPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->plus([II)[I PLkotlin/collections/ArraysKt___ArraysJvmKt;->plus([II)[I HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V HPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V Lkotlin/collections/ArraysKt___ArraysKt; HSPLkotlin/collections/ArraysKt___ArraysKt;->asIterable([Ljava/lang/Object;)Ljava/lang/Iterable; PLkotlin/collections/ArraysKt___ArraysKt;->asIterable([Ljava/lang/Object;)Ljava/lang/Iterable; HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/List; PLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNullTo([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; PLkotlin/collections/ArraysKt___ArraysKt;->filterNotNullTo([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([I)I PLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([I)I HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I HPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I HSPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([II)Ljava/lang/Integer; PLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([II)Ljava/lang/Integer; HSPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object; PLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object; HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I HPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I HSPLkotlin/collections/ArraysKt___ArraysKt;->map([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; PLkotlin/collections/ArraysKt___ArraysKt;->map([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; PLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; HSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; PLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List; PLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set; PLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/ArraysKt___ArraysKt;->withIndex([Ljava/lang/Object;)Ljava/lang/Iterable; PLkotlin/collections/ArraysKt___ArraysKt;->withIndex([Ljava/lang/Object;)Ljava/lang/Iterable; Lkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1; HSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->([Ljava/lang/Object;)V PLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->([Ljava/lang/Object;)V HSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->iterator()Ljava/util/Iterator; PLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->iterator()Ljava/util/Iterator; Lkotlin/collections/ArraysKt___ArraysKt$withIndex$1; HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->([Ljava/lang/Object;)V PLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->([Ljava/lang/Object;)V HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/lang/Object; PLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/lang/Object; HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/util/Iterator; PLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/util/Iterator; Lkotlin/collections/CollectionsKt; HSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)V PLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)V HSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/List;[Ljava/lang/Object;)V PLkotlin/collections/CollectionsKt;->addAll(Ljava/util/List;[Ljava/lang/Object;)V HSPLkotlin/collections/CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;)I PLkotlin/collections/CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;)I HSPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I HPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I HSPLkotlin/collections/CollectionsKt;->filterNotNull(Ljava/util/List;)Ljava/util/List; PLkotlin/collections/CollectionsKt;->filterNotNull(Ljava/util/List;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt;->toBooleanArray(Ljava/util/List;)[Z PLkotlin/collections/CollectionsKt;->toBooleanArray(Ljava/util/List;)[Z HSPLkotlin/collections/CollectionsKt;->toHashSet(Ljava/util/List;)Ljava/util/HashSet; PLkotlin/collections/CollectionsKt;->toHashSet(Ljava/util/List;)Ljava/util/HashSet; HSPLkotlin/collections/CollectionsKt;->toIntArray(Ljava/util/List;)[I PLkotlin/collections/CollectionsKt;->toIntArray(Ljava/util/List;)[I Lkotlin/collections/CollectionsKt__CollectionsJVMKt; HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->build(Ljava/util/List;)Ljava/util/List; PLkotlin/collections/CollectionsKt__CollectionsJVMKt;->build(Ljava/util/List;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object; HPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List; HPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List; Lkotlin/collections/CollectionsKt__CollectionsKt; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList; PLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection; PLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I PLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch(Ljava/util/List;Ljava/lang/Comparable;II)I PLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch(Ljava/util/List;Ljava/lang/Comparable;II)I HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I HPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List; HPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull([Ljava/lang/Object;)Ljava/util/List; PLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List; PLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List; PLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V PLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V Lkotlin/collections/CollectionsKt__IterablesKt; HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I HPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrNull(Ljava/lang/Iterable;)Ljava/lang/Integer; PLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrNull(Ljava/lang/Iterable;)Ljava/lang/Integer; HSPLkotlin/collections/CollectionsKt__IterablesKt;->flatten(Ljava/lang/Iterable;)Ljava/util/List; PLkotlin/collections/CollectionsKt__IterablesKt;->flatten(Ljava/lang/Iterable;)Ljava/util/List; Lkotlin/collections/CollectionsKt__IteratorsJVMKt; Lkotlin/collections/CollectionsKt__IteratorsKt; Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt; HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V PLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V HPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V Lkotlin/collections/CollectionsKt__MutableCollectionsKt; HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirst(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirst(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object; Lkotlin/collections/CollectionsKt__ReversedViewsKt; Lkotlin/collections/CollectionsKt___CollectionsJvmKt; Lkotlin/collections/CollectionsKt___CollectionsKt; PLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List; PLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNullTo(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; PLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNullTo(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/util/List; HPLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List; HPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; HPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object; HPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List; PLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toBooleanArray(Ljava/util/Collection;)[Z PLkotlin/collections/CollectionsKt___CollectionsKt;->toBooleanArray(Ljava/util/Collection;)[Z HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; PLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toHashSet(Ljava/lang/Iterable;)Ljava/util/HashSet; PLkotlin/collections/CollectionsKt___CollectionsKt;->toHashSet(Ljava/lang/Iterable;)Ljava/util/HashSet; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I HPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; HPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List; PLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List; HPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; PLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; PLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->(Ljava/lang/Iterable;)V PLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; Lkotlin/collections/EmptyIterator; HSPLkotlin/collections/EmptyIterator;->()V PLkotlin/collections/EmptyIterator;->()V HSPLkotlin/collections/EmptyIterator;->()V PLkotlin/collections/EmptyIterator;->()V HSPLkotlin/collections/EmptyIterator;->hasNext()Z PLkotlin/collections/EmptyIterator;->hasNext()Z Lkotlin/collections/EmptyList; HSPLkotlin/collections/EmptyList;->()V PLkotlin/collections/EmptyList;->()V HSPLkotlin/collections/EmptyList;->()V PLkotlin/collections/EmptyList;->()V HSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z PLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z HPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyList;->hashCode()I HPLkotlin/collections/EmptyList;->hashCode()I HSPLkotlin/collections/EmptyList;->isEmpty()Z HPLkotlin/collections/EmptyList;->isEmpty()Z HSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator; PLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator; HSPLkotlin/collections/EmptyList;->size()I HPLkotlin/collections/EmptyList;->size()I HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object; PLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object; Lkotlin/collections/EmptyMap; HSPLkotlin/collections/EmptyMap;->()V PLkotlin/collections/EmptyMap;->()V HSPLkotlin/collections/EmptyMap;->()V PLkotlin/collections/EmptyMap;->()V HSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z PLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; PLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; HSPLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z PLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/collections/EmptyMap;->isEmpty()Z PLkotlin/collections/EmptyMap;->isEmpty()Z HSPLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set; PLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set; HSPLkotlin/collections/EmptyMap;->size()I HPLkotlin/collections/EmptyMap;->size()I HSPLkotlin/collections/EmptyMap;->values()Ljava/util/Collection; PLkotlin/collections/EmptyMap;->values()Ljava/util/Collection; Lkotlin/collections/EmptySet; HSPLkotlin/collections/EmptySet;->()V PLkotlin/collections/EmptySet;->()V HSPLkotlin/collections/EmptySet;->()V PLkotlin/collections/EmptySet;->()V HSPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z PLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptySet;->hashCode()I PLkotlin/collections/EmptySet;->hashCode()I HSPLkotlin/collections/EmptySet;->isEmpty()Z PLkotlin/collections/EmptySet;->isEmpty()Z HSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator; PLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator; HSPLkotlin/collections/EmptySet;->size()I PLkotlin/collections/EmptySet;->size()I Lkotlin/collections/IndexedValue; HSPLkotlin/collections/IndexedValue;->(ILjava/lang/Object;)V PLkotlin/collections/IndexedValue;->(ILjava/lang/Object;)V HSPLkotlin/collections/IndexedValue;->getIndex()I PLkotlin/collections/IndexedValue;->getIndex()I HSPLkotlin/collections/IndexedValue;->getValue()Ljava/lang/Object; PLkotlin/collections/IndexedValue;->getValue()Ljava/lang/Object; Lkotlin/collections/IndexingIterable; HSPLkotlin/collections/IndexingIterable;->(Lkotlin/jvm/functions/Function0;)V PLkotlin/collections/IndexingIterable;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/collections/IndexingIterable;->iterator()Ljava/util/Iterator; PLkotlin/collections/IndexingIterable;->iterator()Ljava/util/Iterator; Lkotlin/collections/IndexingIterator; HSPLkotlin/collections/IndexingIterator;->(Ljava/util/Iterator;)V PLkotlin/collections/IndexingIterator;->(Ljava/util/Iterator;)V HSPLkotlin/collections/IndexingIterator;->hasNext()Z PLkotlin/collections/IndexingIterator;->hasNext()Z HSPLkotlin/collections/IndexingIterator;->next()Ljava/lang/Object; PLkotlin/collections/IndexingIterator;->next()Ljava/lang/Object; HSPLkotlin/collections/IndexingIterator;->next()Lkotlin/collections/IndexedValue; PLkotlin/collections/IndexingIterator;->next()Lkotlin/collections/IndexedValue; Lkotlin/collections/IntIterator; HSPLkotlin/collections/IntIterator;->()V HPLkotlin/collections/IntIterator;->()V Lkotlin/collections/MapWithDefault; Lkotlin/collections/MapsKt; Lkotlin/collections/MapsKt__MapWithDefaultKt; HSPLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/collections/MapsKt__MapsJVMKt; HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I PLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map; PLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map; Lkotlin/collections/MapsKt__MapsKt; HSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map; HPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/collections/MapsKt__MapsKt;->hashMapOf([Lkotlin/Pair;)Ljava/util/HashMap; PLkotlin/collections/MapsKt__MapsKt;->hashMapOf([Lkotlin/Pair;)Ljava/util/HashMap; HSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; PLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V PLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V HPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map; PLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map; PLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map; PLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map; PLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map; HPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map; Lkotlin/collections/MapsKt___MapsJvmKt; Lkotlin/collections/MapsKt___MapsKt; PLkotlin/collections/MapsKt___MapsKt;->asSequence(Ljava/util/Map;)Lkotlin/sequences/Sequence; Lkotlin/collections/SetsKt; HSPLkotlin/collections/SetsKt;->build(Lkotlin/collections/builders/SetBuilder;)Ljava/util/Set; PLkotlin/collections/SetsKt;->build(Lkotlin/collections/builders/SetBuilder;)Ljava/util/Set; Lkotlin/collections/SetsKt__SetsJVMKt; HSPLkotlin/collections/SetsKt__SetsJVMKt;->build(Ljava/util/Set;)Ljava/util/Set; PLkotlin/collections/SetsKt__SetsJVMKt;->build(Ljava/util/Set;)Ljava/util/Set; HSPLkotlin/collections/SetsKt__SetsJVMKt;->setOf(Ljava/lang/Object;)Ljava/util/Set; PLkotlin/collections/SetsKt__SetsJVMKt;->setOf(Ljava/lang/Object;)Ljava/util/Set; Lkotlin/collections/SetsKt__SetsKt; HSPLkotlin/collections/SetsKt__SetsKt;->mutableSetOf([Ljava/lang/Object;)Ljava/util/Set; PLkotlin/collections/SetsKt__SetsKt;->mutableSetOf([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set; PLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set; Lkotlin/collections/SetsKt___SetsKt; HSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set; PLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set; HSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; PLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; Lkotlin/collections/builders/ListBuilder; HSPLkotlin/collections/builders/ListBuilder;->()V PLkotlin/collections/builders/ListBuilder;->()V HSPLkotlin/collections/builders/ListBuilder;->()V PLkotlin/collections/builders/ListBuilder;->()V HSPLkotlin/collections/builders/ListBuilder;->(I)V PLkotlin/collections/builders/ListBuilder;->(I)V HSPLkotlin/collections/builders/ListBuilder;->([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V PLkotlin/collections/builders/ListBuilder;->([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V HSPLkotlin/collections/builders/ListBuilder;->access$getArray$p(Lkotlin/collections/builders/ListBuilder;)[Ljava/lang/Object; PLkotlin/collections/builders/ListBuilder;->access$getArray$p(Lkotlin/collections/builders/ListBuilder;)[Ljava/lang/Object; HSPLkotlin/collections/builders/ListBuilder;->access$getLength$p(Lkotlin/collections/builders/ListBuilder;)I PLkotlin/collections/builders/ListBuilder;->access$getLength$p(Lkotlin/collections/builders/ListBuilder;)I HSPLkotlin/collections/builders/ListBuilder;->access$getOffset$p(Lkotlin/collections/builders/ListBuilder;)I PLkotlin/collections/builders/ListBuilder;->access$getOffset$p(Lkotlin/collections/builders/ListBuilder;)I HSPLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z PLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z HSPLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V PLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V HSPLkotlin/collections/builders/ListBuilder;->build()Ljava/util/List; PLkotlin/collections/builders/ListBuilder;->build()Ljava/util/List; HSPLkotlin/collections/builders/ListBuilder;->checkIsMutable()V PLkotlin/collections/builders/ListBuilder;->checkIsMutable()V HSPLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V PLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V HSPLkotlin/collections/builders/ListBuilder;->iterator()Ljava/util/Iterator; PLkotlin/collections/builders/ListBuilder;->iterator()Ljava/util/Iterator; Lkotlin/collections/builders/ListBuilder$Companion; HSPLkotlin/collections/builders/ListBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/builders/ListBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/collections/builders/ListBuilder$Itr; HSPLkotlin/collections/builders/ListBuilder$Itr;->(Lkotlin/collections/builders/ListBuilder;I)V PLkotlin/collections/builders/ListBuilder$Itr;->(Lkotlin/collections/builders/ListBuilder;I)V HSPLkotlin/collections/builders/ListBuilder$Itr;->hasNext()Z PLkotlin/collections/builders/ListBuilder$Itr;->hasNext()Z HSPLkotlin/collections/builders/ListBuilder$Itr;->next()Ljava/lang/Object; PLkotlin/collections/builders/ListBuilder$Itr;->next()Ljava/lang/Object; Lkotlin/collections/builders/ListBuilderKt; HSPLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object; PLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object; Lkotlin/collections/builders/MapBuilder; HSPLkotlin/collections/builders/MapBuilder;->()V PLkotlin/collections/builders/MapBuilder;->()V HSPLkotlin/collections/builders/MapBuilder;->()V PLkotlin/collections/builders/MapBuilder;->()V HSPLkotlin/collections/builders/MapBuilder;->(I)V PLkotlin/collections/builders/MapBuilder;->(I)V HSPLkotlin/collections/builders/MapBuilder;->access$getEmpty$cp()Lkotlin/collections/builders/MapBuilder; PLkotlin/collections/builders/MapBuilder;->access$getEmpty$cp()Lkotlin/collections/builders/MapBuilder; HSPLkotlin/collections/builders/MapBuilder;->build()Ljava/util/Map; PLkotlin/collections/builders/MapBuilder;->build()Ljava/util/Map; HSPLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V PLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V HSPLkotlin/collections/builders/MapBuilder;->isEmpty()Z PLkotlin/collections/builders/MapBuilder;->isEmpty()Z HSPLkotlin/collections/builders/MapBuilder;->size()I PLkotlin/collections/builders/MapBuilder;->size()I Lkotlin/collections/builders/MapBuilder$Companion; HSPLkotlin/collections/builders/MapBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/builders/MapBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeHashSize(Lkotlin/collections/builders/MapBuilder$Companion;I)I PLkotlin/collections/builders/MapBuilder$Companion;->access$computeHashSize(Lkotlin/collections/builders/MapBuilder$Companion;I)I HSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeShift(Lkotlin/collections/builders/MapBuilder$Companion;I)I PLkotlin/collections/builders/MapBuilder$Companion;->access$computeShift(Lkotlin/collections/builders/MapBuilder$Companion;I)I Lkotlin/collections/builders/SetBuilder; HSPLkotlin/collections/builders/SetBuilder;->()V PLkotlin/collections/builders/SetBuilder;->()V HSPLkotlin/collections/builders/SetBuilder;->()V PLkotlin/collections/builders/SetBuilder;->()V HSPLkotlin/collections/builders/SetBuilder;->(Lkotlin/collections/builders/MapBuilder;)V PLkotlin/collections/builders/SetBuilder;->(Lkotlin/collections/builders/MapBuilder;)V HSPLkotlin/collections/builders/SetBuilder;->build()Ljava/util/Set; PLkotlin/collections/builders/SetBuilder;->build()Ljava/util/Set; HSPLkotlin/collections/builders/SetBuilder;->getSize()I PLkotlin/collections/builders/SetBuilder;->getSize()I HSPLkotlin/collections/builders/SetBuilder;->isEmpty()Z PLkotlin/collections/builders/SetBuilder;->isEmpty()Z Lkotlin/collections/builders/SetBuilder$Companion; HSPLkotlin/collections/builders/SetBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/collections/builders/SetBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/comparisons/ComparisonsKt; Lkotlin/comparisons/ComparisonsKt__ComparisonsKt; HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I HPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->naturalOrder()Ljava/util/Comparator; PLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->naturalOrder()Ljava/util/Comparator; Lkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt; HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->maxOf(F[F)F HPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->maxOf(F[F)F HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->minOf(F[F)F HPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->minOf(F[F)F Lkotlin/comparisons/ComparisonsKt___ComparisonsKt; Lkotlin/comparisons/NaturalOrderComparator; HSPLkotlin/comparisons/NaturalOrderComparator;->()V PLkotlin/comparisons/NaturalOrderComparator;->()V HSPLkotlin/comparisons/NaturalOrderComparator;->()V PLkotlin/comparisons/NaturalOrderComparator;->()V HSPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I PLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I HSPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I PLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I Lkotlin/coroutines/AbstractCoroutineContextElement; HSPLkotlin/coroutines/AbstractCoroutineContextElement;->(Lkotlin/coroutines/CoroutineContext$Key;)V PLkotlin/coroutines/AbstractCoroutineContextElement;->(Lkotlin/coroutines/CoroutineContext$Key;)V HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; PLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; HPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; PLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; PLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/AbstractCoroutineContextKey; HSPLkotlin/coroutines/AbstractCoroutineContextKey;->(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V PLkotlin/coroutines/AbstractCoroutineContextKey;->(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V Lkotlin/coroutines/CombinedContext; HSPLkotlin/coroutines/CombinedContext;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V HPLkotlin/coroutines/CombinedContext;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V HSPLkotlin/coroutines/CombinedContext;->equals(Ljava/lang/Object;)Z PLkotlin/coroutines/CombinedContext;->equals(Ljava/lang/Object;)Z HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/Continuation; Lkotlin/coroutines/ContinuationInterceptor; HSPLkotlin/coroutines/ContinuationInterceptor;->()V PLkotlin/coroutines/ContinuationInterceptor;->()V Lkotlin/coroutines/ContinuationInterceptor$DefaultImpls; HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/ContinuationInterceptor$Key; HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V PLkotlin/coroutines/ContinuationInterceptor$Key;->()V HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V PLkotlin/coroutines/ContinuationInterceptor$Key;->()V Lkotlin/coroutines/ContinuationKt; HSPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/CoroutineContext$DefaultImpls; HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/CoroutineContext$Element; Lkotlin/coroutines/CoroutineContext$Element$DefaultImpls; HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; PLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/CoroutineContext$Key; Lkotlin/coroutines/CoroutineContext$plus$1; HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V PLkotlin/coroutines/CoroutineContext$plus$1;->()V HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V PLkotlin/coroutines/CoroutineContext$plus$1;->()V HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/EmptyCoroutineContext; HSPLkotlin/coroutines/EmptyCoroutineContext;->()V PLkotlin/coroutines/EmptyCoroutineContext;->()V HSPLkotlin/coroutines/EmptyCoroutineContext;->()V PLkotlin/coroutines/EmptyCoroutineContext;->()V HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/SafeContinuation; HSPLkotlin/coroutines/SafeContinuation;->()V PLkotlin/coroutines/SafeContinuation;->()V HSPLkotlin/coroutines/SafeContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V HPLkotlin/coroutines/SafeContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V HPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V Lkotlin/coroutines/SafeContinuation$Companion; HSPLkotlin/coroutines/SafeContinuation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/coroutines/SafeContinuation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/coroutines/intrinsics/CoroutineSingletons; HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->()V PLkotlin/coroutines/intrinsics/CoroutineSingletons;->()V HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->(Ljava/lang/String;I)V PLkotlin/coroutines/intrinsics/CoroutineSingletons;->(Ljava/lang/String;I)V Lkotlin/coroutines/intrinsics/IntrinsicsKt; Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt; HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3; Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4; Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt; Lkotlin/coroutines/jvm/internal/BaseContinuationImpl; HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V HPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V HPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V Lkotlin/coroutines/jvm/internal/CompletedContinuation; HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V PLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V PLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V Lkotlin/coroutines/jvm/internal/ContinuationImpl; HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V HPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation; HPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation; HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V HPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; Lkotlin/coroutines/jvm/internal/DebugProbesKt; HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl; HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; HPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda; HSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;->(ILkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;->(ILkotlin/coroutines/Continuation;)V Lkotlin/coroutines/jvm/internal/SuspendFunction; Lkotlin/coroutines/jvm/internal/SuspendLambda; HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->(ILkotlin/coroutines/Continuation;)V HPLkotlin/coroutines/jvm/internal/SuspendLambda;->(ILkotlin/coroutines/Continuation;)V HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I HPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I Lkotlin/enums/EnumEntries; Lkotlin/enums/EnumEntriesKt; HSPLkotlin/enums/EnumEntriesKt;->enumEntries([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries; PLkotlin/enums/EnumEntriesKt;->enumEntries([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries; Lkotlin/enums/EnumEntriesList; HSPLkotlin/enums/EnumEntriesList;->([Ljava/lang/Enum;)V PLkotlin/enums/EnumEntriesList;->([Ljava/lang/Enum;)V Lkotlin/internal/PlatformImplementations; HSPLkotlin/internal/PlatformImplementations;->()V PLkotlin/internal/PlatformImplementations;->()V Lkotlin/internal/PlatformImplementationsKt; HSPLkotlin/internal/PlatformImplementationsKt;->()V PLkotlin/internal/PlatformImplementationsKt;->()V Lkotlin/internal/ProgressionUtilKt; HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I HPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(JJJ)J PLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(JJJ)J Lkotlin/internal/jdk7/JDK7PlatformImplementations; HSPLkotlin/internal/jdk7/JDK7PlatformImplementations;->()V PLkotlin/internal/jdk7/JDK7PlatformImplementations;->()V Lkotlin/internal/jdk8/JDK8PlatformImplementations; HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->()V PLkotlin/internal/jdk8/JDK8PlatformImplementations;->()V HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random; PLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random; Lkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion; HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V PLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V PLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V Lkotlin/io/CloseableKt; HSPLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V PLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V Lkotlin/io/FileSystemException; Lkotlin/io/FilesKt; Lkotlin/io/FilesKt__FilePathComponentsKt; Lkotlin/io/FilesKt__FileReadWriteKt; Lkotlin/io/FilesKt__FileTreeWalkKt; Lkotlin/io/FilesKt__UtilsKt; HSPLkotlin/io/FilesKt__UtilsKt;->getExtension(Ljava/io/File;)Ljava/lang/String; PLkotlin/io/FilesKt__UtilsKt;->getExtension(Ljava/io/File;)Ljava/lang/String; Lkotlin/io/TerminateException; Lkotlin/jvm/JvmClassMappingKt; HSPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class; PLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class; HSPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class; HPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class; HSPLkotlin/jvm/JvmClassMappingKt;->getJavaPrimitiveType(Lkotlin/reflect/KClass;)Ljava/lang/Class; PLkotlin/jvm/JvmClassMappingKt;->getJavaPrimitiveType(Lkotlin/reflect/KClass;)Ljava/lang/Class; Lkotlin/jvm/functions/Function0; Lkotlin/jvm/functions/Function1; Lkotlin/jvm/functions/Function10; Lkotlin/jvm/functions/Function11; Lkotlin/jvm/functions/Function12; Lkotlin/jvm/functions/Function13; Lkotlin/jvm/functions/Function14; Lkotlin/jvm/functions/Function15; Lkotlin/jvm/functions/Function16; Lkotlin/jvm/functions/Function17; Lkotlin/jvm/functions/Function18; Lkotlin/jvm/functions/Function19; Lkotlin/jvm/functions/Function2; Lkotlin/jvm/functions/Function20; Lkotlin/jvm/functions/Function21; Lkotlin/jvm/functions/Function22; Lkotlin/jvm/functions/Function3; Lkotlin/jvm/functions/Function4; Lkotlin/jvm/functions/Function5; Lkotlin/jvm/functions/Function6; Lkotlin/jvm/functions/Function7; Lkotlin/jvm/functions/Function8; Lkotlin/jvm/functions/Function9; Lkotlin/jvm/functions/FunctionN; Lkotlin/jvm/internal/AdaptedFunctionReference; HSPLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/ArrayIterator; HSPLkotlin/jvm/internal/ArrayIterator;->([Ljava/lang/Object;)V PLkotlin/jvm/internal/ArrayIterator;->([Ljava/lang/Object;)V HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z PLkotlin/jvm/internal/ArrayIterator;->hasNext()Z HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object; PLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object; Lkotlin/jvm/internal/ArrayIteratorKt; HSPLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Ljava/util/Iterator; PLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Ljava/util/Iterator; Lkotlin/jvm/internal/BooleanCompanionObject; HSPLkotlin/jvm/internal/BooleanCompanionObject;->()V PLkotlin/jvm/internal/BooleanCompanionObject;->()V HSPLkotlin/jvm/internal/BooleanCompanionObject;->()V PLkotlin/jvm/internal/BooleanCompanionObject;->()V Lkotlin/jvm/internal/ByteCompanionObject; HSPLkotlin/jvm/internal/ByteCompanionObject;->()V PLkotlin/jvm/internal/ByteCompanionObject;->()V HSPLkotlin/jvm/internal/ByteCompanionObject;->()V PLkotlin/jvm/internal/ByteCompanionObject;->()V Lkotlin/jvm/internal/CallableReference; HSPLkotlin/jvm/internal/CallableReference;->()V PLkotlin/jvm/internal/CallableReference;->()V HSPLkotlin/jvm/internal/CallableReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V HPLkotlin/jvm/internal/CallableReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V HSPLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object; PLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object; HSPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String; HPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String; HSPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer; HPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer; HSPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String; HPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String; Lkotlin/jvm/internal/CallableReference$NoReceiver; HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V PLkotlin/jvm/internal/CallableReference$NoReceiver;->()V HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V PLkotlin/jvm/internal/CallableReference$NoReceiver;->()V HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver; PLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver; Lkotlin/jvm/internal/CharCompanionObject; HSPLkotlin/jvm/internal/CharCompanionObject;->()V PLkotlin/jvm/internal/CharCompanionObject;->()V HSPLkotlin/jvm/internal/CharCompanionObject;->()V PLkotlin/jvm/internal/CharCompanionObject;->()V Lkotlin/jvm/internal/ClassBasedDeclarationContainer; Lkotlin/jvm/internal/CollectionToArray; HSPLkotlin/jvm/internal/CollectionToArray;->()V PLkotlin/jvm/internal/CollectionToArray;->()V HSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object; PLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object; Lkotlin/jvm/internal/DefaultConstructorMarker; Lkotlin/jvm/internal/DoubleCompanionObject; HSPLkotlin/jvm/internal/DoubleCompanionObject;->()V PLkotlin/jvm/internal/DoubleCompanionObject;->()V HSPLkotlin/jvm/internal/DoubleCompanionObject;->()V PLkotlin/jvm/internal/DoubleCompanionObject;->()V Lkotlin/jvm/internal/FloatCompanionObject; HSPLkotlin/jvm/internal/FloatCompanionObject;->()V PLkotlin/jvm/internal/FloatCompanionObject;->()V HSPLkotlin/jvm/internal/FloatCompanionObject;->()V PLkotlin/jvm/internal/FloatCompanionObject;->()V Lkotlin/jvm/internal/FunctionAdapter; Lkotlin/jvm/internal/FunctionBase; Lkotlin/jvm/internal/FunctionReference; HSPLkotlin/jvm/internal/FunctionReference;->(I)V PLkotlin/jvm/internal/FunctionReference;->(I)V HSPLkotlin/jvm/internal/FunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HPLkotlin/jvm/internal/FunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z HPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z HSPLkotlin/jvm/internal/FunctionReference;->getArity()I HPLkotlin/jvm/internal/FunctionReference;->getArity()I Lkotlin/jvm/internal/FunctionReferenceImpl; HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/IntCompanionObject; HSPLkotlin/jvm/internal/IntCompanionObject;->()V PLkotlin/jvm/internal/IntCompanionObject;->()V HSPLkotlin/jvm/internal/IntCompanionObject;->()V PLkotlin/jvm/internal/IntCompanionObject;->()V Lkotlin/jvm/internal/Intrinsics; HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z HPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z HPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLkotlin/jvm/internal/Intrinsics;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V PLkotlin/jvm/internal/Intrinsics;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V HPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V HPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V HPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V HPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->checkParameterIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V PLkotlin/jvm/internal/Intrinsics;->checkParameterIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->compare(II)I HPLkotlin/jvm/internal/Intrinsics;->compare(II)I HSPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/String;Ljava/lang/Throwable;)V PLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/String;Ljava/lang/Throwable;)V HSPLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; PLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; Lkotlin/jvm/internal/KTypeBase; Lkotlin/jvm/internal/Lambda; HSPLkotlin/jvm/internal/Lambda;->(I)V HPLkotlin/jvm/internal/Lambda;->(I)V HSPLkotlin/jvm/internal/Lambda;->getArity()I HPLkotlin/jvm/internal/Lambda;->getArity()I Lkotlin/jvm/internal/LongCompanionObject; HSPLkotlin/jvm/internal/LongCompanionObject;->()V PLkotlin/jvm/internal/LongCompanionObject;->()V HSPLkotlin/jvm/internal/LongCompanionObject;->()V PLkotlin/jvm/internal/LongCompanionObject;->()V Lkotlin/jvm/internal/MutablePropertyReference; HSPLkotlin/jvm/internal/MutablePropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/MutablePropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/MutablePropertyReference1; HSPLkotlin/jvm/internal/MutablePropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/MutablePropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/MutablePropertyReference1Impl; HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V PLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V Lkotlin/jvm/internal/PropertyReference; HSPLkotlin/jvm/internal/PropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HPLkotlin/jvm/internal/PropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z HPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z Lkotlin/jvm/internal/PropertyReference0; HSPLkotlin/jvm/internal/PropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/PropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object; HPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object; Lkotlin/jvm/internal/PropertyReference0Impl; HSPLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/PropertyReference1; HSPLkotlin/jvm/internal/PropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/PropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/PropertyReference1Impl; HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V PLkotlin/jvm/internal/PropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V Lkotlin/jvm/internal/PropertyReference2; HSPLkotlin/jvm/internal/PropertyReference2;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/PropertyReference2;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/PropertyReference2Impl; HSPLkotlin/jvm/internal/PropertyReference2Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/jvm/internal/PropertyReference2Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V Lkotlin/jvm/internal/Ref$BooleanRef; HSPLkotlin/jvm/internal/Ref$BooleanRef;->()V PLkotlin/jvm/internal/Ref$BooleanRef;->()V Lkotlin/jvm/internal/Ref$FloatRef; HSPLkotlin/jvm/internal/Ref$FloatRef;->()V PLkotlin/jvm/internal/Ref$FloatRef;->()V Lkotlin/jvm/internal/Ref$IntRef; HSPLkotlin/jvm/internal/Ref$IntRef;->()V PLkotlin/jvm/internal/Ref$IntRef;->()V Lkotlin/jvm/internal/Ref$LongRef; HSPLkotlin/jvm/internal/Ref$LongRef;->()V PLkotlin/jvm/internal/Ref$LongRef;->()V Lkotlin/jvm/internal/Ref$ObjectRef; HSPLkotlin/jvm/internal/Ref$ObjectRef;->()V HPLkotlin/jvm/internal/Ref$ObjectRef;->()V Lkotlin/jvm/internal/Reflection; HSPLkotlin/jvm/internal/Reflection;->()V PLkotlin/jvm/internal/Reflection;->()V HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; HPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; PLkotlin/jvm/internal/Reflection;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; HSPLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; PLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; HSPLkotlin/jvm/internal/Reflection;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; PLkotlin/jvm/internal/Reflection;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; HSPLkotlin/jvm/internal/Reflection;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; PLkotlin/jvm/internal/Reflection;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; HSPLkotlin/jvm/internal/Reflection;->typeOf(Ljava/lang/Class;)Lkotlin/reflect/KType; PLkotlin/jvm/internal/Reflection;->typeOf(Ljava/lang/Class;)Lkotlin/reflect/KType; Lkotlin/jvm/internal/ReflectionFactory; HSPLkotlin/jvm/internal/ReflectionFactory;->()V PLkotlin/jvm/internal/ReflectionFactory;->()V Lkotlin/jvm/internal/ShortCompanionObject; HSPLkotlin/jvm/internal/ShortCompanionObject;->()V PLkotlin/jvm/internal/ShortCompanionObject;->()V HSPLkotlin/jvm/internal/ShortCompanionObject;->()V PLkotlin/jvm/internal/ShortCompanionObject;->()V Lkotlin/jvm/internal/StringCompanionObject; HSPLkotlin/jvm/internal/StringCompanionObject;->()V PLkotlin/jvm/internal/StringCompanionObject;->()V HSPLkotlin/jvm/internal/StringCompanionObject;->()V PLkotlin/jvm/internal/StringCompanionObject;->()V Lkotlin/jvm/internal/TypeIntrinsics; HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection; HPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection; HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object; HPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object; HSPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection; HPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection; HSPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I HPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I HSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z HPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z HSPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z PLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z Lkotlin/jvm/internal/markers/KMappedMarker; Lkotlin/jvm/internal/markers/KMutableCollection; Lkotlin/jvm/internal/markers/KMutableIterable; Lkotlin/jvm/internal/markers/KMutableIterator; Lkotlin/jvm/internal/markers/KMutableList; Lkotlin/jvm/internal/markers/KMutableListIterator; Lkotlin/jvm/internal/markers/KMutableMap; Lkotlin/jvm/internal/markers/KMutableSet; Lkotlin/math/MathKt; Lkotlin/math/MathKt__MathHKt; Lkotlin/math/MathKt__MathJVMKt; HSPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I HPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I HPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I Lkotlin/properties/ObservableProperty; HSPLkotlin/properties/ObservableProperty;->(Ljava/lang/Object;)V HPLkotlin/properties/ObservableProperty;->(Ljava/lang/Object;)V HSPLkotlin/properties/ObservableProperty;->afterChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)V PLkotlin/properties/ObservableProperty;->afterChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)V HSPLkotlin/properties/ObservableProperty;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; PLkotlin/properties/ObservableProperty;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; HSPLkotlin/properties/ObservableProperty;->setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V PLkotlin/properties/ObservableProperty;->setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V Lkotlin/properties/ReadOnlyProperty; Lkotlin/properties/ReadWriteProperty; Lkotlin/random/AbstractPlatformRandom; HSPLkotlin/random/AbstractPlatformRandom;->()V PLkotlin/random/AbstractPlatformRandom;->()V HSPLkotlin/random/AbstractPlatformRandom;->nextInt()I PLkotlin/random/AbstractPlatformRandom;->nextInt()I HSPLkotlin/random/AbstractPlatformRandom;->nextInt(I)I PLkotlin/random/AbstractPlatformRandom;->nextInt(I)I Lkotlin/random/FallbackThreadLocalRandom; HSPLkotlin/random/FallbackThreadLocalRandom;->()V PLkotlin/random/FallbackThreadLocalRandom;->()V HSPLkotlin/random/FallbackThreadLocalRandom;->getImpl()Ljava/util/Random; PLkotlin/random/FallbackThreadLocalRandom;->getImpl()Ljava/util/Random; Lkotlin/random/FallbackThreadLocalRandom$implStorage$1; HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->()V PLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->()V HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->initialValue()Ljava/lang/Object; PLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->initialValue()Ljava/lang/Object; Lkotlin/random/Random; HSPLkotlin/random/Random;->()V PLkotlin/random/Random;->()V HSPLkotlin/random/Random;->()V PLkotlin/random/Random;->()V HSPLkotlin/random/Random;->access$getDefaultRandom$cp()Lkotlin/random/Random; PLkotlin/random/Random;->access$getDefaultRandom$cp()Lkotlin/random/Random; Lkotlin/random/Random$Default; HSPLkotlin/random/Random$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/random/Random$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/random/Random$Default;->nextInt()I PLkotlin/random/Random$Default;->nextInt()I HSPLkotlin/random/Random$Default;->nextInt(I)I PLkotlin/random/Random$Default;->nextInt(I)I Lkotlin/ranges/ClosedRange; Lkotlin/ranges/IntProgression; HSPLkotlin/ranges/IntProgression;->()V PLkotlin/ranges/IntProgression;->()V HSPLkotlin/ranges/IntProgression;->(III)V HPLkotlin/ranges/IntProgression;->(III)V HSPLkotlin/ranges/IntProgression;->getFirst()I PLkotlin/ranges/IntProgression;->getFirst()I HSPLkotlin/ranges/IntProgression;->getLast()I PLkotlin/ranges/IntProgression;->getLast()I HSPLkotlin/ranges/IntProgression;->getStep()I PLkotlin/ranges/IntProgression;->getStep()I HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator; PLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator; HSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator; PLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator; Lkotlin/ranges/IntProgression$Companion; HSPLkotlin/ranges/IntProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/ranges/IntProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/ranges/IntProgressionIterator; HSPLkotlin/ranges/IntProgressionIterator;->(III)V HPLkotlin/ranges/IntProgressionIterator;->(III)V HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z PLkotlin/ranges/IntProgressionIterator;->hasNext()Z HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I PLkotlin/ranges/IntProgressionIterator;->nextInt()I Lkotlin/ranges/IntRange; HSPLkotlin/ranges/IntRange;->()V PLkotlin/ranges/IntRange;->()V HSPLkotlin/ranges/IntRange;->(II)V HPLkotlin/ranges/IntRange;->(II)V HSPLkotlin/ranges/IntRange;->contains(I)Z PLkotlin/ranges/IntRange;->contains(I)Z HSPLkotlin/ranges/IntRange;->getStart()Ljava/lang/Integer; PLkotlin/ranges/IntRange;->getStart()Ljava/lang/Integer; Lkotlin/ranges/IntRange$Companion; HSPLkotlin/ranges/IntRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/ranges/IntRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/ranges/LongProgression; HSPLkotlin/ranges/LongProgression;->()V PLkotlin/ranges/LongProgression;->()V HSPLkotlin/ranges/LongProgression;->(JJJ)V PLkotlin/ranges/LongProgression;->(JJJ)V HSPLkotlin/ranges/LongProgression;->getFirst()J PLkotlin/ranges/LongProgression;->getFirst()J HSPLkotlin/ranges/LongProgression;->getLast()J PLkotlin/ranges/LongProgression;->getLast()J Lkotlin/ranges/LongProgression$Companion; HSPLkotlin/ranges/LongProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/ranges/LongProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/ranges/LongRange; HSPLkotlin/ranges/LongRange;->()V PLkotlin/ranges/LongRange;->()V HSPLkotlin/ranges/LongRange;->(JJ)V PLkotlin/ranges/LongRange;->(JJ)V HSPLkotlin/ranges/LongRange;->contains(J)Z PLkotlin/ranges/LongRange;->contains(J)Z Lkotlin/ranges/LongRange$Companion; HSPLkotlin/ranges/LongRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/ranges/LongRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/ranges/OpenEndRange; Lkotlin/ranges/RangesKt; HSPLkotlin/ranges/RangesKt;->step(Lkotlin/ranges/IntRange;I)Lkotlin/ranges/IntProgression; PLkotlin/ranges/RangesKt;->step(Lkotlin/ranges/IntRange;I)Lkotlin/ranges/IntProgression; Lkotlin/ranges/RangesKt__RangesKt; HSPLkotlin/ranges/RangesKt__RangesKt;->checkStepIsPositive(ZLjava/lang/Number;)V PLkotlin/ranges/RangesKt__RangesKt;->checkStepIsPositive(ZLjava/lang/Number;)V Lkotlin/ranges/RangesKt___RangesKt; HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D HPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F HPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I HPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J HPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J HSPLkotlin/ranges/RangesKt___RangesKt;->step(Lkotlin/ranges/IntProgression;I)Lkotlin/ranges/IntProgression; PLkotlin/ranges/RangesKt___RangesKt;->step(Lkotlin/ranges/IntProgression;I)Lkotlin/ranges/IntProgression; HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange; PLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange; Lkotlin/reflect/KAnnotatedElement; Lkotlin/reflect/KCallable; Lkotlin/reflect/KClass; Lkotlin/reflect/KClassifier; Lkotlin/reflect/KDeclarationContainer; Lkotlin/reflect/KFunction; Lkotlin/reflect/KMutableProperty; Lkotlin/reflect/KMutableProperty1; Lkotlin/reflect/KProperty; Lkotlin/reflect/KProperty0; Lkotlin/reflect/KProperty1; Lkotlin/reflect/KProperty2; Lkotlin/reflect/KType; Lkotlin/reflect/full/KClassifiers; HSPLkotlin/reflect/full/KClassifiers;->createType(Lkotlin/reflect/KClassifier;Ljava/util/List;ZLjava/util/List;)Lkotlin/reflect/KType; PLkotlin/reflect/full/KClassifiers;->createType(Lkotlin/reflect/KClassifier;Ljava/util/List;ZLjava/util/List;)Lkotlin/reflect/KType; Lkotlin/reflect/jvm/internal/CacheByClass; HSPLkotlin/reflect/jvm/internal/CacheByClass;->()V PLkotlin/reflect/jvm/internal/CacheByClass;->()V Lkotlin/reflect/jvm/internal/CacheByClassKt; HSPLkotlin/reflect/jvm/internal/CacheByClassKt;->()V PLkotlin/reflect/jvm/internal/CacheByClassKt;->()V HSPLkotlin/reflect/jvm/internal/CacheByClassKt;->createCache(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/CacheByClass; PLkotlin/reflect/jvm/internal/CacheByClassKt;->createCache(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/CacheByClass; Lkotlin/reflect/jvm/internal/CachesKt; HSPLkotlin/reflect/jvm/internal/CachesKt;->()V PLkotlin/reflect/jvm/internal/CachesKt;->()V HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKType(Ljava/lang/Class;Ljava/util/List;Z)Lkotlin/reflect/KType; HPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKType(Ljava/lang/Class;Ljava/util/List;Z)Lkotlin/reflect/KType; HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; HPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; PLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1; HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/KType; PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/KType; HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1; HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1; HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V Lkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1; HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; PLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1; HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V PLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KPackageImpl; PLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KPackageImpl; HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/ConcurrentHashMapCache; HSPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;->(Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;->(Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;->get(Ljava/lang/Class;)Ljava/lang/Object; HPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;->get(Ljava/lang/Class;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/KCallableImpl; HSPLkotlin/reflect/jvm/internal/KCallableImpl;->()V PLkotlin/reflect/jvm/internal/KCallableImpl;->()V Lkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1; HSPLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V PLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V Lkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1; HSPLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V PLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V Lkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1; HSPLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V PLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V Lkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1; HSPLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V PLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V Lkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1; HSPLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V PLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V Lkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1; HSPLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V PLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl; HSPLkotlin/reflect/jvm/internal/KClassImpl;->(Ljava/lang/Class;)V PLkotlin/reflect/jvm/internal/KClassImpl;->(Ljava/lang/Class;)V HSPLkotlin/reflect/jvm/internal/KClassImpl;->access$getClassId(Lkotlin/reflect/jvm/internal/KClassImpl;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/KClassImpl;->access$getClassId(Lkotlin/reflect/jvm/internal/KClassImpl;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/KClassImpl;->equals(Ljava/lang/Object;)Z HPLkotlin/reflect/jvm/internal/KClassImpl;->equals(Ljava/lang/Object;)Z HSPLkotlin/reflect/jvm/internal/KClassImpl;->getData()Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; PLkotlin/reflect/jvm/internal/KClassImpl;->getData()Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; HSPLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; PLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; HSPLkotlin/reflect/jvm/internal/KClassImpl;->getJClass()Ljava/lang/Class; PLkotlin/reflect/jvm/internal/KClassImpl;->getJClass()Ljava/lang/Class; HSPLkotlin/reflect/jvm/internal/KClassImpl;->getQualifiedName()Ljava/lang/String; HPLkotlin/reflect/jvm/internal/KClassImpl;->getQualifiedName()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/KClassImpl;->getSimpleName()Ljava/lang/String; PLkotlin/reflect/jvm/internal/KClassImpl;->getSimpleName()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/KClassImpl;->hashCode()I HPLkotlin/reflect/jvm/internal/KClassImpl;->hashCode()I HSPLkotlin/reflect/jvm/internal/KClassImpl;->isInstance(Ljava/lang/Object;)Z PLkotlin/reflect/jvm/internal/KClassImpl;->isInstance(Ljava/lang/Object;)Z Lkotlin/reflect/jvm/internal/KClassImpl$Data; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->()V PLkotlin/reflect/jvm/internal/KClassImpl$Data;->()V HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/KClassImpl$Data;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getQualifiedName()Ljava/lang/String; HPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getQualifiedName()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getSimpleName()Ljava/lang/String; PLkotlin/reflect/jvm/internal/KClassImpl$Data;->getSimpleName()Ljava/lang/String; Lkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; Lkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/String; PLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/String; Lkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/String; PLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/String; Lkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2; HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V Lkotlin/reflect/jvm/internal/KClassImpl$data$1; HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V PLkotlin/reflect/jvm/internal/KClassImpl$data$1;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Lkotlin/reflect/jvm/internal/KClassImpl$Data; PLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Lkotlin/reflect/jvm/internal/KClassImpl$Data; Lkotlin/reflect/jvm/internal/KClassifierImpl; Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion; HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data; HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->()V PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->()V HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->getModuleData()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->getModuleData()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2; HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; PLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; Lkotlin/reflect/jvm/internal/KMutableProperty1Impl; HSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V HPLkotlin/reflect/jvm/internal/KMutableProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V Lkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1; HSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;->(Lkotlin/reflect/jvm/internal/KMutableProperty1Impl;)V PLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;->(Lkotlin/reflect/jvm/internal/KMutableProperty1Impl;)V Lkotlin/reflect/jvm/internal/KPackageImpl; HSPLkotlin/reflect/jvm/internal/KPackageImpl;->(Ljava/lang/Class;)V PLkotlin/reflect/jvm/internal/KPackageImpl;->(Ljava/lang/Class;)V Lkotlin/reflect/jvm/internal/KPackageImpl$data$1; HSPLkotlin/reflect/jvm/internal/KPackageImpl$data$1;->(Lkotlin/reflect/jvm/internal/KPackageImpl;)V PLkotlin/reflect/jvm/internal/KPackageImpl$data$1;->(Lkotlin/reflect/jvm/internal/KPackageImpl;)V Lkotlin/reflect/jvm/internal/KProperty1Impl; HSPLkotlin/reflect/jvm/internal/KProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V HPLkotlin/reflect/jvm/internal/KProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V Lkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1; HSPLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V PLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V Lkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1; HSPLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V PLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V Lkotlin/reflect/jvm/internal/KProperty2Impl; HSPLkotlin/reflect/jvm/internal/KProperty2Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/KProperty2Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;)V Lkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1; HSPLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V PLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V Lkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1; HSPLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V PLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V Lkotlin/reflect/jvm/internal/KPropertyImpl; HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->()V PLkotlin/reflect/jvm/internal/KPropertyImpl;->()V HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V HPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Ljava/lang/Object;)V PLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Ljava/lang/Object;)V Lkotlin/reflect/jvm/internal/KPropertyImpl$Companion; HSPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1; HSPLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V PLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V Lkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1; HSPLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V PLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V Lkotlin/reflect/jvm/internal/KTypeImpl; HSPLkotlin/reflect/jvm/internal/KTypeImpl;->()V PLkotlin/reflect/jvm/internal/KTypeImpl;->()V HSPLkotlin/reflect/jvm/internal/KTypeImpl;->(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/KTypeImpl;->(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/KTypeImpl;->(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/KTypeImpl;->(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/KTypeImpl;->access$convert(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier; PLkotlin/reflect/jvm/internal/KTypeImpl;->access$convert(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier; HSPLkotlin/reflect/jvm/internal/KTypeImpl;->convert(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier; PLkotlin/reflect/jvm/internal/KTypeImpl;->convert(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier; HSPLkotlin/reflect/jvm/internal/KTypeImpl;->getArguments()Ljava/util/List; HPLkotlin/reflect/jvm/internal/KTypeImpl;->getArguments()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/KTypeImpl;->getClassifier()Lkotlin/reflect/KClassifier; HPLkotlin/reflect/jvm/internal/KTypeImpl;->getClassifier()Lkotlin/reflect/KClassifier; HSPLkotlin/reflect/jvm/internal/KTypeImpl;->getType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType; PLkotlin/reflect/jvm/internal/KTypeImpl;->getType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType; HSPLkotlin/reflect/jvm/internal/KTypeImpl;->hashCode()I HPLkotlin/reflect/jvm/internal/KTypeImpl;->hashCode()I Lkotlin/reflect/jvm/internal/KTypeImpl$arguments$2; HSPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/util/List; PLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/util/List; Lkotlin/reflect/jvm/internal/KTypeImpl$classifier$2; HSPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->(Lkotlin/reflect/jvm/internal/KTypeImpl;)V PLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->(Lkotlin/reflect/jvm/internal/KTypeImpl;)V HSPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Lkotlin/reflect/KClassifier; PLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Lkotlin/reflect/KClassifier; Lkotlin/reflect/jvm/internal/KTypeParameterOwnerImpl; Lkotlin/reflect/jvm/internal/ModuleByClassLoaderKt; HSPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->()V PLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->()V HSPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->getOrCreateModule(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; PLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->getOrCreateModule(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; Lkotlin/reflect/jvm/internal/ReflectProperties; HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; PLkotlin/reflect/jvm/internal/ReflectProperties;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; PLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; PLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V HPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object; HPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object; Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->(Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object; HPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object; Lkotlin/reflect/jvm/internal/ReflectProperties$Val; HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V PLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V HPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->escape(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/ReflectProperties$Val;->escape(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->unescape(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->unescape(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/ReflectProperties$Val$1; HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;->()V PLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;->()V Lkotlin/reflect/jvm/internal/ReflectionFactoryImpl; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->()V PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->()V HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; HPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinPackage(Ljava/lang/Class;Ljava/lang/String;)Lkotlin/reflect/KDeclarationContainer; PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinPackage(Ljava/lang/Class;Ljava/lang/String;)Lkotlin/reflect/KDeclarationContainer; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOwner(Lkotlin/jvm/internal/CallableReference;)Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOwner(Lkotlin/jvm/internal/CallableReference;)Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->typeOf(Lkotlin/reflect/KClassifier;Ljava/util/List;Z)Lkotlin/reflect/KType; PLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->typeOf(Lkotlin/reflect/KClassifier;Ljava/util/List;Z)Lkotlin/reflect/KType; Lkotlin/reflect/jvm/internal/RuntimeTypeMapper; HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V PLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V PLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->mapJvmClassToKotlinClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->mapJvmClassToKotlinClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/UtilKt; HSPLkotlin/reflect/jvm/internal/UtilKt;->()V PLkotlin/reflect/jvm/internal/UtilKt;->()V HSPLkotlin/reflect/jvm/internal/UtilKt;->toJavaClass(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)Ljava/lang/Class; PLkotlin/reflect/jvm/internal/UtilKt;->toJavaClass(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)Ljava/lang/Class; Lkotlin/reflect/jvm/internal/WeakClassLoaderBox; HSPLkotlin/reflect/jvm/internal/WeakClassLoaderBox;->(Ljava/lang/ClassLoader;)V PLkotlin/reflect/jvm/internal/WeakClassLoaderBox;->(Ljava/lang/ClassLoader;)V HSPLkotlin/reflect/jvm/internal/WeakClassLoaderBox;->hashCode()I PLkotlin/reflect/jvm/internal/WeakClassLoaderBox;->hashCode()I Lkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping; HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V PLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V PLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->allClassesWithIntrinsicCompanions()Ljava/util/Set; PLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->allClassesWithIntrinsicCompanions()Ljava/util/Set; Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->()V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$200(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$200(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$202(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$202(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->getBuiltInsModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->getBuiltInsModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->setBuiltInsModule(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->setBuiltInsModule(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$1; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$1;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$1;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$3; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$3;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$3;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Void; PLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Void; Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->()V PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->(Ljava/lang/String;ILjava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->(Ljava/lang/String;ILjava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getArrayTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getArrayTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion; HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V PLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes; HSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;->()V PLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V PLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$ClassLookup; HSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$ClassLookup;->(I)V PLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$ClassLookup;->(I)V Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$Companion; HSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$kotlinReflectScope$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$kotlinReflectScope$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V PLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$kotlinReflectScope$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V Lkotlin/reflect/jvm/internal/impl/builtins/StandardNames; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionClassId(I)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionClassId(I)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionName(I)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionName(I)Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getPrimitiveFqName(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getPrimitiveFqName(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)Lkotlin/reflect/jvm/internal/impl/name/FqName; Lkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->annotationName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->annotationName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->collectionsFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->collectionsFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqNameUnsafe(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqNameUnsafe(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->reflect(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->reflect(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; Lkotlin/reflect/jvm/internal/impl/builtins/functions/BuiltInFictitiousFunctionClassFactory; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/BuiltInFictitiousFunctionClassFactory;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V PLkotlin/reflect/jvm/internal/impl/builtins/functions/BuiltInFictitiousFunctionClassFactory;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;ZLkotlin/reflect/jvm/internal/impl/name/ClassId;)V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;ZLkotlin/reflect/jvm/internal/impl/name/ClassId;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getClassNamePrefix()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getClassNamePrefix()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction; HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V PLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->add(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->add(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addKotlinToJava(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addKotlinToJava(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->classId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->classId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->mapJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->mapJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component1()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component1()Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component2()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component2()Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component3()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component3()Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;->()V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;->()V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$Companion; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$cloneable$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$cloneable$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$cloneable$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->getCustomizer()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->getCustomizer()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->setPostponedSettingsComputation(Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->setPostponedSettingsComputation(Lkotlin/jvm/functions/Function0;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->(Ljava/lang/String;I)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind; Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$WhenMappings; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$WhenMappings;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$WhenMappings;->()V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer; Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2$1; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2$1;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2$1;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$initialize$1; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$initialize$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$initialize$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$cloneableType$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$cloneableType$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$cloneableType$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$mockJavaIoPackageFragment$1; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$mockJavaIoPackageFragment$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$mockJavaIoPackageFragment$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$superTypes$1; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$superTypes$1;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$superTypes$1;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$notConsideredDeprecation$2; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$notConsideredDeprecation$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$notConsideredDeprecation$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->()V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->()V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;)V HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedPackageFragment; PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedPackageFragment; Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider$Companion; HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/descriptors/CallableDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind; HSPLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptorWithTypeParameters; Lkotlin/reflect/jvm/internal/impl/descriptors/ConstructorDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorNonRoot; Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor; Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorWithSource; Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorWithVisibility; Lkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;->getDelegate()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility; PLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;->getDelegate()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility; Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->recordVisibilityMapping(Lkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->recordVisibilityMapping(Lkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$10; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$10;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$10;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$11; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$11;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$11;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$12; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$12;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$12;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$2; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$3; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$3;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$3;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$4; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$4;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$4;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$5; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$5;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$5;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$6; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$6;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$6;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$7; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$7;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$7;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$8; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$8;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$8;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$9; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$9;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;)V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$9;->(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;)V Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; HSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt; HSPLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassifierAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassifierAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/FunctionDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/MemberDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/Modality; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Modality;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/descriptors/Modality;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;->convertFromFlags(ZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/Modality; PLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;->convertFromFlags(ZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/Modality; Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;->(Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;->(Ljava/lang/String;)V Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor$DefaultImpls; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor$DefaultImpls;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor$DefaultImpls;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/descriptors/Named; Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses; HSPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V PLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$classes$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$classes$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V PLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$classes$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$packageFragments$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$packageFragments$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V PLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$packageFragments$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider; Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt; HSPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->collectPackageFragmentsOptimizedIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V PLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->collectPackageFragmentsOptimizedIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->isEmpty(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z PLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->isEmpty(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->packageFragments(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->packageFragments(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderOptimized; Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function1;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function1;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getKotlinTypeRefinerForOwnerModule$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getKotlinTypeRefinerForOwnerModule$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getScopeFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/jvm/functions/Function1; PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getScopeFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/jvm/functions/Function1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->getScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->getScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass; PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass; Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)V PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement; HSPLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement$1;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement$1;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Substitutable; Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker; Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY; HSPLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterUtilsKt; HSPLkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterUtilsKt;->computeConstructorTypeParameters(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptorWithTypeParameters;)Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterUtilsKt;->computeConstructorTypeParameters(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptorWithTypeParameters;)Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/descriptors/ValueDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/VariableDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/VariableDescriptorWithAccessors; Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility; HSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibility;->(Ljava/lang/String;Z)V PLkotlin/reflect/jvm/internal/impl/descriptors/Visibility;->(Ljava/lang/String;Z)V Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotated; Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/AnnotatedImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/AnnotatedImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;)V PLkotlin/reflect/jvm/internal/impl/descriptors/annotations/AnnotatedImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;)V Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations; HSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion; HSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations; PLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations; Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion$EMPTY$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion$EMPTY$1;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion$EMPTY$1;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider; Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/ClassDescriptorFactory; Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter; Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer; Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None; HSPLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/name/Name;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getContextReceivers()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getContextReceivers()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getDefaultType()Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getDefaultType()Lkotlin/reflect/jvm/internal/impl/types/SimpleType; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Lkotlin/reflect/jvm/internal/impl/types/SimpleType; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$2; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$3; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$3;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$3;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ConstructorDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ConstructorDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->calculateDispatchReceiverParameter()Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->calculateDispatchReceiverParameter()Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;Z)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;Z)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getSource()Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getSource()Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZLkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZLkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getDeclaredTypeParameters()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getDeclaredTypeParameters()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Ljava/util/Set;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Ljava/util/Set;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->isInner()Z PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->isInner()Z Lkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->(Ljava/util/List;Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->(Ljava/util/List;Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z PLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z Lkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->toString(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->toString(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/FunctionDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/FunctionDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->setReturnType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->setReturnType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getEmpty()Z PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getEmpty()Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFragments()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFragments()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Boolean; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Boolean; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor$Companion; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;->(Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;->(Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;->getAllDependencies()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;->getAllDependencies()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getDependencies$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getDependencies$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageFragmentProviderForModuleContent$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageFragmentProviderForModuleContent$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageViewDescriptorFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageViewDescriptorFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getStorageManager$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getStorageManager$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$isInitialized(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Z PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$isInitialized(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->assertValid()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->assertValid()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getBuiltIns()Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getBuiltIns()Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getCapability(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getCapability(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;Ljava/util/Set;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;Ljava/util/Set;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies([Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies([Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->toString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->toString()Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->getCAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->getCAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->compute(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->compute(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl; PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->setType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->setType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/SubpackagesScope; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/SubpackagesScope;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/SubpackagesScope;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;->setOutType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;->setOutType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V Lkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorWithInitializerImpl; HSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorWithInitializerImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V PLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorWithInitializerImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility; HSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage; HSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility; HSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;)V Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->loadClassAnnotations(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass$AnnotationVisitor;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->loadClassAnnotations(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass$AnnotationVisitor;)V Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->(Ljava/lang/ClassLoader;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->(Ljava/lang/ClassLoader;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findClass(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findClass(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->knownClassNamesInPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/Set; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->knownClassNamesInPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/Set; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinderKt; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinderKt;->tryLoadClass(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinderKt;->tryLoadClass(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;->create(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;->create(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->(Ljava/lang/ClassLoader;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->(Ljava/lang/ClassLoader;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findBuiltInsData(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/io/InputStream; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findBuiltInsData(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/io/InputStream; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findKotlinClassOrContent(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findKotlinClassOrContent(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinderKt; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinderKt;->access$toRuntimeFqName(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinderKt;->access$toRuntimeFqName(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;->create(Ljava/lang/ClassLoader;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;->create(Ljava/lang/ClassLoader;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->source(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaElement;)Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElement; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->source(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaElement;)Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElement; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;->(Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;->(Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;->getJavaElement()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;->getJavaElement()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->initCache()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->initCache()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->loadIsSealed(Ljava/lang/Class;)Ljava/lang/Boolean; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->loadIsSealed(Ljava/lang/Class;)Ljava/lang/Boolean; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;->(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;->(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;->isSealed()Ljava/lang/reflect/Method; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;->isSealed()Ljava/lang/reflect/Method; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->()V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getFunctionClassArity(Ljava/lang/Class;)Ljava/lang/Integer; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getFunctionClassArity(Ljava/lang/Class;)Ljava/lang/Integer; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getPrimitiveByWrapper(Ljava/lang/Class;)Ljava/lang/Class; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getPrimitiveByWrapper(Ljava/lang/Class;)Ljava/lang/Class; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getSafeClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getSafeClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getWrapperByPrimitive(Ljava/lang/Class;)Ljava/lang/Class; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getWrapperByPrimitive(Ljava/lang/Class;)Ljava/lang/Class; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaAnnotationOwner; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->(Ljava/lang/Class;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->(Ljava/lang/Class;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getElement()Ljava/lang/Class; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getElement()Ljava/lang/Class; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getLightClassOriginKind()Lkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getLightClassOriginKind()Lkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getModifiers()I PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getModifiers()I HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getTypeParameters()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getTypeParameters()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAbstract()Z PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAbstract()Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAnnotationType()Z PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAnnotationType()Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isEnum()Z PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isEnum()Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isFinal()Z PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isFinal()Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isInterface()Z PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isInterface()Z HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isSealed()Z PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isSealed()Z Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;->()V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;->()V Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaModifierListOwner; Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage; HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;)V PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;)V HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; Lkotlin/reflect/jvm/internal/impl/incremental/UtilsKt; HSPLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->record(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->record(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;)V HSPLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->recordPackageLookup(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Ljava/lang/String;Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->recordPackageLookup(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Ljava/lang/String;Ljava/lang/String;)V Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation; Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker; Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING; HSPLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;->()V PLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;->()V HSPLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;->()V PLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;->()V Lkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation; HSPLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;->()V PLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;->()V HSPLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver; HSPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;->()V PLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V PLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V Lkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType; HSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->()V PLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->(Ljava/lang/String;ILjava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->(Ljava/lang/String;ILjava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->getJavaTarget()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->getJavaTarget()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->values()[Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType; PLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->values()[Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType; Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver; HSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V PLkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V Lkotlin/reflect/jvm/internal/impl/load/java/ErasedOverridabilityCondition; HSPLkotlin/reflect/jvm/internal/impl/load/java/ErasedOverridabilityCondition;->()V PLkotlin/reflect/jvm/internal/impl/load/java/ErasedOverridabilityCondition;->()V Lkotlin/reflect/jvm/internal/impl/load/java/FieldOverridabilityCondition; HSPLkotlin/reflect/jvm/internal/impl/load/java/FieldOverridabilityCondition;->()V PLkotlin/reflect/jvm/internal/impl/load/java/FieldOverridabilityCondition;->()V Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder; Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$$Util; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$$Util;->findPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/name/FqName;ZILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage; PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$$Util;->findPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/name/FqName;ZILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage; Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->getClassId()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->getClassId()Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker; Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->reportClass(Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->reportClass(Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; PLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; Lkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$1;->(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$2;->(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$3; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$3;->(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$3;->(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;->()V Lkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider; Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings$default(Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings$default(Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings(Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings(Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultMigrationJsr305ReportLevelForGivenGlobal(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultMigrationJsr305ReportLevelForGivenGlobal(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getJSPECIFY_ANNOTATIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getJSPECIFY_ANNOTATIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation$default(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation$default(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getReportLevelBefore()Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getReportLevelBefore()Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getSinceVersion()Lkotlin/KotlinVersion; PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getSinceVersion()Lkotlin/KotlinVersion; Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState; PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->getDisabledDefaultAnnotations()Z PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->getDisabledDefaultAnnotations()Z Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->()V PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; PLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings; HSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;)V PLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->isDisabled()Z PLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->isDisabled()Z Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings$description$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings$description$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;)V PLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings$description$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;)V Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates; HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;->()V PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;->()V Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->()V PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->()V PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates; PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates; Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl; HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->(Ljava/util/Map;)V PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->(Ljava/util/Map;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->get(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->get(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->getStates()Ljava/util/Map; PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->getStates()Ljava/util/Map; Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;)V PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel; HSPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;->()V PLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;->(Ljava/lang/String;ILjava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;->(Ljava/lang/String;ILjava/lang/String;)V Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/UtilsKt; HSPLkotlin/reflect/jvm/internal/impl/load/java/UtilsKt;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; PLkotlin/reflect/jvm/internal/impl/load/java/UtilsKt;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator; Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing; HSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;->()V PLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;->()V PLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;->()V Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache; HSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;->()V PLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;->()V Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;->()V PLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;->recordClass(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;->recordClass(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator; HSPLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;->()V PLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;->()V Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator$1;->()V PLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator$1;->()V Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;IILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;IILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt$childForClassOrPackage$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt$childForClassOrPackage$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt$childForClassOrPackage$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getFinder()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getFinder()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaClassesTracker()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaClassesTracker()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaResolverCache()Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaResolverCache()Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaTypeEnhancementState()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaTypeEnhancementState()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinClassFinder()Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinClassFinder()Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinTypeChecker()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinTypeChecker()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getLookupTracker()Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getLookupTracker()Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getSourceElementFactory()Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getSourceElementFactory()Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;->()V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;Z)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;Z)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations$annotationDescriptors$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations$annotationDescriptors$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations$annotationDescriptors$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotationsKt; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotationsKt;->resolveAnnotations(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;)Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotationsKt;->resolveAnnotations(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;)Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->getPackageFragment(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->getPackageFragment(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;Lkotlin/Lazy;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;Lkotlin/Lazy;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getComponents()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getComponents()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getTypeParameterResolver()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getTypeParameterResolver()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver$resolve$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver$resolve$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver$resolve$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;->setResolver(Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;->setResolver(Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;->()V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->recordLookup(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->recordLookup(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope$kotlinScopes$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope$kotlinScopes$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope$kotlinScopes$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getAdditionalSupertypeClassDescriptor$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getAdditionalSupertypeClassDescriptor$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getUnsubstitutedMemberScope$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getUnsubstitutedMemberScope$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getDeclaredTypeParameters()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getDeclaredTypeParameters()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getJClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getJClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getKind()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getKind()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isExpect()Z PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isExpect()Z HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isInner()Z PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isInner()Z Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getDeclarationDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getDeclarationDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getParameters()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getParameters()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$moduleAnnotations$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$moduleAnnotations$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$moduleAnnotations$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$constructors$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$constructors$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$constructors$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$enumEntryIndex$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$enumEntryIndex$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$enumEntryIndex$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$generatedNestedClassNames$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$generatedNestedClassNames$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$generatedNestedClassNames$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClassIndex$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClassIndex$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClassIndex$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClasses$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClasses$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClasses$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$binaryClasses$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$binaryClasses$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$binaryClasses$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$partToFacade$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$partToFacade$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$partToFacade$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$subPackages$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$subPackages$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$subPackages$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$getJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$getJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$resolveKotlinBinaryClass(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$resolveKotlinBinaryClass(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->findClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->findClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getOwnerDescriptor()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getOwnerDescriptor()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getJavaClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getJavaClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->hashCode()I PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->hashCode()I Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$Found; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;->()V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$SyntheticClass; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/util/Set; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/util/Set; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->getC()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->getC()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext; Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$allDescriptors$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$allDescriptors$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$allDescriptors$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$classNamesLazy$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$classNamesLazy$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$classNamesLazy$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredField$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredField$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredField$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredFunctions$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredFunctions$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredFunctions$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredMemberIndex$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredMemberIndex$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredMemberIndex$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functionNamesLazy$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functionNamesLazy$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functionNamesLazy$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functions$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functions$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functions$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$properties$1; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$properties$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$properties$1;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$propertyNamesLazy$2; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$propertyNamesLazy$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$propertyNamesLazy$2;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticClassScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticClassScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticClassScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticScope; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticScope;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/types/JavaTypeResolver; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/JavaTypeResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;)V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/JavaTypeResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;)V Lkotlin/reflect/jvm/internal/impl/load/java/lazy/types/RawProjectionComputer; HSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/RawProjectionComputer;->()V PLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/RawProjectionComputer;->()V Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElement; Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClassifier; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaElement; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaModifierListOwner; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaNamedElement; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage; Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner; Lkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind; HSPLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;->()V PLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;->()V HSPLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement; HSPLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;)V PLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;)V Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement; HSPLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;->(Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;)V PLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;->(Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader$storage$1; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader$storage$1;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader$storage$1;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationLoader; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationLoader;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationLoader;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;->setJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;->setJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImplKt; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImplKt;->createBinaryClassAnnotationAndConstantLoader(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl; PLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImplKt;->createBinaryClassAnnotationAndConstantLoader(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl; Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;)V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents; Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;->createModuleData(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;->createModuleData(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData; Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializationComponentsForJava()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializationComponentsForJava()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver; Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeDeserializationComponentsForJava(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeDeserializationComponentsForJava(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt$makeLazyJavaPackageFragmentProvider$javaResolverComponents$1; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt$makeLazyJavaPackageFragmentProvider$javaResolverComponents$1;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt$makeLazyJavaPackageFragmentProvider$javaResolverComponents$1;->()V Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents; PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;)V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;->(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;->()V Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder; Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result; Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result$ClassFileContent; Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass; Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass$AnnotationVisitor; Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinarySourceElement; Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider; Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;->()V Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->(Ljava/lang/String;II)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->(Ljava/lang/String;II)V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind; PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind; Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind$Companion; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->()V HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeader(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader; PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeader(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeaderWithDefaultMetadataVersion()Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader; PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeaderWithDefaultMetadataVersion()Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader; HSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->visitEnd()V PLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->visitEnd()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;->(Ljava/lang/String;II)V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;->(Ljava/lang/String;II)V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$ValueOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$AnnotationOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ClassOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ConstructorOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ContractOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntryOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$FunctionOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$PackageOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$PropertyOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;->(Ljava/lang/String;II)V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;->(Ljava/lang/String;II)V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameterOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTableOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameterOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable; PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable; Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTableOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf; HSPLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;->()V PLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V PLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion; HSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->()V PLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->([I)V PLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->([I)V HSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMajor()I PLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMajor()I HSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMinor()I PLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMinor()I Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion$Companion; HSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature; PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature; Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignatureOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature; PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature; Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignatureOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature; PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->initFields()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->initFields()V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature$1; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature$1;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature$1;->()V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignatureOrBuilder; Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->([I)V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->([I)V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->([IZ)V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->([IZ)V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->next()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->next()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion$Companion; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->()V PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->getEXTENSION_REGISTRY()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; PLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->getEXTENSION_REGISTRY()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)V PLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)V HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/Name;)V HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->asSingleFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/ClassId;->asSingleFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->createNestedClassId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/ClassId;->createNestedClassId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/ClassId;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getRelativeClassName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/ClassId;->getRelativeClassName()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getShortClassName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/ClassId;->getShortClassName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->hashCode()I PLkotlin/reflect/jvm/internal/impl/name/ClassId;->hashCode()I HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->isLocal()Z PLkotlin/reflect/jvm/internal/impl/name/ClassId;->isLocal()Z HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/ClassId;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->()V PLkotlin/reflect/jvm/internal/impl/name/FqName;->()V HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/name/FqName;->(Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V PLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V PLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->asString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/FqName;->asString()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/FqName;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->equals(Ljava/lang/Object;)Z PLkotlin/reflect/jvm/internal/impl/name/FqName;->equals(Ljava/lang/Object;)Z HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->hashCode()I PLkotlin/reflect/jvm/internal/impl/name/FqName;->hashCode()I HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->isRoot()Z PLkotlin/reflect/jvm/internal/impl/name/FqName;->isRoot()Z HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/FqName;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->pathSegments()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/name/FqName;->pathSegments()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/FqName;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/FqName;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z PLkotlin/reflect/jvm/internal/impl/name/FqName;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/FqName;->toString()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toUnsafe()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/name/FqName;->toUnsafe()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/FqName;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->()V PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->()V HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/Name;)V HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->asString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->asString()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->compute()V PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->compute()V HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->equals(Ljava/lang/Object;)Z PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->equals(Ljava/lang/Object;)Z HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->hashCode()I HPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->hashCode()I HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->isRoot()Z HPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->isRoot()Z HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->pathSegments()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->pathSegments()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toSafe()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toSafe()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toString()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1; HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->()V PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->()V HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt; HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->findValueForMostSpecificFqname(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Map;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->findValueForMostSpecificFqname(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Map;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isChildOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z PLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isChildOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z PLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->parentOrNull(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->parentOrNull(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->tail(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->tail(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName; Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/Name;->(Ljava/lang/String;Z)V PLkotlin/reflect/jvm/internal/impl/name/Name;->(Ljava/lang/String;Z)V HSPLkotlin/reflect/jvm/internal/impl/name/Name;->asString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/Name;->asString()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/name/Name;->equals(Ljava/lang/Object;)Z PLkotlin/reflect/jvm/internal/impl/name/Name;->equals(Ljava/lang/Object;)Z HSPLkotlin/reflect/jvm/internal/impl/name/Name;->getIdentifier()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/Name;->getIdentifier()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/name/Name;->guessByFirstCharacter(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/Name;->guessByFirstCharacter(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/Name;->hashCode()I PLkotlin/reflect/jvm/internal/impl/name/Name;->hashCode()I HSPLkotlin/reflect/jvm/internal/impl/name/Name;->identifier(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/Name;->identifier(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/Name;->isSpecial()Z PLkotlin/reflect/jvm/internal/impl/name/Name;->isSpecial()Z HSPLkotlin/reflect/jvm/internal/impl/name/Name;->special(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; PLkotlin/reflect/jvm/internal/impl/name/Name;->special(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/name/Name;->toString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/name/Name;->toString()Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/name/SpecialNames; HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V PLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V PLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->isSafeIdentifier(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z PLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->isSafeIdentifier(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z Lkotlin/reflect/jvm/internal/impl/name/StandardClassIds; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getArray()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getArray()Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ANNOTATION_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ANNOTATION_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COLLECTIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COLLECTIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COROUTINES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COROUTINES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ENUMS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ENUMS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_KOTLIN_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_KOTLIN_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_RANGES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_RANGES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_REFLECT_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_REFLECT_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKClass()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKClass()Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKFunction()Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKFunction()Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->()V PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->()V HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$inverseMap(Ljava/util/Map;)Ljava/util/Map; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$inverseMap(Ljava/util/Map;)Ljava/util/Map; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; PLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; Lkotlin/reflect/jvm/internal/impl/protobuf/AbstractMessageLite; HSPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractMessageLite;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/AbstractMessageLite;->()V Lkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser; HSPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;->()V Lkotlin/reflect/jvm/internal/impl/protobuf/ByteString; HSPLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;->()V Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->(I)V PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->(I)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->add(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->add(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->getEmptyRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->getEmptyRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->newInstance()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->newInstance()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair; HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;->(Ljava/lang/Object;I)V PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;->(Ljava/lang/Object;I)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;->hashCode()I PLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;->hashCode()I Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet; HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->(I)V PLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->(I)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->makeImmutable()V PLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->makeImmutable()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->newFieldSet()Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet; PLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->newFieldSet()Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet; Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet$FieldDescriptorLite; Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newRepeatedGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZLjava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension; PLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newRepeatedGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZLjava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newSingularGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension; PLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newSingularGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension; Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->()V Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessageOrBuilder; Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;->(Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZZ)V PLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;->(Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZZ)V Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;->(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;Ljava/lang/Class;)V PLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;->(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;Ljava/lang/Class;)V Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLite; Lkotlin/reflect/jvm/internal/impl/protobuf/InvalidProtocolBufferException; Lkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString; HSPLkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString;->([B)V PLkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString;->([B)V Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite; Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLiteOrBuilder; Lkotlin/reflect/jvm/internal/impl/protobuf/Parser; Lkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->(I)V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->(I)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getNumArrayEntries()I PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getNumArrayEntries()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getOverflowEntries()Ljava/lang/Iterable; PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getOverflowEntries()Ljava/lang/Iterable; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->isImmutable()Z PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->isImmutable()Z HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->makeImmutable()V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->makeImmutable()V Lkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->(I)V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->(I)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->makeImmutable()V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->makeImmutable()V Lkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->access$700()Ljava/util/Iterator; PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->access$700()Ljava/util/Iterator; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->iterable()Ljava/lang/Iterable; PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->iterable()Ljava/lang/Iterable; Lkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->hasNext()Z PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->hasNext()Z Lkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->iterator()Ljava/util/Iterator; PLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->iterator()Ljava/util/Iterator; Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType; HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;I)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;I)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;II)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;II)V Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$1; HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$1;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$1;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$2; HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$2;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$2;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$3; HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$3;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$3;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$4; HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$4;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$4;->(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType; HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;->()V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;->(Ljava/lang/Object;ILjava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;->(Ljava/lang/Object;ILjava/lang/String;)V Lkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy; HSPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;->()V PLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;->(Ljava/lang/String;IZI)V PLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;->(Ljava/lang/String;IZI)V HSPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;->(Ljava/lang/String;IZZ)V PLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;->(Ljava/lang/String;IZZ)V Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy; Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED; HSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;->()V Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT; HSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;->()V Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED; HSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;->()V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;->()V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;->withOptions(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;->withOptions(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer; Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler; Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;->()V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->access$renderName(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->access$renderName(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->escape(Ljava/lang/String;)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->escape(Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getBoldOnlyForNamesInHtml()Z PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getBoldOnlyForNamesInHtml()Z HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getWithDefinedIn()Z PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getWithDefinedIn()Z HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->render(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->render(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/name/Name;Z)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/name/Name;Z)Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/StringBuilder;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/StringBuilder;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$functionTypeAnnotationsRenderer$2; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$functionTypeAnnotationsRenderer$2;->(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$functionTypeAnnotationsRenderer$2;->(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->(ILjava/lang/String;Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->(ILjava/lang/String;Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->values()[Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->values()[Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier; Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier$Companion; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions; Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getBoldOnlyForNamesInHtml()Z PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getBoldOnlyForNamesInHtml()Z HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat; PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getWithDefinedIn()Z PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getWithDefinedIn()Z HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->isLocked()Z PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->isLocked()Z HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->lock()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->lock()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setClassifierNamePolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setClassifierNamePolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setDebugMode(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setDebugMode(Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setModifiers(Ljava/util/Set;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setModifiers(Ljava/util/Set;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setParameterNameRenderingPolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setParameterNameRenderingPolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setReceiverAfterName(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setReceiverAfterName(Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setRenderCompanionObjectName(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setRenderCompanionObjectName(Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setStartFromName(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setStartFromName(Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setTextFormat(Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setTextFormat(Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithDefinedIn(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithDefinedIn(Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutSuperTypes(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutSuperTypes(Z)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutTypeParameters(Z)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutTypeParameters(Z)V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;->()V Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;->(Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;->(Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;->beforeChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)Z PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;->beforeChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)Z Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2; HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;->()V PLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;->()V Lkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations; HSPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->getInternalAnnotationsForResolve()Ljava/util/Set; PLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->getInternalAnnotationsForResolve()Ljava/util/Set; Lkotlin/reflect/jvm/internal/impl/renderer/KeywordStringsGenerated; HSPLkotlin/reflect/jvm/internal/impl/renderer/KeywordStringsGenerated;->()V PLkotlin/reflect/jvm/internal/impl/renderer/KeywordStringsGenerated;->()V Lkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy; HSPLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;->()V PLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy; HSPLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;->()V PLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy; HSPLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;->()V PLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat; HSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;->()V PLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$HTML; HSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$HTML;->()V PLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$HTML;->()V Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN; HSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;->()V PLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;->()V HSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;->escape(Ljava/lang/String;)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;->escape(Ljava/lang/String;)Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/renderer/RenderingUtilsKt; HSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingUtilsKt;->render(Lkotlin/reflect/jvm/internal/impl/name/Name;)Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/renderer/RenderingUtilsKt;->render(Lkotlin/reflect/jvm/internal/impl/name/Name;)Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils; HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->()V PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModuleOrNull(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModuleOrNull(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameSafeIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameSafeIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameUnsafe(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameUnsafe(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isAnonymousObject(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isAnonymousObject(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isClass(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isClass(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isDescriptorWithLocalVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isDescriptorWithLocalVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isKindOf(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;)Z PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isKindOf(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;)Z HSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isLocal(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z PLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isLocal(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z Lkotlin/reflect/jvm/internal/impl/resolve/ExternalOverridabilityCondition; Lkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil; HSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->()V PLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker$TypeConstructorEquality;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;)V PLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker$TypeConstructorEquality;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->createWithTypeRefiner(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil; PLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->createWithTypeRefiner(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil; Lkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil$1; HSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil$1;->()V PLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil$1;->()V Lkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProvider; Lkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt; HSPLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;->()V PLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;->getResolutionAnchorIfAny(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;->getResolutionAnchorIfAny(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; Lkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt; HSPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->()V PLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getKotlinTypeRefiner(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; PLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getKotlinTypeRefiner(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; HSPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; Lkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;->(Ljava/util/List;)V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;->(Ljava/util/List;)V Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;)V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;->(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider; Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->()V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->get(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->get(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getDesc()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getDesc()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getJavaKeywordName()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getJavaKeywordName()Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getPrimitiveType()Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getPrimitiveType()Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getWrapperFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getWrapperFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;->()V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;->()V Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion; HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->()V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->()V PLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider; PLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider; Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver; Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolverImpl; HSPLkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolverImpl;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Ljava/lang/Iterable;)V PLkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolverImpl;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Ljava/lang/Iterable;)V Lkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;->()V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->()V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->(Ljava/lang/String;[Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->(Ljava/lang/String;[Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->create(Ljava/lang/String;Ljava/lang/Iterable;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->create(Ljava/lang/String;Ljava/lang/Iterable;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->createOrSingle$descriptors(Ljava/lang/String;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->createOrSingle$descriptors(Ljava/lang/String;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/InnerClassesScopeWrapper; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/InnerClassesScopeWrapper;->(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;)V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/InnerClassesScopeWrapper;->(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;)V Lkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;->getWorkerScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;->getWorkerScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->(Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; PLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;->()V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;->()V HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;->()V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;->()V Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScopeImpl; HSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScopeImpl;->()V PLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScopeImpl;->()V Lkotlin/reflect/jvm/internal/impl/resolve/scopes/ResolutionScope; Lkotlin/reflect/jvm/internal/impl/resolve/scopes/receivers/ReceiverValue; Lkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol; HSPLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;->(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V PLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;->(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;->getExtensionRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; PLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;->getExtensionRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->getFinder()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->getFinder()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoaderImpl; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoaderImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoaderImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationDeserializer; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationDeserializer;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationDeserializer;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationLoader; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$Companion; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$classes$1; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$classes$1;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$classes$1;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->getDEFAULT()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->getDEFAULT()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion$DEFAULT$1; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion$DEFAULT$1;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion$DEFAULT$1;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getConfiguration()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getConfiguration()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getModuleDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getModuleDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getBinaryVersion()Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion; PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getBinaryVersion()Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedClassDataFinder; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedClassDataFinder;->(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedClassDataFinder;->(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter$1; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter$1;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter$1;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings; Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;->()V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader;->()V PLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader;->()V Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/descriptors/DeserializedContainerSource; Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNotNullValues; Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNullableValues; Lkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock; HSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->(Ljava/util/concurrent/locks/Lock;)V PLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->(Ljava/util/concurrent/locks/Lock;)V HSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->(Ljava/util/concurrent/locks/Lock;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->(Ljava/util/concurrent/locks/Lock;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->lock()V PLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->lock()V HSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->unlock()V PLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->unlock()V Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock; HSPLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;->()V PLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;->()V HSPLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;->()V PLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;->()V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->()V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->()V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->(Ljava/lang/String;Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->(Ljava/lang/String;Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/SimpleLock;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/SimpleLock;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->compute(Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->compute(Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNotNullValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNotNullValues; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNotNullValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNotNullValues; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNullableValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNullableValues; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNullableValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNullableValues; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValueWithPostCompute(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValueWithPostCompute(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createNullableLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NullableLazyValue; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createNullableLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NullableLazyValue; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createRecursionTolerantLazyValue(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createRecursionTolerantLazyValue(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$1; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$1;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$1;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$4; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$4;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$4;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$5; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$5;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$5;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->()V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->()V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;->()V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;->()V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy$1; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy$1;->()V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy$1;->()V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->access$400(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Lkotlin/jvm/functions/Function0; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->access$400(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Lkotlin/jvm/functions/Function0; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->hashCode()I PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->hashCode()I Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->postCompute(Ljava/lang/Object;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->postCompute(Ljava/lang/Object;)V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;->invoke()Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;->invoke()Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;->()V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;->()V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;->(Ljava/lang/String;I)V PLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;->(Ljava/lang/String;I)V Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull; Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable; Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue; Lkotlin/reflect/jvm/internal/impl/storage/NullableLazyValue; Lkotlin/reflect/jvm/internal/impl/storage/SimpleLock; HSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock;->()V PLkotlin/reflect/jvm/internal/impl/storage/SimpleLock;->()V Lkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion; HSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->()V PLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->()V PLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->simpleLock(Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock; PLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->simpleLock(Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock; Lkotlin/reflect/jvm/internal/impl/storage/StorageKt; HSPLkotlin/reflect/jvm/internal/impl/storage/StorageKt;->getValue(Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/storage/StorageKt;->getValue(Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/storage/StorageManager; Lkotlin/reflect/jvm/internal/impl/types/AbstractClassTypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractClassTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/types/AbstractClassTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V Lkotlin/reflect/jvm/internal/impl/types/AbstractStubType; Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$1; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$1;->(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$1;->(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;->()V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;->()V HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;->()V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;->()V Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$3; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$3;->(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$3;->(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V Lkotlin/reflect/jvm/internal/impl/types/AbstractTypePreparator; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypePreparator;->()V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypePreparator;->()V Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeRefiner; HSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeRefiner;->()V PLkotlin/reflect/jvm/internal/impl/types/AbstractTypeRefiner;->()V Lkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl; HSPLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Ljava/util/List;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V PLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;->(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Ljava/util/List;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V HSPLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;->getParameters()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;->getParameters()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;->()V PLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;->()V HSPLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;->hashCode()I PLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;->hashCode()I Lkotlin/reflect/jvm/internal/impl/types/CustomTypeParameter; Lkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator; HSPLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;->()V PLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;->()V HSPLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;->()V PLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;->()V Lkotlin/reflect/jvm/internal/impl/types/DefinitelyNotNullType; Lkotlin/reflect/jvm/internal/impl/types/DelegatingSimpleType; HSPLkotlin/reflect/jvm/internal/impl/types/DelegatingSimpleType;->()V PLkotlin/reflect/jvm/internal/impl/types/DelegatingSimpleType;->()V Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer; HSPLkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;->()V PLkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;->()V Lkotlin/reflect/jvm/internal/impl/types/FlexibleType; Lkotlin/reflect/jvm/internal/impl/types/FlexibleTypesKt; HSPLkotlin/reflect/jvm/internal/impl/types/FlexibleTypesKt;->isFlexible(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z PLkotlin/reflect/jvm/internal/impl/types/FlexibleTypesKt;->isFlexible(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z Lkotlin/reflect/jvm/internal/impl/types/IntersectionTypeConstructor; Lkotlin/reflect/jvm/internal/impl/types/KotlinType; HSPLkotlin/reflect/jvm/internal/impl/types/KotlinType;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/KotlinType;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/types/KotlinType;->hashCode()I PLkotlin/reflect/jvm/internal/impl/types/KotlinType;->hashCode()I Lkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory; HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->()V PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->()V HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->()V PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->()V HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType$default(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType$default(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleTypeWithNonTrivialMemberScope(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleTypeWithNonTrivialMemberScope(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; Lkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1; HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;->()V PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;->()V HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;->()V PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;->()V Lkotlin/reflect/jvm/internal/impl/types/KotlinTypeKt; HSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeKt;->isError(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z PLkotlin/reflect/jvm/internal/impl/types/KotlinTypeKt;->isError(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z Lkotlin/reflect/jvm/internal/impl/types/LazyWrappedType; HSPLkotlin/reflect/jvm/internal/impl/types/LazyWrappedType;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V PLkotlin/reflect/jvm/internal/impl/types/LazyWrappedType;->(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V Lkotlin/reflect/jvm/internal/impl/types/SimpleType; HSPLkotlin/reflect/jvm/internal/impl/types/SimpleType;->()V PLkotlin/reflect/jvm/internal/impl/types/SimpleType;->()V Lkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl; HSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)V PLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getArguments()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getArguments()Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; PLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->isMarkedNullable()Z PLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->isMarkedNullable()Z Lkotlin/reflect/jvm/internal/impl/types/SpecialTypesKt; HSPLkotlin/reflect/jvm/internal/impl/types/SpecialTypesKt;->isDefinitelyNotNullType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z PLkotlin/reflect/jvm/internal/impl/types/SpecialTypesKt;->isDefinitelyNotNullType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z Lkotlin/reflect/jvm/internal/impl/types/TypeAttributeTranslator; Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes; HSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->()V PLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->()V HSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->(Ljava/util/List;)V PLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->(Ljava/util/List;)V HSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->access$getEmpty$cp()Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes; PLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->access$getEmpty$cp()Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes; Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes$Companion; HSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/TypeAttributes$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor; Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions; HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;->(ZZ)V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;->(ZZ)V Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser; HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;->()V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;->()V HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;->(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;)V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;->(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;)V HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;->(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;->(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$Companion; HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$erroneousErasedBound$2; HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$erroneousErasedBound$2;->(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$erroneousErasedBound$2;->(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$getErasedUpperBound$1; HSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$getErasedUpperBound$1;->(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V PLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$getErasedUpperBound$1;->(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V Lkotlin/reflect/jvm/internal/impl/types/TypeUtils; HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->()V PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->()V HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getDefaultTypeProjections(Ljava/util/List;)Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getDefaultTypeProjections(Ljava/util/List;)Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getTypeParameterDescriptorOrNull(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterDescriptor; PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getTypeParameterDescriptorOrNull(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterDescriptor; HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isNullableType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isNullableType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isTypeParameter(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isTypeParameter(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; PLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType; Lkotlin/reflect/jvm/internal/impl/types/TypeUtils$SpecialType; HSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils$SpecialType;->(Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/types/TypeUtils$SpecialType;->(Ljava/lang/String;)V Lkotlin/reflect/jvm/internal/impl/types/UnwrappedType; HSPLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;->unwrap()Lkotlin/reflect/jvm/internal/impl/types/UnwrappedType; PLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;->unwrap()Lkotlin/reflect/jvm/internal/impl/types/UnwrappedType; Lkotlin/reflect/jvm/internal/impl/types/WrappedType; HSPLkotlin/reflect/jvm/internal/impl/types/WrappedType;->()V PLkotlin/reflect/jvm/internal/impl/types/WrappedType;->()V Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker; Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker$TypeConstructorEquality; Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator; HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;->()V Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default; HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;->()V Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;->()V Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default; HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->()V HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->isRefinementNeededForModule(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Z PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->isRefinementNeededForModule(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Z Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt; HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;->()V HSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;->getREFINER_CAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability; PLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;->getREFINER_CAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability; Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker; HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;->()V Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion; HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->()V PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->()V HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->getDefault()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl; PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->getDefault()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl; Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl; HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;)V PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;)V HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->getKotlinTypeRefiner()Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; PLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->getKotlinTypeRefiner()Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner; Lkotlin/reflect/jvm/internal/impl/types/checker/NewTypeVariableConstructor; Lkotlin/reflect/jvm/internal/impl/types/checker/Ref; Lkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/name/Name;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;->(Lkotlin/reflect/jvm/internal/impl/name/Name;)V Lkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->(Ljava/lang/String;ILjava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->(Ljava/lang/String;ILjava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->getDebugText()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->getDebugText()Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;->()V Lkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;->()V Lkotlin/reflect/jvm/internal/impl/types/error/ErrorPropertyDescriptor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorPropertyDescriptor;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorPropertyDescriptor;->()V Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;->(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;->(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)V Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->(Ljava/lang/String;ILjava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->(Ljava/lang/String;ILjava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->getDebugMessage()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->getDebugMessage()Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;->(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;->(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;->(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;->(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;->(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;->toString()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;->toString()Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->(Ljava/lang/String;Ljava/lang/String;IZ)V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->(Ljava/lang/String;Ljava/lang/String;IZ)V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->getDebugMessage()Ljava/lang/String; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->getDebugMessage()Ljava/lang/String; Lkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->()V PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->()V HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;Z[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;Z[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorType(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorType(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeConstructor(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeConstructor(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorClass()Lkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorClass()Lkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorPropertyType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType; PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorPropertyType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType; HSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->isError(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z PLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->isError(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z Lkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators; HSPLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;->(Ljava/util/List;)V PLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;->(Ljava/util/List;)V HSPLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;->getTranslators()Ljava/util/List; PLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;->getTranslators()Ljava/util/List; Lkotlin/reflect/jvm/internal/impl/types/model/DefinitelyNotNullTypeMarker; Lkotlin/reflect/jvm/internal/impl/types/model/FlexibleTypeMarker; Lkotlin/reflect/jvm/internal/impl/types/model/IntersectionTypeConstructorMarker; Lkotlin/reflect/jvm/internal/impl/types/model/KotlinTypeMarker; Lkotlin/reflect/jvm/internal/impl/types/model/SimpleTypeMarker; Lkotlin/reflect/jvm/internal/impl/types/model/TypeArgumentListMarker; Lkotlin/reflect/jvm/internal/impl/types/model/TypeConstructorMarker; Lkotlin/reflect/jvm/internal/impl/types/model/TypeParameterMarker; Lkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner; HSPLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;->()V PLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;->()V HSPLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;->isEmpty()Z PLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;->isEmpty()Z Lkotlin/reflect/jvm/internal/impl/util/ArrayMap; HSPLkotlin/reflect/jvm/internal/impl/util/ArrayMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/reflect/jvm/internal/impl/util/ArrayMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner; HSPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->()V PLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->()V HSPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->(Lkotlin/reflect/jvm/internal/impl/util/ArrayMap;)V PLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->(Lkotlin/reflect/jvm/internal/impl/util/ArrayMap;)V HSPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->getArrayMap()Lkotlin/reflect/jvm/internal/impl/util/ArrayMap; PLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->getArrayMap()Lkotlin/reflect/jvm/internal/impl/util/ArrayMap; Lkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap; HSPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->()V PLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->()V HSPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->()V PLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->()V HSPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->getSize()I PLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->getSize()I Lkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper; Lkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY; HSPLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;->()V PLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;->()V HSPLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;->()V PLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;->()V Lkotlin/reflect/jvm/internal/impl/util/TypeRegistry; HSPLkotlin/reflect/jvm/internal/impl/util/TypeRegistry;->()V PLkotlin/reflect/jvm/internal/impl/util/TypeRegistry;->()V Lkotlin/reflect/jvm/internal/impl/utils/CollectionsKt; HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->addIfNotNull(Ljava/util/Collection;Ljava/lang/Object;)V PLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->addIfNotNull(Ljava/util/Collection;Ljava/lang/Object;)V HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->mapToIndex(Ljava/lang/Iterable;)Ljava/util/Map; PLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->mapToIndex(Ljava/lang/Iterable;)Ljava/util/Map; HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashMapWithExpectedSize(I)Ljava/util/HashMap; PLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashMapWithExpectedSize(I)Ljava/util/HashMap; HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashSetWithExpectedSize(I)Ljava/util/HashSet; PLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashSetWithExpectedSize(I)Ljava/util/HashSet; Lkotlin/reflect/jvm/internal/impl/utils/DeserializationHelpersKt; HSPLkotlin/reflect/jvm/internal/impl/utils/DeserializationHelpersKt;->jvmMetadataVersionOrDefault(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; PLkotlin/reflect/jvm/internal/impl/utils/DeserializationHelpersKt;->jvmMetadataVersionOrDefault(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion; Lkotlin/reflect/jvm/internal/impl/utils/SmartList; HSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->()V PLkotlin/reflect/jvm/internal/impl/utils/SmartList;->()V HSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->add(Ljava/lang/Object;)Z PLkotlin/reflect/jvm/internal/impl/utils/SmartList;->add(Ljava/lang/Object;)Z HSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->size()I PLkotlin/reflect/jvm/internal/impl/utils/SmartList;->size()I HSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/utils/SmartList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/utils/WrappedValues; HSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->()V PLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->()V HSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->escapeNull(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->escapeNull(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->unescapeThrowable(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->unescapeThrowable(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/reflect/jvm/internal/impl/utils/WrappedValues$1; HSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues$1;->()V PLkotlin/reflect/jvm/internal/impl/utils/WrappedValues$1;->()V Lkotlin/reflect/jvm/internal/impl/utils/WrappedValues$ThrowableWrapper; Lkotlin/sequences/ConstrainedOnceSequence; HSPLkotlin/sequences/ConstrainedOnceSequence;->(Lkotlin/sequences/Sequence;)V PLkotlin/sequences/ConstrainedOnceSequence;->(Lkotlin/sequences/Sequence;)V HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator; PLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator; Lkotlin/sequences/FilteringSequence; HSPLkotlin/sequences/FilteringSequence;->(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V HPLkotlin/sequences/FilteringSequence;->(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V HSPLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1; PLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1; HSPLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z PLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z HSPLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence; PLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator; PLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator; Lkotlin/sequences/FilteringSequence$iterator$1; HSPLkotlin/sequences/FilteringSequence$iterator$1;->(Lkotlin/sequences/FilteringSequence;)V HPLkotlin/sequences/FilteringSequence$iterator$1;->(Lkotlin/sequences/FilteringSequence;)V HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V HPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z HPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object; PLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object; Lkotlin/sequences/GeneratorSequence; HSPLkotlin/sequences/GeneratorSequence;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V HPLkotlin/sequences/GeneratorSequence;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0; PLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0; HSPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1; PLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1; HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator; PLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator; Lkotlin/sequences/GeneratorSequence$iterator$1; HSPLkotlin/sequences/GeneratorSequence$iterator$1;->(Lkotlin/sequences/GeneratorSequence;)V HPLkotlin/sequences/GeneratorSequence$iterator$1;->(Lkotlin/sequences/GeneratorSequence;)V HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V HPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z HPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object; HPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object; Lkotlin/sequences/Sequence; Lkotlin/sequences/SequenceBuilderIterator; HSPLkotlin/sequences/SequenceBuilderIterator;->()V PLkotlin/sequences/SequenceBuilderIterator;->()V HSPLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext; PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z HPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z HSPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object; HPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object; HSPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V HPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V HSPLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V PLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V HSPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlin/sequences/SequenceScope; HSPLkotlin/sequences/SequenceScope;->()V HPLkotlin/sequences/SequenceScope;->()V Lkotlin/sequences/SequencesKt; Lkotlin/sequences/SequencesKt__SequenceBuilderKt; HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator; HPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator; HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; HPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; Lkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1; HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->(Lkotlin/jvm/functions/Function2;)V HPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->(Lkotlin/jvm/functions/Function2;)V HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; PLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; Lkotlin/sequences/SequencesKt__SequencesJVMKt; Lkotlin/sequences/SequencesKt__SequencesKt; HSPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence; PLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; PLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1; HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->(Ljava/util/Iterator;)V PLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->(Ljava/util/Iterator;)V HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; PLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2; HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->(Ljava/lang/Object;)V HPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->(Ljava/lang/Object;)V HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object; PLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object; Lkotlin/sequences/SequencesKt___SequencesJvmKt; Lkotlin/sequences/SequencesKt___SequencesKt; HPLkotlin/sequences/SequencesKt___SequencesKt;->filter(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; HPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object; HPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object; HPLkotlin/sequences/SequencesKt___SequencesKt;->map(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List; PLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List; Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1; HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V PLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V PLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; HPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlin/sequences/TransformingSequence; HSPLkotlin/sequences/TransformingSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V HPLkotlin/sequences/TransformingSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence; PLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1; PLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1; HSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator; PLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator; Lkotlin/sequences/TransformingSequence$iterator$1; HSPLkotlin/sequences/TransformingSequence$iterator$1;->(Lkotlin/sequences/TransformingSequence;)V HPLkotlin/sequences/TransformingSequence$iterator$1;->(Lkotlin/sequences/TransformingSequence;)V HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z PLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object; PLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object; Lkotlin/text/CharsKt; Lkotlin/text/CharsKt__CharJVMKt; HSPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I HPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I HSPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z HPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z Lkotlin/text/CharsKt__CharKt; Lkotlin/text/Charsets; HSPLkotlin/text/Charsets;->()V PLkotlin/text/Charsets;->()V HSPLkotlin/text/Charsets;->()V PLkotlin/text/Charsets;->()V Lkotlin/text/MatchGroup; HSPLkotlin/text/MatchGroup;->(Ljava/lang/String;Lkotlin/ranges/IntRange;)V PLkotlin/text/MatchGroup;->(Ljava/lang/String;Lkotlin/ranges/IntRange;)V HSPLkotlin/text/MatchGroup;->getValue()Ljava/lang/String; PLkotlin/text/MatchGroup;->getValue()Ljava/lang/String; Lkotlin/text/MatchGroupCollection; Lkotlin/text/MatchNamedGroupCollection; Lkotlin/text/MatchResult; Lkotlin/text/MatcherMatchResult; HSPLkotlin/text/MatcherMatchResult;->(Ljava/util/regex/Matcher;Ljava/lang/CharSequence;)V PLkotlin/text/MatcherMatchResult;->(Ljava/util/regex/Matcher;Ljava/lang/CharSequence;)V HSPLkotlin/text/MatcherMatchResult;->access$getMatchResult(Lkotlin/text/MatcherMatchResult;)Ljava/util/regex/MatchResult; PLkotlin/text/MatcherMatchResult;->access$getMatchResult(Lkotlin/text/MatcherMatchResult;)Ljava/util/regex/MatchResult; HSPLkotlin/text/MatcherMatchResult;->getGroupValues()Ljava/util/List; PLkotlin/text/MatcherMatchResult;->getGroupValues()Ljava/util/List; HSPLkotlin/text/MatcherMatchResult;->getGroups()Lkotlin/text/MatchGroupCollection; PLkotlin/text/MatcherMatchResult;->getGroups()Lkotlin/text/MatchGroupCollection; HSPLkotlin/text/MatcherMatchResult;->getRange()Lkotlin/ranges/IntRange; PLkotlin/text/MatcherMatchResult;->getRange()Lkotlin/ranges/IntRange; Lkotlin/text/MatcherMatchResult$groupValues$1; HSPLkotlin/text/MatcherMatchResult$groupValues$1;->(Lkotlin/text/MatcherMatchResult;)V PLkotlin/text/MatcherMatchResult$groupValues$1;->(Lkotlin/text/MatcherMatchResult;)V HSPLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/Object; PLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/Object; HSPLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/String; PLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/String; Lkotlin/text/MatcherMatchResult$groups$1; HSPLkotlin/text/MatcherMatchResult$groups$1;->(Lkotlin/text/MatcherMatchResult;)V PLkotlin/text/MatcherMatchResult$groups$1;->(Lkotlin/text/MatcherMatchResult;)V HSPLkotlin/text/MatcherMatchResult$groups$1;->get(I)Lkotlin/text/MatchGroup; PLkotlin/text/MatcherMatchResult$groups$1;->get(I)Lkotlin/text/MatchGroup; Lkotlin/text/Regex; HSPLkotlin/text/Regex;->()V PLkotlin/text/Regex;->()V HSPLkotlin/text/Regex;->(Ljava/lang/String;)V PLkotlin/text/Regex;->(Ljava/lang/String;)V HSPLkotlin/text/Regex;->(Ljava/util/regex/Pattern;)V PLkotlin/text/Regex;->(Ljava/util/regex/Pattern;)V HSPLkotlin/text/Regex;->find(Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult; PLkotlin/text/Regex;->find(Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult; HSPLkotlin/text/Regex;->matches(Ljava/lang/CharSequence;)Z PLkotlin/text/Regex;->matches(Ljava/lang/CharSequence;)Z HSPLkotlin/text/Regex;->replace(Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/String; PLkotlin/text/Regex;->replace(Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/String; Lkotlin/text/Regex$Companion; HSPLkotlin/text/Regex$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/text/Regex$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/text/RegexKt; HSPLkotlin/text/RegexKt;->access$findNext(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Lkotlin/text/MatchResult; PLkotlin/text/RegexKt;->access$findNext(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Lkotlin/text/MatchResult; HSPLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;)Lkotlin/ranges/IntRange; PLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;)Lkotlin/ranges/IntRange; HSPLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;I)Lkotlin/ranges/IntRange; PLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;I)Lkotlin/ranges/IntRange; Lkotlin/text/StringsKt; HSPLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;C)Z PLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;C)Z HSPLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z PLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z HSPLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/CharSequence;)Z PLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/CharSequence;)Z HSPLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;)Z PLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;)Z HSPLkotlin/text/StringsKt;->equals(Ljava/lang/String;Ljava/lang/String;)Z PLkotlin/text/StringsKt;->equals(Ljava/lang/String;Ljava/lang/String;)Z HSPLkotlin/text/StringsKt;->indexOf$default(Ljava/lang/CharSequence;CII)I PLkotlin/text/StringsKt;->indexOf$default(Ljava/lang/CharSequence;CII)I HSPLkotlin/text/StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CII)I PLkotlin/text/StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CII)I HSPLkotlin/text/StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLkotlin/text/StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt;->repeat(Ljava/lang/String;I)Ljava/lang/String; PLkotlin/text/StringsKt;->repeat(Ljava/lang/String;I)Ljava/lang/String; HSPLkotlin/text/StringsKt;->replace$default(Ljava/lang/String;CC)Ljava/lang/String; PLkotlin/text/StringsKt;->replace$default(Ljava/lang/String;CC)Ljava/lang/String; HSPLkotlin/text/StringsKt;->split$default(Ljava/lang/CharSequence;[C)Ljava/util/List; PLkotlin/text/StringsKt;->split$default(Ljava/lang/CharSequence;[C)Ljava/util/List; HSPLkotlin/text/StringsKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;)Z PLkotlin/text/StringsKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;)Z HSPLkotlin/text/StringsKt;->startsWith(Ljava/lang/String;Ljava/lang/String;I)Z PLkotlin/text/StringsKt;->startsWith(Ljava/lang/String;Ljava/lang/String;I)Z HSPLkotlin/text/StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLkotlin/text/StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt;->substringAfterLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLkotlin/text/StringsKt;->substringAfterLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt;->substringBeforeLast$1(Ljava/lang/String;)Ljava/lang/String; PLkotlin/text/StringsKt;->substringBeforeLast$1(Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt;->substringBeforeLast$default(Ljava/lang/String;C)Ljava/lang/String; PLkotlin/text/StringsKt;->substringBeforeLast$default(Ljava/lang/String;C)Ljava/lang/String; Lkotlin/text/StringsKt__AppendableKt; Lkotlin/text/StringsKt__IndentKt; Lkotlin/text/StringsKt__RegexExtensionsJVMKt; Lkotlin/text/StringsKt__RegexExtensionsKt; Lkotlin/text/StringsKt__StringBuilderJVMKt; Lkotlin/text/StringsKt__StringBuilderKt; Lkotlin/text/StringsKt__StringNumberConversionsJVMKt; Lkotlin/text/StringsKt__StringNumberConversionsKt; HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;)Ljava/lang/Integer; PLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;)Ljava/lang/Integer; HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;I)Ljava/lang/Integer; PLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;I)Ljava/lang/Integer; Lkotlin/text/StringsKt__StringsJVMKt; HSPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([C)Ljava/lang/String; PLkotlin/text/StringsKt__StringsJVMKt;->concatToString([C)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String; HPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z PLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z PLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;Z)Z PLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;Z)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->getCASE_INSENSITIVE_ORDER(Lkotlin/jvm/internal/StringCompanionObject;)Ljava/util/Comparator; PLkotlin/text/StringsKt__StringsJVMKt;->getCASE_INSENSITIVE_ORDER(Lkotlin/jvm/internal/StringCompanionObject;)Ljava/util/Comparator; HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z HPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->regionMatches(Ljava/lang/String;ILjava/lang/String;IIZ)Z PLkotlin/text/StringsKt__StringsJVMKt;->regionMatches(Ljava/lang/String;ILjava/lang/String;IIZ)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->repeat(Ljava/lang/CharSequence;I)Ljava/lang/String; PLkotlin/text/StringsKt__StringsJVMKt;->repeat(Ljava/lang/CharSequence;I)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String; PLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->replace(Ljava/lang/String;CCZ)Ljava/lang/String; HPLkotlin/text/StringsKt__StringsJVMKt;->replace(Ljava/lang/String;CCZ)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z PLkotlin/text/StringsKt__StringsJVMKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;IZ)Z PLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;IZ)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z HPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z Lkotlin/text/StringsKt__StringsKt; HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;CZILjava/lang/Object;)Z PLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;CZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z PLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z PLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z PLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z PLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsKt;->endsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z PLkotlin/text/StringsKt__StringsKt;->endsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z HSPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange; HPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange; HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I HPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I PLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I PLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;CIZ)I HPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;CIZ)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I HPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I PLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I PLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I HPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I PLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I HSPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; PLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; PLkotlin/text/StringsKt__StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->requireNonNegativeLimit(I)V PLkotlin/text/StringsKt__StringsKt;->requireNonNegativeLimit(I)V HSPLkotlin/text/StringsKt__StringsKt;->split$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/String;IZ)Ljava/util/List; PLkotlin/text/StringsKt__StringsKt;->split$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/String;IZ)Ljava/util/List; HSPLkotlin/text/StringsKt__StringsKt;->split$default(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List; PLkotlin/text/StringsKt__StringsKt;->split$default(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List; HSPLkotlin/text/StringsKt__StringsKt;->split(Ljava/lang/CharSequence;[CZI)Ljava/util/List; PLkotlin/text/StringsKt__StringsKt;->split(Ljava/lang/CharSequence;[CZI)Ljava/util/List; HSPLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z PLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z PLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z HSPLkotlin/text/StringsKt__StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String; HPLkotlin/text/StringsKt__StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringAfter(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HPLkotlin/text/StringsKt__StringsKt;->substringAfter(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; PLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast$default(Ljava/lang/String;CLjava/lang/String;ILjava/lang/Object;)Ljava/lang/String; HPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast$default(Ljava/lang/String;CLjava/lang/String;ILjava/lang/Object;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; HPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; PLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; Lkotlin/text/StringsKt___StringsJvmKt; Lkotlin/text/StringsKt___StringsKt; HSPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C HPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C Lkotlin/time/Duration; HSPLkotlin/time/Duration;->()V PLkotlin/time/Duration;->()V HSPLkotlin/time/Duration;->getInWholeMilliseconds-impl(J)J PLkotlin/time/Duration;->getInWholeMilliseconds-impl(J)J HSPLkotlin/time/Duration;->getInWholeSeconds-impl(J)J PLkotlin/time/Duration;->getInWholeSeconds-impl(J)J HSPLkotlin/time/Duration;->getNanosecondsComponent-impl(J)I PLkotlin/time/Duration;->getNanosecondsComponent-impl(J)I HSPLkotlin/time/Duration;->getStorageUnit-impl(J)Lkotlin/time/DurationUnit; PLkotlin/time/Duration;->getStorageUnit-impl(J)Lkotlin/time/DurationUnit; HSPLkotlin/time/Duration;->isInfinite-impl(J)Z PLkotlin/time/Duration;->isInfinite-impl(J)Z HSPLkotlin/time/Duration;->toLong-impl(JLkotlin/time/DurationUnit;)J PLkotlin/time/Duration;->toLong-impl(JLkotlin/time/DurationUnit;)J Lkotlin/time/Duration$Companion; HSPLkotlin/time/Duration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlin/time/Duration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlin/time/DurationJvmKt; HSPLkotlin/time/DurationJvmKt;->()V PLkotlin/time/DurationJvmKt;->()V Lkotlin/time/DurationKt; HSPLkotlin/time/DurationKt;->access$durationOfMillis(J)J PLkotlin/time/DurationKt;->access$durationOfMillis(J)J HSPLkotlin/time/DurationKt;->durationOfNanos(J)J PLkotlin/time/DurationKt;->durationOfNanos(J)J HSPLkotlin/time/DurationKt;->toDuration(ILkotlin/time/DurationUnit;)J PLkotlin/time/DurationKt;->toDuration(ILkotlin/time/DurationUnit;)J HSPLkotlin/time/DurationKt;->toDuration(JLkotlin/time/DurationUnit;)J PLkotlin/time/DurationKt;->toDuration(JLkotlin/time/DurationUnit;)J Lkotlin/time/DurationUnit; HSPLkotlin/time/DurationUnit;->()V PLkotlin/time/DurationUnit;->()V HSPLkotlin/time/DurationUnit;->(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V PLkotlin/time/DurationUnit;->(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V HSPLkotlin/time/DurationUnit;->getTimeUnit$kotlin_stdlib()Ljava/util/concurrent/TimeUnit; PLkotlin/time/DurationUnit;->getTimeUnit$kotlin_stdlib()Ljava/util/concurrent/TimeUnit; Lkotlin/time/DurationUnitKt__DurationUnitJvmKt; HSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnit(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J PLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnit(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J HSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnitOverflow(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J PLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnitOverflow(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J Lkotlinx/collections/immutable/implementations/immutableList/ObjectRef; HSPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;->(FF)V HPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;->(FF)V HSPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; HPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; Lkotlinx/coroutines/AbstractCoroutine; HSPLkotlinx/coroutines/AbstractCoroutine;->(Lkotlin/coroutines/CoroutineContext;ZZ)V HPLkotlinx/coroutines/AbstractCoroutine;->(Lkotlin/coroutines/CoroutineContext;ZZ)V HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V HPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String; PLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String; HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z HPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V HPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V HPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V HPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V HPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V HSPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V Lkotlinx/coroutines/AbstractTimeSourceKt; HSPLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource; PLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource; Lkotlinx/coroutines/Active; HSPLkotlinx/coroutines/Active;->()V PLkotlinx/coroutines/Active;->()V HSPLkotlinx/coroutines/Active;->()V PLkotlinx/coroutines/Active;->()V Lkotlinx/coroutines/BlockingEventLoop; HSPLkotlinx/coroutines/BlockingEventLoop;->(Ljava/lang/Thread;)V PLkotlinx/coroutines/BlockingEventLoop;->(Ljava/lang/Thread;)V Lkotlinx/coroutines/BuildersKt; HSPLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred; PLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred; HSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; HPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/BuildersKt__Builders_commonKt; HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred; PLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred; HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred; PLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred; HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; HPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; HPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/CancelHandler; HSPLkotlinx/coroutines/CancelHandler;->()V PLkotlinx/coroutines/CancelHandler;->()V Lkotlinx/coroutines/CancelHandlerBase; HSPLkotlinx/coroutines/CancelHandlerBase;->()V HPLkotlinx/coroutines/CancelHandlerBase;->()V Lkotlinx/coroutines/CancellableContinuation; Lkotlinx/coroutines/CancellableContinuation$DefaultImpls; Lkotlinx/coroutines/CancellableContinuationImpl; HSPLkotlinx/coroutines/CancellableContinuationImpl;->()V PLkotlinx/coroutines/CancellableContinuationImpl;->()V HSPLkotlinx/coroutines/CancellableContinuationImpl;->(Lkotlin/coroutines/Continuation;I)V HPLkotlinx/coroutines/CancellableContinuationImpl;->(Lkotlin/coroutines/Continuation;I)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z HPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/lang/Throwable;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V HPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V HPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable; HPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable; HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; HPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; PLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object; HPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->getState$kotlinx_coroutines_core()Ljava/lang/Object; HPLkotlinx/coroutines/CancellableContinuationImpl;->getState$kotlinx_coroutines_core()Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V HPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle; HPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle; HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V HPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z HPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z HPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z HSPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$kotlinx_coroutines_core(Ljava/lang/Throwable;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$kotlinx_coroutines_core(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V PLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V HSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z HPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z HSPLkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V PLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V HPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; HPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; HPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; Lkotlinx/coroutines/CancellableContinuationImplKt; HSPLkotlinx/coroutines/CancellableContinuationImplKt;->()V PLkotlinx/coroutines/CancellableContinuationImplKt;->()V Lkotlinx/coroutines/CancellableContinuationKt; HSPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V PLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl; HPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl; Lkotlinx/coroutines/CancelledContinuation; HSPLkotlinx/coroutines/CancelledContinuation;->()V PLkotlinx/coroutines/CancelledContinuation;->()V HSPLkotlinx/coroutines/CancelledContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V HPLkotlinx/coroutines/CancelledContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V HSPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z PLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z Lkotlinx/coroutines/ChildContinuation; HSPLkotlinx/coroutines/ChildContinuation;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V PLkotlinx/coroutines/ChildContinuation;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/ChildHandle; Lkotlinx/coroutines/ChildHandleNode; HSPLkotlinx/coroutines/ChildHandleNode;->(Lkotlinx/coroutines/ChildJob;)V PLkotlinx/coroutines/ChildHandleNode;->(Lkotlinx/coroutines/ChildJob;)V HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z PLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/ChildJob; Lkotlinx/coroutines/CompletableJob; Lkotlinx/coroutines/CompletedContinuation; HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V HPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/CompletedContinuation;->copy$default(Lkotlinx/coroutines/CompletedContinuation;Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILjava/lang/Object;)Lkotlinx/coroutines/CompletedContinuation; HPLkotlinx/coroutines/CompletedContinuation;->copy$default(Lkotlinx/coroutines/CompletedContinuation;Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILjava/lang/Object;)Lkotlinx/coroutines/CompletedContinuation; HSPLkotlinx/coroutines/CompletedContinuation;->copy(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)Lkotlinx/coroutines/CompletedContinuation; HPLkotlinx/coroutines/CompletedContinuation;->copy(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)Lkotlinx/coroutines/CompletedContinuation; HSPLkotlinx/coroutines/CompletedContinuation;->getCancelled()Z PLkotlinx/coroutines/CompletedContinuation;->getCancelled()Z HSPLkotlinx/coroutines/CompletedContinuation;->invokeHandlers(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Throwable;)V PLkotlinx/coroutines/CompletedContinuation;->invokeHandlers(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Throwable;)V Lkotlinx/coroutines/CompletedExceptionally; HSPLkotlinx/coroutines/CompletedExceptionally;->()V PLkotlinx/coroutines/CompletedExceptionally;->()V HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;Z)V HPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;Z)V HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V HPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z HPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z HSPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z HPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z Lkotlinx/coroutines/CompletedWithCancellation; Lkotlinx/coroutines/CompletionHandlerBase; HSPLkotlinx/coroutines/CompletionHandlerBase;->()V HPLkotlinx/coroutines/CompletionHandlerBase;->()V Lkotlinx/coroutines/CompletionHandlerException; Lkotlinx/coroutines/CompletionStateKt; HSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object; PLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object; Lkotlinx/coroutines/CopyableThreadContextElement; Lkotlinx/coroutines/CopyableThrowable; Lkotlinx/coroutines/CoroutineContextKt; HSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; Lkotlinx/coroutines/CoroutineContextKt$foldCopies$1; Lkotlinx/coroutines/CoroutineContextKt$foldCopies$folded$1; Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1; HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V PLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V PLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean; HPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean; Lkotlinx/coroutines/CoroutineDispatcher; HSPLkotlinx/coroutines/CoroutineDispatcher;->()V PLkotlinx/coroutines/CoroutineDispatcher;->()V HSPLkotlinx/coroutines/CoroutineDispatcher;->()V PLkotlinx/coroutines/CoroutineDispatcher;->()V HSPLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V PLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z HPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z HSPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; PLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/CoroutineDispatcher$Key; HSPLkotlinx/coroutines/CoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/CoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/coroutines/CoroutineDispatcher$Key$1; HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V PLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V PLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V Lkotlinx/coroutines/CoroutineExceptionHandler; HSPLkotlinx/coroutines/CoroutineExceptionHandler;->()V PLkotlinx/coroutines/CoroutineExceptionHandler;->()V Lkotlinx/coroutines/CoroutineExceptionHandler$Key; HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V PLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V PLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V Lkotlinx/coroutines/CoroutineExceptionHandlerKt; Lkotlinx/coroutines/CoroutineName; HSPLkotlinx/coroutines/CoroutineName;->()V PLkotlinx/coroutines/CoroutineName;->()V HSPLkotlinx/coroutines/CoroutineName;->(Ljava/lang/String;)V PLkotlinx/coroutines/CoroutineName;->(Ljava/lang/String;)V Lkotlinx/coroutines/CoroutineName$Key; HSPLkotlinx/coroutines/CoroutineName$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/CoroutineName$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/coroutines/CoroutineScope; Lkotlinx/coroutines/CoroutineScopeKt; HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; HPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; HSPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope; PLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope; HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V HPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/CoroutineScopeKt;->ensureActive(Lkotlinx/coroutines/CoroutineScope;)V PLkotlinx/coroutines/CoroutineScopeKt;->ensureActive(Lkotlinx/coroutines/CoroutineScope;)V HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z HPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z HSPLkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; PLkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; Lkotlinx/coroutines/CoroutineStart; HSPLkotlinx/coroutines/CoroutineStart;->()V PLkotlinx/coroutines/CoroutineStart;->()V HSPLkotlinx/coroutines/CoroutineStart;->(Ljava/lang/String;I)V PLkotlinx/coroutines/CoroutineStart;->(Ljava/lang/String;I)V HSPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/CoroutineStart;->isLazy()Z PLkotlinx/coroutines/CoroutineStart;->isLazy()Z HSPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart; PLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart; Lkotlinx/coroutines/CoroutineStart$WhenMappings; HSPLkotlinx/coroutines/CoroutineStart$WhenMappings;->()V PLkotlinx/coroutines/CoroutineStart$WhenMappings;->()V Lkotlinx/coroutines/CoroutinesInternalError; Lkotlinx/coroutines/DebugStringsKt; HSPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String; HPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String; Lkotlinx/coroutines/DefaultExecutor; HSPLkotlinx/coroutines/DefaultExecutor;->()V PLkotlinx/coroutines/DefaultExecutor;->()V HSPLkotlinx/coroutines/DefaultExecutor;->()V PLkotlinx/coroutines/DefaultExecutor;->()V HSPLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V PLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V HSPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread; HPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread; HSPLkotlinx/coroutines/DefaultExecutor;->invokeOnTimeout(JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle; PLkotlinx/coroutines/DefaultExecutor;->invokeOnTimeout(JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle; HSPLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z PLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z HSPLkotlinx/coroutines/DefaultExecutor;->run()V HPLkotlinx/coroutines/DefaultExecutor;->run()V Lkotlinx/coroutines/DefaultExecutorKt; HSPLkotlinx/coroutines/DefaultExecutorKt;->()V PLkotlinx/coroutines/DefaultExecutorKt;->()V HSPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay; PLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay; Lkotlinx/coroutines/Deferred; Lkotlinx/coroutines/DeferredCoroutine; HSPLkotlinx/coroutines/DeferredCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V PLkotlinx/coroutines/DeferredCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V HSPLkotlinx/coroutines/DeferredCoroutine;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/DeferredCoroutine;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/Delay; Lkotlinx/coroutines/DelayKt; HSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay; PLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay; Lkotlinx/coroutines/DispatchedCoroutine; HSPLkotlinx/coroutines/DispatchedCoroutine;->()V PLkotlinx/coroutines/DispatchedCoroutine;->()V HSPLkotlinx/coroutines/DispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/DispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V PLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V HSPLkotlinx/coroutines/DispatchedCoroutine;->getResult$kotlinx_coroutines_core()Ljava/lang/Object; PLkotlinx/coroutines/DispatchedCoroutine;->getResult$kotlinx_coroutines_core()Ljava/lang/Object; Lkotlinx/coroutines/DispatchedTask; HSPLkotlinx/coroutines/DispatchedTask;->(I)V PLkotlinx/coroutines/DispatchedTask;->(I)V HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; PLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException$kotlinx_coroutines_core(Ljava/lang/Throwable;Ljava/lang/Throwable;)V HPLkotlinx/coroutines/DispatchedTask;->handleFatalException$kotlinx_coroutines_core(Ljava/lang/Throwable;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/DispatchedTask;->run()V HPLkotlinx/coroutines/DispatchedTask;->run()V Lkotlinx/coroutines/DispatchedTaskKt; HSPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V HPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V HSPLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z PLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z HSPLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z PLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z HSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V HPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V Lkotlinx/coroutines/Dispatchers; HSPLkotlinx/coroutines/Dispatchers;->()V PLkotlinx/coroutines/Dispatchers;->()V HSPLkotlinx/coroutines/Dispatchers;->()V PLkotlinx/coroutines/Dispatchers;->()V HSPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher; PLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher; HSPLkotlinx/coroutines/Dispatchers;->getIO()Lkotlinx/coroutines/CoroutineDispatcher; PLkotlinx/coroutines/Dispatchers;->getIO()Lkotlinx/coroutines/CoroutineDispatcher; Lkotlinx/coroutines/DisposableHandle; Lkotlinx/coroutines/DisposeOnCancel; HSPLkotlinx/coroutines/DisposeOnCancel;->(Lkotlinx/coroutines/DisposableHandle;)V PLkotlinx/coroutines/DisposeOnCancel;->(Lkotlinx/coroutines/DisposableHandle;)V PLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/Empty; HSPLkotlinx/coroutines/Empty;->(Z)V PLkotlinx/coroutines/Empty;->(Z)V HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList; HPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList; HSPLkotlinx/coroutines/Empty;->isActive()Z HPLkotlinx/coroutines/Empty;->isActive()Z Lkotlinx/coroutines/EventLoop; HSPLkotlinx/coroutines/EventLoop;->()V PLkotlinx/coroutines/EventLoop;->()V HSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V PLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V HSPLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V PLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V HSPLkotlinx/coroutines/EventLoop;->getNextTime()J PLkotlinx/coroutines/EventLoop;->getNextTime()J HSPLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V PLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V HSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V PLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V HSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z PLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z HSPLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z PLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z HSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z PLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z Lkotlinx/coroutines/EventLoopImplBase; HSPLkotlinx/coroutines/EventLoopImplBase;->()V PLkotlinx/coroutines/EventLoopImplBase;->()V HSPLkotlinx/coroutines/EventLoopImplBase;->()V PLkotlinx/coroutines/EventLoopImplBase;->()V HSPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z HPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z HSPLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z PLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z HSPLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J HPLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J HSPLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z PLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z HSPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J HPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J HSPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V HPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleInvokeOnTimeout(JLjava/lang/Runnable;)Lkotlinx/coroutines/DisposableHandle; PLkotlinx/coroutines/EventLoopImplBase;->scheduleInvokeOnTimeout(JLjava/lang/Runnable;)Lkotlinx/coroutines/DisposableHandle; HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V HPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V Lkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask; HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V PLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V PLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V Lkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask; HSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->(JLjava/lang/Runnable;)V PLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->(JLjava/lang/Runnable;)V HSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->run()V PLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->run()V Lkotlinx/coroutines/EventLoopImplBase$DelayedTask; HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->(J)V HPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->(J)V HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Ljava/lang/Object;)I PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Ljava/lang/Object;)I HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getHeap()Lkotlinx/coroutines/internal/ThreadSafeHeap; PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getIndex()I HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I HPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z PLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue; HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;->(J)V PLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;->(J)V Lkotlinx/coroutines/EventLoopImplPlatform; HSPLkotlinx/coroutines/EventLoopImplPlatform;->()V PLkotlinx/coroutines/EventLoopImplPlatform;->()V HSPLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V HPLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V Lkotlinx/coroutines/EventLoopKt; HSPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop; PLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop; Lkotlinx/coroutines/EventLoop_commonKt; HSPLkotlinx/coroutines/EventLoop_commonKt;->()V PLkotlinx/coroutines/EventLoop_commonKt;->()V HSPLkotlinx/coroutines/EventLoop_commonKt;->access$getCLOSED_EMPTY$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/EventLoop_commonKt;->access$getCLOSED_EMPTY$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J PLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J Lkotlinx/coroutines/ExceptionsKt; PLkotlinx/coroutines/ExceptionsKt;->CancellationException(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/util/concurrent/CancellationException; Lkotlinx/coroutines/ExecutorCoroutineDispatcher; HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V PLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V PLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key; HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1; HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V PLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V PLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V Lkotlinx/coroutines/GlobalScope; HSPLkotlinx/coroutines/GlobalScope;->()V PLkotlinx/coroutines/GlobalScope;->()V HSPLkotlinx/coroutines/GlobalScope;->()V PLkotlinx/coroutines/GlobalScope;->()V HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; Lkotlinx/coroutines/InactiveNodeList; Lkotlinx/coroutines/Incomplete; Lkotlinx/coroutines/IncompleteStateBox; Lkotlinx/coroutines/InvokeOnCancel; HSPLkotlinx/coroutines/InvokeOnCancel;->(Lkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/InvokeOnCancel;->(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V HPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/InvokeOnCancelling; Lkotlinx/coroutines/InvokeOnCompletion; HSPLkotlinx/coroutines/InvokeOnCompletion;->(Lkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/InvokeOnCompletion;->(Lkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/Job;->()V PLkotlinx/coroutines/Job;->()V Lkotlinx/coroutines/Job$DefaultImpls; PLkotlinx/coroutines/Job$DefaultImpls;->cancel$default(Lkotlinx/coroutines/Job;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle; HPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle; Lkotlinx/coroutines/Job$Key; HSPLkotlinx/coroutines/Job$Key;->()V PLkotlinx/coroutines/Job$Key;->()V HSPLkotlinx/coroutines/Job$Key;->()V PLkotlinx/coroutines/Job$Key;->()V Lkotlinx/coroutines/JobCancellationException; HSPLkotlinx/coroutines/JobCancellationException;->(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/JobCancellationException;->(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z HPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable; PLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable; Lkotlinx/coroutines/JobCancellingNode; HSPLkotlinx/coroutines/JobCancellingNode;->()V PLkotlinx/coroutines/JobCancellingNode;->()V Lkotlinx/coroutines/JobImpl; HSPLkotlinx/coroutines/JobImpl;->(Lkotlinx/coroutines/Job;)V HPLkotlinx/coroutines/JobImpl;->(Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z PLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z HPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z Lkotlinx/coroutines/JobKt; HSPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; PLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; PLkotlinx/coroutines/JobKt;->cancel$default(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V PLkotlinx/coroutines/JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V PLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V HPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z PLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z Lkotlinx/coroutines/JobKt__JobKt; HSPLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; PLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; PLkotlinx/coroutines/JobKt__JobKt;->cancel$default(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V PLkotlinx/coroutines/JobKt__JobKt;->cancel(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CancellationException;)V PLkotlinx/coroutines/JobKt__JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V HPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V HPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z HPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z Lkotlinx/coroutines/JobNode; HSPLkotlinx/coroutines/JobNode;->()V PLkotlinx/coroutines/JobNode;->()V HSPLkotlinx/coroutines/JobNode;->dispose()V HPLkotlinx/coroutines/JobNode;->dispose()V HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport; HPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport; HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList; HPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList; HSPLkotlinx/coroutines/JobNode;->isActive()Z HPLkotlinx/coroutines/JobNode;->isActive()Z HSPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V PLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V Lkotlinx/coroutines/JobSupport; HSPLkotlinx/coroutines/JobSupport;->()V PLkotlinx/coroutines/JobSupport;->()V HSPLkotlinx/coroutines/JobSupport;->(Z)V HPLkotlinx/coroutines/JobSupport;->(Z)V HSPLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String; PLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String; HSPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V PLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V HPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V HSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle; HPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle; HSPLkotlinx/coroutines/JobSupport;->awaitInternal(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupport;->awaitInternal(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->awaitSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupport;->awaitSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V HPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V HSPLkotlinx/coroutines/JobSupport;->cancelCoroutine(Ljava/lang/Throwable;)Z PLkotlinx/coroutines/JobSupport;->cancelCoroutine(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z HPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V HPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z HPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z PLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String; HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z HPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V HPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable; HPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable; HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException; HPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException; HSPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException; HPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException; HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable; HPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable; HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key; HPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key; HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z HPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList; HPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList; HSPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle; HPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle; HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object; HPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V HPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; PLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; HPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; HSPLkotlinx/coroutines/JobSupport;->isActive()Z HPLkotlinx/coroutines/JobSupport;->isActive()Z HSPLkotlinx/coroutines/JobSupport;->isCancelled()Z HPLkotlinx/coroutines/JobSupport;->isCancelled()Z HSPLkotlinx/coroutines/JobSupport;->isCompleted()Z HPLkotlinx/coroutines/JobSupport;->isCompleted()Z HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z HPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z HSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode; HPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode; HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V HPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V PLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V HPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V HSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V PLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/JobSupport;->removeNode$kotlinx_coroutines_core(Lkotlinx/coroutines/JobNode;)V HPLkotlinx/coroutines/JobSupport;->removeNode$kotlinx_coroutines_core(Lkotlinx/coroutines/JobNode;)V HSPLkotlinx/coroutines/JobSupport;->setParentHandle$kotlinx_coroutines_core(Lkotlinx/coroutines/ChildHandle;)V HPLkotlinx/coroutines/JobSupport;->setParentHandle$kotlinx_coroutines_core(Lkotlinx/coroutines/ChildHandle;)V HSPLkotlinx/coroutines/JobSupport;->start()Z HPLkotlinx/coroutines/JobSupport;->start()Z HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I HPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I HSPLkotlinx/coroutines/JobSupport;->toCancellationException$default(Lkotlinx/coroutines/JobSupport;Ljava/lang/Throwable;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/concurrent/CancellationException; PLkotlinx/coroutines/JobSupport;->toCancellationException$default(Lkotlinx/coroutines/JobSupport;Ljava/lang/Throwable;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/concurrent/CancellationException; HSPLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException; PLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException; HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z PLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z Lkotlinx/coroutines/JobSupport$AwaitContinuation; HSPLkotlinx/coroutines/JobSupport$AwaitContinuation;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V PLkotlinx/coroutines/JobSupport$AwaitContinuation;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V Lkotlinx/coroutines/JobSupport$ChildCompletion; HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V PLkotlinx/coroutines/JobSupport$ChildCompletion;->(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/JobSupport$Finishing; HSPLkotlinx/coroutines/JobSupport$Finishing;->()V PLkotlinx/coroutines/JobSupport$Finishing;->()V HSPLkotlinx/coroutines/JobSupport$Finishing;->(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V HPLkotlinx/coroutines/JobSupport$Finishing;->(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V HPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList; HPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList; HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable; HPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable; HSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z HPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z PLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z PLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z HSPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z PLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List; HPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List; HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V PLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V HSPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V PLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1; HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V PLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object; Lkotlinx/coroutines/JobSupportKt; HSPLkotlinx/coroutines/JobSupportKt;->()V PLkotlinx/coroutines/JobSupportKt;->()V HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol; HPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty; PLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty; HSPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/LazyStandaloneCoroutine; Lkotlinx/coroutines/MainCoroutineDispatcher; HSPLkotlinx/coroutines/MainCoroutineDispatcher;->()V PLkotlinx/coroutines/MainCoroutineDispatcher;->()V Lkotlinx/coroutines/NodeList; HSPLkotlinx/coroutines/NodeList;->()V PLkotlinx/coroutines/NodeList;->()V HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList; HPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList; HSPLkotlinx/coroutines/NodeList;->isActive()Z HPLkotlinx/coroutines/NodeList;->isActive()Z Lkotlinx/coroutines/NonDisposableHandle; HSPLkotlinx/coroutines/NonDisposableHandle;->()V PLkotlinx/coroutines/NonDisposableHandle;->()V HSPLkotlinx/coroutines/NonDisposableHandle;->()V PLkotlinx/coroutines/NonDisposableHandle;->()V HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V PLkotlinx/coroutines/NonDisposableHandle;->dispose()V Lkotlinx/coroutines/NotCompleted; Lkotlinx/coroutines/ParentJob; Lkotlinx/coroutines/ResumeAwaitOnCompletion; HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V PLkotlinx/coroutines/ResumeAwaitOnCompletion;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/ResumeOnCompletion; HSPLkotlinx/coroutines/ResumeOnCompletion;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/ResumeOnCompletion;->(Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/StandaloneCoroutine; HSPLkotlinx/coroutines/StandaloneCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V HPLkotlinx/coroutines/StandaloneCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V Lkotlinx/coroutines/SupervisorJobImpl; HSPLkotlinx/coroutines/SupervisorJobImpl;->(Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/SupervisorJobImpl;->(Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/SupervisorJobImpl;->childCancelled(Ljava/lang/Throwable;)Z Lkotlinx/coroutines/SupervisorKt; HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; PLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; PLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; Lkotlinx/coroutines/ThreadContextElement; Lkotlinx/coroutines/ThreadLocalEventLoop; HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V PLkotlinx/coroutines/ThreadLocalEventLoop;->()V HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V PLkotlinx/coroutines/ThreadLocalEventLoop;->()V HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop; PLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop; HSPLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$kotlinx_coroutines_core(Lkotlinx/coroutines/EventLoop;)V PLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$kotlinx_coroutines_core(Lkotlinx/coroutines/EventLoop;)V Lkotlinx/coroutines/TimeoutCancellationException; Lkotlinx/coroutines/Unconfined; HSPLkotlinx/coroutines/Unconfined;->()V PLkotlinx/coroutines/Unconfined;->()V HSPLkotlinx/coroutines/Unconfined;->()V PLkotlinx/coroutines/Unconfined;->()V Lkotlinx/coroutines/UndispatchedCoroutine; HSPLkotlinx/coroutines/UndispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/UndispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V Lkotlinx/coroutines/UndispatchedMarker; HSPLkotlinx/coroutines/UndispatchedMarker;->()V PLkotlinx/coroutines/UndispatchedMarker;->()V HSPLkotlinx/coroutines/UndispatchedMarker;->()V PLkotlinx/coroutines/UndispatchedMarker;->()V HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; PLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; PLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key; PLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key; Lkotlinx/coroutines/Waiter; Lkotlinx/coroutines/YieldContext; HSPLkotlinx/coroutines/YieldContext;->()V PLkotlinx/coroutines/YieldContext;->()V HSPLkotlinx/coroutines/YieldContext;->()V PLkotlinx/coroutines/YieldContext;->()V Lkotlinx/coroutines/YieldContext$Key; HSPLkotlinx/coroutines/YieldContext$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/YieldContext$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/coroutines/YieldKt; HSPLkotlinx/coroutines/YieldKt;->yield(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/YieldKt;->yield(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/android/AndroidDispatcherFactory; HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->()V PLkotlinx/coroutines/android/AndroidDispatcherFactory;->()V HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; PLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; Lkotlinx/coroutines/android/HandlerContext; HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;)V PLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;)V HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;Z)V PLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;Z)V HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z PLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher; PLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher; HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher; PLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher; HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z HPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z Lkotlinx/coroutines/android/HandlerDispatcher; HSPLkotlinx/coroutines/android/HandlerDispatcher;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/android/HandlerDispatcher;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/coroutines/android/HandlerDispatcherKt; HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->()V PLkotlinx/coroutines/android/HandlerDispatcherKt;->()V HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler; PLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler; Lkotlinx/coroutines/channels/BufferOverflow; HSPLkotlinx/coroutines/channels/BufferOverflow;->()V PLkotlinx/coroutines/channels/BufferOverflow;->()V HSPLkotlinx/coroutines/channels/BufferOverflow;->(Ljava/lang/String;I)V PLkotlinx/coroutines/channels/BufferOverflow;->(Ljava/lang/String;I)V Lkotlinx/coroutines/channels/BufferedChannel; HSPLkotlinx/coroutines/channels/BufferedChannel;->()V PLkotlinx/coroutines/channels/BufferedChannel;->()V HSPLkotlinx/coroutines/channels/BufferedChannel;->(ILkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/channels/BufferedChannel;->(ILkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; PLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; HPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; PLkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; PLkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; PLkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; PLkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z PLkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V PLkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V HSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V PLkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V HSPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceive(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceive(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceiveCatching(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceiveCatching(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel;->access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$registerSelectForReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V HPLkotlinx/coroutines/channels/BufferedChannel;->access$registerSelectForReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I HPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I HSPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z HPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->cancel(Ljava/util/concurrent/CancellationException;)V PLkotlinx/coroutines/channels/BufferedChannel;->cancel(Ljava/util/concurrent/CancellationException;)V HSPLkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z PLkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->close(Ljava/lang/Throwable;)Z HPLkotlinx/coroutines/channels/BufferedChannel;->close(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z HPLkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment; HPLkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V HPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V HPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; HPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J HPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J HSPLkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable; PLkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable; HSPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1; HPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1; HSPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; HPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J HPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J HPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V HPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V HSPLkotlinx/coroutines/channels/BufferedChannel;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/channels/BufferedChannel;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z HPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z HPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z HPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z HSPLkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z PLkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z HPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; HPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; HSPLkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V PLkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V HSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V PLkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V HSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V PLkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V PLkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z HPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z PLkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z HSPLkotlinx/coroutines/channels/BufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;J)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;J)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel;->updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V HPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator; HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->(Lkotlinx/coroutines/channels/BufferedChannel;)V HPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->(Lkotlinx/coroutines/channels/BufferedChannel;)V HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNextOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNextOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V PLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object; HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z HPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V HPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V Lkotlinx/coroutines/channels/BufferedChannel$SendBroadcast; Lkotlinx/coroutines/channels/BufferedChannel$onReceive$1; HSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/BufferedChannel$onReceive$2; HSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1; HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2; HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V PLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1; HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1; HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/BufferedChannelKt; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->()V PLkotlinx/coroutines/channels/BufferedChannelKt;->()V HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_RECEIVE_RESULT$p()Lkotlinx/coroutines/internal/Symbol; HPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_RECEIVE_RESULT$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J PLkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z PLkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z HSPLkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol; HPLkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;)Z PLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;)Z Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1; HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V PLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V PLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/Channel; HSPLkotlinx/coroutines/channels/Channel;->()V PLkotlinx/coroutines/channels/Channel;->()V Lkotlinx/coroutines/channels/Channel$Factory; HSPLkotlinx/coroutines/channels/Channel$Factory;->()V PLkotlinx/coroutines/channels/Channel$Factory;->()V HSPLkotlinx/coroutines/channels/Channel$Factory;->()V PLkotlinx/coroutines/channels/Channel$Factory;->()V HSPLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$kotlinx_coroutines_core()I PLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$kotlinx_coroutines_core()I Lkotlinx/coroutines/channels/ChannelCoroutine; HSPLkotlinx/coroutines/channels/ChannelCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V HPLkotlinx/coroutines/channels/ChannelCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V HSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V HPLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V HSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancelInternal(Ljava/lang/Throwable;)V PLkotlinx/coroutines/channels/ChannelCoroutine;->cancelInternal(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1; PLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1; HSPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; PLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; HSPLkotlinx/coroutines/channels/ChannelCoroutine;->get_channel()Lkotlinx/coroutines/channels/Channel; PLkotlinx/coroutines/channels/ChannelCoroutine;->get_channel()Lkotlinx/coroutines/channels/Channel; HSPLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/channels/ChannelCoroutine;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; PLkotlinx/coroutines/channels/ChannelCoroutine;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; HSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/ChannelIterator; Lkotlinx/coroutines/channels/ChannelKt; HSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel; PLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel; HSPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel; HPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel; Lkotlinx/coroutines/channels/ChannelResult; HSPLkotlinx/coroutines/channels/ChannelResult;->()V PLkotlinx/coroutines/channels/ChannelResult;->()V HSPLkotlinx/coroutines/channels/ChannelResult;->(Ljava/lang/Object;)V PLkotlinx/coroutines/channels/ChannelResult;->(Ljava/lang/Object;)V HSPLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed; PLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed; HSPLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult; PLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult; HSPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object; PLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object; Lkotlinx/coroutines/channels/ChannelResult$Closed; PLkotlinx/coroutines/channels/ChannelResult$Closed;->(Ljava/lang/Throwable;)V Lkotlinx/coroutines/channels/ChannelResult$Companion; HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/channels/ChannelResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object; Lkotlinx/coroutines/channels/ChannelResult$Failed; HSPLkotlinx/coroutines/channels/ChannelResult$Failed;->()V PLkotlinx/coroutines/channels/ChannelResult$Failed;->()V Lkotlinx/coroutines/channels/ChannelSegment; HSPLkotlinx/coroutines/channels/ChannelSegment;->(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V HPLkotlinx/coroutines/channels/ChannelSegment;->(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z HPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z HSPLkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V PLkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V HSPLkotlinx/coroutines/channels/ChannelSegment;->getChannel()Lkotlinx/coroutines/channels/BufferedChannel; HPLkotlinx/coroutines/channels/ChannelSegment;->getChannel()Lkotlinx/coroutines/channels/BufferedChannel; HSPLkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I HPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V HPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V HPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V HSPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V PLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V HSPLkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V HPLkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V Lkotlinx/coroutines/channels/ChannelsKt; HSPLkotlinx/coroutines/channels/ChannelsKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V PLkotlinx/coroutines/channels/ChannelsKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V Lkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt; HSPLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V PLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V Lkotlinx/coroutines/channels/ClosedReceiveChannelException; Lkotlinx/coroutines/channels/ClosedSendChannelException; Lkotlinx/coroutines/channels/ConflatedBufferedChannel; HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->isConflatedDropOldest()Z PLkotlinx/coroutines/channels/ConflatedBufferedChannel;->isConflatedDropOldest()Z HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object; Lkotlinx/coroutines/channels/ProduceKt; HSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; PLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; HSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; HPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; HSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel; PLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel; HSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel; HPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel; Lkotlinx/coroutines/channels/ProduceKt$awaitClose$1; HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->(Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1; HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V PLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Throwable;)V Lkotlinx/coroutines/channels/ProducerCoroutine; HSPLkotlinx/coroutines/channels/ProducerCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V PLkotlinx/coroutines/channels/ProducerCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V HSPLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/SendChannel; PLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/SendChannel; HSPLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z PLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z HSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V HPLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V HSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Ljava/lang/Object;)V PLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Ljava/lang/Object;)V HSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Lkotlin/Unit;)V PLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Lkotlin/Unit;)V Lkotlinx/coroutines/channels/ProducerScope; Lkotlinx/coroutines/channels/ReceiveCatching; HSPLkotlinx/coroutines/channels/ReceiveCatching;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V PLkotlinx/coroutines/channels/ReceiveCatching;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLkotlinx/coroutines/channels/ReceiveCatching;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V PLkotlinx/coroutines/channels/ReceiveCatching;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V Lkotlinx/coroutines/channels/ReceiveChannel; Lkotlinx/coroutines/channels/SendChannel; Lkotlinx/coroutines/channels/SendChannel$DefaultImpls; HSPLkotlinx/coroutines/channels/SendChannel$DefaultImpls;->close$default(Lkotlinx/coroutines/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z PLkotlinx/coroutines/channels/SendChannel$DefaultImpls;->close$default(Lkotlinx/coroutines/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z Lkotlinx/coroutines/channels/WaiterEB; Lkotlinx/coroutines/flow/AbstractFlow; HSPLkotlinx/coroutines/flow/AbstractFlow;->()V HPLkotlinx/coroutines/flow/AbstractFlow;->()V HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/AbstractFlow$collect$1; HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/CallbackFlowBuilder; HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1; HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/CancellableFlow; Lkotlinx/coroutines/flow/ChannelAsFlow; HSPLkotlinx/coroutines/flow/ChannelAsFlow;->()V PLkotlinx/coroutines/flow/ChannelAsFlow;->()V HSPLkotlinx/coroutines/flow/ChannelAsFlow;->(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/ChannelAsFlow;->(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/ChannelAsFlow;->(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/flow/ChannelAsFlow;->(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/flow/ChannelAsFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/ChannelAsFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/ChannelAsFlow;->markConsumed()V PLkotlinx/coroutines/flow/ChannelAsFlow;->markConsumed()V Lkotlinx/coroutines/flow/ChannelFlowBuilder; HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/DistinctFlowImpl; HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/flow/DistinctFlowImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2; HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V PLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1; HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowCollector; Lkotlinx/coroutines/flow/FlowKt; HSPLkotlinx/coroutines/flow/FlowKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; PLkotlinx/coroutines/flow/FlowKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; HSPLkotlinx/coroutines/flow/FlowKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/flow/FlowKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/flow/FlowKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; PLkotlinx/coroutines/flow/FlowKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; PLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; HSPLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__BuildersKt; HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__BuildersKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3; HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;->(Ljava/lang/Iterable;)V PLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;->(Ljava/lang/Iterable;)V HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3$1; HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3$1;->(Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3$1;->(Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2; HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->(Ljava/lang/Object;)V PLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->(Ljava/lang/Object;)V HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ChannelsKt; HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1; HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->(Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__CollectKt; HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__CollectKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/flow/FlowKt__CollectKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; Lkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1; HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ContextKt; HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ContextKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ContextKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__DelayKt; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker$default(Lkotlinx/coroutines/CoroutineScope;JJILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; PLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker$default(Lkotlinx/coroutines/CoroutineScope;JJILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker(Lkotlinx/coroutines/CoroutineScope;JJ)Lkotlinx/coroutines/channels/ReceiveChannel; PLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker(Lkotlinx/coroutines/CoroutineScope;JJ)Lkotlinx/coroutines/channels/ReceiveChannel; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__DelayKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->(J)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->(J)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Long; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Long; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke-WpGqRn0(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke-WpGqRn0(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->(JJLkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->(JJLkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->(JLkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->(JLkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V HPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1$1; HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V PLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V Lkotlinx/coroutines/flow/FlowKt__DistinctKt; HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->()V PLkotlinx/coroutines/flow/FlowKt__DistinctKt;->()V HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1; HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean; PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean; HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1; HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__EmittersKt; HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V HPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V HPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1; HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ErrorsKt; HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1; HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1; HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1; HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;->(Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2; HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1; HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__LimitKt; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__LimitKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;I)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;I)V HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;->(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;->(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1$emit$1; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1; HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__MergeKt; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->()V PLkotlinx/coroutines/flow/FlowKt__MergeKt;->()V HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;->(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;->(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->(Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1; HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->(Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ShareKt; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; PLkotlinx/coroutines/flow/FlowKt__ShareKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig; PLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->launchSharing$FlowKt__ShareKt(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/flow/FlowKt__ShareKt;->launchSharing$FlowKt__ShareKt(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; PLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; PLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings; HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;->()V PLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;->()V Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1; HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2; HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1; HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)V PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)V PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function6;)V PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function6;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V PLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V PLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object; Lkotlinx/coroutines/flow/MutableSharedFlow; Lkotlinx/coroutines/flow/MutableStateFlow; Lkotlinx/coroutines/flow/ReadonlySharedFlow; HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->(Lkotlinx/coroutines/flow/SharedFlow;Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/flow/ReadonlySharedFlow;->(Lkotlinx/coroutines/flow/SharedFlow;Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/ReadonlyStateFlow; HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; HPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; Lkotlinx/coroutines/flow/SafeFlow; HSPLkotlinx/coroutines/flow/SafeFlow;->(Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/flow/SafeFlow;->(Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/SharedFlow; Lkotlinx/coroutines/flow/SharedFlowImpl; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->(IILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/SharedFlowImpl;->(IILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V HPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons; HPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot; PLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; PLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot; PLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; PLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V PLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V HPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation; HPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J HPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object; PLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object; PLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z HPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z HPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J HPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V HPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation; HPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$kotlinx_coroutines_core()J PLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$kotlinx_coroutines_core()J Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter; Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1; HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/SharedFlowKt; HSPLkotlinx/coroutines/flow/SharedFlowKt;->()V PLkotlinx/coroutines/flow/SharedFlowKt;->()V HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow; PLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow; HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow; HPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow; HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object; PLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V PLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V Lkotlinx/coroutines/flow/SharedFlowSlot; HSPLkotlinx/coroutines/flow/SharedFlowSlot;->()V HPLkotlinx/coroutines/flow/SharedFlowSlot;->()V HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z PLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z PLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation; HPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation; Lkotlinx/coroutines/flow/SharingCommand; HSPLkotlinx/coroutines/flow/SharingCommand;->()V PLkotlinx/coroutines/flow/SharingCommand;->()V HSPLkotlinx/coroutines/flow/SharingCommand;->(Ljava/lang/String;I)V PLkotlinx/coroutines/flow/SharingCommand;->(Ljava/lang/String;I)V HSPLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand; PLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand; Lkotlinx/coroutines/flow/SharingConfig; HSPLkotlinx/coroutines/flow/SharingConfig;->(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V PLkotlinx/coroutines/flow/SharingConfig;->(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V Lkotlinx/coroutines/flow/SharingStarted; HSPLkotlinx/coroutines/flow/SharingStarted;->()V PLkotlinx/coroutines/flow/SharingStarted;->()V Lkotlinx/coroutines/flow/SharingStarted$Companion; HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V PLkotlinx/coroutines/flow/SharingStarted$Companion;->()V HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V PLkotlinx/coroutines/flow/SharingStarted$Companion;->()V HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted; PLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted; HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted; PLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted; HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted; PLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted; Lkotlinx/coroutines/flow/StartedEagerly; HSPLkotlinx/coroutines/flow/StartedEagerly;->()V PLkotlinx/coroutines/flow/StartedEagerly;->()V Lkotlinx/coroutines/flow/StartedLazily; HSPLkotlinx/coroutines/flow/StartedLazily;->()V PLkotlinx/coroutines/flow/StartedLazily;->()V Lkotlinx/coroutines/flow/StartedWhileSubscribed; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->(JJ)V PLkotlinx/coroutines/flow/StartedWhileSubscribed;->(JJ)V HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J PLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J PLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z PLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->(Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->(Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/StateFlow; Lkotlinx/coroutines/flow/StateFlowImpl; HSPLkotlinx/coroutines/flow/StateFlowImpl;->()V PLkotlinx/coroutines/flow/StateFlowImpl;->()V HSPLkotlinx/coroutines/flow/StateFlowImpl;->(Ljava/lang/Object;)V PLkotlinx/coroutines/flow/StateFlowImpl;->(Ljava/lang/Object;)V HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z PLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; PLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; PLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object; HPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V HPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z HPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z Lkotlinx/coroutines/flow/StateFlowImpl$collect$1; HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/StateFlowKt; HSPLkotlinx/coroutines/flow/StateFlowKt;->()V PLkotlinx/coroutines/flow/StateFlowKt;->()V HSPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; PLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol; Lkotlinx/coroutines/flow/StateFlowSlot; HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V PLkotlinx/coroutines/flow/StateFlowSlot;->()V HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V PLkotlinx/coroutines/flow/StateFlowSlot;->()V HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z PLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z HPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z HSPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V HPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V HSPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z HPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z Lkotlinx/coroutines/flow/SubscribedFlowCollector; Lkotlinx/coroutines/flow/ThrowingCollector; Lkotlinx/coroutines/flow/internal/AbortFlowException; HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLkotlinx/coroutines/flow/internal/AbortFlowException;->(Lkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable; PLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable; Lkotlinx/coroutines/flow/internal/AbstractSharedFlow; HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->()V HPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->()V HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V HPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow; PLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow; Lkotlinx/coroutines/flow/internal/AbstractSharedFlowKt; HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;->()V PLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;->()V Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;->()V HPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;->()V Lkotlinx/coroutines/flow/internal/ChannelFlow; HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HPLkotlinx/coroutines/flow/internal/ChannelFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; HPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$kotlinx_coroutines_core()Lkotlin/jvm/functions/Function2; PLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$kotlinx_coroutines_core()Lkotlin/jvm/functions/Function2; HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$kotlinx_coroutines_core()I PLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$kotlinx_coroutines_core()I HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; PLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2; HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V HPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1; HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowOperator; HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl; HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V HPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1; HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge; HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; Lkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1; HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/internal/SendingCollector;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/internal/SendingCollector;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/ChildCancelledException; HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->()V PLkotlinx/coroutines/flow/internal/ChildCancelledException;->()V HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable; PLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable; Lkotlinx/coroutines/flow/internal/CombineKt; HSPLkotlinx/coroutines/flow/internal/CombineKt;->combineInternal(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/CombineKt;->combineInternal(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->(Lkotlinx/coroutines/channels/Channel;I)V PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->(Lkotlinx/coroutines/channels/Channel;I)V HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext; HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;->(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V PLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;->(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V Lkotlinx/coroutines/flow/internal/FlowCoroutine; HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/FlowCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z HPLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z Lkotlinx/coroutines/flow/internal/FlowCoroutineKt; HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->flowScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->flowScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1; HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function3;)V PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1; HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/FlowExceptions_commonKt; HSPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V PLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V Lkotlinx/coroutines/flow/internal/FusibleFlow; Lkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls; HSPLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;->fuse$default(Lkotlinx/coroutines/flow/internal/FusibleFlow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; PLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;->fuse$default(Lkotlinx/coroutines/flow/internal/FusibleFlow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/internal/NoOpContinuation; HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V PLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V PLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V Lkotlinx/coroutines/flow/internal/NopCollector; HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V PLkotlinx/coroutines/flow/internal/NopCollector;->()V HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V PLkotlinx/coroutines/flow/internal/NopCollector;->()V HSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/NullSurrogateKt; HSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;->()V PLkotlinx/coroutines/flow/internal/NullSurrogateKt;->()V Lkotlinx/coroutines/flow/internal/SafeCollector; HSPLkotlinx/coroutines/flow/internal/SafeCollector;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V HPLkotlinx/coroutines/flow/internal/SafeCollector;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V HPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1; HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V PLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V PLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; HPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/SafeCollectorKt; HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->()V PLkotlinx/coroutines/flow/internal/SafeCollectorKt;->()V HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3; Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1; HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt; HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V HPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job; PLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job; Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1; HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->(Lkotlinx/coroutines/flow/internal/SafeCollector;)V HPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->(Lkotlinx/coroutines/flow/internal/SafeCollector;)V HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; HPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/SendingCollector; HSPLkotlinx/coroutines/flow/internal/SendingCollector;->(Lkotlinx/coroutines/channels/SendChannel;)V PLkotlinx/coroutines/flow/internal/SendingCollector;->(Lkotlinx/coroutines/channels/SendChannel;)V HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow; HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->(I)V PLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->(I)V HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z HPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z Lkotlinx/coroutines/internal/AtomicKt; HSPLkotlinx/coroutines/internal/AtomicKt;->()V PLkotlinx/coroutines/internal/AtomicKt;->()V Lkotlinx/coroutines/internal/AtomicOp; HSPLkotlinx/coroutines/internal/AtomicOp;->()V PLkotlinx/coroutines/internal/AtomicOp;->()V HSPLkotlinx/coroutines/internal/AtomicOp;->()V PLkotlinx/coroutines/internal/AtomicOp;->()V HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/internal/ConcurrentLinkedListKt; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->()V PLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->()V HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->access$getCLOSED$p()Lkotlinx/coroutines/internal/Symbol; HPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->access$getCLOSED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; PLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object; Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->()V PLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->()V HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V HPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->access$getNextOrClosed(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Ljava/lang/Object; HPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->access$getNextOrClosed(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Ljava/lang/Object; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V HPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; PLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; PLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->markAsClosed()Z PLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->markAsClosed()Z HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->trySetNext(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Z HPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->trySetNext(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Z Lkotlinx/coroutines/internal/ContextScope; HSPLkotlinx/coroutines/internal/ContextScope;->(Lkotlin/coroutines/CoroutineContext;)V PLkotlinx/coroutines/internal/ContextScope;->(Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; Lkotlinx/coroutines/internal/DispatchedContinuation; HSPLkotlinx/coroutines/internal/DispatchedContinuation;->()V PLkotlinx/coroutines/internal/DispatchedContinuation;->()V HSPLkotlinx/coroutines/internal/DispatchedContinuation;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V PLkotlinx/coroutines/internal/DispatchedContinuation;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability$kotlinx_coroutines_core()V HPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability$kotlinx_coroutines_core()V HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation$kotlinx_coroutines_core()Lkotlinx/coroutines/CancellableContinuationImpl; HPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation$kotlinx_coroutines_core()Lkotlinx/coroutines/CancellableContinuationImpl; HSPLkotlinx/coroutines/internal/DispatchedContinuation;->dispatchYield$kotlinx_coroutines_core(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V PLkotlinx/coroutines/internal/DispatchedContinuation;->dispatchYield$kotlinx_coroutines_core(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext; HPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext; HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; PLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable$kotlinx_coroutines_core()Z PLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable$kotlinx_coroutines_core()Z HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z HPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release$kotlinx_coroutines_core()V HPLkotlinx/coroutines/internal/DispatchedContinuation;->release$kotlinx_coroutines_core()V HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V HPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; PLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; HSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation$kotlinx_coroutines_core(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable; HPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation$kotlinx_coroutines_core(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable; Lkotlinx/coroutines/internal/DispatchedContinuationKt; HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->()V PLkotlinx/coroutines/internal/DispatchedContinuationKt;->()V HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith$default(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V PLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith$default(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V Lkotlinx/coroutines/internal/InlineList; HSPLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/internal/LimitedDispatcher; HSPLkotlinx/coroutines/internal/LimitedDispatcher;->()V PLkotlinx/coroutines/internal/LimitedDispatcher;->()V HSPLkotlinx/coroutines/internal/LimitedDispatcher;->(Lkotlinx/coroutines/CoroutineDispatcher;I)V PLkotlinx/coroutines/internal/LimitedDispatcher;->(Lkotlinx/coroutines/CoroutineDispatcher;I)V HSPLkotlinx/coroutines/internal/LimitedDispatcher;->access$obtainTaskOrDeallocateWorker(Lkotlinx/coroutines/internal/LimitedDispatcher;)Ljava/lang/Runnable; PLkotlinx/coroutines/internal/LimitedDispatcher;->access$obtainTaskOrDeallocateWorker(Lkotlinx/coroutines/internal/LimitedDispatcher;)Ljava/lang/Runnable; HSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V PLkotlinx/coroutines/internal/LimitedDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/internal/LimitedDispatcher;->obtainTaskOrDeallocateWorker()Ljava/lang/Runnable; HPLkotlinx/coroutines/internal/LimitedDispatcher;->obtainTaskOrDeallocateWorker()Ljava/lang/Runnable; Lkotlinx/coroutines/internal/LimitedDispatcher$Worker; HSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->(Lkotlinx/coroutines/internal/LimitedDispatcher;Ljava/lang/Runnable;)V PLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->(Lkotlinx/coroutines/internal/LimitedDispatcher;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->run()V PLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->run()V Lkotlinx/coroutines/internal/LimitedDispatcherKt; HSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V PLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V Lkotlinx/coroutines/internal/LockFreeLinkedListHead; HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->()V HPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->()V HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z HPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z Lkotlinx/coroutines/internal/LockFreeLinkedListKt; HSPLkotlinx/coroutines/internal/LockFreeLinkedListKt;->()V PLkotlinx/coroutines/internal/LockFreeLinkedListKt;->()V HSPLkotlinx/coroutines/internal/LockFreeLinkedListKt;->unwrap(Ljava/lang/Object;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode; PLkotlinx/coroutines/internal/LockFreeLinkedListKt;->unwrap(Ljava/lang/Object;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode; Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V PLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; PLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object; HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I HPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp; HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V PLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V PLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V HPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V Lkotlinx/coroutines/internal/LockFreeTaskQueue; HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->()V PLkotlinx/coroutines/internal/LockFreeTaskQueue;->()V HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->(Z)V PLkotlinx/coroutines/internal/LockFreeTaskQueue;->(Z)V HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z HPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I PLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object; HPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object; Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->()V PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->()V HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->(IZ)V PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->(IZ)V HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I HPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->next()Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->next()Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object; HPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object; Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion; HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->addFailReason(J)I PLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->addFailReason(J)I HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateHead(JI)J PLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateHead(JI)J HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateTail(JI)J PLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateTail(JI)J Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Placeholder; Lkotlinx/coroutines/internal/MainDispatcherFactory; Lkotlinx/coroutines/internal/MainDispatcherLoader; HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V PLkotlinx/coroutines/internal/MainDispatcherLoader;->()V HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V PLkotlinx/coroutines/internal/MainDispatcherLoader;->()V Lkotlinx/coroutines/internal/MainDispatchersKt; HSPLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; PLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; Lkotlinx/coroutines/internal/OnUndeliveredElementKt; Lkotlinx/coroutines/internal/OpDescriptor; HSPLkotlinx/coroutines/internal/OpDescriptor;->()V PLkotlinx/coroutines/internal/OpDescriptor;->()V Lkotlinx/coroutines/internal/Removed; HSPLkotlinx/coroutines/internal/Removed;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V PLkotlinx/coroutines/internal/Removed;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V Lkotlinx/coroutines/internal/ResizableAtomicArray; HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->(I)V PLkotlinx/coroutines/internal/ResizableAtomicArray;->(I)V HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object; HPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object; HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILjava/lang/Object;)V PLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILjava/lang/Object;)V Lkotlinx/coroutines/internal/ScopeCoroutine; HSPLkotlinx/coroutines/internal/ScopeCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/internal/ScopeCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V PLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V HPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z HPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z Lkotlinx/coroutines/internal/Segment; HSPLkotlinx/coroutines/internal/Segment;->()V PLkotlinx/coroutines/internal/Segment;->()V HSPLkotlinx/coroutines/internal/Segment;->(JLkotlinx/coroutines/internal/Segment;I)V HPLkotlinx/coroutines/internal/Segment;->(JLkotlinx/coroutines/internal/Segment;I)V HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z PLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z HPLkotlinx/coroutines/internal/Segment;->isRemoved()Z HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V HPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z HPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z Lkotlinx/coroutines/internal/SegmentOrClosed; HSPLkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment; HPLkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment; HSPLkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z PLkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z Lkotlinx/coroutines/internal/StackTraceRecoveryKt; Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/internal/Symbol;->(Ljava/lang/String;)V PLkotlinx/coroutines/internal/Symbol;->(Ljava/lang/String;)V Lkotlinx/coroutines/internal/SystemPropsKt; HSPLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I PLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I PLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J PLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I PLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z PLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt; HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->()V PLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->()V HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I PLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String; PLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String; Lkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt; HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I PLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J PLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I PLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J PLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z PLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z Lkotlinx/coroutines/internal/ThreadContextKt; HSPLkotlinx/coroutines/internal/ThreadContextKt;->()V PLkotlinx/coroutines/internal/ThreadContextKt;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V HPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V HSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; PLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; HSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1; HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V PLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V PLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object; PLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object; Lkotlinx/coroutines/internal/ThreadContextKt$findOne$1; HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V PLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V PLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V Lkotlinx/coroutines/internal/ThreadContextKt$updateState$1; HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V PLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V PLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V Lkotlinx/coroutines/internal/ThreadSafeHeap; HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V PLkotlinx/coroutines/internal/ThreadSafeHeap;->()V HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V PLkotlinx/coroutines/internal/ThreadSafeHeap;->()V HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V HPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; PLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I HPLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z PLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; PLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; PLkotlinx/coroutines/internal/ThreadSafeHeap;->remove(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)Z HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode; HPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode; HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V HPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->swap(II)V PLkotlinx/coroutines/internal/ThreadSafeHeap;->swap(II)V Lkotlinx/coroutines/internal/ThreadSafeHeapNode; Lkotlinx/coroutines/internal/ThreadState; Lkotlinx/coroutines/intrinsics/CancellableKt; HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V HPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V HPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V Lkotlinx/coroutines/intrinsics/UndispatchedKt; HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; Lkotlinx/coroutines/scheduling/CoroutineScheduler; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->()V PLkotlinx/coroutines/scheduling/CoroutineScheduler;->()V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->(IIJLjava/lang/String;)V PLkotlinx/coroutines/scheduling/CoroutineScheduler;->(IIJLjava/lang/String;)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->access$getControlState$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; PLkotlinx/coroutines/scheduling/CoroutineScheduler;->access$getControlState$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I PLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createTask(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;)Lkotlinx/coroutines/scheduling/Task; PLkotlinx/coroutines/scheduling/CoroutineScheduler;->createTask(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;)Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V HPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z HPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Z HPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Z PLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackTopUpdate(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;II)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->runSafely(Lkotlinx/coroutines/scheduling/Task;)V PLkotlinx/coroutines/scheduling/CoroutineScheduler;->runSafely(Lkotlinx/coroutines/scheduling/Task;)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalCpuWork()V PLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalCpuWork()V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z PLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z HPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z Lkotlinx/coroutines/scheduling/CoroutineScheduler$Companion; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->()V PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->()V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task; HPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object; PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getWorkerCtl$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getWorkerCtl$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task; HPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V HPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V PLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu(Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;)Z HPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu(Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;)Z HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(I)Lkotlinx/coroutines/scheduling/Task; HPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(I)Lkotlinx/coroutines/scheduling/Task; Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState; HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->()V PLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->()V HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->(Ljava/lang/String;I)V PLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->(Ljava/lang/String;I)V Lkotlinx/coroutines/scheduling/DefaultIoScheduler; HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V PLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V PLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V PLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V PLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V Lkotlinx/coroutines/scheduling/DefaultScheduler; HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V PLkotlinx/coroutines/scheduling/DefaultScheduler;->()V HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V PLkotlinx/coroutines/scheduling/DefaultScheduler;->()V Lkotlinx/coroutines/scheduling/GlobalQueue; HSPLkotlinx/coroutines/scheduling/GlobalQueue;->()V PLkotlinx/coroutines/scheduling/GlobalQueue;->()V Lkotlinx/coroutines/scheduling/NanoTimeSource; HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V PLkotlinx/coroutines/scheduling/NanoTimeSource;->()V HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V PLkotlinx/coroutines/scheduling/NanoTimeSource;->()V HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->nanoTime()J HPLkotlinx/coroutines/scheduling/NanoTimeSource;->nanoTime()J Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher; HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->(IIJLjava/lang/String;)V PLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->(IIJLjava/lang/String;)V HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchWithContext$kotlinx_coroutines_core(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V PLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchWithContext$kotlinx_coroutines_core(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V Lkotlinx/coroutines/scheduling/SchedulerTimeSource; HSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;->()V PLkotlinx/coroutines/scheduling/SchedulerTimeSource;->()V Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/Task;->()V PLkotlinx/coroutines/scheduling/Task;->()V HSPLkotlinx/coroutines/scheduling/Task;->(JLkotlinx/coroutines/scheduling/TaskContext;)V HPLkotlinx/coroutines/scheduling/Task;->(JLkotlinx/coroutines/scheduling/TaskContext;)V Lkotlinx/coroutines/scheduling/TaskContext; Lkotlinx/coroutines/scheduling/TaskContextImpl; HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->(I)V PLkotlinx/coroutines/scheduling/TaskContextImpl;->(I)V HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V PLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I PLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I Lkotlinx/coroutines/scheduling/TaskImpl; HSPLkotlinx/coroutines/scheduling/TaskImpl;->(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V PLkotlinx/coroutines/scheduling/TaskImpl;->(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V HSPLkotlinx/coroutines/scheduling/TaskImpl;->run()V PLkotlinx/coroutines/scheduling/TaskImpl;->run()V Lkotlinx/coroutines/scheduling/TasksKt; HSPLkotlinx/coroutines/scheduling/TasksKt;->()V PLkotlinx/coroutines/scheduling/TasksKt;->()V Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler; HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V PLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V PLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V PLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V PLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; PLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; Lkotlinx/coroutines/scheduling/WorkQueue; HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V PLkotlinx/coroutines/scheduling/WorkQueue;->()V HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V PLkotlinx/coroutines/scheduling/WorkQueue;->()V HSPLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; PLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task; PLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/WorkQueue;->poll()Lkotlinx/coroutines/scheduling/Task; PLkotlinx/coroutines/scheduling/WorkQueue;->poll()Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task; HPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task; HSPLkotlinx/coroutines/scheduling/WorkQueue;->trySteal(ILkotlin/jvm/internal/Ref$ObjectRef;)J HPLkotlinx/coroutines/scheduling/WorkQueue;->trySteal(ILkotlin/jvm/internal/Ref$ObjectRef;)J Lkotlinx/coroutines/selects/OnTimeout; HSPLkotlinx/coroutines/selects/OnTimeout;->(J)V PLkotlinx/coroutines/selects/OnTimeout;->(J)V HSPLkotlinx/coroutines/selects/OnTimeout;->access$register(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V PLkotlinx/coroutines/selects/OnTimeout;->access$register(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V HSPLkotlinx/coroutines/selects/OnTimeout;->getSelectClause()Lkotlinx/coroutines/selects/SelectClause0; PLkotlinx/coroutines/selects/OnTimeout;->getSelectClause()Lkotlinx/coroutines/selects/SelectClause0; Lkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1; HSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->(Lkotlinx/coroutines/selects/SelectInstance;Lkotlinx/coroutines/selects/OnTimeout;)V PLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->(Lkotlinx/coroutines/selects/SelectInstance;Lkotlinx/coroutines/selects/OnTimeout;)V HSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->run()V PLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->run()V Lkotlinx/coroutines/selects/OnTimeout$selectClause$1; HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V PLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V PLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/selects/OnTimeoutKt; HSPLkotlinx/coroutines/selects/OnTimeoutKt;->onTimeout(Lkotlinx/coroutines/selects/SelectBuilder;JLkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/selects/OnTimeoutKt;->onTimeout(Lkotlinx/coroutines/selects/SelectBuilder;JLkotlin/jvm/functions/Function1;)V Lkotlinx/coroutines/selects/SelectBuilder; Lkotlinx/coroutines/selects/SelectClause; Lkotlinx/coroutines/selects/SelectClause0; Lkotlinx/coroutines/selects/SelectClause0Impl; HSPLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V PLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getClauseObject()Ljava/lang/Object; PLkotlinx/coroutines/selects/SelectClause0Impl;->getClauseObject()Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectClause0Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectClause0Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectClause0Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; Lkotlinx/coroutines/selects/SelectClause1; Lkotlinx/coroutines/selects/SelectClause1Impl; HSPLkotlinx/coroutines/selects/SelectClause1Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V HPLkotlinx/coroutines/selects/SelectClause1Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getClauseObject()Ljava/lang/Object; PLkotlinx/coroutines/selects/SelectClause1Impl;->getClauseObject()Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectClause1Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectClause1Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectClause1Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; Lkotlinx/coroutines/selects/SelectImplementation; HSPLkotlinx/coroutines/selects/SelectImplementation;->()V PLkotlinx/coroutines/selects/SelectImplementation;->()V HSPLkotlinx/coroutines/selects/SelectImplementation;->(Lkotlin/coroutines/CoroutineContext;)V HPLkotlinx/coroutines/selects/SelectImplementation;->(Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->access$doSelectSuspend(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/selects/SelectImplementation;->access$doSelectSuspend(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation;->access$getInternalResult$p(Lkotlinx/coroutines/selects/SelectImplementation;)Ljava/lang/Object; PLkotlinx/coroutines/selects/SelectImplementation;->access$getInternalResult$p(Lkotlinx/coroutines/selects/SelectImplementation;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation;->complete(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/selects/SelectImplementation;->complete(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation;->disposeOnCompletion(Lkotlinx/coroutines/DisposableHandle;)V PLkotlinx/coroutines/selects/SelectImplementation;->disposeOnCompletion(Lkotlinx/coroutines/DisposableHandle;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelect(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/selects/SelectImplementation;->doSelect(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelectSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/selects/SelectImplementation;->doSelectSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation;->findClause(Ljava/lang/Object;)Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; HPLkotlinx/coroutines/selects/SelectImplementation;->findClause(Ljava/lang/Object;)Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; HSPLkotlinx/coroutines/selects/SelectImplementation;->getContext()Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/selects/SelectImplementation;->getContext()Lkotlin/coroutines/CoroutineContext; PLkotlinx/coroutines/selects/SelectImplementation;->invoke(Ljava/lang/Throwable;)V HPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V PLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V PLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V HPLkotlinx/coroutines/selects/SelectImplementation;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V HSPLkotlinx/coroutines/selects/SelectImplementation;->register$default(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;ZILjava/lang/Object;)V HPLkotlinx/coroutines/selects/SelectImplementation;->register$default(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;ZILjava/lang/Object;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->register(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;Z)V HPLkotlinx/coroutines/selects/SelectImplementation;->register(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;Z)V HSPLkotlinx/coroutines/selects/SelectImplementation;->selectInRegistrationPhase(Ljava/lang/Object;)V PLkotlinx/coroutines/selects/SelectImplementation;->selectInRegistrationPhase(Ljava/lang/Object;)V HSPLkotlinx/coroutines/selects/SelectImplementation;->trySelect(Ljava/lang/Object;Ljava/lang/Object;)Z PLkotlinx/coroutines/selects/SelectImplementation;->trySelect(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLkotlinx/coroutines/selects/SelectImplementation;->trySelectInternal(Ljava/lang/Object;Ljava/lang/Object;)I HPLkotlinx/coroutines/selects/SelectImplementation;->trySelectInternal(Ljava/lang/Object;Ljava/lang/Object;)I HSPLkotlinx/coroutines/selects/SelectImplementation;->waitUntilSelected(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/selects/SelectImplementation;->waitUntilSelected(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->(Lkotlinx/coroutines/selects/SelectImplementation;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V HPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->(Lkotlinx/coroutines/selects/SelectImplementation;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->createOnCancellationAction(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; PLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->createOnCancellationAction(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->dispose()V HPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->dispose()V HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->invokeBlock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->invokeBlock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->processResult(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->processResult(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->tryRegisterAsWaiter(Lkotlinx/coroutines/selects/SelectImplementation;)Z PLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->tryRegisterAsWaiter(Lkotlinx/coroutines/selects/SelectImplementation;)Z Lkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1; HSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)V HPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/selects/SelectInstance; Lkotlinx/coroutines/selects/SelectInstanceInternal; Lkotlinx/coroutines/selects/SelectKt; HSPLkotlinx/coroutines/selects/SelectKt;->()V PLkotlinx/coroutines/selects/SelectKt;->()V HSPLkotlinx/coroutines/selects/SelectKt;->access$getDUMMY_PROCESS_RESULT_FUNCTION$p()Lkotlin/jvm/functions/Function3; PLkotlinx/coroutines/selects/SelectKt;->access$getDUMMY_PROCESS_RESULT_FUNCTION$p()Lkotlin/jvm/functions/Function3; HSPLkotlinx/coroutines/selects/SelectKt;->access$getNO_RESULT$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/selects/SelectKt;->access$getNO_RESULT$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_CANCELLED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_COMPLETED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_COMPLETED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_REG$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_REG$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/selects/SelectKt;->access$tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z HPLkotlinx/coroutines/selects/SelectKt;->access$tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z HSPLkotlinx/coroutines/selects/SelectKt;->getPARAM_CLAUSE_0()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/selects/SelectKt;->getPARAM_CLAUSE_0()Lkotlinx/coroutines/internal/Symbol; Lkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1; HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V PLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V PLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Lkotlinx/coroutines/sync/Mutex; Lkotlinx/coroutines/sync/Mutex$DefaultImpls; HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V PLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V Lkotlinx/coroutines/sync/MutexImpl; HSPLkotlinx/coroutines/sync/MutexImpl;->()V PLkotlinx/coroutines/sync/MutexImpl;->()V HSPLkotlinx/coroutines/sync/MutexImpl;->(Z)V HPLkotlinx/coroutines/sync/MutexImpl;->(Z)V HSPLkotlinx/coroutines/sync/MutexImpl;->access$getOwner$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; PLkotlinx/coroutines/sync/MutexImpl;->access$getOwner$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z PLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z HPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V HPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner; HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;)V HPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;)V HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V PLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V PLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; PLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Lkotlin/Unit;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; PLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Lkotlin/Unit;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1; HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V PLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V Lkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1; HSPLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;->(Lkotlinx/coroutines/sync/MutexImpl;)V HPLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;->(Lkotlinx/coroutines/sync/MutexImpl;)V Lkotlinx/coroutines/sync/MutexKt; HSPLkotlinx/coroutines/sync/MutexKt;->()V PLkotlinx/coroutines/sync/MutexKt;->()V HSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex; PLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex; HSPLkotlinx/coroutines/sync/MutexKt;->access$getNO_OWNER$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/sync/MutexKt;->access$getNO_OWNER$p()Lkotlinx/coroutines/internal/Symbol; Lkotlinx/coroutines/sync/Semaphore; Lkotlinx/coroutines/sync/SemaphoreImpl; HSPLkotlinx/coroutines/sync/SemaphoreImpl;->()V PLkotlinx/coroutines/sync/SemaphoreImpl;->()V HSPLkotlinx/coroutines/sync/SemaphoreImpl;->(II)V HPLkotlinx/coroutines/sync/SemaphoreImpl;->(II)V HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/CancellableContinuation;)V HPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/CancellableContinuation;)V HSPLkotlinx/coroutines/sync/SemaphoreImpl;->addAcquireToQueue(Lkotlinx/coroutines/Waiter;)Z HPLkotlinx/coroutines/sync/SemaphoreImpl;->addAcquireToQueue(Lkotlinx/coroutines/Waiter;)Z HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getAvailablePermits()I HPLkotlinx/coroutines/sync/SemaphoreImpl;->getAvailablePermits()I HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V HPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryAcquire()Z HPLkotlinx/coroutines/sync/SemaphoreImpl;->tryAcquire()Z Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1; HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V PLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V PLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V Lkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1; HSPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;->(Lkotlinx/coroutines/sync/SemaphoreImpl;)V HPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;->(Lkotlinx/coroutines/sync/SemaphoreImpl;)V Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1; HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V PLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V PLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V Lkotlinx/coroutines/sync/SemaphoreKt; HSPLkotlinx/coroutines/sync/SemaphoreKt;->()V PLkotlinx/coroutines/sync/SemaphoreKt;->()V HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getCANCELLED$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/sync/SemaphoreKt;->access$getCANCELLED$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getPERMIT$p()Lkotlinx/coroutines/internal/Symbol; PLkotlinx/coroutines/sync/SemaphoreKt;->access$getPERMIT$p()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getSEGMENT_SIZE$p()I PLkotlinx/coroutines/sync/SemaphoreKt;->access$getSEGMENT_SIZE$p()I Lkotlinx/coroutines/sync/SemaphoreSegment; HSPLkotlinx/coroutines/sync/SemaphoreSegment;->(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V HPLkotlinx/coroutines/sync/SemaphoreSegment;->(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getAcquirers()Ljava/util/concurrent/atomic/AtomicReferenceArray; PLkotlinx/coroutines/sync/SemaphoreSegment;->getAcquirers()Ljava/util/concurrent/atomic/AtomicReferenceArray; HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I PLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I Lkotlinx/serialization/DeserializationStrategy; Lkotlinx/serialization/KSerializer; Lkotlinx/serialization/MissingFieldException; Lkotlinx/serialization/SerialFormat; Lkotlinx/serialization/SerializationException; Lkotlinx/serialization/SerializationStrategy; Lkotlinx/serialization/StringFormat; Lkotlinx/serialization/UnknownFieldException; Lkotlinx/serialization/builtins/BuiltinSerializersKt; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->BooleanArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->BooleanArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ByteArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->ByteArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->CharArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->CharArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->DoubleArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->DoubleArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->FloatArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->FloatArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->IntArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->IntArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ListSerializer(Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->ListSerializer(Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->LongArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->LongArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->MapSerializer(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->MapSerializer(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->NothingSerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->NothingSerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ShortArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->ShortArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UByteArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->UByteArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UIntArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->UIntArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ULongArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->ULongArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UShortArraySerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->UShortArraySerializer()Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UByte$Companion;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UByte$Companion;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UInt$Companion;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UInt$Companion;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/ULong$Companion;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/ULong$Companion;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UShort$Companion;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UShort$Companion;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/Unit;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/Unit;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/time/Duration$Companion;)Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/time/Duration$Companion;)Lkotlinx/serialization/KSerializer; Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder; HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->(Ljava/lang/String;)V PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->(Ljava/lang/String;)V HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element$default(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element$default(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;Z)V PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;Z)V HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getAnnotations()Ljava/util/List; PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getAnnotations()Ljava/util/List; HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementAnnotations$kotlinx_serialization_core()Ljava/util/List; PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementAnnotations$kotlinx_serialization_core()Ljava/util/List; HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementDescriptors$kotlinx_serialization_core()Ljava/util/List; PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementDescriptors$kotlinx_serialization_core()Ljava/util/List; HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementNames$kotlinx_serialization_core()Ljava/util/List; PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementNames$kotlinx_serialization_core()Ljava/util/List; HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementOptionality$kotlinx_serialization_core()Ljava/util/List; PLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementOptionality$kotlinx_serialization_core()Ljava/util/List; Lkotlinx/serialization/descriptors/PolymorphicKind; HSPLkotlinx/serialization/descriptors/PolymorphicKind;->()V PLkotlinx/serialization/descriptors/PolymorphicKind;->()V HSPLkotlinx/serialization/descriptors/PolymorphicKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/descriptors/PolymorphicKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/descriptors/PolymorphicKind$SEALED; HSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V PLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V HSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V PLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V Lkotlinx/serialization/descriptors/PrimitiveKind; HSPLkotlinx/serialization/descriptors/PrimitiveKind;->()V PLkotlinx/serialization/descriptors/PrimitiveKind;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/descriptors/PrimitiveKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN; HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$BYTE; HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$CHAR; HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE; HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$FLOAT; HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$INT; HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$LONG; HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$SHORT; HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V Lkotlinx/serialization/descriptors/PrimitiveKind$STRING; HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V PLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls; HSPLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;->isNullable(Lkotlinx/serialization/descriptors/SerialDescriptor;)Z PLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;->isNullable(Lkotlinx/serialization/descriptors/SerialDescriptor;)Z Lkotlinx/serialization/descriptors/SerialDescriptorImpl; HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;ILjava/util/List;Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V PLkotlinx/serialization/descriptors/SerialDescriptorImpl;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;ILjava/util/List;Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V Lkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2; HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;->(Lkotlinx/serialization/descriptors/SerialDescriptorImpl;)V PLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;->(Lkotlinx/serialization/descriptors/SerialDescriptorImpl;)V Lkotlinx/serialization/descriptors/SerialDescriptorKt; HSPLkotlinx/serialization/descriptors/SerialDescriptorKt;->getElementDescriptors(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/lang/Iterable; PLkotlinx/serialization/descriptors/SerialDescriptorKt;->getElementDescriptors(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/lang/Iterable; Lkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1; HSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->hasNext()Z PLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->hasNext()Z HSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Ljava/lang/Object; PLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Ljava/lang/Object; HSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1; HSPLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;->iterator()Ljava/util/Iterator; PLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;->iterator()Ljava/util/Iterator; Lkotlinx/serialization/descriptors/SerialDescriptorsKt; HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildClassSerialDescriptor(Ljava/lang/String;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildClassSerialDescriptor(Ljava/lang/String;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/descriptors/SerialKind; HSPLkotlinx/serialization/descriptors/SerialKind;->()V PLkotlinx/serialization/descriptors/SerialKind;->()V HSPLkotlinx/serialization/descriptors/SerialKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/descriptors/SerialKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/descriptors/SerialKind;->hashCode()I PLkotlinx/serialization/descriptors/SerialKind;->hashCode()I HSPLkotlinx/serialization/descriptors/SerialKind;->toString()Ljava/lang/String; PLkotlinx/serialization/descriptors/SerialKind;->toString()Ljava/lang/String; Lkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL; HSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V PLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V HSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V PLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V Lkotlinx/serialization/descriptors/SerialKind$ENUM; Lkotlinx/serialization/descriptors/StructureKind; HSPLkotlinx/serialization/descriptors/StructureKind;->()V PLkotlinx/serialization/descriptors/StructureKind;->()V HSPLkotlinx/serialization/descriptors/StructureKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/descriptors/StructureKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/descriptors/StructureKind$CLASS; HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V PLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V PLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V Lkotlinx/serialization/descriptors/StructureKind$LIST; HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V PLkotlinx/serialization/descriptors/StructureKind$LIST;->()V HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V PLkotlinx/serialization/descriptors/StructureKind$LIST;->()V Lkotlinx/serialization/descriptors/StructureKind$MAP; HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V PLkotlinx/serialization/descriptors/StructureKind$MAP;->()V HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V PLkotlinx/serialization/descriptors/StructureKind$MAP;->()V Lkotlinx/serialization/descriptors/StructureKind$OBJECT; HSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V PLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V HSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V PLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V Lkotlinx/serialization/encoding/AbstractDecoder; HSPLkotlinx/serialization/encoding/AbstractDecoder;->()V PLkotlinx/serialization/encoding/AbstractDecoder;->()V HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeIntElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)I HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeIntElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)I HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeLongElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)J HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeLongElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)J HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeNullableSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeNullableSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()Z PLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()Z HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeStringElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String; HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeStringElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String; Lkotlinx/serialization/encoding/ChunkedDecoder; Lkotlinx/serialization/encoding/CompositeDecoder; Lkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls; HSPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSequentially(Lkotlinx/serialization/encoding/CompositeDecoder;)Z PLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSequentially(Lkotlinx/serialization/encoding/CompositeDecoder;)Z HSPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSerializableElement$default(Lkotlinx/serialization/encoding/CompositeDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object; PLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSerializableElement$default(Lkotlinx/serialization/encoding/CompositeDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object; Lkotlinx/serialization/encoding/Decoder; Lkotlinx/serialization/internal/AbstractCollectionSerializer; HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->()V PLkotlinx/serialization/internal/AbstractCollectionSerializer;->()V HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/internal/AbstractCollectionSerializer;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->readElement$default(Lkotlinx/serialization/internal/AbstractCollectionSerializer;Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;ZILjava/lang/Object;)V HPLkotlinx/serialization/internal/AbstractCollectionSerializer;->readElement$default(Lkotlinx/serialization/internal/AbstractCollectionSerializer;Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;ZILjava/lang/Object;)V Lkotlinx/serialization/internal/AbstractPolymorphicSerializer; Lkotlinx/serialization/internal/ArrayListClassDesc; HSPLkotlinx/serialization/internal/ArrayListClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/internal/ArrayListClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V Lkotlinx/serialization/internal/ArrayListSerializer; HSPLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/lang/Object; PLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/lang/Object; HSPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/util/ArrayList; PLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/util/ArrayList; HSPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/lang/Object;)I PLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/lang/Object;)I HSPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/util/ArrayList;)I HPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/util/ArrayList;)I HSPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; HPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/lang/Object;ILjava/lang/Object;)V HPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/lang/Object;ILjava/lang/Object;)V HSPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/util/ArrayList;ILjava/lang/Object;)V HPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/util/ArrayList;ILjava/lang/Object;)V HSPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/util/ArrayList;)Ljava/util/List; PLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/util/ArrayList;)Ljava/util/List; Lkotlinx/serialization/internal/BooleanArraySerializer; HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V PLkotlinx/serialization/internal/BooleanArraySerializer;->()V HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V PLkotlinx/serialization/internal/BooleanArraySerializer;->()V Lkotlinx/serialization/internal/BooleanSerializer; HSPLkotlinx/serialization/internal/BooleanSerializer;->()V PLkotlinx/serialization/internal/BooleanSerializer;->()V HSPLkotlinx/serialization/internal/BooleanSerializer;->()V PLkotlinx/serialization/internal/BooleanSerializer;->()V HSPLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/ByteArraySerializer; HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V PLkotlinx/serialization/internal/ByteArraySerializer;->()V HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V PLkotlinx/serialization/internal/ByteArraySerializer;->()V Lkotlinx/serialization/internal/ByteSerializer; HSPLkotlinx/serialization/internal/ByteSerializer;->()V PLkotlinx/serialization/internal/ByteSerializer;->()V HSPLkotlinx/serialization/internal/ByteSerializer;->()V PLkotlinx/serialization/internal/ByteSerializer;->()V HSPLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/CachedNames; Lkotlinx/serialization/internal/CharArraySerializer; HSPLkotlinx/serialization/internal/CharArraySerializer;->()V PLkotlinx/serialization/internal/CharArraySerializer;->()V HSPLkotlinx/serialization/internal/CharArraySerializer;->()V PLkotlinx/serialization/internal/CharArraySerializer;->()V Lkotlinx/serialization/internal/CharSerializer; HSPLkotlinx/serialization/internal/CharSerializer;->()V PLkotlinx/serialization/internal/CharSerializer;->()V HSPLkotlinx/serialization/internal/CharSerializer;->()V PLkotlinx/serialization/internal/CharSerializer;->()V HSPLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/CollectionLikeSerializer; HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V HPLkotlinx/serialization/internal/CollectionLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V Lkotlinx/serialization/internal/CollectionSerializer; HSPLkotlinx/serialization/internal/CollectionSerializer;->(Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/CollectionSerializer;->(Lkotlinx/serialization/KSerializer;)V Lkotlinx/serialization/internal/DoubleArraySerializer; HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V PLkotlinx/serialization/internal/DoubleArraySerializer;->()V HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V PLkotlinx/serialization/internal/DoubleArraySerializer;->()V Lkotlinx/serialization/internal/DoubleSerializer; HSPLkotlinx/serialization/internal/DoubleSerializer;->()V PLkotlinx/serialization/internal/DoubleSerializer;->()V HSPLkotlinx/serialization/internal/DoubleSerializer;->()V PLkotlinx/serialization/internal/DoubleSerializer;->()V HSPLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/DurationSerializer; HSPLkotlinx/serialization/internal/DurationSerializer;->()V PLkotlinx/serialization/internal/DurationSerializer;->()V HSPLkotlinx/serialization/internal/DurationSerializer;->()V PLkotlinx/serialization/internal/DurationSerializer;->()V Lkotlinx/serialization/internal/ElementMarker; HSPLkotlinx/serialization/internal/ElementMarker;->()V PLkotlinx/serialization/internal/ElementMarker;->()V HSPLkotlinx/serialization/internal/ElementMarker;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function2;)V HPLkotlinx/serialization/internal/ElementMarker;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/serialization/internal/ElementMarker;->mark(I)V PLkotlinx/serialization/internal/ElementMarker;->mark(I)V HSPLkotlinx/serialization/internal/ElementMarker;->nextUnmarkedIndex()I HPLkotlinx/serialization/internal/ElementMarker;->nextUnmarkedIndex()I Lkotlinx/serialization/internal/ElementMarker$Companion; HSPLkotlinx/serialization/internal/ElementMarker$Companion;->()V PLkotlinx/serialization/internal/ElementMarker$Companion;->()V HSPLkotlinx/serialization/internal/ElementMarker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/internal/ElementMarker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/internal/FloatArraySerializer; HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V PLkotlinx/serialization/internal/FloatArraySerializer;->()V HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V PLkotlinx/serialization/internal/FloatArraySerializer;->()V Lkotlinx/serialization/internal/FloatSerializer; HSPLkotlinx/serialization/internal/FloatSerializer;->()V PLkotlinx/serialization/internal/FloatSerializer;->()V HSPLkotlinx/serialization/internal/FloatSerializer;->()V PLkotlinx/serialization/internal/FloatSerializer;->()V HSPLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/GeneratedSerializer; Lkotlinx/serialization/internal/GeneratedSerializer$DefaultImpls; HSPLkotlinx/serialization/internal/GeneratedSerializer$DefaultImpls;->typeParametersSerializers(Lkotlinx/serialization/internal/GeneratedSerializer;)[Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/internal/GeneratedSerializer$DefaultImpls;->typeParametersSerializers(Lkotlinx/serialization/internal/GeneratedSerializer;)[Lkotlinx/serialization/KSerializer; Lkotlinx/serialization/internal/InlineClassDescriptor; HSPLkotlinx/serialization/internal/InlineClassDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V PLkotlinx/serialization/internal/InlineClassDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V Lkotlinx/serialization/internal/InlineClassDescriptorKt; HSPLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1; HSPLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;->(Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;->(Lkotlinx/serialization/KSerializer;)V Lkotlinx/serialization/internal/IntArraySerializer; HSPLkotlinx/serialization/internal/IntArraySerializer;->()V PLkotlinx/serialization/internal/IntArraySerializer;->()V HSPLkotlinx/serialization/internal/IntArraySerializer;->()V PLkotlinx/serialization/internal/IntArraySerializer;->()V Lkotlinx/serialization/internal/IntSerializer; HSPLkotlinx/serialization/internal/IntSerializer;->()V PLkotlinx/serialization/internal/IntSerializer;->()V HSPLkotlinx/serialization/internal/IntSerializer;->()V PLkotlinx/serialization/internal/IntSerializer;->()V HSPLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/LinkedHashMapClassDesc; HSPLkotlinx/serialization/internal/LinkedHashMapClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/internal/LinkedHashMapClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V Lkotlinx/serialization/internal/LinkedHashMapSerializer; HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/LinkedHashMapSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/LinkedHashMapSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/ListLikeDescriptor; HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/internal/ListLikeDescriptor;->getElementsCount()I PLkotlinx/serialization/internal/ListLikeDescriptor;->getElementsCount()I HSPLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; PLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; HSPLkotlinx/serialization/internal/ListLikeDescriptor;->isNullable()Z PLkotlinx/serialization/internal/ListLikeDescriptor;->isNullable()Z Lkotlinx/serialization/internal/LongArraySerializer; HSPLkotlinx/serialization/internal/LongArraySerializer;->()V PLkotlinx/serialization/internal/LongArraySerializer;->()V HSPLkotlinx/serialization/internal/LongArraySerializer;->()V PLkotlinx/serialization/internal/LongArraySerializer;->()V Lkotlinx/serialization/internal/LongSerializer; HSPLkotlinx/serialization/internal/LongSerializer;->()V PLkotlinx/serialization/internal/LongSerializer;->()V HSPLkotlinx/serialization/internal/LongSerializer;->()V PLkotlinx/serialization/internal/LongSerializer;->()V HSPLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/MapLikeDescriptor; HSPLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/internal/MapLikeSerializer; HSPLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/internal/NothingSerialDescriptor; HSPLkotlinx/serialization/internal/NothingSerialDescriptor;->()V PLkotlinx/serialization/internal/NothingSerialDescriptor;->()V HSPLkotlinx/serialization/internal/NothingSerialDescriptor;->()V PLkotlinx/serialization/internal/NothingSerialDescriptor;->()V Lkotlinx/serialization/internal/NothingSerializer; HSPLkotlinx/serialization/internal/NothingSerializer;->()V PLkotlinx/serialization/internal/NothingSerializer;->()V HSPLkotlinx/serialization/internal/NothingSerializer;->()V PLkotlinx/serialization/internal/NothingSerializer;->()V Lkotlinx/serialization/internal/ObjectSerializer; HSPLkotlinx/serialization/internal/ObjectSerializer;->(Ljava/lang/String;Ljava/lang/Object;)V PLkotlinx/serialization/internal/ObjectSerializer;->(Ljava/lang/String;Ljava/lang/Object;)V Lkotlinx/serialization/internal/ObjectSerializer$descriptor$2; HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->(Ljava/lang/String;Lkotlinx/serialization/internal/ObjectSerializer;)V PLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->(Ljava/lang/String;Lkotlinx/serialization/internal/ObjectSerializer;)V Lkotlinx/serialization/internal/Platform_commonKt; HSPLkotlinx/serialization/internal/Platform_commonKt;->()V PLkotlinx/serialization/internal/Platform_commonKt;->()V HSPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/PluginExceptionsKt; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->access$getGeneratedSerializer$p(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)Lkotlinx/serialization/internal/GeneratedSerializer; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->access$getGeneratedSerializer$p(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)Lkotlinx/serialization/internal/GeneratedSerializer; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->buildIndices()Ljava/util/Map; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->buildIndices()Ljava/util/Map; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getChildSerializers()[Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getChildSerializers()[Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementAnnotations(I)Ljava/util/List; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementAnnotations(I)Ljava/util/List; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I HPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getTypeParameterDescriptors$kotlinx_serialization_core()[Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getTypeParameterDescriptors$kotlinx_serialization_core()[Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->get_hashCode()I HPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->get_hashCode()I HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->hashCode()I HPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->hashCode()I Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Integer; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Integer; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Object; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Object; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()Ljava/lang/Object; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()Ljava/lang/Object; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()[Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()[Lkotlinx/serialization/KSerializer; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()Ljava/lang/Object; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()Ljava/lang/Object; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()[Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()[Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;->hashCodeImpl(Lkotlinx/serialization/descriptors/SerialDescriptor;[Lkotlinx/serialization/descriptors/SerialDescriptor;)I PLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;->hashCodeImpl(Lkotlinx/serialization/descriptors/SerialDescriptor;[Lkotlinx/serialization/descriptors/SerialDescriptor;)I Lkotlinx/serialization/internal/PluginHelperInterfacesKt; HSPLkotlinx/serialization/internal/PluginHelperInterfacesKt;->()V PLkotlinx/serialization/internal/PluginHelperInterfacesKt;->()V Lkotlinx/serialization/internal/PrimitiveArrayDescriptor; HSPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V PLkotlinx/serialization/internal/PrimitiveArrayDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V Lkotlinx/serialization/internal/PrimitiveArraySerializer; HSPLkotlinx/serialization/internal/PrimitiveArraySerializer;->(Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/internal/PrimitiveArraySerializer;->(Lkotlinx/serialization/KSerializer;)V Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V PLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/PrimitiveKind; PLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/PrimitiveKind; HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; PLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String; PLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String; Lkotlinx/serialization/internal/PrimitivesKt; HSPLkotlinx/serialization/internal/PrimitivesKt;->()V PLkotlinx/serialization/internal/PrimitivesKt;->()V HSPLkotlinx/serialization/internal/PrimitivesKt;->PrimitiveDescriptorSafe(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/PrimitivesKt;->PrimitiveDescriptorSafe(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String; PLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String; HSPLkotlinx/serialization/internal/PrimitivesKt;->checkName(Ljava/lang/String;)V PLkotlinx/serialization/internal/PrimitivesKt;->checkName(Ljava/lang/String;)V Lkotlinx/serialization/internal/ShortArraySerializer; HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V PLkotlinx/serialization/internal/ShortArraySerializer;->()V HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V PLkotlinx/serialization/internal/ShortArraySerializer;->()V Lkotlinx/serialization/internal/ShortSerializer; HSPLkotlinx/serialization/internal/ShortSerializer;->()V PLkotlinx/serialization/internal/ShortSerializer;->()V HSPLkotlinx/serialization/internal/ShortSerializer;->()V PLkotlinx/serialization/internal/ShortSerializer;->()V HSPLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/StringSerializer; HSPLkotlinx/serialization/internal/StringSerializer;->()V PLkotlinx/serialization/internal/StringSerializer;->()V HSPLkotlinx/serialization/internal/StringSerializer;->()V PLkotlinx/serialization/internal/StringSerializer;->()V HSPLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/UByteArraySerializer; HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V PLkotlinx/serialization/internal/UByteArraySerializer;->()V HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V PLkotlinx/serialization/internal/UByteArraySerializer;->()V Lkotlinx/serialization/internal/UByteSerializer; HSPLkotlinx/serialization/internal/UByteSerializer;->()V PLkotlinx/serialization/internal/UByteSerializer;->()V HSPLkotlinx/serialization/internal/UByteSerializer;->()V PLkotlinx/serialization/internal/UByteSerializer;->()V HSPLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/UIntArraySerializer; HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V PLkotlinx/serialization/internal/UIntArraySerializer;->()V HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V PLkotlinx/serialization/internal/UIntArraySerializer;->()V Lkotlinx/serialization/internal/UIntSerializer; HSPLkotlinx/serialization/internal/UIntSerializer;->()V PLkotlinx/serialization/internal/UIntSerializer;->()V HSPLkotlinx/serialization/internal/UIntSerializer;->()V PLkotlinx/serialization/internal/UIntSerializer;->()V HSPLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/ULongArraySerializer; HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V PLkotlinx/serialization/internal/ULongArraySerializer;->()V HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V PLkotlinx/serialization/internal/ULongArraySerializer;->()V Lkotlinx/serialization/internal/ULongSerializer; HSPLkotlinx/serialization/internal/ULongSerializer;->()V PLkotlinx/serialization/internal/ULongSerializer;->()V HSPLkotlinx/serialization/internal/ULongSerializer;->()V PLkotlinx/serialization/internal/ULongSerializer;->()V HSPLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/UShortArraySerializer; HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V PLkotlinx/serialization/internal/UShortArraySerializer;->()V HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V PLkotlinx/serialization/internal/UShortArraySerializer;->()V Lkotlinx/serialization/internal/UShortSerializer; HSPLkotlinx/serialization/internal/UShortSerializer;->()V PLkotlinx/serialization/internal/UShortSerializer;->()V HSPLkotlinx/serialization/internal/UShortSerializer;->()V PLkotlinx/serialization/internal/UShortSerializer;->()V HSPLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lkotlinx/serialization/internal/UnitSerializer; HSPLkotlinx/serialization/internal/UnitSerializer;->()V PLkotlinx/serialization/internal/UnitSerializer;->()V HSPLkotlinx/serialization/internal/UnitSerializer;->()V PLkotlinx/serialization/internal/UnitSerializer;->()V Lkotlinx/serialization/json/Json; HSPLkotlinx/serialization/json/Json;->()V PLkotlinx/serialization/json/Json;->()V HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V PLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/json/Json;->getConfiguration()Lkotlinx/serialization/json/JsonConfiguration; PLkotlinx/serialization/json/Json;->getConfiguration()Lkotlinx/serialization/json/JsonConfiguration; HSPLkotlinx/serialization/json/Json;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; PLkotlinx/serialization/json/Json;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; HSPLkotlinx/serialization/json/Json;->get_schemaCache$kotlinx_serialization_json()Lkotlinx/serialization/json/internal/DescriptorSchemaCache; PLkotlinx/serialization/json/Json;->get_schemaCache$kotlinx_serialization_json()Lkotlinx/serialization/json/internal/DescriptorSchemaCache; Lkotlinx/serialization/json/Json$Default; HSPLkotlinx/serialization/json/Json$Default;->()V PLkotlinx/serialization/json/Json$Default;->()V HSPLkotlinx/serialization/json/Json$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/json/Json$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/json/JsonBuilder; HSPLkotlinx/serialization/json/JsonBuilder;->(Lkotlinx/serialization/json/Json;)V PLkotlinx/serialization/json/JsonBuilder;->(Lkotlinx/serialization/json/Json;)V HSPLkotlinx/serialization/json/JsonBuilder;->build$kotlinx_serialization_json()Lkotlinx/serialization/json/JsonConfiguration; PLkotlinx/serialization/json/JsonBuilder;->build$kotlinx_serialization_json()Lkotlinx/serialization/json/JsonConfiguration; HSPLkotlinx/serialization/json/JsonBuilder;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; PLkotlinx/serialization/json/JsonBuilder;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; HSPLkotlinx/serialization/json/JsonBuilder;->setExplicitNulls(Z)V PLkotlinx/serialization/json/JsonBuilder;->setExplicitNulls(Z)V HSPLkotlinx/serialization/json/JsonBuilder;->setIgnoreUnknownKeys(Z)V PLkotlinx/serialization/json/JsonBuilder;->setIgnoreUnknownKeys(Z)V Lkotlinx/serialization/json/JsonConfiguration; HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;)V PLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;)V HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowSpecialFloatingPointValues()Z PLkotlinx/serialization/json/JsonConfiguration;->getAllowSpecialFloatingPointValues()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowStructuredMapKeys()Z PLkotlinx/serialization/json/JsonConfiguration;->getAllowStructuredMapKeys()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getClassDiscriminator()Ljava/lang/String; PLkotlinx/serialization/json/JsonConfiguration;->getClassDiscriminator()Ljava/lang/String; HSPLkotlinx/serialization/json/JsonConfiguration;->getCoerceInputValues()Z PLkotlinx/serialization/json/JsonConfiguration;->getCoerceInputValues()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getEncodeDefaults()Z PLkotlinx/serialization/json/JsonConfiguration;->getEncodeDefaults()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getExplicitNulls()Z PLkotlinx/serialization/json/JsonConfiguration;->getExplicitNulls()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getIgnoreUnknownKeys()Z PLkotlinx/serialization/json/JsonConfiguration;->getIgnoreUnknownKeys()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getNamingStrategy()Lkotlinx/serialization/json/JsonNamingStrategy; PLkotlinx/serialization/json/JsonConfiguration;->getNamingStrategy()Lkotlinx/serialization/json/JsonNamingStrategy; HSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrint()Z PLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrint()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrintIndent()Ljava/lang/String; PLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrintIndent()Ljava/lang/String; HSPLkotlinx/serialization/json/JsonConfiguration;->getUseAlternativeNames()Z PLkotlinx/serialization/json/JsonConfiguration;->getUseAlternativeNames()Z HSPLkotlinx/serialization/json/JsonConfiguration;->getUseArrayPolymorphism()Z PLkotlinx/serialization/json/JsonConfiguration;->getUseArrayPolymorphism()Z HSPLkotlinx/serialization/json/JsonConfiguration;->isLenient()Z HPLkotlinx/serialization/json/JsonConfiguration;->isLenient()Z Lkotlinx/serialization/json/JsonDecoder; Lkotlinx/serialization/json/JsonImpl; HSPLkotlinx/serialization/json/JsonImpl;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V PLkotlinx/serialization/json/JsonImpl;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V HSPLkotlinx/serialization/json/JsonImpl;->validateConfiguration()V PLkotlinx/serialization/json/JsonImpl;->validateConfiguration()V Lkotlinx/serialization/json/JsonKt; HSPLkotlinx/serialization/json/JsonKt;->Json$default(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/json/Json; PLkotlinx/serialization/json/JsonKt;->Json$default(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/json/Json; HSPLkotlinx/serialization/json/JsonKt;->Json(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/json/Json; PLkotlinx/serialization/json/JsonKt;->Json(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/json/Json; Lkotlinx/serialization/json/JsonNames; Lkotlinx/serialization/json/JsonSchemaCacheKt; HSPLkotlinx/serialization/json/JsonSchemaCacheKt;->getSchemaCache(Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/internal/DescriptorSchemaCache; PLkotlinx/serialization/json/JsonSchemaCacheKt;->getSchemaCache(Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/internal/DescriptorSchemaCache; Lkotlinx/serialization/json/internal/AbstractJsonLexer; HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->()V PLkotlinx/serialization/json/internal/AbstractJsonLexer;->()V HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNextToken(C)V HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNextToken(C)V HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNumericLiteral()J HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNumericLiteral()J HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String; HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String; HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenient()Ljava/lang/String; HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenient()Ljava/lang/String; HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->expectEof()V PLkotlinx/serialization/json/internal/AbstractJsonLexer;->expectEof()V HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipElement(Z)V HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipElement(Z)V HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipWhitespaces()I HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipWhitespaces()I HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;ZILjava/lang/Object;)Z PLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;ZILjava/lang/Object;)Z HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull(Z)Z HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull(Z)Z Lkotlinx/serialization/json/internal/AbstractJsonLexerKt; HSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B PLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B Lkotlinx/serialization/json/internal/ArrayAsSequence; HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->([C)V PLkotlinx/serialization/json/internal/ArrayAsSequence;->([C)V HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->access$getBuffer$p(Lkotlinx/serialization/json/internal/ArrayAsSequence;)[C PLkotlinx/serialization/json/internal/ArrayAsSequence;->access$getBuffer$p(Lkotlinx/serialization/json/internal/ArrayAsSequence;)[C HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C HPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->get(I)C HPLkotlinx/serialization/json/internal/ArrayAsSequence;->get(I)C HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->getLength()I HPLkotlinx/serialization/json/internal/ArrayAsSequence;->getLength()I HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->length()I HPLkotlinx/serialization/json/internal/ArrayAsSequence;->length()I HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->setLength(I)V PLkotlinx/serialization/json/internal/ArrayAsSequence;->setLength(I)V HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->substring(II)Ljava/lang/String; HPLkotlinx/serialization/json/internal/ArrayAsSequence;->substring(II)Ljava/lang/String; HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->trim(I)V PLkotlinx/serialization/json/internal/ArrayAsSequence;->trim(I)V Lkotlinx/serialization/json/internal/ArrayPoolsKt; HSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->()V PLkotlinx/serialization/json/internal/ArrayPoolsKt;->()V HSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->access$getMAX_CHARS_IN_POOL$p()I PLkotlinx/serialization/json/internal/ArrayPoolsKt;->access$getMAX_CHARS_IN_POOL$p()I Lkotlinx/serialization/json/internal/CharArrayPoolBase; HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->()V PLkotlinx/serialization/json/internal/CharArrayPoolBase;->()V HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->releaseImpl([C)V PLkotlinx/serialization/json/internal/CharArrayPoolBase;->releaseImpl([C)V HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->take(I)[C PLkotlinx/serialization/json/internal/CharArrayPoolBase;->take(I)[C Lkotlinx/serialization/json/internal/CharArrayPoolBatchSize; HSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->()V PLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->()V HSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->()V PLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->()V HSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->release([C)V PLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->release([C)V HSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->take()[C PLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->take()[C Lkotlinx/serialization/json/internal/CharMappings; HSPLkotlinx/serialization/json/internal/CharMappings;->()V PLkotlinx/serialization/json/internal/CharMappings;->()V HSPLkotlinx/serialization/json/internal/CharMappings;->()V PLkotlinx/serialization/json/internal/CharMappings;->()V HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CC)V PLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CC)V HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(IC)V PLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(IC)V HSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(CB)V PLkotlinx/serialization/json/internal/CharMappings;->initC2TC(CB)V HSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(IB)V PLkotlinx/serialization/json/internal/CharMappings;->initC2TC(IB)V HSPLkotlinx/serialization/json/internal/CharMappings;->initCharToToken()V PLkotlinx/serialization/json/internal/CharMappings;->initCharToToken()V HSPLkotlinx/serialization/json/internal/CharMappings;->initEscape()V PLkotlinx/serialization/json/internal/CharMappings;->initEscape()V Lkotlinx/serialization/json/internal/CreateMapForCacheKt; HSPLkotlinx/serialization/json/internal/CreateMapForCacheKt;->createMapForCache(I)Ljava/util/Map; PLkotlinx/serialization/json/internal/CreateMapForCacheKt;->createMapForCache(I)Ljava/util/Map; Lkotlinx/serialization/json/internal/DescriptorSchemaCache; HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->()V PLkotlinx/serialization/json/internal/DescriptorSchemaCache;->()V HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->get(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;)Ljava/lang/Object; HPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->get(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;)Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->getOrPut(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; HPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->getOrPut(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->set(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Ljava/lang/Object;)V PLkotlinx/serialization/json/internal/DescriptorSchemaCache;->set(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Ljava/lang/Object;)V Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key; HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;->()V PLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;->()V Lkotlinx/serialization/json/internal/JsonElementMarker; HSPLkotlinx/serialization/json/internal/JsonElementMarker;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HPLkotlinx/serialization/json/internal/JsonElementMarker;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/json/internal/JsonElementMarker;->isUnmarkedNull$kotlinx_serialization_json()Z PLkotlinx/serialization/json/internal/JsonElementMarker;->isUnmarkedNull$kotlinx_serialization_json()Z HSPLkotlinx/serialization/json/internal/JsonElementMarker;->mark$kotlinx_serialization_json(I)V PLkotlinx/serialization/json/internal/JsonElementMarker;->mark$kotlinx_serialization_json(I)V HSPLkotlinx/serialization/json/internal/JsonElementMarker;->nextUnmarkedIndex$kotlinx_serialization_json()I PLkotlinx/serialization/json/internal/JsonElementMarker;->nextUnmarkedIndex$kotlinx_serialization_json()I Lkotlinx/serialization/json/internal/JsonElementMarker$origin$1; HSPLkotlinx/serialization/json/internal/JsonElementMarker$origin$1;->(Ljava/lang/Object;)V PLkotlinx/serialization/json/internal/JsonElementMarker$origin$1;->(Ljava/lang/Object;)V Lkotlinx/serialization/json/internal/JsonExceptionsKt; Lkotlinx/serialization/json/internal/JsonNamesMapKt; HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->()V PLkotlinx/serialization/json/internal/JsonNamesMapKt;->()V HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->access$buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map; PLkotlinx/serialization/json/internal/JsonNamesMapKt;->access$buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map; HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map; PLkotlinx/serialization/json/internal/JsonNamesMapKt;->buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map; HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->deserializationNamesMap(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/util/Map; PLkotlinx/serialization/json/internal/JsonNamesMapKt;->deserializationNamesMap(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/util/Map; HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex$getJsonNameIndexSlowPath(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/lang/String;)I PLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex$getJsonNameIndexSlowPath(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/lang/String;)I HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;Ljava/lang/String;)I HPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;Ljava/lang/String;)I HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->namingStrategy(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/JsonNamingStrategy; HPLkotlinx/serialization/json/internal/JsonNamesMapKt;->namingStrategy(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/JsonNamingStrategy; Lkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1; HSPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)V PLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)V HSPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/lang/Object; PLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/util/Map; PLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/util/Map; Lkotlinx/serialization/json/internal/JsonPath; HSPLkotlinx/serialization/json/internal/JsonPath;->()V PLkotlinx/serialization/json/internal/JsonPath;->()V HSPLkotlinx/serialization/json/internal/JsonPath;->popDescriptor()V PLkotlinx/serialization/json/internal/JsonPath;->popDescriptor()V HSPLkotlinx/serialization/json/internal/JsonPath;->pushDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HPLkotlinx/serialization/json/internal/JsonPath;->pushDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/json/internal/JsonPath;->updateDescriptorIndex(I)V PLkotlinx/serialization/json/internal/JsonPath;->updateDescriptorIndex(I)V Lkotlinx/serialization/json/internal/JsonPath$Tombstone; Lkotlinx/serialization/json/internal/JsonStreamsKt; HSPLkotlinx/serialization/json/internal/JsonStreamsKt;->decodeByReader(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lkotlinx/serialization/json/internal/SerialReader;)Ljava/lang/Object; PLkotlinx/serialization/json/internal/JsonStreamsKt;->decodeByReader(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lkotlinx/serialization/json/internal/SerialReader;)Ljava/lang/Object; Lkotlinx/serialization/json/internal/PolymorphicKt; Lkotlinx/serialization/json/internal/ReaderJsonLexer; HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->(Lkotlinx/serialization/json/internal/SerialReader;[C)V PLkotlinx/serialization/json/internal/ReaderJsonLexer;->(Lkotlinx/serialization/json/internal/SerialReader;[C)V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->(Lkotlinx/serialization/json/internal/SerialReader;[CILkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/json/internal/ReaderJsonLexer;->(Lkotlinx/serialization/json/internal/SerialReader;[CILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->canConsumeValue()Z HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->canConsumeValue()Z HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeKeyString()Ljava/lang/String; HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeKeyString()Ljava/lang/String; HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeNextToken()B PLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeNextToken()B HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->ensureHaveChars()V HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->ensureHaveChars()V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Ljava/lang/CharSequence; HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Ljava/lang/CharSequence; HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Lkotlinx/serialization/json/internal/ArrayAsSequence; HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Lkotlinx/serialization/json/internal/ArrayAsSequence; HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->indexOf(CI)I HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->indexOf(CI)I HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->prefetchOrEof(I)I HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->prefetchOrEof(I)I HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->preload(I)V PLkotlinx/serialization/json/internal/ReaderJsonLexer;->preload(I)V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->release()V PLkotlinx/serialization/json/internal/ReaderJsonLexer;->release()V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->substring(II)Ljava/lang/String; HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->substring(II)Ljava/lang/String; HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z Lkotlinx/serialization/json/internal/SerialReader; Lkotlinx/serialization/json/internal/StreamingJsonDecoder; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;Lkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;Lkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder; HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->checkLeadingComma()V PLkotlinx/serialization/json/internal/StreamingJsonDecoder;->checkLeadingComma()V HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeElementIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeElementIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeInt()I HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeInt()I HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeListIndex()I HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeListIndex()I HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeLong()J HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeLong()J HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeNotNullMark()Z PLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeNotNullMark()Z HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeObjectIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeObjectIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String; HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeStringKey()Ljava/lang/String; HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeStringKey()Ljava/lang/String; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->handleUnknown(Ljava/lang/String;)Z HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->handleUnknown(Ljava/lang/String;)Z Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder; Lkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;->()V PLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;->()V Lkotlinx/serialization/json/internal/WriteMode; HSPLkotlinx/serialization/json/internal/WriteMode;->$values()[Lkotlinx/serialization/json/internal/WriteMode; PLkotlinx/serialization/json/internal/WriteMode;->$values()[Lkotlinx/serialization/json/internal/WriteMode; HSPLkotlinx/serialization/json/internal/WriteMode;->()V PLkotlinx/serialization/json/internal/WriteMode;->()V HSPLkotlinx/serialization/json/internal/WriteMode;->(Ljava/lang/String;ICC)V PLkotlinx/serialization/json/internal/WriteMode;->(Ljava/lang/String;ICC)V HSPLkotlinx/serialization/json/internal/WriteMode;->values()[Lkotlinx/serialization/json/internal/WriteMode; PLkotlinx/serialization/json/internal/WriteMode;->values()[Lkotlinx/serialization/json/internal/WriteMode; Lkotlinx/serialization/json/internal/WriteModeKt; HSPLkotlinx/serialization/json/internal/WriteModeKt;->switchMode(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/json/internal/WriteMode; HPLkotlinx/serialization/json/internal/WriteModeKt;->switchMode(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/json/internal/WriteMode; Lkotlinx/serialization/json/okio/OkioStreamsKt; HSPLkotlinx/serialization/json/okio/OkioStreamsKt;->decodeFromBufferedSource(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokio/BufferedSource;)Ljava/lang/Object; PLkotlinx/serialization/json/okio/OkioStreamsKt;->decodeFromBufferedSource(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokio/BufferedSource;)Ljava/lang/Object; Lkotlinx/serialization/json/okio/internal/OkioSerialReader; HSPLkotlinx/serialization/json/okio/internal/OkioSerialReader;->(Lokio/BufferedSource;)V PLkotlinx/serialization/json/okio/internal/OkioSerialReader;->(Lokio/BufferedSource;)V HSPLkotlinx/serialization/json/okio/internal/OkioSerialReader;->read([CII)I HPLkotlinx/serialization/json/okio/internal/OkioSerialReader;->read([CII)I Lkotlinx/serialization/modules/ContextualProvider; HSPLkotlinx/serialization/modules/ContextualProvider;->()V PLkotlinx/serialization/modules/ContextualProvider;->()V HSPLkotlinx/serialization/modules/ContextualProvider;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/modules/ContextualProvider;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/modules/ContextualProvider$Argless; HSPLkotlinx/serialization/modules/ContextualProvider$Argless;->(Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/modules/ContextualProvider$Argless;->(Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/modules/ContextualProvider$Argless;->getSerializer()Lkotlinx/serialization/KSerializer; PLkotlinx/serialization/modules/ContextualProvider$Argless;->getSerializer()Lkotlinx/serialization/KSerializer; Lkotlinx/serialization/modules/SerialModuleImpl; HSPLkotlinx/serialization/modules/SerialModuleImpl;->(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V PLkotlinx/serialization/modules/SerialModuleImpl;->(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V HSPLkotlinx/serialization/modules/SerialModuleImpl;->dumpTo(Lkotlinx/serialization/modules/SerializersModuleCollector;)V PLkotlinx/serialization/modules/SerialModuleImpl;->dumpTo(Lkotlinx/serialization/modules/SerializersModuleCollector;)V Lkotlinx/serialization/modules/SerializersModule; HSPLkotlinx/serialization/modules/SerializersModule;->()V PLkotlinx/serialization/modules/SerializersModule;->()V HSPLkotlinx/serialization/modules/SerializersModule;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLkotlinx/serialization/modules/SerializersModule;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lkotlinx/serialization/modules/SerializersModuleBuilder; HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->()V PLkotlinx/serialization/modules/SerializersModuleBuilder;->()V HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->build()Lkotlinx/serialization/modules/SerializersModule; PLkotlinx/serialization/modules/SerializersModuleBuilder;->build()Lkotlinx/serialization/modules/SerializersModule; HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->contextual(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V PLkotlinx/serialization/modules/SerializersModuleBuilder;->contextual(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->include(Lkotlinx/serialization/modules/SerializersModule;)V PLkotlinx/serialization/modules/SerializersModuleBuilder;->include(Lkotlinx/serialization/modules/SerializersModule;)V HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer$default(Lkotlinx/serialization/modules/SerializersModuleBuilder;Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;ZILjava/lang/Object;)V PLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer$default(Lkotlinx/serialization/modules/SerializersModuleBuilder;Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;ZILjava/lang/Object;)V HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer(Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;Z)V PLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer(Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;Z)V Lkotlinx/serialization/modules/SerializersModuleBuildersKt; HSPLkotlinx/serialization/modules/SerializersModuleBuildersKt;->EmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; PLkotlinx/serialization/modules/SerializersModuleBuildersKt;->EmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; Lkotlinx/serialization/modules/SerializersModuleCollector; Lkotlinx/serialization/modules/SerializersModuleKt; HSPLkotlinx/serialization/modules/SerializersModuleKt;->()V PLkotlinx/serialization/modules/SerializersModuleKt;->()V HSPLkotlinx/serialization/modules/SerializersModuleKt;->getEmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; PLkotlinx/serialization/modules/SerializersModuleKt;->getEmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; HSPLkotlinx/serialization/modules/SerializersModuleKt;->plus(Lkotlinx/serialization/modules/SerializersModule;Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/modules/SerializersModule; PLkotlinx/serialization/modules/SerializersModuleKt;->plus(Lkotlinx/serialization/modules/SerializersModule;Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/modules/SerializersModule; Lleakcanary/AndroidLeakFixes; HSPLleakcanary/AndroidLeakFixes;->()V PLleakcanary/AndroidLeakFixes;->()V HSPLleakcanary/AndroidLeakFixes;->(Ljava/lang/String;I)V PLleakcanary/AndroidLeakFixes;->(Ljava/lang/String;I)V HSPLleakcanary/AndroidLeakFixes;->access$getApplied$p(Lleakcanary/AndroidLeakFixes;)Z PLleakcanary/AndroidLeakFixes;->access$getApplied$p(Lleakcanary/AndroidLeakFixes;)Z HSPLleakcanary/AndroidLeakFixes;->access$getBackgroundHandler$cp()Lkotlin/Lazy; PLleakcanary/AndroidLeakFixes;->access$getBackgroundHandler$cp()Lkotlin/Lazy; HSPLleakcanary/AndroidLeakFixes;->access$setApplied$p(Lleakcanary/AndroidLeakFixes;)V PLleakcanary/AndroidLeakFixes;->access$setApplied$p(Lleakcanary/AndroidLeakFixes;)V HSPLleakcanary/AndroidLeakFixes;->values()[Lleakcanary/AndroidLeakFixes; PLleakcanary/AndroidLeakFixes;->values()[Lleakcanary/AndroidLeakFixes; Lleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO; HSPLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;->()V PLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;->()V HSPLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER; HSPLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;->()V PLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;->()V HSPLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$BUBBLE_POPUP; HSPLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;->()V PLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;->()V HSPLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER; HSPLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;->()V PLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;->()V HSPLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2; HSPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->()V PLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->()V HSPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->()V PLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->()V HSPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->invoke()Ljava/lang/Object; PLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->invoke()Ljava/lang/Object; Lleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1; HSPLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;->(Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;)V PLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;->(Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;)V HSPLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;->queueIdle()Z PLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;->queueIdle()Z Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS; HSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;->()V PLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;->()V HSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1; HSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;->(Ljava/lang/Object;I)V PLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;->(Ljava/lang/Object;I)V HSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;->run()V HPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;->run()V Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3; HSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;->(Landroid/os/HandlerThread;Lkotlin/jvm/internal/Ref$BooleanRef;Landroid/os/Handler;)V PLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;->(Landroid/os/HandlerThread;Lkotlin/jvm/internal/Ref$BooleanRef;Landroid/os/Handler;)V HSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;->invoke()Ljava/lang/Object; PLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;->invoke()Ljava/lang/Object; Lleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW; HSPLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;->()V PLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;->()V HSPLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW; HSPLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;->()V PLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;->()V HSPLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW; HSPLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;->()V PLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;->()V HSPLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER; HSPLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;->()V PLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;->()V HSPLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER; HSPLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;->()V PLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;->()V HSPLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$SPELL_CHECKER; HSPLleakcanary/AndroidLeakFixes$SPELL_CHECKER;->()V PLleakcanary/AndroidLeakFixes$SPELL_CHECKER;->()V HSPLleakcanary/AndroidLeakFixes$SPELL_CHECKER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$SPELL_CHECKER;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$TEXT_LINE_POOL; HSPLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;->()V PLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;->()V HSPLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$USER_MANAGER; HSPLleakcanary/AndroidLeakFixes$USER_MANAGER;->()V PLleakcanary/AndroidLeakFixes$USER_MANAGER;->()V HSPLleakcanary/AndroidLeakFixes$USER_MANAGER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$USER_MANAGER;->apply(Landroid/app/Application;)V Lleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER; HSPLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;->()V PLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;->()V HSPLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;->apply(Landroid/app/Application;)V PLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;->apply(Landroid/app/Application;)V Lleakcanary/ViewLocationHolderLeakFix; HSPLleakcanary/ViewLocationHolderLeakFix;->()V PLleakcanary/ViewLocationHolderLeakFix;->()V HSPLleakcanary/ViewLocationHolderLeakFix;->()V PLleakcanary/ViewLocationHolderLeakFix;->()V HSPLleakcanary/ViewLocationHolderLeakFix;->applyFixes$default(Landroid/app/Application;)V PLleakcanary/ViewLocationHolderLeakFix;->applyFixes$default(Landroid/app/Application;)V Lleakcanary/internal/HandlersKt; HSPLleakcanary/internal/HandlersKt;->()V PLleakcanary/internal/HandlersKt;->()V Lleakcanary/internal/HandlersKt$mainHandler$2; HSPLleakcanary/internal/HandlersKt$mainHandler$2;->()V PLleakcanary/internal/HandlersKt$mainHandler$2;->()V HSPLleakcanary/internal/HandlersKt$mainHandler$2;->(I)V PLleakcanary/internal/HandlersKt$mainHandler$2;->(I)V Lleakcanary/internal/PlumberInstaller; HSPLleakcanary/internal/PlumberInstaller;->()V PLleakcanary/internal/PlumberInstaller;->()V HSPLleakcanary/internal/PlumberInstaller;->onCreate()Z PLleakcanary/internal/PlumberInstaller;->onCreate()Z Llogcat/AndroidLogcatLogger; HSPLlogcat/AndroidLogcatLogger;->()V PLlogcat/AndroidLogcatLogger;->()V Llogcat/LogPriority; HSPLlogcat/LogPriority;->()V PLlogcat/LogPriority;->()V HSPLlogcat/LogPriority;->(Ljava/lang/String;II)V PLlogcat/LogPriority;->(Ljava/lang/String;II)V HSPLlogcat/LogPriority;->getPriorityInt()I PLlogcat/LogPriority;->getPriorityInt()I Llogcat/LogcatLogger; HSPLlogcat/LogcatLogger;->()V PLlogcat/LogcatLogger;->()V Llogcat/LogcatLogger$Companion; HSPLlogcat/LogcatLogger$Companion;->()V PLlogcat/LogcatLogger$Companion;->()V HSPLlogcat/LogcatLogger$Companion;->()V PLlogcat/LogcatLogger$Companion;->()V HSPLlogcat/LogcatLogger$Companion;->install(Llogcat/AndroidLogcatLogger;)V PLlogcat/LogcatLogger$Companion;->install(Llogcat/AndroidLogcatLogger;)V HSPLlogcat/LogcatLogger$Companion;->isInstalled()Z PLlogcat/LogcatLogger$Companion;->isInstalled()Z Llogcat/LogcatLogger$NoLog; HSPLlogcat/LogcatLogger$NoLog;->()V PLlogcat/LogcatLogger$NoLog;->()V HSPLlogcat/LogcatLogger$NoLog;->()V PLlogcat/LogcatLogger$NoLog;->()V Lnl/adaptivity/xmlutil/Namespace; HSPLnl/adaptivity/xmlutil/Namespace;->()V PLnl/adaptivity/xmlutil/Namespace;->()V Lnl/adaptivity/xmlutil/Namespace$Companion; HSPLnl/adaptivity/xmlutil/Namespace$Companion;->()V PLnl/adaptivity/xmlutil/Namespace$Companion;->()V HSPLnl/adaptivity/xmlutil/Namespace$Companion;->()V PLnl/adaptivity/xmlutil/Namespace$Companion;->()V HSPLnl/adaptivity/xmlutil/Namespace$Companion;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLnl/adaptivity/xmlutil/Namespace$Companion;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; Lnl/adaptivity/xmlutil/QNameSerializer; HSPLnl/adaptivity/xmlutil/QNameSerializer;->()V PLnl/adaptivity/xmlutil/QNameSerializer;->()V HSPLnl/adaptivity/xmlutil/QNameSerializer;->()V PLnl/adaptivity/xmlutil/QNameSerializer;->()V Lnl/adaptivity/xmlutil/QNameSerializer$descriptor$1; HSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->()V PLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->()V HSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->(I)V PLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->(I)V HSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V PLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V Lnl/adaptivity/xmlutil/XmlDeclMode; HSPLnl/adaptivity/xmlutil/XmlDeclMode;->()V PLnl/adaptivity/xmlutil/XmlDeclMode;->()V HSPLnl/adaptivity/xmlutil/XmlDeclMode;->(Ljava/lang/String;I)V PLnl/adaptivity/xmlutil/XmlDeclMode;->(Ljava/lang/String;I)V Lnl/adaptivity/xmlutil/XmlException; Lnl/adaptivity/xmlutil/core/XmlVersion; HSPLnl/adaptivity/xmlutil/core/XmlVersion;->()V PLnl/adaptivity/xmlutil/core/XmlVersion;->()V HSPLnl/adaptivity/xmlutil/core/XmlVersion;->(Ljava/lang/String;ILjava/lang/String;)V PLnl/adaptivity/xmlutil/core/XmlVersion;->(Ljava/lang/String;ILjava/lang/String;)V Lnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer; HSPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->()V PLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->()V PLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->access$getNamespacesSerializer$p()Lkotlinx/serialization/KSerializer; PLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->access$getNamespacesSerializer$p()Lkotlinx/serialization/KSerializer; Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy; HSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;I)V PLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;I)V HSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V PLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V HSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->copy$default(Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;Z)Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy; PLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->copy$default(Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;Z)Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy; Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder; HSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V PLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V HSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->build()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy; PLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->build()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy; HSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->ignoreUnknownChildren()V PLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->ignoreUnknownChildren()V Lnl/adaptivity/xmlutil/serialization/ElementSerializer; HSPLnl/adaptivity/xmlutil/serialization/ElementSerializer;->()V PLnl/adaptivity/xmlutil/serialization/ElementSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/ElementSerializer;->()V PLnl/adaptivity/xmlutil/serialization/ElementSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/ElementSerializer;->access$getAttrSerializer$p()Lkotlinx/serialization/KSerializer; PLnl/adaptivity/xmlutil/serialization/ElementSerializer;->access$getAttrSerializer$p()Lkotlinx/serialization/KSerializer; Lnl/adaptivity/xmlutil/serialization/NodeSerializer; HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->()V PLnl/adaptivity/xmlutil/serialization/NodeSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->()V PLnl/adaptivity/xmlutil/serialization/NodeSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; PLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getEd()Lkotlinx/serialization/descriptors/SerialDescriptor; PLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getEd()Lkotlinx/serialization/descriptors/SerialDescriptor; Lnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1; HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->()V PLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->()V HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->()V PLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->()V HSPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler; Lnl/adaptivity/xmlutil/serialization/XML; HSPLnl/adaptivity/xmlutil/serialization/XML;->()V PLnl/adaptivity/xmlutil/serialization/XML;->()V HSPLnl/adaptivity/xmlutil/serialization/XML;->(Lkotlin/jvm/functions/Function1;)V PLnl/adaptivity/xmlutil/serialization/XML;->(Lkotlin/jvm/functions/Function1;)V Lnl/adaptivity/xmlutil/serialization/XML$1; HSPLnl/adaptivity/xmlutil/serialization/XML$1;->()V PLnl/adaptivity/xmlutil/serialization/XML$1;->()V HSPLnl/adaptivity/xmlutil/serialization/XML$1;->(I)V PLnl/adaptivity/xmlutil/serialization/XML$1;->(I)V HSPLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V PLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V Lnl/adaptivity/xmlutil/serialization/XMLKt; HSPLnl/adaptivity/xmlutil/serialization/XMLKt;->()V PLnl/adaptivity/xmlutil/serialization/XMLKt;->()V HSPLnl/adaptivity/xmlutil/serialization/XMLKt;->access$getDefaultXmlModule$p()Lkotlinx/serialization/modules/SerializersModule; PLnl/adaptivity/xmlutil/serialization/XMLKt;->access$getDefaultXmlModule$p()Lkotlinx/serialization/modules/SerializersModule; Lnl/adaptivity/xmlutil/serialization/XmlConfig; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig;->()V PLnl/adaptivity/xmlutil/serialization/XmlConfig;->()V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig;->(Lnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;)V PLnl/adaptivity/xmlutil/serialization/XmlConfig;->(Lnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;)V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getDEFAULT_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0; PLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getDEFAULT_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getIGNORING_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0; PLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getIGNORING_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0; Lnl/adaptivity/xmlutil/serialization/XmlConfig$Builder; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->(ZLnl/adaptivity/xmlutil/XmlDeclMode;Ljava/lang/String;Ljava/lang/Boolean;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->(ZLnl/adaptivity/xmlutil/XmlDeclMode;Ljava/lang/String;Ljava/lang/Boolean;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getAutoPolymorphic()Ljava/lang/Boolean; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getAutoPolymorphic()Ljava/lang/Boolean; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getEncodeDefault()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getEncodeDefault()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getIndentString()Ljava/lang/String; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getIndentString()Ljava/lang/String; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getNilAttribute()Lkotlin/Pair; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getNilAttribute()Lkotlin/Pair; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getPolicy()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getPolicy()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getRepairNamespaces()Z PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getRepairNamespaces()Z HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getUnknownChildHandler()Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getUnknownChildHandler()Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlDeclMode()Lnl/adaptivity/xmlutil/XmlDeclMode; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlDeclMode()Lnl/adaptivity/xmlutil/XmlDeclMode; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlVersion()Lnl/adaptivity/xmlutil/core/XmlVersion; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlVersion()Lnl/adaptivity/xmlutil/core/XmlVersion; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isCollectingNSAttributes()Z PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isCollectingNSAttributes()Z HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isInlineCollapsed()Z PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isInlineCollapsed()Z HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->policyBuilder()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder; PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->policyBuilder()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder; HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setAutoPolymorphic(Ljava/lang/Boolean;)V PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setAutoPolymorphic(Ljava/lang/Boolean;)V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setIndent()V PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setIndent()V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setPolicy(Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setPolicy(Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlDeclMode()V PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlDeclMode()V HSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlVersion()V PLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlVersion()V Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy; Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault; HSPLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;->()V PLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;->()V HSPLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;->(Ljava/lang/String;I)V PLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;->(Ljava/lang/String;I)V Lnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer; HSPLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;->()V PLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;->()V HSPLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;->()V PLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;->()V Lnl/adaptivity/xmlutil/util/CompactFragment; Lnl/adaptivity/xmlutil/util/ICompactFragment; Lokhttp3/Address; HSPLokhttp3/Address;->(Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V PLokhttp3/Address;->(Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V HSPLokhttp3/Address;->certificatePinner()Lokhttp3/CertificatePinner; PLokhttp3/Address;->certificatePinner()Lokhttp3/CertificatePinner; HSPLokhttp3/Address;->connectionSpecs()Ljava/util/List; PLokhttp3/Address;->connectionSpecs()Ljava/util/List; HSPLokhttp3/Address;->dns()Lokhttp3/Dns; PLokhttp3/Address;->dns()Lokhttp3/Dns; HSPLokhttp3/Address;->hashCode()I PLokhttp3/Address;->hashCode()I HSPLokhttp3/Address;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier; PLokhttp3/Address;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier; HSPLokhttp3/Address;->protocols()Ljava/util/List; PLokhttp3/Address;->protocols()Ljava/util/List; HSPLokhttp3/Address;->proxy()Ljava/net/Proxy; PLokhttp3/Address;->proxy()Ljava/net/Proxy; HSPLokhttp3/Address;->proxySelector()Ljava/net/ProxySelector; PLokhttp3/Address;->proxySelector()Ljava/net/ProxySelector; HSPLokhttp3/Address;->socketFactory()Ljavax/net/SocketFactory; PLokhttp3/Address;->socketFactory()Ljavax/net/SocketFactory; HSPLokhttp3/Address;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory; PLokhttp3/Address;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory; HSPLokhttp3/Address;->url()Lokhttp3/HttpUrl; PLokhttp3/Address;->url()Lokhttp3/HttpUrl; Lokhttp3/Authenticator; HSPLokhttp3/Authenticator;->()V PLokhttp3/Authenticator;->()V Lokhttp3/Authenticator$Companion; HSPLokhttp3/Authenticator$Companion;->()V PLokhttp3/Authenticator$Companion;->()V HSPLokhttp3/Authenticator$Companion;->()V PLokhttp3/Authenticator$Companion;->()V Lokhttp3/Authenticator$Companion$AuthenticatorNone; HSPLokhttp3/Authenticator$Companion$AuthenticatorNone;->()V PLokhttp3/Authenticator$Companion$AuthenticatorNone;->()V Lokhttp3/Cache; HSPLokhttp3/Cache;->()V PLokhttp3/Cache;->()V HSPLokhttp3/Cache;->(Ljava/io/File;J)V PLokhttp3/Cache;->(Ljava/io/File;J)V HSPLokhttp3/Cache;->(Lokio/Path;JLokio/FileSystem;)V PLokhttp3/Cache;->(Lokio/Path;JLokio/FileSystem;)V HSPLokhttp3/Cache;->get$okhttp(Lokhttp3/Request;)Lokhttp3/Response; PLokhttp3/Cache;->get$okhttp(Lokhttp3/Request;)Lokhttp3/Response; HSPLokhttp3/Cache;->getWriteSuccessCount$okhttp()I PLokhttp3/Cache;->getWriteSuccessCount$okhttp()I HSPLokhttp3/Cache;->put$okhttp(Lokhttp3/Response;)Lokhttp3/internal/cache/CacheRequest; PLokhttp3/Cache;->put$okhttp(Lokhttp3/Response;)Lokhttp3/internal/cache/CacheRequest; HSPLokhttp3/Cache;->setWriteSuccessCount$okhttp(I)V PLokhttp3/Cache;->setWriteSuccessCount$okhttp(I)V HSPLokhttp3/Cache;->trackResponse$okhttp(Lokhttp3/internal/cache/CacheStrategy;)V PLokhttp3/Cache;->trackResponse$okhttp(Lokhttp3/internal/cache/CacheStrategy;)V Lokhttp3/Cache$Companion; HSPLokhttp3/Cache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/Cache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/Cache$Companion;->hasVaryAll(Lokhttp3/Response;)Z PLokhttp3/Cache$Companion;->hasVaryAll(Lokhttp3/Response;)Z HSPLokhttp3/Cache$Companion;->key(Lokhttp3/HttpUrl;)Ljava/lang/String; PLokhttp3/Cache$Companion;->key(Lokhttp3/HttpUrl;)Ljava/lang/String; HSPLokhttp3/Cache$Companion;->varyFields(Lokhttp3/Headers;)Ljava/util/Set; PLokhttp3/Cache$Companion;->varyFields(Lokhttp3/Headers;)Ljava/util/Set; HSPLokhttp3/Cache$Companion;->varyHeaders(Lokhttp3/Response;)Lokhttp3/Headers; PLokhttp3/Cache$Companion;->varyHeaders(Lokhttp3/Response;)Lokhttp3/Headers; Lokhttp3/Cache$Entry; HSPLokhttp3/Cache$Entry;->()V PLokhttp3/Cache$Entry;->()V HSPLokhttp3/Cache$Entry;->(Lokhttp3/Response;)V PLokhttp3/Cache$Entry;->(Lokhttp3/Response;)V HSPLokhttp3/Cache$Entry;->writeCertList(Lokio/BufferedSink;Ljava/util/List;)V PLokhttp3/Cache$Entry;->writeCertList(Lokio/BufferedSink;Ljava/util/List;)V HSPLokhttp3/Cache$Entry;->writeTo(Lokhttp3/internal/cache/DiskLruCache$Editor;)V PLokhttp3/Cache$Entry;->writeTo(Lokhttp3/internal/cache/DiskLruCache$Editor;)V Lokhttp3/Cache$Entry$Companion; HSPLokhttp3/Cache$Entry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/Cache$Entry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/Cache$RealCacheRequest; HSPLokhttp3/Cache$RealCacheRequest;->(Lokhttp3/Cache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V PLokhttp3/Cache$RealCacheRequest;->(Lokhttp3/Cache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V HSPLokhttp3/Cache$RealCacheRequest;->access$getEditor$p(Lokhttp3/Cache$RealCacheRequest;)Lokhttp3/internal/cache/DiskLruCache$Editor; PLokhttp3/Cache$RealCacheRequest;->access$getEditor$p(Lokhttp3/Cache$RealCacheRequest;)Lokhttp3/internal/cache/DiskLruCache$Editor; HSPLokhttp3/Cache$RealCacheRequest;->body()Lokio/Sink; PLokhttp3/Cache$RealCacheRequest;->body()Lokio/Sink; HSPLokhttp3/Cache$RealCacheRequest;->getDone()Z PLokhttp3/Cache$RealCacheRequest;->getDone()Z HSPLokhttp3/Cache$RealCacheRequest;->setDone(Z)V PLokhttp3/Cache$RealCacheRequest;->setDone(Z)V Lokhttp3/Cache$RealCacheRequest$1; HSPLokhttp3/Cache$RealCacheRequest$1;->(Lokhttp3/Cache;Lokhttp3/Cache$RealCacheRequest;Lokio/Sink;)V PLokhttp3/Cache$RealCacheRequest$1;->(Lokhttp3/Cache;Lokhttp3/Cache$RealCacheRequest;Lokio/Sink;)V HSPLokhttp3/Cache$RealCacheRequest$1;->close()V PLokhttp3/Cache$RealCacheRequest$1;->close()V Lokhttp3/CacheControl; HSPLokhttp3/CacheControl;->()V PLokhttp3/CacheControl;->()V HSPLokhttp3/CacheControl;->(ZZIIZZZIIZZZLjava/lang/String;)V PLokhttp3/CacheControl;->(ZZIIZZZIIZZZLjava/lang/String;)V HSPLokhttp3/CacheControl;->getHeaderValue$okhttp()Ljava/lang/String; PLokhttp3/CacheControl;->getHeaderValue$okhttp()Ljava/lang/String; HSPLokhttp3/CacheControl;->immutable()Z PLokhttp3/CacheControl;->immutable()Z HSPLokhttp3/CacheControl;->isPrivate()Z PLokhttp3/CacheControl;->isPrivate()Z HSPLokhttp3/CacheControl;->isPublic()Z PLokhttp3/CacheControl;->isPublic()Z HSPLokhttp3/CacheControl;->maxAgeSeconds()I PLokhttp3/CacheControl;->maxAgeSeconds()I HSPLokhttp3/CacheControl;->maxStaleSeconds()I PLokhttp3/CacheControl;->maxStaleSeconds()I HSPLokhttp3/CacheControl;->minFreshSeconds()I PLokhttp3/CacheControl;->minFreshSeconds()I HSPLokhttp3/CacheControl;->mustRevalidate()Z PLokhttp3/CacheControl;->mustRevalidate()Z HSPLokhttp3/CacheControl;->noCache()Z PLokhttp3/CacheControl;->noCache()Z HSPLokhttp3/CacheControl;->noStore()Z PLokhttp3/CacheControl;->noStore()Z HSPLokhttp3/CacheControl;->noTransform()Z PLokhttp3/CacheControl;->noTransform()Z HSPLokhttp3/CacheControl;->onlyIfCached()Z PLokhttp3/CacheControl;->onlyIfCached()Z HSPLokhttp3/CacheControl;->sMaxAgeSeconds()I PLokhttp3/CacheControl;->sMaxAgeSeconds()I HSPLokhttp3/CacheControl;->setHeaderValue$okhttp(Ljava/lang/String;)V PLokhttp3/CacheControl;->setHeaderValue$okhttp(Ljava/lang/String;)V Lokhttp3/CacheControl$Builder; HSPLokhttp3/CacheControl$Builder;->()V PLokhttp3/CacheControl$Builder;->()V HSPLokhttp3/CacheControl$Builder;->getImmutable$okhttp()Z PLokhttp3/CacheControl$Builder;->getImmutable$okhttp()Z HSPLokhttp3/CacheControl$Builder;->getMaxAgeSeconds$okhttp()I PLokhttp3/CacheControl$Builder;->getMaxAgeSeconds$okhttp()I HSPLokhttp3/CacheControl$Builder;->getMaxStaleSeconds$okhttp()I PLokhttp3/CacheControl$Builder;->getMaxStaleSeconds$okhttp()I HSPLokhttp3/CacheControl$Builder;->getMinFreshSeconds$okhttp()I PLokhttp3/CacheControl$Builder;->getMinFreshSeconds$okhttp()I HSPLokhttp3/CacheControl$Builder;->getNoCache$okhttp()Z PLokhttp3/CacheControl$Builder;->getNoCache$okhttp()Z HSPLokhttp3/CacheControl$Builder;->getNoStore$okhttp()Z PLokhttp3/CacheControl$Builder;->getNoStore$okhttp()Z HSPLokhttp3/CacheControl$Builder;->getNoTransform$okhttp()Z PLokhttp3/CacheControl$Builder;->getNoTransform$okhttp()Z HSPLokhttp3/CacheControl$Builder;->getOnlyIfCached$okhttp()Z PLokhttp3/CacheControl$Builder;->getOnlyIfCached$okhttp()Z HSPLokhttp3/CacheControl$Builder;->maxAge(ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder; PLokhttp3/CacheControl$Builder;->maxAge(ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder; HSPLokhttp3/CacheControl$Builder;->maxStale(ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder; PLokhttp3/CacheControl$Builder;->maxStale(ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder; HSPLokhttp3/CacheControl$Builder;->setMaxStaleSeconds$okhttp(I)V PLokhttp3/CacheControl$Builder;->setMaxStaleSeconds$okhttp(I)V HSPLokhttp3/CacheControl$Builder;->setNoCache$okhttp(Z)V PLokhttp3/CacheControl$Builder;->setNoCache$okhttp(Z)V HSPLokhttp3/CacheControl$Builder;->setOnlyIfCached$okhttp(Z)V PLokhttp3/CacheControl$Builder;->setOnlyIfCached$okhttp(Z)V Lokhttp3/CacheControl$Companion; HSPLokhttp3/CacheControl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/CacheControl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/CacheControl$Companion;->parse(Lokhttp3/Headers;)Lokhttp3/CacheControl; PLokhttp3/CacheControl$Companion;->parse(Lokhttp3/Headers;)Lokhttp3/CacheControl; Lokhttp3/Call; Lokhttp3/Call$Factory; Lokhttp3/Callback; Lokhttp3/CertificatePinner; HSPLokhttp3/CertificatePinner;->()V PLokhttp3/CertificatePinner;->()V HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V PLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/CertificatePinner;->check$okhttp(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V PLokhttp3/CertificatePinner;->check$okhttp(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V HSPLokhttp3/CertificatePinner;->findMatchingPins(Ljava/lang/String;)Ljava/util/List; PLokhttp3/CertificatePinner;->findMatchingPins(Ljava/lang/String;)Ljava/util/List; HSPLokhttp3/CertificatePinner;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner; PLokhttp3/CertificatePinner;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner; HSPLokhttp3/CertificatePinner;->hashCode()I PLokhttp3/CertificatePinner;->hashCode()I HSPLokhttp3/CertificatePinner;->withCertificateChainCleaner$okhttp(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner; PLokhttp3/CertificatePinner;->withCertificateChainCleaner$okhttp(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner; Lokhttp3/CertificatePinner$Builder; HSPLokhttp3/CertificatePinner$Builder;->()V PLokhttp3/CertificatePinner$Builder;->()V HSPLokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner; PLokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner; Lokhttp3/CertificatePinner$Companion; HSPLokhttp3/CertificatePinner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/CertificatePinner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/CipherSuite; HSPLokhttp3/CipherSuite;->()V PLokhttp3/CipherSuite;->()V HSPLokhttp3/CipherSuite;->(Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/CipherSuite;->(Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/CipherSuite;->access$getINSTANCES$cp()Ljava/util/Map; PLokhttp3/CipherSuite;->access$getINSTANCES$cp()Ljava/util/Map; HSPLokhttp3/CipherSuite;->access$getORDER_BY_NAME$cp()Ljava/util/Comparator; PLokhttp3/CipherSuite;->access$getORDER_BY_NAME$cp()Ljava/util/Comparator; HSPLokhttp3/CipherSuite;->javaName()Ljava/lang/String; PLokhttp3/CipherSuite;->javaName()Ljava/lang/String; Lokhttp3/CipherSuite$Companion; HSPLokhttp3/CipherSuite$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/CipherSuite$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;I)Lokhttp3/CipherSuite; PLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;I)Lokhttp3/CipherSuite; HSPLokhttp3/CipherSuite$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/CipherSuite; PLokhttp3/CipherSuite$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/CipherSuite; Lokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1; HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->()V PLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->()V HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I PLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/String;Ljava/lang/String;)I HPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/String;Ljava/lang/String;)I Lokhttp3/Connection; Lokhttp3/ConnectionPool; HSPLokhttp3/ConnectionPool;->()V PLokhttp3/ConnectionPool;->()V HSPLokhttp3/ConnectionPool;->(IJLjava/util/concurrent/TimeUnit;)V PLokhttp3/ConnectionPool;->(IJLjava/util/concurrent/TimeUnit;)V HSPLokhttp3/ConnectionPool;->(Lokhttp3/internal/connection/RealConnectionPool;)V PLokhttp3/ConnectionPool;->(Lokhttp3/internal/connection/RealConnectionPool;)V HSPLokhttp3/ConnectionPool;->getDelegate$okhttp()Lokhttp3/internal/connection/RealConnectionPool; PLokhttp3/ConnectionPool;->getDelegate$okhttp()Lokhttp3/internal/connection/RealConnectionPool; Lokhttp3/ConnectionSpec; HSPLokhttp3/ConnectionSpec;->()V PLokhttp3/ConnectionSpec;->()V HSPLokhttp3/ConnectionSpec;->(ZZ[Ljava/lang/String;[Ljava/lang/String;)V PLokhttp3/ConnectionSpec;->(ZZ[Ljava/lang/String;[Ljava/lang/String;)V HSPLokhttp3/ConnectionSpec;->access$getTlsVersionsAsString$p(Lokhttp3/ConnectionSpec;)[Ljava/lang/String; PLokhttp3/ConnectionSpec;->access$getTlsVersionsAsString$p(Lokhttp3/ConnectionSpec;)[Ljava/lang/String; HSPLokhttp3/ConnectionSpec;->apply$okhttp(Ljavax/net/ssl/SSLSocket;Z)V PLokhttp3/ConnectionSpec;->apply$okhttp(Ljavax/net/ssl/SSLSocket;Z)V HSPLokhttp3/ConnectionSpec;->cipherSuites()Ljava/util/List; PLokhttp3/ConnectionSpec;->cipherSuites()Ljava/util/List; HSPLokhttp3/ConnectionSpec;->getCipherSuitesAsString$okhttp()[Ljava/lang/String; PLokhttp3/ConnectionSpec;->getCipherSuitesAsString$okhttp()[Ljava/lang/String; HSPLokhttp3/ConnectionSpec;->hashCode()I PLokhttp3/ConnectionSpec;->hashCode()I HSPLokhttp3/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z PLokhttp3/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z HSPLokhttp3/ConnectionSpec;->isTls()Z PLokhttp3/ConnectionSpec;->isTls()Z HSPLokhttp3/ConnectionSpec;->supportsTlsExtensions()Z PLokhttp3/ConnectionSpec;->supportsTlsExtensions()Z HSPLokhttp3/ConnectionSpec;->tlsVersions()Ljava/util/List; PLokhttp3/ConnectionSpec;->tlsVersions()Ljava/util/List; Lokhttp3/ConnectionSpec$Builder; HSPLokhttp3/ConnectionSpec$Builder;->(Lokhttp3/ConnectionSpec;)V PLokhttp3/ConnectionSpec$Builder;->(Lokhttp3/ConnectionSpec;)V HSPLokhttp3/ConnectionSpec$Builder;->(Z)V PLokhttp3/ConnectionSpec$Builder;->(Z)V HSPLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec; PLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec; HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; PLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder; PLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder; HSPLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lokhttp3/ConnectionSpec$Builder; PLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lokhttp3/ConnectionSpec$Builder; HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; PLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder; PLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder; Lokhttp3/ConnectionSpec$Companion; HSPLokhttp3/ConnectionSpec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/ConnectionSpec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/Cookie; HSPLokhttp3/Cookie;->()V PLokhttp3/Cookie;->()V Lokhttp3/Cookie$Companion; HSPLokhttp3/Cookie$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/Cookie$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/Cookie$Companion;->parseAll(Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List; PLokhttp3/Cookie$Companion;->parseAll(Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List; Lokhttp3/CookieJar; HSPLokhttp3/CookieJar;->()V PLokhttp3/CookieJar;->()V Lokhttp3/CookieJar$Companion; HSPLokhttp3/CookieJar$Companion;->()V PLokhttp3/CookieJar$Companion;->()V HSPLokhttp3/CookieJar$Companion;->()V PLokhttp3/CookieJar$Companion;->()V Lokhttp3/CookieJar$Companion$NoCookies; HSPLokhttp3/CookieJar$Companion$NoCookies;->()V PLokhttp3/CookieJar$Companion$NoCookies;->()V Lokhttp3/Dispatcher; HSPLokhttp3/Dispatcher;->()V PLokhttp3/Dispatcher;->()V HSPLokhttp3/Dispatcher;->enqueue$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V PLokhttp3/Dispatcher;->enqueue$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V HSPLokhttp3/Dispatcher;->executorService()Ljava/util/concurrent/ExecutorService; PLokhttp3/Dispatcher;->executorService()Ljava/util/concurrent/ExecutorService; HSPLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V PLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V HSPLokhttp3/Dispatcher;->finished(Ljava/util/ArrayDeque;Ljava/lang/Object;)V PLokhttp3/Dispatcher;->finished(Ljava/util/ArrayDeque;Ljava/lang/Object;)V HSPLokhttp3/Dispatcher;->promoteAndExecute()Z PLokhttp3/Dispatcher;->promoteAndExecute()Z HSPLokhttp3/Dispatcher;->runningCallsCount()I PLokhttp3/Dispatcher;->runningCallsCount()I Lokhttp3/Dns; HSPLokhttp3/Dns;->()V PLokhttp3/Dns;->()V Lokhttp3/Dns$Companion; HSPLokhttp3/Dns$Companion;->()V PLokhttp3/Dns$Companion;->()V HSPLokhttp3/Dns$Companion;->()V PLokhttp3/Dns$Companion;->()V Lokhttp3/Dns$Companion$DnsSystem; HSPLokhttp3/Dns$Companion$DnsSystem;->()V PLokhttp3/Dns$Companion$DnsSystem;->()V HSPLokhttp3/Dns$Companion$DnsSystem;->lookup(Ljava/lang/String;)Ljava/util/List; PLokhttp3/Dns$Companion$DnsSystem;->lookup(Ljava/lang/String;)Ljava/util/List; Lokhttp3/EventListener; HSPLokhttp3/EventListener;->()V PLokhttp3/EventListener;->()V HSPLokhttp3/EventListener;->()V PLokhttp3/EventListener;->()V HSPLokhttp3/EventListener;->cacheMiss(Lokhttp3/Call;)V PLokhttp3/EventListener;->cacheMiss(Lokhttp3/Call;)V HSPLokhttp3/EventListener;->callEnd(Lokhttp3/Call;)V PLokhttp3/EventListener;->callEnd(Lokhttp3/Call;)V HSPLokhttp3/EventListener;->callStart(Lokhttp3/Call;)V PLokhttp3/EventListener;->callStart(Lokhttp3/Call;)V HSPLokhttp3/EventListener;->connectEnd(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;)V PLokhttp3/EventListener;->connectEnd(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;)V HSPLokhttp3/EventListener;->connectFailed(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;Ljava/io/IOException;)V PLokhttp3/EventListener;->connectFailed(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;Ljava/io/IOException;)V HSPLokhttp3/EventListener;->connectStart(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;)V PLokhttp3/EventListener;->connectStart(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;)V HSPLokhttp3/EventListener;->connectionAcquired(Lokhttp3/Call;Lokhttp3/Connection;)V PLokhttp3/EventListener;->connectionAcquired(Lokhttp3/Call;Lokhttp3/Connection;)V HSPLokhttp3/EventListener;->connectionReleased(Lokhttp3/Call;Lokhttp3/Connection;)V PLokhttp3/EventListener;->connectionReleased(Lokhttp3/Call;Lokhttp3/Connection;)V HSPLokhttp3/EventListener;->dnsEnd(Lokhttp3/Call;Ljava/lang/String;Ljava/util/List;)V PLokhttp3/EventListener;->dnsEnd(Lokhttp3/Call;Ljava/lang/String;Ljava/util/List;)V HSPLokhttp3/EventListener;->dnsStart(Lokhttp3/Call;Ljava/lang/String;)V PLokhttp3/EventListener;->dnsStart(Lokhttp3/Call;Ljava/lang/String;)V HSPLokhttp3/EventListener;->proxySelectEnd(Lokhttp3/Call;Lokhttp3/HttpUrl;Ljava/util/List;)V PLokhttp3/EventListener;->proxySelectEnd(Lokhttp3/Call;Lokhttp3/HttpUrl;Ljava/util/List;)V HSPLokhttp3/EventListener;->proxySelectStart(Lokhttp3/Call;Lokhttp3/HttpUrl;)V PLokhttp3/EventListener;->proxySelectStart(Lokhttp3/Call;Lokhttp3/HttpUrl;)V HSPLokhttp3/EventListener;->requestHeadersEnd(Lokhttp3/Call;Lokhttp3/Request;)V PLokhttp3/EventListener;->requestHeadersEnd(Lokhttp3/Call;Lokhttp3/Request;)V HSPLokhttp3/EventListener;->requestHeadersStart(Lokhttp3/Call;)V PLokhttp3/EventListener;->requestHeadersStart(Lokhttp3/Call;)V HSPLokhttp3/EventListener;->responseBodyEnd(Lokhttp3/Call;J)V PLokhttp3/EventListener;->responseBodyEnd(Lokhttp3/Call;J)V HSPLokhttp3/EventListener;->responseBodyStart(Lokhttp3/Call;)V PLokhttp3/EventListener;->responseBodyStart(Lokhttp3/Call;)V HSPLokhttp3/EventListener;->responseHeadersEnd(Lokhttp3/Call;Lokhttp3/Response;)V PLokhttp3/EventListener;->responseHeadersEnd(Lokhttp3/Call;Lokhttp3/Response;)V HSPLokhttp3/EventListener;->responseHeadersStart(Lokhttp3/Call;)V PLokhttp3/EventListener;->responseHeadersStart(Lokhttp3/Call;)V HSPLokhttp3/EventListener;->secureConnectEnd(Lokhttp3/Call;Lokhttp3/Handshake;)V PLokhttp3/EventListener;->secureConnectEnd(Lokhttp3/Call;Lokhttp3/Handshake;)V HSPLokhttp3/EventListener;->secureConnectStart(Lokhttp3/Call;)V PLokhttp3/EventListener;->secureConnectStart(Lokhttp3/Call;)V Lokhttp3/EventListener$Companion; HSPLokhttp3/EventListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/EventListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/EventListener$Companion$NONE$1; HSPLokhttp3/EventListener$Companion$NONE$1;->()V PLokhttp3/EventListener$Companion$NONE$1;->()V Lokhttp3/EventListener$Factory; Lokhttp3/FormBody; HSPLokhttp3/FormBody;->()V PLokhttp3/FormBody;->()V HSPLokhttp3/FormBody;->(Ljava/util/List;Ljava/util/List;)V PLokhttp3/FormBody;->(Ljava/util/List;Ljava/util/List;)V Lokhttp3/FormBody$Builder; HSPLokhttp3/FormBody$Builder;->(Ljava/nio/charset/Charset;)V PLokhttp3/FormBody$Builder;->(Ljava/nio/charset/Charset;)V HSPLokhttp3/FormBody$Builder;->(Ljava/nio/charset/Charset;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/FormBody$Builder;->(Ljava/nio/charset/Charset;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/FormBody$Builder;->build()Lokhttp3/FormBody; PLokhttp3/FormBody$Builder;->build()Lokhttp3/FormBody; Lokhttp3/FormBody$Companion; HSPLokhttp3/FormBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/FormBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/Handshake; HSPLokhttp3/Handshake;->()V PLokhttp3/Handshake;->()V HSPLokhttp3/Handshake;->(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V PLokhttp3/Handshake;->(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V HSPLokhttp3/Handshake;->cipherSuite()Lokhttp3/CipherSuite; PLokhttp3/Handshake;->cipherSuite()Lokhttp3/CipherSuite; HSPLokhttp3/Handshake;->localCertificates()Ljava/util/List; PLokhttp3/Handshake;->localCertificates()Ljava/util/List; HSPLokhttp3/Handshake;->peerCertificates()Ljava/util/List; PLokhttp3/Handshake;->peerCertificates()Ljava/util/List; HSPLokhttp3/Handshake;->tlsVersion()Lokhttp3/TlsVersion; PLokhttp3/Handshake;->tlsVersion()Lokhttp3/TlsVersion; Lokhttp3/Handshake$Companion; HSPLokhttp3/Handshake$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/Handshake$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; PLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; Lokhttp3/Handshake$Companion$handshake$1; HSPLokhttp3/Handshake$Companion$handshake$1;->(Ljava/util/List;)V PLokhttp3/Handshake$Companion$handshake$1;->(Ljava/util/List;)V HSPLokhttp3/Handshake$Companion$handshake$1;->invoke()Ljava/lang/Object; PLokhttp3/Handshake$Companion$handshake$1;->invoke()Ljava/lang/Object; Lokhttp3/Handshake$peerCertificates$2; HSPLokhttp3/Handshake$peerCertificates$2;->(Lkotlin/jvm/functions/Function0;)V PLokhttp3/Handshake$peerCertificates$2;->(Lkotlin/jvm/functions/Function0;)V HSPLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/lang/Object; PLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/lang/Object; HSPLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/util/List; PLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/util/List; Lokhttp3/Headers; HSPLokhttp3/Headers;->()V PLokhttp3/Headers;->()V HSPLokhttp3/Headers;->([Ljava/lang/String;)V PLokhttp3/Headers;->([Ljava/lang/String;)V HSPLokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String; PLokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/Headers;->getNamesAndValues$okhttp()[Ljava/lang/String; PLokhttp3/Headers;->getNamesAndValues$okhttp()[Ljava/lang/String; HSPLokhttp3/Headers;->size()I PLokhttp3/Headers;->size()I HSPLokhttp3/Headers;->values(Ljava/lang/String;)Ljava/util/List; PLokhttp3/Headers;->values(Ljava/lang/String;)Ljava/util/List; Lokhttp3/Headers$Builder; HSPLokhttp3/Headers$Builder;->()V PLokhttp3/Headers$Builder;->()V HSPLokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/Headers$Builder;->addLenient$okhttp(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/Headers$Builder;->addLenient$okhttp(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/Headers$Builder;->getNamesAndValues$okhttp()Ljava/util/List; PLokhttp3/Headers$Builder;->getNamesAndValues$okhttp()Ljava/util/List; HSPLokhttp3/Headers$Builder;->removeAll(Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/Headers$Builder;->removeAll(Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/Headers$Builder;->set(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/Headers$Builder;->set(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; Lokhttp3/Headers$Companion; HSPLokhttp3/Headers$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/Headers$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers; PLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers; Lokhttp3/HttpUrl; HSPLokhttp3/HttpUrl;->()V PLokhttp3/HttpUrl;->()V HSPLokhttp3/HttpUrl;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V PLokhttp3/HttpUrl;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V HSPLokhttp3/HttpUrl;->encodedFragment()Ljava/lang/String; PLokhttp3/HttpUrl;->encodedFragment()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String; PLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String; PLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedPathSegments()Ljava/util/List; PLokhttp3/HttpUrl;->encodedPathSegments()Ljava/util/List; HSPLokhttp3/HttpUrl;->encodedQuery()Ljava/lang/String; PLokhttp3/HttpUrl;->encodedQuery()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedUsername()Ljava/lang/String; PLokhttp3/HttpUrl;->encodedUsername()Ljava/lang/String; HSPLokhttp3/HttpUrl;->hashCode()I PLokhttp3/HttpUrl;->hashCode()I HSPLokhttp3/HttpUrl;->host()Ljava/lang/String; PLokhttp3/HttpUrl;->host()Ljava/lang/String; HSPLokhttp3/HttpUrl;->isHttps()Z PLokhttp3/HttpUrl;->isHttps()Z HSPLokhttp3/HttpUrl;->newBuilder()Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl;->newBuilder()Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl;->newBuilder(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl;->newBuilder(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl;->port()I PLokhttp3/HttpUrl;->port()I HSPLokhttp3/HttpUrl;->redact()Ljava/lang/String; PLokhttp3/HttpUrl;->redact()Ljava/lang/String; HSPLokhttp3/HttpUrl;->scheme()Ljava/lang/String; PLokhttp3/HttpUrl;->scheme()Ljava/lang/String; HSPLokhttp3/HttpUrl;->toString()Ljava/lang/String; PLokhttp3/HttpUrl;->toString()Ljava/lang/String; HSPLokhttp3/HttpUrl;->uri()Ljava/net/URI; PLokhttp3/HttpUrl;->uri()Ljava/net/URI; Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->()V PLokhttp3/HttpUrl$Builder;->()V HSPLokhttp3/HttpUrl$Builder;->()V PLokhttp3/HttpUrl$Builder;->()V HSPLokhttp3/HttpUrl$Builder;->build()Lokhttp3/HttpUrl; PLokhttp3/HttpUrl$Builder;->build()Lokhttp3/HttpUrl; HSPLokhttp3/HttpUrl$Builder;->encodedQuery(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->encodedQuery(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->getEncodedPathSegments$okhttp()Ljava/util/List; PLokhttp3/HttpUrl$Builder;->getEncodedPathSegments$okhttp()Ljava/util/List; HSPLokhttp3/HttpUrl$Builder;->host(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->host(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->isDot(Ljava/lang/String;)Z PLokhttp3/HttpUrl$Builder;->isDot(Ljava/lang/String;)Z HSPLokhttp3/HttpUrl$Builder;->isDotDot(Ljava/lang/String;)Z PLokhttp3/HttpUrl$Builder;->isDotDot(Ljava/lang/String;)Z HSPLokhttp3/HttpUrl$Builder;->parse$okhttp(Lokhttp3/HttpUrl;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->parse$okhttp(Lokhttp3/HttpUrl;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->password(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->password(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->port(I)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->port(I)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->push(Ljava/lang/String;IIZZ)V PLokhttp3/HttpUrl$Builder;->push(Ljava/lang/String;IIZZ)V HSPLokhttp3/HttpUrl$Builder;->reencodeForUri$okhttp()Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->reencodeForUri$okhttp()Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->resolvePath(IILjava/lang/String;)V PLokhttp3/HttpUrl$Builder;->resolvePath(IILjava/lang/String;)V HSPLokhttp3/HttpUrl$Builder;->scheme(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->scheme(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; HSPLokhttp3/HttpUrl$Builder;->setEncodedFragment$okhttp(Ljava/lang/String;)V PLokhttp3/HttpUrl$Builder;->setEncodedFragment$okhttp(Ljava/lang/String;)V HSPLokhttp3/HttpUrl$Builder;->setEncodedPassword$okhttp(Ljava/lang/String;)V PLokhttp3/HttpUrl$Builder;->setEncodedPassword$okhttp(Ljava/lang/String;)V HSPLokhttp3/HttpUrl$Builder;->setEncodedUsername$okhttp(Ljava/lang/String;)V PLokhttp3/HttpUrl$Builder;->setEncodedUsername$okhttp(Ljava/lang/String;)V HSPLokhttp3/HttpUrl$Builder;->setHost$okhttp(Ljava/lang/String;)V PLokhttp3/HttpUrl$Builder;->setHost$okhttp(Ljava/lang/String;)V HSPLokhttp3/HttpUrl$Builder;->setPort$okhttp(I)V PLokhttp3/HttpUrl$Builder;->setPort$okhttp(I)V HSPLokhttp3/HttpUrl$Builder;->setScheme$okhttp(Ljava/lang/String;)V PLokhttp3/HttpUrl$Builder;->setScheme$okhttp(Ljava/lang/String;)V HSPLokhttp3/HttpUrl$Builder;->toString()Ljava/lang/String; PLokhttp3/HttpUrl$Builder;->toString()Ljava/lang/String; HSPLokhttp3/HttpUrl$Builder;->username(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; PLokhttp3/HttpUrl$Builder;->username(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder; Lokhttp3/HttpUrl$Builder$Companion; HSPLokhttp3/HttpUrl$Builder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/HttpUrl$Builder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/HttpUrl$Builder$Companion;->access$portColonOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I PLokhttp3/HttpUrl$Builder$Companion;->access$portColonOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I HSPLokhttp3/HttpUrl$Builder$Companion;->access$schemeDelimiterOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I PLokhttp3/HttpUrl$Builder$Companion;->access$schemeDelimiterOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I HSPLokhttp3/HttpUrl$Builder$Companion;->access$slashCount(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I PLokhttp3/HttpUrl$Builder$Companion;->access$slashCount(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I Lokhttp3/HttpUrl$Companion; HSPLokhttp3/HttpUrl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/HttpUrl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;ILjava/lang/Object;)Ljava/lang/String; PLokhttp3/HttpUrl$Companion;->canonicalize$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;ILjava/lang/Object;)Ljava/lang/String; HSPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp(Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;)Ljava/lang/String; PLokhttp3/HttpUrl$Companion;->canonicalize$okhttp(Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;)Ljava/lang/String; HSPLokhttp3/HttpUrl$Companion;->defaultPort(Ljava/lang/String;)I PLokhttp3/HttpUrl$Companion;->defaultPort(Ljava/lang/String;)I HSPLokhttp3/HttpUrl$Companion;->get(Ljava/lang/String;)Lokhttp3/HttpUrl; PLokhttp3/HttpUrl$Companion;->get(Ljava/lang/String;)Lokhttp3/HttpUrl; HSPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IIZILjava/lang/Object;)Ljava/lang/String; PLokhttp3/HttpUrl$Companion;->percentDecode$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IIZILjava/lang/Object;)Ljava/lang/String; HSPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp(Ljava/lang/String;IIZ)Ljava/lang/String; PLokhttp3/HttpUrl$Companion;->percentDecode$okhttp(Ljava/lang/String;IIZ)Ljava/lang/String; HSPLokhttp3/HttpUrl$Companion;->toPathString$okhttp(Ljava/util/List;Ljava/lang/StringBuilder;)V PLokhttp3/HttpUrl$Companion;->toPathString$okhttp(Ljava/util/List;Ljava/lang/StringBuilder;)V Lokhttp3/Interceptor; Lokhttp3/Interceptor$Chain; Lokhttp3/MediaType; HSPLokhttp3/MediaType;->()V PLokhttp3/MediaType;->()V HSPLokhttp3/MediaType;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V PLokhttp3/MediaType;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V Lokhttp3/MediaType$Companion; HSPLokhttp3/MediaType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/MediaType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType; PLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType; HSPLokhttp3/MediaType$Companion;->parse(Ljava/lang/String;)Lokhttp3/MediaType; PLokhttp3/MediaType$Companion;->parse(Ljava/lang/String;)Lokhttp3/MediaType; Lokhttp3/OkHttpClient; HSPLokhttp3/OkHttpClient;->()V PLokhttp3/OkHttpClient;->()V HSPLokhttp3/OkHttpClient;->(Lokhttp3/OkHttpClient$Builder;)V PLokhttp3/OkHttpClient;->(Lokhttp3/OkHttpClient$Builder;)V HSPLokhttp3/OkHttpClient;->access$getDEFAULT_CONNECTION_SPECS$cp()Ljava/util/List; PLokhttp3/OkHttpClient;->access$getDEFAULT_CONNECTION_SPECS$cp()Ljava/util/List; HSPLokhttp3/OkHttpClient;->access$getDEFAULT_PROTOCOLS$cp()Ljava/util/List; PLokhttp3/OkHttpClient;->access$getDEFAULT_PROTOCOLS$cp()Ljava/util/List; HSPLokhttp3/OkHttpClient;->access$getSslSocketFactoryOrNull$p(Lokhttp3/OkHttpClient;)Ljavax/net/ssl/SSLSocketFactory; PLokhttp3/OkHttpClient;->access$getSslSocketFactoryOrNull$p(Lokhttp3/OkHttpClient;)Ljavax/net/ssl/SSLSocketFactory; HSPLokhttp3/OkHttpClient;->authenticator()Lokhttp3/Authenticator; PLokhttp3/OkHttpClient;->authenticator()Lokhttp3/Authenticator; HSPLokhttp3/OkHttpClient;->cache()Lokhttp3/Cache; PLokhttp3/OkHttpClient;->cache()Lokhttp3/Cache; HSPLokhttp3/OkHttpClient;->callTimeoutMillis()I PLokhttp3/OkHttpClient;->callTimeoutMillis()I HSPLokhttp3/OkHttpClient;->certificateChainCleaner()Lokhttp3/internal/tls/CertificateChainCleaner; PLokhttp3/OkHttpClient;->certificateChainCleaner()Lokhttp3/internal/tls/CertificateChainCleaner; HSPLokhttp3/OkHttpClient;->certificatePinner()Lokhttp3/CertificatePinner; PLokhttp3/OkHttpClient;->certificatePinner()Lokhttp3/CertificatePinner; HSPLokhttp3/OkHttpClient;->connectTimeoutMillis()I PLokhttp3/OkHttpClient;->connectTimeoutMillis()I HSPLokhttp3/OkHttpClient;->connectionPool()Lokhttp3/ConnectionPool; PLokhttp3/OkHttpClient;->connectionPool()Lokhttp3/ConnectionPool; HSPLokhttp3/OkHttpClient;->connectionSpecs()Ljava/util/List; PLokhttp3/OkHttpClient;->connectionSpecs()Ljava/util/List; HSPLokhttp3/OkHttpClient;->cookieJar()Lokhttp3/CookieJar; PLokhttp3/OkHttpClient;->cookieJar()Lokhttp3/CookieJar; HSPLokhttp3/OkHttpClient;->dispatcher()Lokhttp3/Dispatcher; PLokhttp3/OkHttpClient;->dispatcher()Lokhttp3/Dispatcher; HSPLokhttp3/OkHttpClient;->dns()Lokhttp3/Dns; PLokhttp3/OkHttpClient;->dns()Lokhttp3/Dns; HSPLokhttp3/OkHttpClient;->eventListenerFactory()Lokhttp3/EventListener$Factory; PLokhttp3/OkHttpClient;->eventListenerFactory()Lokhttp3/EventListener$Factory; HSPLokhttp3/OkHttpClient;->fastFallback()Z PLokhttp3/OkHttpClient;->fastFallback()Z HSPLokhttp3/OkHttpClient;->followRedirects()Z PLokhttp3/OkHttpClient;->followRedirects()Z HSPLokhttp3/OkHttpClient;->followSslRedirects()Z PLokhttp3/OkHttpClient;->followSslRedirects()Z HSPLokhttp3/OkHttpClient;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase; PLokhttp3/OkHttpClient;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase; HSPLokhttp3/OkHttpClient;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner; PLokhttp3/OkHttpClient;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner; HSPLokhttp3/OkHttpClient;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier; PLokhttp3/OkHttpClient;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier; HSPLokhttp3/OkHttpClient;->interceptors()Ljava/util/List; PLokhttp3/OkHttpClient;->interceptors()Ljava/util/List; HSPLokhttp3/OkHttpClient;->minWebSocketMessageToCompress()J PLokhttp3/OkHttpClient;->minWebSocketMessageToCompress()J HSPLokhttp3/OkHttpClient;->networkInterceptors()Ljava/util/List; PLokhttp3/OkHttpClient;->networkInterceptors()Ljava/util/List; HSPLokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/Call; PLokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/Call; HSPLokhttp3/OkHttpClient;->pingIntervalMillis()I PLokhttp3/OkHttpClient;->pingIntervalMillis()I HSPLokhttp3/OkHttpClient;->protocols()Ljava/util/List; PLokhttp3/OkHttpClient;->protocols()Ljava/util/List; HSPLokhttp3/OkHttpClient;->proxy()Ljava/net/Proxy; PLokhttp3/OkHttpClient;->proxy()Ljava/net/Proxy; HSPLokhttp3/OkHttpClient;->proxyAuthenticator()Lokhttp3/Authenticator; PLokhttp3/OkHttpClient;->proxyAuthenticator()Lokhttp3/Authenticator; HSPLokhttp3/OkHttpClient;->proxySelector()Ljava/net/ProxySelector; PLokhttp3/OkHttpClient;->proxySelector()Ljava/net/ProxySelector; HSPLokhttp3/OkHttpClient;->readTimeoutMillis()I PLokhttp3/OkHttpClient;->readTimeoutMillis()I HSPLokhttp3/OkHttpClient;->retryOnConnectionFailure()Z PLokhttp3/OkHttpClient;->retryOnConnectionFailure()Z HSPLokhttp3/OkHttpClient;->socketFactory()Ljavax/net/SocketFactory; PLokhttp3/OkHttpClient;->socketFactory()Ljavax/net/SocketFactory; HSPLokhttp3/OkHttpClient;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory; PLokhttp3/OkHttpClient;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory; HSPLokhttp3/OkHttpClient;->writeTimeoutMillis()I PLokhttp3/OkHttpClient;->writeTimeoutMillis()I HSPLokhttp3/OkHttpClient;->x509TrustManager()Ljavax/net/ssl/X509TrustManager; PLokhttp3/OkHttpClient;->x509TrustManager()Ljavax/net/ssl/X509TrustManager; Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->()V PLokhttp3/OkHttpClient$Builder;->()V HSPLokhttp3/OkHttpClient$Builder;->(Lokhttp3/OkHttpClient;)V PLokhttp3/OkHttpClient$Builder;->(Lokhttp3/OkHttpClient;)V HSPLokhttp3/OkHttpClient$Builder;->addInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->addInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->addNetworkInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->addNetworkInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->cache(Lokhttp3/Cache;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->cache(Lokhttp3/Cache;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->callTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->callTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->connectTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->connectTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->cookieJar(Lokhttp3/CookieJar;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->cookieJar(Lokhttp3/CookieJar;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->dns(Lokhttp3/Dns;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->dns(Lokhttp3/Dns;)Lokhttp3/OkHttpClient$Builder; HSPLokhttp3/OkHttpClient$Builder;->getAuthenticator$okhttp()Lokhttp3/Authenticator; PLokhttp3/OkHttpClient$Builder;->getAuthenticator$okhttp()Lokhttp3/Authenticator; HSPLokhttp3/OkHttpClient$Builder;->getCache$okhttp()Lokhttp3/Cache; PLokhttp3/OkHttpClient$Builder;->getCache$okhttp()Lokhttp3/Cache; HSPLokhttp3/OkHttpClient$Builder;->getCallTimeout$okhttp()I PLokhttp3/OkHttpClient$Builder;->getCallTimeout$okhttp()I HSPLokhttp3/OkHttpClient$Builder;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner; PLokhttp3/OkHttpClient$Builder;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner; HSPLokhttp3/OkHttpClient$Builder;->getCertificatePinner$okhttp()Lokhttp3/CertificatePinner; PLokhttp3/OkHttpClient$Builder;->getCertificatePinner$okhttp()Lokhttp3/CertificatePinner; HSPLokhttp3/OkHttpClient$Builder;->getConnectTimeout$okhttp()I PLokhttp3/OkHttpClient$Builder;->getConnectTimeout$okhttp()I HSPLokhttp3/OkHttpClient$Builder;->getConnectionPool$okhttp()Lokhttp3/ConnectionPool; PLokhttp3/OkHttpClient$Builder;->getConnectionPool$okhttp()Lokhttp3/ConnectionPool; HSPLokhttp3/OkHttpClient$Builder;->getConnectionSpecs$okhttp()Ljava/util/List; PLokhttp3/OkHttpClient$Builder;->getConnectionSpecs$okhttp()Ljava/util/List; HSPLokhttp3/OkHttpClient$Builder;->getCookieJar$okhttp()Lokhttp3/CookieJar; PLokhttp3/OkHttpClient$Builder;->getCookieJar$okhttp()Lokhttp3/CookieJar; HSPLokhttp3/OkHttpClient$Builder;->getDispatcher$okhttp()Lokhttp3/Dispatcher; PLokhttp3/OkHttpClient$Builder;->getDispatcher$okhttp()Lokhttp3/Dispatcher; HSPLokhttp3/OkHttpClient$Builder;->getDns$okhttp()Lokhttp3/Dns; PLokhttp3/OkHttpClient$Builder;->getDns$okhttp()Lokhttp3/Dns; HSPLokhttp3/OkHttpClient$Builder;->getEventListenerFactory$okhttp()Lokhttp3/EventListener$Factory; PLokhttp3/OkHttpClient$Builder;->getEventListenerFactory$okhttp()Lokhttp3/EventListener$Factory; HSPLokhttp3/OkHttpClient$Builder;->getFastFallback$okhttp()Z PLokhttp3/OkHttpClient$Builder;->getFastFallback$okhttp()Z HSPLokhttp3/OkHttpClient$Builder;->getFollowRedirects$okhttp()Z PLokhttp3/OkHttpClient$Builder;->getFollowRedirects$okhttp()Z HSPLokhttp3/OkHttpClient$Builder;->getFollowSslRedirects$okhttp()Z PLokhttp3/OkHttpClient$Builder;->getFollowSslRedirects$okhttp()Z HSPLokhttp3/OkHttpClient$Builder;->getHostnameVerifier$okhttp()Ljavax/net/ssl/HostnameVerifier; PLokhttp3/OkHttpClient$Builder;->getHostnameVerifier$okhttp()Ljavax/net/ssl/HostnameVerifier; HSPLokhttp3/OkHttpClient$Builder;->getInterceptors$okhttp()Ljava/util/List; PLokhttp3/OkHttpClient$Builder;->getInterceptors$okhttp()Ljava/util/List; HSPLokhttp3/OkHttpClient$Builder;->getMinWebSocketMessageToCompress$okhttp()J PLokhttp3/OkHttpClient$Builder;->getMinWebSocketMessageToCompress$okhttp()J HSPLokhttp3/OkHttpClient$Builder;->getNetworkInterceptors$okhttp()Ljava/util/List; PLokhttp3/OkHttpClient$Builder;->getNetworkInterceptors$okhttp()Ljava/util/List; HSPLokhttp3/OkHttpClient$Builder;->getPingInterval$okhttp()I PLokhttp3/OkHttpClient$Builder;->getPingInterval$okhttp()I HSPLokhttp3/OkHttpClient$Builder;->getProtocols$okhttp()Ljava/util/List; PLokhttp3/OkHttpClient$Builder;->getProtocols$okhttp()Ljava/util/List; HSPLokhttp3/OkHttpClient$Builder;->getProxy$okhttp()Ljava/net/Proxy; PLokhttp3/OkHttpClient$Builder;->getProxy$okhttp()Ljava/net/Proxy; HSPLokhttp3/OkHttpClient$Builder;->getProxyAuthenticator$okhttp()Lokhttp3/Authenticator; PLokhttp3/OkHttpClient$Builder;->getProxyAuthenticator$okhttp()Lokhttp3/Authenticator; HSPLokhttp3/OkHttpClient$Builder;->getProxySelector$okhttp()Ljava/net/ProxySelector; PLokhttp3/OkHttpClient$Builder;->getProxySelector$okhttp()Ljava/net/ProxySelector; HSPLokhttp3/OkHttpClient$Builder;->getReadTimeout$okhttp()I PLokhttp3/OkHttpClient$Builder;->getReadTimeout$okhttp()I HSPLokhttp3/OkHttpClient$Builder;->getRetryOnConnectionFailure$okhttp()Z PLokhttp3/OkHttpClient$Builder;->getRetryOnConnectionFailure$okhttp()Z HSPLokhttp3/OkHttpClient$Builder;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase; PLokhttp3/OkHttpClient$Builder;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase; HSPLokhttp3/OkHttpClient$Builder;->getSocketFactory$okhttp()Ljavax/net/SocketFactory; PLokhttp3/OkHttpClient$Builder;->getSocketFactory$okhttp()Ljavax/net/SocketFactory; HSPLokhttp3/OkHttpClient$Builder;->getSslSocketFactoryOrNull$okhttp()Ljavax/net/ssl/SSLSocketFactory; PLokhttp3/OkHttpClient$Builder;->getSslSocketFactoryOrNull$okhttp()Ljavax/net/ssl/SSLSocketFactory; HSPLokhttp3/OkHttpClient$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner; PLokhttp3/OkHttpClient$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner; HSPLokhttp3/OkHttpClient$Builder;->getWriteTimeout$okhttp()I PLokhttp3/OkHttpClient$Builder;->getWriteTimeout$okhttp()I HSPLokhttp3/OkHttpClient$Builder;->getX509TrustManagerOrNull$okhttp()Ljavax/net/ssl/X509TrustManager; PLokhttp3/OkHttpClient$Builder;->getX509TrustManagerOrNull$okhttp()Ljavax/net/ssl/X509TrustManager; HSPLokhttp3/OkHttpClient$Builder;->readTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; PLokhttp3/OkHttpClient$Builder;->readTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder; Lokhttp3/OkHttpClient$Companion; HSPLokhttp3/OkHttpClient$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/OkHttpClient$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/Protocol; HSPLokhttp3/Protocol;->()V PLokhttp3/Protocol;->()V HSPLokhttp3/Protocol;->(Ljava/lang/String;ILjava/lang/String;)V PLokhttp3/Protocol;->(Ljava/lang/String;ILjava/lang/String;)V HSPLokhttp3/Protocol;->access$getProtocol$p(Lokhttp3/Protocol;)Ljava/lang/String; PLokhttp3/Protocol;->access$getProtocol$p(Lokhttp3/Protocol;)Ljava/lang/String; HSPLokhttp3/Protocol;->toString()Ljava/lang/String; PLokhttp3/Protocol;->toString()Ljava/lang/String; Lokhttp3/Protocol$Companion; HSPLokhttp3/Protocol$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/Protocol$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol; PLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol; Lokhttp3/Request; HSPLokhttp3/Request;->(Lokhttp3/Request$Builder;)V PLokhttp3/Request;->(Lokhttp3/Request$Builder;)V HSPLokhttp3/Request;->body()Lokhttp3/RequestBody; PLokhttp3/Request;->body()Lokhttp3/RequestBody; HSPLokhttp3/Request;->cacheControl()Lokhttp3/CacheControl; PLokhttp3/Request;->cacheControl()Lokhttp3/CacheControl; HSPLokhttp3/Request;->getTags$okhttp()Ljava/util/Map; PLokhttp3/Request;->getTags$okhttp()Ljava/util/Map; HSPLokhttp3/Request;->header(Ljava/lang/String;)Ljava/lang/String; PLokhttp3/Request;->header(Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/Request;->headers()Lokhttp3/Headers; PLokhttp3/Request;->headers()Lokhttp3/Headers; HSPLokhttp3/Request;->method()Ljava/lang/String; PLokhttp3/Request;->method()Ljava/lang/String; HSPLokhttp3/Request;->url()Lokhttp3/HttpUrl; PLokhttp3/Request;->url()Lokhttp3/HttpUrl; Lokhttp3/Request$Builder; HSPLokhttp3/Request$Builder;->()V PLokhttp3/Request$Builder;->()V HSPLokhttp3/Request$Builder;->(Lokhttp3/Request;)V PLokhttp3/Request$Builder;->(Lokhttp3/Request;)V HSPLokhttp3/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; PLokhttp3/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; HSPLokhttp3/Request$Builder;->cacheControl(Lokhttp3/CacheControl;)Lokhttp3/Request$Builder; PLokhttp3/Request$Builder;->cacheControl(Lokhttp3/CacheControl;)Lokhttp3/Request$Builder; HSPLokhttp3/Request$Builder;->getBody$okhttp()Lokhttp3/RequestBody; PLokhttp3/Request$Builder;->getBody$okhttp()Lokhttp3/RequestBody; HSPLokhttp3/Request$Builder;->getHeaders$okhttp()Lokhttp3/Headers$Builder; PLokhttp3/Request$Builder;->getHeaders$okhttp()Lokhttp3/Headers$Builder; HSPLokhttp3/Request$Builder;->getMethod$okhttp()Ljava/lang/String; PLokhttp3/Request$Builder;->getMethod$okhttp()Ljava/lang/String; HSPLokhttp3/Request$Builder;->getTags$okhttp()Ljava/util/Map; PLokhttp3/Request$Builder;->getTags$okhttp()Ljava/util/Map; HSPLokhttp3/Request$Builder;->getUrl$okhttp()Lokhttp3/HttpUrl; PLokhttp3/Request$Builder;->getUrl$okhttp()Lokhttp3/HttpUrl; HSPLokhttp3/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; PLokhttp3/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; HSPLokhttp3/Request$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Request$Builder; PLokhttp3/Request$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Request$Builder; HSPLokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder; PLokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder; HSPLokhttp3/Request$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V PLokhttp3/Request$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V HSPLokhttp3/Request$Builder;->url(Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder; PLokhttp3/Request$Builder;->url(Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder; Lokhttp3/RequestBody; HSPLokhttp3/RequestBody;->()V PLokhttp3/RequestBody;->()V HSPLokhttp3/RequestBody;->()V PLokhttp3/RequestBody;->()V Lokhttp3/RequestBody$Companion; HSPLokhttp3/RequestBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/RequestBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/RequestBody$Companion;->create$default(Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody; PLokhttp3/RequestBody$Companion;->create$default(Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody; HSPLokhttp3/RequestBody$Companion;->create([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; PLokhttp3/RequestBody$Companion;->create([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; Lokhttp3/Response; HSPLokhttp3/Response;->(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;Lkotlin/jvm/functions/Function0;)V PLokhttp3/Response;->(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;Lkotlin/jvm/functions/Function0;)V HSPLokhttp3/Response;->access$getTrailersFn$p(Lokhttp3/Response;)Lkotlin/jvm/functions/Function0; PLokhttp3/Response;->access$getTrailersFn$p(Lokhttp3/Response;)Lkotlin/jvm/functions/Function0; HSPLokhttp3/Response;->body()Lokhttp3/ResponseBody; PLokhttp3/Response;->body()Lokhttp3/ResponseBody; HSPLokhttp3/Response;->cacheResponse()Lokhttp3/Response; PLokhttp3/Response;->cacheResponse()Lokhttp3/Response; HSPLokhttp3/Response;->code()I PLokhttp3/Response;->code()I HSPLokhttp3/Response;->exchange()Lokhttp3/internal/connection/Exchange; PLokhttp3/Response;->exchange()Lokhttp3/internal/connection/Exchange; HSPLokhttp3/Response;->getLazyCacheControl$okhttp()Lokhttp3/CacheControl; PLokhttp3/Response;->getLazyCacheControl$okhttp()Lokhttp3/CacheControl; HSPLokhttp3/Response;->handshake()Lokhttp3/Handshake; PLokhttp3/Response;->handshake()Lokhttp3/Handshake; HSPLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String; PLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String; HSPLokhttp3/Response;->header(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLokhttp3/Response;->header(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/Response;->headers()Lokhttp3/Headers; PLokhttp3/Response;->headers()Lokhttp3/Headers; HSPLokhttp3/Response;->isSuccessful()Z PLokhttp3/Response;->isSuccessful()Z HSPLokhttp3/Response;->message()Ljava/lang/String; PLokhttp3/Response;->message()Ljava/lang/String; HSPLokhttp3/Response;->networkResponse()Lokhttp3/Response; PLokhttp3/Response;->networkResponse()Lokhttp3/Response; HSPLokhttp3/Response;->priorResponse()Lokhttp3/Response; PLokhttp3/Response;->priorResponse()Lokhttp3/Response; HSPLokhttp3/Response;->protocol()Lokhttp3/Protocol; PLokhttp3/Response;->protocol()Lokhttp3/Protocol; HSPLokhttp3/Response;->receivedResponseAtMillis()J PLokhttp3/Response;->receivedResponseAtMillis()J HSPLokhttp3/Response;->request()Lokhttp3/Request; PLokhttp3/Response;->request()Lokhttp3/Request; HSPLokhttp3/Response;->sentRequestAtMillis()J PLokhttp3/Response;->sentRequestAtMillis()J HSPLokhttp3/Response;->setLazyCacheControl$okhttp(Lokhttp3/CacheControl;)V PLokhttp3/Response;->setLazyCacheControl$okhttp(Lokhttp3/CacheControl;)V Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->()V PLokhttp3/Response$Builder;->()V HSPLokhttp3/Response$Builder;->(Lokhttp3/Response;)V PLokhttp3/Response$Builder;->(Lokhttp3/Response;)V HSPLokhttp3/Response$Builder;->body(Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->body(Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->build()Lokhttp3/Response; PLokhttp3/Response$Builder;->build()Lokhttp3/Response; HSPLokhttp3/Response$Builder;->handshake(Lokhttp3/Handshake;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->handshake(Lokhttp3/Handshake;)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->initExchange$okhttp(Lokhttp3/internal/connection/Exchange;)V PLokhttp3/Response$Builder;->initExchange$okhttp(Lokhttp3/internal/connection/Exchange;)V HSPLokhttp3/Response$Builder;->message(Ljava/lang/String;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->message(Ljava/lang/String;)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->protocol(Lokhttp3/Protocol;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->protocol(Lokhttp3/Protocol;)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->receivedResponseAtMillis(J)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->receivedResponseAtMillis(J)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->request(Lokhttp3/Request;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->request(Lokhttp3/Request;)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->sentRequestAtMillis(J)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->sentRequestAtMillis(J)Lokhttp3/Response$Builder; HSPLokhttp3/Response$Builder;->setBody$okhttp(Lokhttp3/ResponseBody;)V PLokhttp3/Response$Builder;->setBody$okhttp(Lokhttp3/ResponseBody;)V HSPLokhttp3/Response$Builder;->setCacheResponse$okhttp(Lokhttp3/Response;)V PLokhttp3/Response$Builder;->setCacheResponse$okhttp(Lokhttp3/Response;)V HSPLokhttp3/Response$Builder;->setCode$okhttp(I)V PLokhttp3/Response$Builder;->setCode$okhttp(I)V HSPLokhttp3/Response$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V PLokhttp3/Response$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V HSPLokhttp3/Response$Builder;->setMessage$okhttp(Ljava/lang/String;)V PLokhttp3/Response$Builder;->setMessage$okhttp(Ljava/lang/String;)V HSPLokhttp3/Response$Builder;->setNetworkResponse$okhttp(Lokhttp3/Response;)V PLokhttp3/Response$Builder;->setNetworkResponse$okhttp(Lokhttp3/Response;)V HSPLokhttp3/Response$Builder;->setPriorResponse$okhttp(Lokhttp3/Response;)V PLokhttp3/Response$Builder;->setPriorResponse$okhttp(Lokhttp3/Response;)V HSPLokhttp3/Response$Builder;->setProtocol$okhttp(Lokhttp3/Protocol;)V PLokhttp3/Response$Builder;->setProtocol$okhttp(Lokhttp3/Protocol;)V HSPLokhttp3/Response$Builder;->setRequest$okhttp(Lokhttp3/Request;)V PLokhttp3/Response$Builder;->setRequest$okhttp(Lokhttp3/Request;)V HSPLokhttp3/Response$Builder;->setTrailersFn$okhttp(Lkotlin/jvm/functions/Function0;)V PLokhttp3/Response$Builder;->setTrailersFn$okhttp(Lkotlin/jvm/functions/Function0;)V HSPLokhttp3/Response$Builder;->trailers(Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder; PLokhttp3/Response$Builder;->trailers(Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder; Lokhttp3/Response$Builder$initExchange$1; HSPLokhttp3/Response$Builder$initExchange$1;->(Lokhttp3/internal/connection/Exchange;)V PLokhttp3/Response$Builder$initExchange$1;->(Lokhttp3/internal/connection/Exchange;)V Lokhttp3/Response$Builder$trailersFn$1; HSPLokhttp3/Response$Builder$trailersFn$1;->()V PLokhttp3/Response$Builder$trailersFn$1;->()V HSPLokhttp3/Response$Builder$trailersFn$1;->()V PLokhttp3/Response$Builder$trailersFn$1;->()V Lokhttp3/ResponseBody; HSPLokhttp3/ResponseBody;->()V PLokhttp3/ResponseBody;->()V HSPLokhttp3/ResponseBody;->()V PLokhttp3/ResponseBody;->()V Lokhttp3/ResponseBody$Companion; HSPLokhttp3/ResponseBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/ResponseBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/ResponseBody$Companion;->create$default(Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; PLokhttp3/ResponseBody$Companion;->create$default(Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; HSPLokhttp3/ResponseBody$Companion;->create(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; PLokhttp3/ResponseBody$Companion;->create(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; HSPLokhttp3/ResponseBody$Companion;->create([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; PLokhttp3/ResponseBody$Companion;->create([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; Lokhttp3/Route; HSPLokhttp3/Route;->(Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V PLokhttp3/Route;->(Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V HSPLokhttp3/Route;->address()Lokhttp3/Address; PLokhttp3/Route;->address()Lokhttp3/Address; HSPLokhttp3/Route;->hashCode()I PLokhttp3/Route;->hashCode()I HSPLokhttp3/Route;->proxy()Ljava/net/Proxy; PLokhttp3/Route;->proxy()Ljava/net/Proxy; HSPLokhttp3/Route;->requiresTunnel()Z PLokhttp3/Route;->requiresTunnel()Z HSPLokhttp3/Route;->socketAddress()Ljava/net/InetSocketAddress; PLokhttp3/Route;->socketAddress()Ljava/net/InetSocketAddress; Lokhttp3/TlsVersion; HSPLokhttp3/TlsVersion;->()V PLokhttp3/TlsVersion;->()V HSPLokhttp3/TlsVersion;->(Ljava/lang/String;ILjava/lang/String;)V PLokhttp3/TlsVersion;->(Ljava/lang/String;ILjava/lang/String;)V HSPLokhttp3/TlsVersion;->javaName()Ljava/lang/String; PLokhttp3/TlsVersion;->javaName()Ljava/lang/String; Lokhttp3/TlsVersion$Companion; HSPLokhttp3/TlsVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/TlsVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/TlsVersion$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/TlsVersion; PLokhttp3/TlsVersion$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/TlsVersion; Lokhttp3/WebSocket$Factory; Lokhttp3/internal/Internal; HSPLokhttp3/internal/Internal;->effectiveCipherSuites(Lokhttp3/ConnectionSpec;[Ljava/lang/String;)[Ljava/lang/String; PLokhttp3/internal/Internal;->effectiveCipherSuites(Lokhttp3/ConnectionSpec;[Ljava/lang/String;)[Ljava/lang/String; Lokhttp3/internal/UnreadableResponseBody; HSPLokhttp3/internal/UnreadableResponseBody;->(Lokhttp3/MediaType;J)V PLokhttp3/internal/UnreadableResponseBody;->(Lokhttp3/MediaType;J)V Lokhttp3/internal/_CacheControlCommonKt; HSPLokhttp3/internal/_CacheControlCommonKt;->commonBuild(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl; PLokhttp3/internal/_CacheControlCommonKt;->commonBuild(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl; HSPLokhttp3/internal/_CacheControlCommonKt;->commonClampToInt(J)I PLokhttp3/internal/_CacheControlCommonKt;->commonClampToInt(J)I HSPLokhttp3/internal/_CacheControlCommonKt;->commonForceCache(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl; PLokhttp3/internal/_CacheControlCommonKt;->commonForceCache(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl; HSPLokhttp3/internal/_CacheControlCommonKt;->commonForceNetwork(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl; PLokhttp3/internal/_CacheControlCommonKt;->commonForceNetwork(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl; HSPLokhttp3/internal/_CacheControlCommonKt;->commonMaxStale(Lokhttp3/CacheControl$Builder;ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder; PLokhttp3/internal/_CacheControlCommonKt;->commonMaxStale(Lokhttp3/CacheControl$Builder;ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder; HSPLokhttp3/internal/_CacheControlCommonKt;->commonNoCache(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder; PLokhttp3/internal/_CacheControlCommonKt;->commonNoCache(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder; HSPLokhttp3/internal/_CacheControlCommonKt;->commonOnlyIfCached(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder; PLokhttp3/internal/_CacheControlCommonKt;->commonOnlyIfCached(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder; HSPLokhttp3/internal/_CacheControlCommonKt;->commonParse(Lokhttp3/CacheControl$Companion;Lokhttp3/Headers;)Lokhttp3/CacheControl; PLokhttp3/internal/_CacheControlCommonKt;->commonParse(Lokhttp3/CacheControl$Companion;Lokhttp3/Headers;)Lokhttp3/CacheControl; HSPLokhttp3/internal/_CacheControlCommonKt;->commonToString(Lokhttp3/CacheControl;)Ljava/lang/String; PLokhttp3/internal/_CacheControlCommonKt;->commonToString(Lokhttp3/CacheControl;)Ljava/lang/String; Lokhttp3/internal/_HeadersCommonKt; HSPLokhttp3/internal/_HeadersCommonKt;->commonAdd(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/internal/_HeadersCommonKt;->commonAdd(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/internal/_HeadersCommonKt;->commonAddLenient(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/internal/_HeadersCommonKt;->commonAddLenient(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/internal/_HeadersCommonKt;->commonBuild(Lokhttp3/Headers$Builder;)Lokhttp3/Headers; PLokhttp3/internal/_HeadersCommonKt;->commonBuild(Lokhttp3/Headers$Builder;)Lokhttp3/Headers; HSPLokhttp3/internal/_HeadersCommonKt;->commonHeadersGet([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLokhttp3/internal/_HeadersCommonKt;->commonHeadersGet([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/internal/_HeadersCommonKt;->commonHeadersOf([Ljava/lang/String;)Lokhttp3/Headers; PLokhttp3/internal/_HeadersCommonKt;->commonHeadersOf([Ljava/lang/String;)Lokhttp3/Headers; HSPLokhttp3/internal/_HeadersCommonKt;->commonName(Lokhttp3/Headers;I)Ljava/lang/String; PLokhttp3/internal/_HeadersCommonKt;->commonName(Lokhttp3/Headers;I)Ljava/lang/String; HSPLokhttp3/internal/_HeadersCommonKt;->commonNewBuilder(Lokhttp3/Headers;)Lokhttp3/Headers$Builder; PLokhttp3/internal/_HeadersCommonKt;->commonNewBuilder(Lokhttp3/Headers;)Lokhttp3/Headers$Builder; HSPLokhttp3/internal/_HeadersCommonKt;->commonRemoveAll(Lokhttp3/Headers$Builder;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/internal/_HeadersCommonKt;->commonRemoveAll(Lokhttp3/Headers$Builder;Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/internal/_HeadersCommonKt;->commonSet(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; PLokhttp3/internal/_HeadersCommonKt;->commonSet(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder; HSPLokhttp3/internal/_HeadersCommonKt;->commonValue(Lokhttp3/Headers;I)Ljava/lang/String; PLokhttp3/internal/_HeadersCommonKt;->commonValue(Lokhttp3/Headers;I)Ljava/lang/String; HSPLokhttp3/internal/_HeadersCommonKt;->commonValues(Lokhttp3/Headers;Ljava/lang/String;)Ljava/util/List; PLokhttp3/internal/_HeadersCommonKt;->commonValues(Lokhttp3/Headers;Ljava/lang/String;)Ljava/util/List; HSPLokhttp3/internal/_HeadersCommonKt;->headersCheckName(Ljava/lang/String;)V PLokhttp3/internal/_HeadersCommonKt;->headersCheckName(Ljava/lang/String;)V HSPLokhttp3/internal/_HeadersCommonKt;->headersCheckValue(Ljava/lang/String;Ljava/lang/String;)V PLokhttp3/internal/_HeadersCommonKt;->headersCheckValue(Ljava/lang/String;Ljava/lang/String;)V Lokhttp3/internal/_HostnamesCommonKt; HSPLokhttp3/internal/_HostnamesCommonKt;->()V PLokhttp3/internal/_HostnamesCommonKt;->()V HSPLokhttp3/internal/_HostnamesCommonKt;->canParseAsIpAddress(Ljava/lang/String;)Z PLokhttp3/internal/_HostnamesCommonKt;->canParseAsIpAddress(Ljava/lang/String;)Z HSPLokhttp3/internal/_HostnamesCommonKt;->containsInvalidHostnameAsciiCodes(Ljava/lang/String;)Z PLokhttp3/internal/_HostnamesCommonKt;->containsInvalidHostnameAsciiCodes(Ljava/lang/String;)Z HSPLokhttp3/internal/_HostnamesCommonKt;->containsInvalidLabelLengths(Ljava/lang/String;)Z PLokhttp3/internal/_HostnamesCommonKt;->containsInvalidLabelLengths(Ljava/lang/String;)Z Lokhttp3/internal/_HostnamesJvmKt; HSPLokhttp3/internal/_HostnamesJvmKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String; PLokhttp3/internal/_HostnamesJvmKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String; Lokhttp3/internal/_MediaTypeCommonKt; HSPLokhttp3/internal/_MediaTypeCommonKt;->()V PLokhttp3/internal/_MediaTypeCommonKt;->()V HSPLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaType(Ljava/lang/String;)Lokhttp3/MediaType; PLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaType(Ljava/lang/String;)Lokhttp3/MediaType; HSPLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaTypeOrNull(Ljava/lang/String;)Lokhttp3/MediaType; PLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaTypeOrNull(Ljava/lang/String;)Lokhttp3/MediaType; Lokhttp3/internal/_RequestBodyCommonKt; HSPLokhttp3/internal/_RequestBodyCommonKt;->commonToRequestBody([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; PLokhttp3/internal/_RequestBodyCommonKt;->commonToRequestBody([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; Lokhttp3/internal/_RequestBodyCommonKt$commonToRequestBody$1; HSPLokhttp3/internal/_RequestBodyCommonKt$commonToRequestBody$1;->(Lokhttp3/MediaType;[BII)V PLokhttp3/internal/_RequestBodyCommonKt$commonToRequestBody$1;->(Lokhttp3/MediaType;[BII)V Lokhttp3/internal/_RequestCommonKt; HSPLokhttp3/internal/_RequestCommonKt;->commonAddHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; PLokhttp3/internal/_RequestCommonKt;->commonAddHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; HSPLokhttp3/internal/_RequestCommonKt;->commonCacheControl(Lokhttp3/Request$Builder;Lokhttp3/CacheControl;)Lokhttp3/Request$Builder; PLokhttp3/internal/_RequestCommonKt;->commonCacheControl(Lokhttp3/Request$Builder;Lokhttp3/CacheControl;)Lokhttp3/Request$Builder; HSPLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; PLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder; HSPLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request;Ljava/lang/String;)Ljava/lang/String; PLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request;Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/internal/_RequestCommonKt;->commonHeaders(Lokhttp3/Request$Builder;Lokhttp3/Headers;)Lokhttp3/Request$Builder; PLokhttp3/internal/_RequestCommonKt;->commonHeaders(Lokhttp3/Request$Builder;Lokhttp3/Headers;)Lokhttp3/Request$Builder; HSPLokhttp3/internal/_RequestCommonKt;->commonRemoveHeader(Lokhttp3/Request$Builder;Ljava/lang/String;)Lokhttp3/Request$Builder; PLokhttp3/internal/_RequestCommonKt;->commonRemoveHeader(Lokhttp3/Request$Builder;Ljava/lang/String;)Lokhttp3/Request$Builder; Lokhttp3/internal/_ResponseBodyCommonKt; HSPLokhttp3/internal/_ResponseBodyCommonKt;->commonAsResponseBody(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; PLokhttp3/internal/_ResponseBodyCommonKt;->commonAsResponseBody(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; HSPLokhttp3/internal/_ResponseBodyCommonKt;->commonToResponseBody([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; PLokhttp3/internal/_ResponseBodyCommonKt;->commonToResponseBody([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; Lokhttp3/internal/_ResponseBodyCommonKt$commonAsResponseBody$1; HSPLokhttp3/internal/_ResponseBodyCommonKt$commonAsResponseBody$1;->(Lokhttp3/MediaType;JLokio/BufferedSource;)V PLokhttp3/internal/_ResponseBodyCommonKt$commonAsResponseBody$1;->(Lokhttp3/MediaType;JLokio/BufferedSource;)V Lokhttp3/internal/_ResponseCommonKt; HSPLokhttp3/internal/_ResponseCommonKt;->checkSupportResponse(Lokhttp3/Response;Ljava/lang/String;)V PLokhttp3/internal/_ResponseCommonKt;->checkSupportResponse(Lokhttp3/Response;Ljava/lang/String;)V HSPLokhttp3/internal/_ResponseCommonKt;->commonBody(Lokhttp3/Response$Builder;Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonBody(Lokhttp3/Response$Builder;Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonCacheResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonCacheResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonCode(Lokhttp3/Response$Builder;I)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonCode(Lokhttp3/Response$Builder;I)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonHeader(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLokhttp3/internal/_ResponseCommonKt;->commonHeader(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/internal/_ResponseCommonKt;->commonHeaders(Lokhttp3/Response$Builder;Lokhttp3/Headers;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonHeaders(Lokhttp3/Response$Builder;Lokhttp3/Headers;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonMessage(Lokhttp3/Response$Builder;Ljava/lang/String;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonMessage(Lokhttp3/Response$Builder;Ljava/lang/String;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonNetworkResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonNetworkResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonNewBuilder(Lokhttp3/Response;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonNewBuilder(Lokhttp3/Response;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonPriorResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonPriorResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonProtocol(Lokhttp3/Response$Builder;Lokhttp3/Protocol;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonProtocol(Lokhttp3/Response$Builder;Lokhttp3/Protocol;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonRequest(Lokhttp3/Response$Builder;Lokhttp3/Request;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonRequest(Lokhttp3/Response$Builder;Lokhttp3/Request;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->commonTrailers(Lokhttp3/Response$Builder;Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder; PLokhttp3/internal/_ResponseCommonKt;->commonTrailers(Lokhttp3/Response$Builder;Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder; HSPLokhttp3/internal/_ResponseCommonKt;->getCommonCacheControl(Lokhttp3/Response;)Lokhttp3/CacheControl; PLokhttp3/internal/_ResponseCommonKt;->getCommonCacheControl(Lokhttp3/Response;)Lokhttp3/CacheControl; HSPLokhttp3/internal/_ResponseCommonKt;->getCommonIsRedirect(Lokhttp3/Response;)Z PLokhttp3/internal/_ResponseCommonKt;->getCommonIsRedirect(Lokhttp3/Response;)Z HSPLokhttp3/internal/_ResponseCommonKt;->getCommonIsSuccessful(Lokhttp3/Response;)Z PLokhttp3/internal/_ResponseCommonKt;->getCommonIsSuccessful(Lokhttp3/Response;)Z HSPLokhttp3/internal/_ResponseCommonKt;->stripBody(Lokhttp3/Response;)Lokhttp3/Response; PLokhttp3/internal/_ResponseCommonKt;->stripBody(Lokhttp3/Response;)Lokhttp3/Response; Lokhttp3/internal/_UtilCommonKt; HSPLokhttp3/internal/_UtilCommonKt;->()V PLokhttp3/internal/_UtilCommonKt;->()V HSPLokhttp3/internal/_UtilCommonKt;->addIfAbsent(Ljava/util/List;Ljava/lang/Object;)V PLokhttp3/internal/_UtilCommonKt;->addIfAbsent(Ljava/util/List;Ljava/lang/Object;)V HSPLokhttp3/internal/_UtilCommonKt;->checkOffsetAndCount(JJJ)V PLokhttp3/internal/_UtilCommonKt;->checkOffsetAndCount(JJJ)V HSPLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;CII)I PLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;CII)I HSPLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;Ljava/lang/String;II)I PLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;Ljava/lang/String;II)I HSPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyHeaders()Lokhttp3/Headers; PLokhttp3/internal/_UtilCommonKt;->getCommonEmptyHeaders()Lokhttp3/Headers; HSPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyRequestBody()Lokhttp3/RequestBody; PLokhttp3/internal/_UtilCommonKt;->getCommonEmptyRequestBody()Lokhttp3/RequestBody; HSPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyResponse()Lokhttp3/ResponseBody; PLokhttp3/internal/_UtilCommonKt;->getCommonEmptyResponse()Lokhttp3/ResponseBody; HSPLokhttp3/internal/_UtilCommonKt;->hasIntersection([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)Z PLokhttp3/internal/_UtilCommonKt;->hasIntersection([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)Z HSPLokhttp3/internal/_UtilCommonKt;->indexOf([Ljava/lang/String;Ljava/lang/String;Ljava/util/Comparator;)I PLokhttp3/internal/_UtilCommonKt;->indexOf([Ljava/lang/String;Ljava/lang/String;Ljava/util/Comparator;)I HSPLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I PLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I HSPLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace(Ljava/lang/String;II)I PLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace(Ljava/lang/String;II)I HSPLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I PLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I HSPLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace(Ljava/lang/String;II)I PLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace(Ljava/lang/String;II)I HSPLokhttp3/internal/_UtilCommonKt;->indexOfNonWhitespace(Ljava/lang/String;I)I PLokhttp3/internal/_UtilCommonKt;->indexOfNonWhitespace(Ljava/lang/String;I)I HSPLokhttp3/internal/_UtilCommonKt;->interleave(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List; PLokhttp3/internal/_UtilCommonKt;->interleave(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List; HSPLokhttp3/internal/_UtilCommonKt;->intersect([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)[Ljava/lang/String; PLokhttp3/internal/_UtilCommonKt;->intersect([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)[Ljava/lang/String; HSPLokhttp3/internal/_UtilCommonKt;->isCivilized(Lokio/FileSystem;Lokio/Path;)Z PLokhttp3/internal/_UtilCommonKt;->isCivilized(Lokio/FileSystem;Lokio/Path;)Z HSPLokhttp3/internal/_UtilCommonKt;->matchAtPolyfill(Lkotlin/text/Regex;Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult; PLokhttp3/internal/_UtilCommonKt;->matchAtPolyfill(Lkotlin/text/Regex;Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult; HSPLokhttp3/internal/_UtilCommonKt;->readMedium(Lokio/BufferedSource;)I PLokhttp3/internal/_UtilCommonKt;->readMedium(Lokio/BufferedSource;)I HSPLokhttp3/internal/_UtilCommonKt;->toLongOrDefault(Ljava/lang/String;J)J PLokhttp3/internal/_UtilCommonKt;->toLongOrDefault(Ljava/lang/String;J)J HSPLokhttp3/internal/_UtilCommonKt;->toNonNegativeInt(Ljava/lang/String;I)I PLokhttp3/internal/_UtilCommonKt;->toNonNegativeInt(Ljava/lang/String;I)I HSPLokhttp3/internal/_UtilCommonKt;->writeMedium(Lokio/BufferedSink;I)V PLokhttp3/internal/_UtilCommonKt;->writeMedium(Lokio/BufferedSink;I)V Lokhttp3/internal/_UtilJvmKt; HSPLokhttp3/internal/_UtilJvmKt;->()V PLokhttp3/internal/_UtilJvmKt;->()V HSPLokhttp3/internal/_UtilJvmKt;->asFactory(Lokhttp3/EventListener;)Lokhttp3/EventListener$Factory; PLokhttp3/internal/_UtilJvmKt;->asFactory(Lokhttp3/EventListener;)Lokhttp3/EventListener$Factory; HSPLokhttp3/internal/_UtilJvmKt;->checkDuration(Ljava/lang/String;JLjava/util/concurrent/TimeUnit;)I PLokhttp3/internal/_UtilJvmKt;->checkDuration(Ljava/lang/String;JLjava/util/concurrent/TimeUnit;)I HSPLokhttp3/internal/_UtilJvmKt;->closeQuietly(Ljava/net/Socket;)V PLokhttp3/internal/_UtilJvmKt;->closeQuietly(Ljava/net/Socket;)V HSPLokhttp3/internal/_UtilJvmKt;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; HPLokhttp3/internal/_UtilJvmKt;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; HSPLokhttp3/internal/_UtilJvmKt;->headersContentLength(Lokhttp3/Response;)J PLokhttp3/internal/_UtilJvmKt;->headersContentLength(Lokhttp3/Response;)J HSPLokhttp3/internal/_UtilJvmKt;->immutableListOf([Ljava/lang/Object;)Ljava/util/List; PLokhttp3/internal/_UtilJvmKt;->immutableListOf([Ljava/lang/Object;)Ljava/util/List; HSPLokhttp3/internal/_UtilJvmKt;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory; PLokhttp3/internal/_UtilJvmKt;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory; HSPLokhttp3/internal/_UtilJvmKt;->toHeaders(Ljava/util/List;)Lokhttp3/Headers; PLokhttp3/internal/_UtilJvmKt;->toHeaders(Ljava/util/List;)Lokhttp3/Headers; HSPLokhttp3/internal/_UtilJvmKt;->toHostHeader$default(Lokhttp3/HttpUrl;ZILjava/lang/Object;)Ljava/lang/String; PLokhttp3/internal/_UtilJvmKt;->toHostHeader$default(Lokhttp3/HttpUrl;ZILjava/lang/Object;)Ljava/lang/String; HSPLokhttp3/internal/_UtilJvmKt;->toHostHeader(Lokhttp3/HttpUrl;Z)Ljava/lang/String; PLokhttp3/internal/_UtilJvmKt;->toHostHeader(Lokhttp3/HttpUrl;Z)Ljava/lang/String; HSPLokhttp3/internal/_UtilJvmKt;->toImmutableList(Ljava/util/List;)Ljava/util/List; PLokhttp3/internal/_UtilJvmKt;->toImmutableList(Ljava/util/List;)Ljava/util/List; Lokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0; HSPLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;->(Ljava/lang/String;Z)V PLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;->(Ljava/lang/String;Z)V HSPLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; PLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; Lokhttp3/internal/authenticator/JavaNetAuthenticator; HSPLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;)V PLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;)V HSPLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/cache/CacheInterceptor; HSPLokhttp3/internal/cache/CacheInterceptor;->()V PLokhttp3/internal/cache/CacheInterceptor;->()V HSPLokhttp3/internal/cache/CacheInterceptor;->(Lokhttp3/Cache;)V PLokhttp3/internal/cache/CacheInterceptor;->(Lokhttp3/Cache;)V HSPLokhttp3/internal/cache/CacheInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLokhttp3/internal/cache/CacheInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Lokhttp3/internal/cache/CacheInterceptor$Companion; HSPLokhttp3/internal/cache/CacheInterceptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/cache/CacheInterceptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1; HSPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->(Lokio/BufferedSource;Lokhttp3/internal/cache/CacheRequest;Lokio/BufferedSink;)V PLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->(Lokio/BufferedSource;Lokhttp3/internal/cache/CacheRequest;Lokio/BufferedSink;)V HSPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->close()V PLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->close()V HSPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->read(Lokio/Buffer;J)J PLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->read(Lokio/Buffer;J)J Lokhttp3/internal/cache/CacheRequest; Lokhttp3/internal/cache/CacheStrategy; HSPLokhttp3/internal/cache/CacheStrategy;->()V PLokhttp3/internal/cache/CacheStrategy;->()V HSPLokhttp3/internal/cache/CacheStrategy;->(Lokhttp3/Request;Lokhttp3/Response;)V PLokhttp3/internal/cache/CacheStrategy;->(Lokhttp3/Request;Lokhttp3/Response;)V HSPLokhttp3/internal/cache/CacheStrategy;->getCacheResponse()Lokhttp3/Response; PLokhttp3/internal/cache/CacheStrategy;->getCacheResponse()Lokhttp3/Response; HSPLokhttp3/internal/cache/CacheStrategy;->getNetworkRequest()Lokhttp3/Request; PLokhttp3/internal/cache/CacheStrategy;->getNetworkRequest()Lokhttp3/Request; Lokhttp3/internal/cache/CacheStrategy$Companion; HSPLokhttp3/internal/cache/CacheStrategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/cache/CacheStrategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/cache/CacheStrategy$Companion;->isCacheable(Lokhttp3/Response;Lokhttp3/Request;)Z PLokhttp3/internal/cache/CacheStrategy$Companion;->isCacheable(Lokhttp3/Response;Lokhttp3/Request;)Z Lokhttp3/internal/cache/CacheStrategy$Factory; HSPLokhttp3/internal/cache/CacheStrategy$Factory;->(JLokhttp3/Request;Lokhttp3/Response;)V PLokhttp3/internal/cache/CacheStrategy$Factory;->(JLokhttp3/Request;Lokhttp3/Response;)V HSPLokhttp3/internal/cache/CacheStrategy$Factory;->compute()Lokhttp3/internal/cache/CacheStrategy; PLokhttp3/internal/cache/CacheStrategy$Factory;->compute()Lokhttp3/internal/cache/CacheStrategy; Lokhttp3/internal/cache/DiskLruCache; HSPLokhttp3/internal/cache/DiskLruCache;->()V PLokhttp3/internal/cache/DiskLruCache;->()V HSPLokhttp3/internal/cache/DiskLruCache;->(Lokio/FileSystem;Lokio/Path;IIJLokhttp3/internal/concurrent/TaskRunner;)V PLokhttp3/internal/cache/DiskLruCache;->(Lokio/FileSystem;Lokio/Path;IIJLokhttp3/internal/concurrent/TaskRunner;)V HSPLokhttp3/internal/cache/DiskLruCache;->checkNotClosed()V PLokhttp3/internal/cache/DiskLruCache;->checkNotClosed()V HSPLokhttp3/internal/cache/DiskLruCache;->completeEdit$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;Z)V PLokhttp3/internal/cache/DiskLruCache;->completeEdit$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;Z)V HSPLokhttp3/internal/cache/DiskLruCache;->edit$default(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;JILjava/lang/Object;)Lokhttp3/internal/cache/DiskLruCache$Editor; PLokhttp3/internal/cache/DiskLruCache;->edit$default(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;JILjava/lang/Object;)Lokhttp3/internal/cache/DiskLruCache$Editor; HSPLokhttp3/internal/cache/DiskLruCache;->edit(Ljava/lang/String;J)Lokhttp3/internal/cache/DiskLruCache$Editor; PLokhttp3/internal/cache/DiskLruCache;->edit(Ljava/lang/String;J)Lokhttp3/internal/cache/DiskLruCache$Editor; HSPLokhttp3/internal/cache/DiskLruCache;->get(Ljava/lang/String;)Lokhttp3/internal/cache/DiskLruCache$Snapshot; PLokhttp3/internal/cache/DiskLruCache;->get(Ljava/lang/String;)Lokhttp3/internal/cache/DiskLruCache$Snapshot; HSPLokhttp3/internal/cache/DiskLruCache;->getDirectory()Lokio/Path; PLokhttp3/internal/cache/DiskLruCache;->getDirectory()Lokio/Path; HSPLokhttp3/internal/cache/DiskLruCache;->getFileSystem$okhttp()Lokio/FileSystem; PLokhttp3/internal/cache/DiskLruCache;->getFileSystem$okhttp()Lokio/FileSystem; HSPLokhttp3/internal/cache/DiskLruCache;->getValueCount$okhttp()I PLokhttp3/internal/cache/DiskLruCache;->getValueCount$okhttp()I HSPLokhttp3/internal/cache/DiskLruCache;->initialize()V PLokhttp3/internal/cache/DiskLruCache;->initialize()V HSPLokhttp3/internal/cache/DiskLruCache;->journalRebuildRequired()Z PLokhttp3/internal/cache/DiskLruCache;->journalRebuildRequired()Z HSPLokhttp3/internal/cache/DiskLruCache;->rebuildJournal$okhttp()V PLokhttp3/internal/cache/DiskLruCache;->rebuildJournal$okhttp()V HSPLokhttp3/internal/cache/DiskLruCache;->validateKey(Ljava/lang/String;)V PLokhttp3/internal/cache/DiskLruCache;->validateKey(Ljava/lang/String;)V Lokhttp3/internal/cache/DiskLruCache$Companion; HSPLokhttp3/internal/cache/DiskLruCache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/cache/DiskLruCache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/cache/DiskLruCache$Editor; HSPLokhttp3/internal/cache/DiskLruCache$Editor;->(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Entry;)V PLokhttp3/internal/cache/DiskLruCache$Editor;->(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Entry;)V HSPLokhttp3/internal/cache/DiskLruCache$Editor;->commit()V PLokhttp3/internal/cache/DiskLruCache$Editor;->commit()V HSPLokhttp3/internal/cache/DiskLruCache$Editor;->getEntry$okhttp()Lokhttp3/internal/cache/DiskLruCache$Entry; PLokhttp3/internal/cache/DiskLruCache$Editor;->getEntry$okhttp()Lokhttp3/internal/cache/DiskLruCache$Entry; HSPLokhttp3/internal/cache/DiskLruCache$Editor;->getWritten$okhttp()[Z PLokhttp3/internal/cache/DiskLruCache$Editor;->getWritten$okhttp()[Z HSPLokhttp3/internal/cache/DiskLruCache$Editor;->newSink(I)Lokio/Sink; PLokhttp3/internal/cache/DiskLruCache$Editor;->newSink(I)Lokio/Sink; Lokhttp3/internal/cache/DiskLruCache$Editor$newSink$1$1; HSPLokhttp3/internal/cache/DiskLruCache$Editor$newSink$1$1;->(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V PLokhttp3/internal/cache/DiskLruCache$Editor$newSink$1$1;->(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V Lokhttp3/internal/cache/DiskLruCache$Entry; HSPLokhttp3/internal/cache/DiskLruCache$Entry;->(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V PLokhttp3/internal/cache/DiskLruCache$Entry;->(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getCleanFiles$okhttp()Ljava/util/List; PLokhttp3/internal/cache/DiskLruCache$Entry;->getCleanFiles$okhttp()Ljava/util/List; HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getCurrentEditor$okhttp()Lokhttp3/internal/cache/DiskLruCache$Editor; PLokhttp3/internal/cache/DiskLruCache$Entry;->getCurrentEditor$okhttp()Lokhttp3/internal/cache/DiskLruCache$Editor; HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getDirtyFiles$okhttp()Ljava/util/List; PLokhttp3/internal/cache/DiskLruCache$Entry;->getDirtyFiles$okhttp()Ljava/util/List; HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getKey$okhttp()Ljava/lang/String; PLokhttp3/internal/cache/DiskLruCache$Entry;->getKey$okhttp()Ljava/lang/String; HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getLengths$okhttp()[J PLokhttp3/internal/cache/DiskLruCache$Entry;->getLengths$okhttp()[J HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getReadable$okhttp()Z PLokhttp3/internal/cache/DiskLruCache$Entry;->getReadable$okhttp()Z HSPLokhttp3/internal/cache/DiskLruCache$Entry;->getZombie$okhttp()Z PLokhttp3/internal/cache/DiskLruCache$Entry;->getZombie$okhttp()Z HSPLokhttp3/internal/cache/DiskLruCache$Entry;->setCurrentEditor$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;)V PLokhttp3/internal/cache/DiskLruCache$Entry;->setCurrentEditor$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;)V HSPLokhttp3/internal/cache/DiskLruCache$Entry;->setReadable$okhttp(Z)V PLokhttp3/internal/cache/DiskLruCache$Entry;->setReadable$okhttp(Z)V HSPLokhttp3/internal/cache/DiskLruCache$Entry;->setSequenceNumber$okhttp(J)V PLokhttp3/internal/cache/DiskLruCache$Entry;->setSequenceNumber$okhttp(J)V HSPLokhttp3/internal/cache/DiskLruCache$Entry;->writeLengths$okhttp(Lokio/BufferedSink;)V PLokhttp3/internal/cache/DiskLruCache$Entry;->writeLengths$okhttp(Lokio/BufferedSink;)V Lokhttp3/internal/cache/DiskLruCache$cleanupTask$1; HSPLokhttp3/internal/cache/DiskLruCache$cleanupTask$1;->(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V PLokhttp3/internal/cache/DiskLruCache$cleanupTask$1;->(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V Lokhttp3/internal/cache/DiskLruCache$fileSystem$1; HSPLokhttp3/internal/cache/DiskLruCache$fileSystem$1;->(Lokio/FileSystem;)V PLokhttp3/internal/cache/DiskLruCache$fileSystem$1;->(Lokio/FileSystem;)V HSPLokhttp3/internal/cache/DiskLruCache$fileSystem$1;->sink(Lokio/Path;Z)Lokio/Sink; PLokhttp3/internal/cache/DiskLruCache$fileSystem$1;->sink(Lokio/Path;Z)Lokio/Sink; Lokhttp3/internal/cache/DiskLruCache$newJournalWriter$faultHidingSink$1; HSPLokhttp3/internal/cache/DiskLruCache$newJournalWriter$faultHidingSink$1;->(Lokhttp3/internal/cache/DiskLruCache;)V PLokhttp3/internal/cache/DiskLruCache$newJournalWriter$faultHidingSink$1;->(Lokhttp3/internal/cache/DiskLruCache;)V Lokhttp3/internal/cache/FaultHidingSink; HSPLokhttp3/internal/cache/FaultHidingSink;->(Lokio/Sink;Lkotlin/jvm/functions/Function1;)V PLokhttp3/internal/cache/FaultHidingSink;->(Lokio/Sink;Lkotlin/jvm/functions/Function1;)V HSPLokhttp3/internal/cache/FaultHidingSink;->close()V PLokhttp3/internal/cache/FaultHidingSink;->close()V HSPLokhttp3/internal/cache/FaultHidingSink;->flush()V PLokhttp3/internal/cache/FaultHidingSink;->flush()V HSPLokhttp3/internal/cache/FaultHidingSink;->write(Lokio/Buffer;J)V PLokhttp3/internal/cache/FaultHidingSink;->write(Lokio/Buffer;J)V Lokhttp3/internal/concurrent/Task; HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;Z)V PLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;Z)V HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/concurrent/Task;->getName()Ljava/lang/String; PLokhttp3/internal/concurrent/Task;->getName()Ljava/lang/String; HSPLokhttp3/internal/concurrent/Task;->getNextExecuteNanoTime$okhttp()J PLokhttp3/internal/concurrent/Task;->getNextExecuteNanoTime$okhttp()J HSPLokhttp3/internal/concurrent/Task;->getQueue$okhttp()Lokhttp3/internal/concurrent/TaskQueue; PLokhttp3/internal/concurrent/Task;->getQueue$okhttp()Lokhttp3/internal/concurrent/TaskQueue; HSPLokhttp3/internal/concurrent/Task;->initQueue$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V PLokhttp3/internal/concurrent/Task;->initQueue$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V HSPLokhttp3/internal/concurrent/Task;->setNextExecuteNanoTime$okhttp(J)V PLokhttp3/internal/concurrent/Task;->setNextExecuteNanoTime$okhttp(J)V Lokhttp3/internal/concurrent/TaskQueue; HSPLokhttp3/internal/concurrent/TaskQueue;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V PLokhttp3/internal/concurrent/TaskQueue;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V HSPLokhttp3/internal/concurrent/TaskQueue;->execute$default(Lokhttp3/internal/concurrent/TaskQueue;Ljava/lang/String;JZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V PLokhttp3/internal/concurrent/TaskQueue;->execute$default(Lokhttp3/internal/concurrent/TaskQueue;Ljava/lang/String;JZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V HSPLokhttp3/internal/concurrent/TaskQueue;->execute(Ljava/lang/String;JZLkotlin/jvm/functions/Function0;)V PLokhttp3/internal/concurrent/TaskQueue;->execute(Ljava/lang/String;JZLkotlin/jvm/functions/Function0;)V HSPLokhttp3/internal/concurrent/TaskQueue;->getActiveTask$okhttp()Lokhttp3/internal/concurrent/Task; PLokhttp3/internal/concurrent/TaskQueue;->getActiveTask$okhttp()Lokhttp3/internal/concurrent/Task; HSPLokhttp3/internal/concurrent/TaskQueue;->getCancelActiveTask$okhttp()Z PLokhttp3/internal/concurrent/TaskQueue;->getCancelActiveTask$okhttp()Z HSPLokhttp3/internal/concurrent/TaskQueue;->getFutureTasks$okhttp()Ljava/util/List; PLokhttp3/internal/concurrent/TaskQueue;->getFutureTasks$okhttp()Ljava/util/List; HSPLokhttp3/internal/concurrent/TaskQueue;->getShutdown$okhttp()Z PLokhttp3/internal/concurrent/TaskQueue;->getShutdown$okhttp()Z HSPLokhttp3/internal/concurrent/TaskQueue;->schedule$default(Lokhttp3/internal/concurrent/TaskQueue;Lokhttp3/internal/concurrent/Task;JILjava/lang/Object;)V PLokhttp3/internal/concurrent/TaskQueue;->schedule$default(Lokhttp3/internal/concurrent/TaskQueue;Lokhttp3/internal/concurrent/Task;JILjava/lang/Object;)V HSPLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V PLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V HSPLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z PLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z HSPLokhttp3/internal/concurrent/TaskQueue;->setActiveTask$okhttp(Lokhttp3/internal/concurrent/Task;)V PLokhttp3/internal/concurrent/TaskQueue;->setActiveTask$okhttp(Lokhttp3/internal/concurrent/Task;)V HSPLokhttp3/internal/concurrent/TaskQueue;->setCancelActiveTask$okhttp(Z)V PLokhttp3/internal/concurrent/TaskQueue;->setCancelActiveTask$okhttp(Z)V Lokhttp3/internal/concurrent/TaskQueue$execute$1; HSPLokhttp3/internal/concurrent/TaskQueue$execute$1;->(Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V PLokhttp3/internal/concurrent/TaskQueue$execute$1;->(Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V HSPLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J PLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J Lokhttp3/internal/concurrent/TaskRunner; HSPLokhttp3/internal/concurrent/TaskRunner;->()V PLokhttp3/internal/concurrent/TaskRunner;->()V HSPLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;)V PLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;)V HSPLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V PLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V HSPLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V PLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V HSPLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task; PLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task; HSPLokhttp3/internal/concurrent/TaskRunner;->getBackend()Lokhttp3/internal/concurrent/TaskRunner$Backend; PLokhttp3/internal/concurrent/TaskRunner;->getBackend()Lokhttp3/internal/concurrent/TaskRunner$Backend; HSPLokhttp3/internal/concurrent/TaskRunner;->getLogger$okhttp()Ljava/util/logging/Logger; PLokhttp3/internal/concurrent/TaskRunner;->getLogger$okhttp()Ljava/util/logging/Logger; HSPLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V PLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V HSPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue; PLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue; Lokhttp3/internal/concurrent/TaskRunner$Backend; Lokhttp3/internal/concurrent/TaskRunner$Companion; HSPLokhttp3/internal/concurrent/TaskRunner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/concurrent/TaskRunner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/concurrent/TaskRunner$RealBackend; HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->(Ljava/util/concurrent/ThreadFactory;)V PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->(Ljava/util/concurrent/ThreadFactory;)V HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->decorate(Ljava/util/concurrent/BlockingQueue;)Ljava/util/concurrent/BlockingQueue; PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->decorate(Ljava/util/concurrent/BlockingQueue;)Ljava/util/concurrent/BlockingQueue; HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/Runnable;)V PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/Runnable;)V HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J Lokhttp3/internal/concurrent/TaskRunner$runnable$1; HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->(Lokhttp3/internal/concurrent/TaskRunner;)V PLokhttp3/internal/concurrent/TaskRunner$runnable$1;->(Lokhttp3/internal/concurrent/TaskRunner;)V HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V PLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V Lokhttp3/internal/connection/ConnectInterceptor; HSPLokhttp3/internal/connection/ConnectInterceptor;->()V PLokhttp3/internal/connection/ConnectInterceptor;->()V HSPLokhttp3/internal/connection/ConnectInterceptor;->()V PLokhttp3/internal/connection/ConnectInterceptor;->()V HSPLokhttp3/internal/connection/ConnectInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLokhttp3/internal/connection/ConnectInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Lokhttp3/internal/connection/ConnectPlan; HSPLokhttp3/internal/connection/ConnectPlan;->()V PLokhttp3/internal/connection/ConnectPlan;->()V HSPLokhttp3/internal/connection/ConnectPlan;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILokhttp3/Request;IZ)V PLokhttp3/internal/connection/ConnectPlan;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILokhttp3/Request;IZ)V HSPLokhttp3/internal/connection/ConnectPlan;->connectSocket()V PLokhttp3/internal/connection/ConnectPlan;->connectSocket()V HSPLokhttp3/internal/connection/ConnectPlan;->connectTcp()Lokhttp3/internal/connection/RoutePlanner$ConnectResult; PLokhttp3/internal/connection/ConnectPlan;->connectTcp()Lokhttp3/internal/connection/RoutePlanner$ConnectResult; HSPLokhttp3/internal/connection/ConnectPlan;->connectTls(Ljavax/net/ssl/SSLSocket;Lokhttp3/ConnectionSpec;)V PLokhttp3/internal/connection/ConnectPlan;->connectTls(Ljavax/net/ssl/SSLSocket;Lokhttp3/ConnectionSpec;)V HSPLokhttp3/internal/connection/ConnectPlan;->connectTlsEtc()Lokhttp3/internal/connection/RoutePlanner$ConnectResult; PLokhttp3/internal/connection/ConnectPlan;->connectTlsEtc()Lokhttp3/internal/connection/RoutePlanner$ConnectResult; HSPLokhttp3/internal/connection/ConnectPlan;->copy$default(Lokhttp3/internal/connection/ConnectPlan;ILokhttp3/Request;IZI)Lokhttp3/internal/connection/ConnectPlan; PLokhttp3/internal/connection/ConnectPlan;->copy$default(Lokhttp3/internal/connection/ConnectPlan;ILokhttp3/Request;IZI)Lokhttp3/internal/connection/ConnectPlan; HSPLokhttp3/internal/connection/ConnectPlan;->getRoutes$okhttp()Ljava/util/List; PLokhttp3/internal/connection/ConnectPlan;->getRoutes$okhttp()Ljava/util/List; HSPLokhttp3/internal/connection/ConnectPlan;->handleSuccess()Lokhttp3/internal/connection/RealConnection; PLokhttp3/internal/connection/ConnectPlan;->handleSuccess()Lokhttp3/internal/connection/RealConnection; HSPLokhttp3/internal/connection/ConnectPlan;->isReady()Z PLokhttp3/internal/connection/ConnectPlan;->isReady()Z HSPLokhttp3/internal/connection/ConnectPlan;->nextConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan; PLokhttp3/internal/connection/ConnectPlan;->nextConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan; HSPLokhttp3/internal/connection/ConnectPlan;->planWithCurrentOrInitialConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan; PLokhttp3/internal/connection/ConnectPlan;->planWithCurrentOrInitialConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan; Lokhttp3/internal/connection/ConnectPlan$Companion; HSPLokhttp3/internal/connection/ConnectPlan$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/connection/ConnectPlan$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/connection/ConnectPlan$WhenMappings; HSPLokhttp3/internal/connection/ConnectPlan$WhenMappings;->()V PLokhttp3/internal/connection/ConnectPlan$WhenMappings;->()V Lokhttp3/internal/connection/ConnectPlan$connectTls$1; HSPLokhttp3/internal/connection/ConnectPlan$connectTls$1;->(Lokhttp3/Handshake;)V PLokhttp3/internal/connection/ConnectPlan$connectTls$1;->(Lokhttp3/Handshake;)V Lokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1; HSPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V PLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V HSPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/lang/Object; PLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/lang/Object; HSPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/util/List; PLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/util/List; Lokhttp3/internal/connection/Exchange; HSPLokhttp3/internal/connection/Exchange;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V PLokhttp3/internal/connection/Exchange;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V HSPLokhttp3/internal/connection/Exchange;->bodyComplete(JZZLjava/io/IOException;)Ljava/io/IOException; PLokhttp3/internal/connection/Exchange;->bodyComplete(JZZLjava/io/IOException;)Ljava/io/IOException; HSPLokhttp3/internal/connection/Exchange;->finishRequest()V PLokhttp3/internal/connection/Exchange;->finishRequest()V HSPLokhttp3/internal/connection/Exchange;->getCall$okhttp()Lokhttp3/internal/connection/RealCall; PLokhttp3/internal/connection/Exchange;->getCall$okhttp()Lokhttp3/internal/connection/RealCall; HSPLokhttp3/internal/connection/Exchange;->getConnection$okhttp()Lokhttp3/internal/connection/RealConnection; PLokhttp3/internal/connection/Exchange;->getConnection$okhttp()Lokhttp3/internal/connection/RealConnection; HSPLokhttp3/internal/connection/Exchange;->getEventListener$okhttp()Lokhttp3/EventListener; PLokhttp3/internal/connection/Exchange;->getEventListener$okhttp()Lokhttp3/EventListener; HSPLokhttp3/internal/connection/Exchange;->getFinder$okhttp()Lokhttp3/internal/connection/ExchangeFinder; PLokhttp3/internal/connection/Exchange;->getFinder$okhttp()Lokhttp3/internal/connection/ExchangeFinder; HSPLokhttp3/internal/connection/Exchange;->isDuplex$okhttp()Z PLokhttp3/internal/connection/Exchange;->isDuplex$okhttp()Z HSPLokhttp3/internal/connection/Exchange;->noRequestBody()V PLokhttp3/internal/connection/Exchange;->noRequestBody()V HSPLokhttp3/internal/connection/Exchange;->openResponseBody(Lokhttp3/Response;)Lokhttp3/ResponseBody; PLokhttp3/internal/connection/Exchange;->openResponseBody(Lokhttp3/Response;)Lokhttp3/ResponseBody; HSPLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder; PLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder; HSPLokhttp3/internal/connection/Exchange;->responseHeadersEnd(Lokhttp3/Response;)V PLokhttp3/internal/connection/Exchange;->responseHeadersEnd(Lokhttp3/Response;)V HSPLokhttp3/internal/connection/Exchange;->responseHeadersStart()V PLokhttp3/internal/connection/Exchange;->responseHeadersStart()V HSPLokhttp3/internal/connection/Exchange;->writeRequestHeaders(Lokhttp3/Request;)V PLokhttp3/internal/connection/Exchange;->writeRequestHeaders(Lokhttp3/Request;)V Lokhttp3/internal/connection/Exchange$ResponseBodySource; HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V PLokhttp3/internal/connection/Exchange$ResponseBodySource;->(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V PLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException; PLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException; HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J PLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J Lokhttp3/internal/connection/ExchangeFinder; Lokhttp3/internal/connection/FailedPlan; Lokhttp3/internal/connection/FastFallbackExchangeFinder; HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/concurrent/TaskRunner;)V PLokhttp3/internal/connection/FastFallbackExchangeFinder;->(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/concurrent/TaskRunner;)V HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getConnectResults$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/BlockingQueue; PLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getConnectResults$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/BlockingQueue; HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getTcpConnectsInFlight$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/CopyOnWriteArrayList; PLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getTcpConnectsInFlight$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/CopyOnWriteArrayList; HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->cancelInFlightConnects()V PLokhttp3/internal/connection/FastFallbackExchangeFinder;->cancelInFlightConnects()V HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->find()Lokhttp3/internal/connection/RealConnection; PLokhttp3/internal/connection/FastFallbackExchangeFinder;->find()Lokhttp3/internal/connection/RealConnection; HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->getRoutePlanner()Lokhttp3/internal/connection/RoutePlanner; PLokhttp3/internal/connection/FastFallbackExchangeFinder;->getRoutePlanner()Lokhttp3/internal/connection/RoutePlanner; HSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->launchTcpConnect()Lokhttp3/internal/connection/RoutePlanner$ConnectResult; PLokhttp3/internal/connection/FastFallbackExchangeFinder;->launchTcpConnect()Lokhttp3/internal/connection/RoutePlanner$ConnectResult; Lokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1; HSPLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;->(Ljava/lang/String;Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/FastFallbackExchangeFinder;)V PLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;->(Ljava/lang/String;Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/FastFallbackExchangeFinder;)V HSPLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;->runOnce()J PLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;->runOnce()J Lokhttp3/internal/connection/InetAddressOrderKt; HSPLokhttp3/internal/connection/InetAddressOrderKt;->reorderForHappyEyeballs(Ljava/util/List;)Ljava/util/List; PLokhttp3/internal/connection/InetAddressOrderKt;->reorderForHappyEyeballs(Ljava/util/List;)Ljava/util/List; Lokhttp3/internal/connection/RealCall; HSPLokhttp3/internal/connection/RealCall;->(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V PLokhttp3/internal/connection/RealCall;->(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V HSPLokhttp3/internal/connection/RealCall;->access$getTimeout$p(Lokhttp3/internal/connection/RealCall;)Lokhttp3/internal/connection/RealCall$timeout$1; PLokhttp3/internal/connection/RealCall;->access$getTimeout$p(Lokhttp3/internal/connection/RealCall;)Lokhttp3/internal/connection/RealCall$timeout$1; HSPLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V PLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V HSPLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException; PLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException; HSPLokhttp3/internal/connection/RealCall;->enqueue(Lokhttp3/Callback;)V PLokhttp3/internal/connection/RealCall;->enqueue(Lokhttp3/Callback;)V HSPLokhttp3/internal/connection/RealCall;->enterNetworkInterceptorExchange(Lokhttp3/Request;ZLokhttp3/internal/http/RealInterceptorChain;)V PLokhttp3/internal/connection/RealCall;->enterNetworkInterceptorExchange(Lokhttp3/Request;ZLokhttp3/internal/http/RealInterceptorChain;)V HSPLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V PLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V HSPLokhttp3/internal/connection/RealCall;->getClient()Lokhttp3/OkHttpClient; PLokhttp3/internal/connection/RealCall;->getClient()Lokhttp3/OkHttpClient; HSPLokhttp3/internal/connection/RealCall;->getConnection()Lokhttp3/internal/connection/RealConnection; PLokhttp3/internal/connection/RealCall;->getConnection()Lokhttp3/internal/connection/RealConnection; HSPLokhttp3/internal/connection/RealCall;->getEventListener$okhttp()Lokhttp3/EventListener; PLokhttp3/internal/connection/RealCall;->getEventListener$okhttp()Lokhttp3/EventListener; HSPLokhttp3/internal/connection/RealCall;->getForWebSocket()Z PLokhttp3/internal/connection/RealCall;->getForWebSocket()Z HSPLokhttp3/internal/connection/RealCall;->getInterceptorScopedExchange$okhttp()Lokhttp3/internal/connection/Exchange; PLokhttp3/internal/connection/RealCall;->getInterceptorScopedExchange$okhttp()Lokhttp3/internal/connection/Exchange; HSPLokhttp3/internal/connection/RealCall;->getOriginalRequest()Lokhttp3/Request; PLokhttp3/internal/connection/RealCall;->getOriginalRequest()Lokhttp3/Request; HSPLokhttp3/internal/connection/RealCall;->getPlansToCancel$okhttp()Ljava/util/concurrent/CopyOnWriteArrayList; PLokhttp3/internal/connection/RealCall;->getPlansToCancel$okhttp()Ljava/util/concurrent/CopyOnWriteArrayList; HSPLokhttp3/internal/connection/RealCall;->getResponseWithInterceptorChain$okhttp()Lokhttp3/Response; PLokhttp3/internal/connection/RealCall;->getResponseWithInterceptorChain$okhttp()Lokhttp3/Response; HSPLokhttp3/internal/connection/RealCall;->initExchange$okhttp(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/connection/Exchange; PLokhttp3/internal/connection/RealCall;->initExchange$okhttp(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/connection/Exchange; HSPLokhttp3/internal/connection/RealCall;->isCanceled()Z PLokhttp3/internal/connection/RealCall;->isCanceled()Z HSPLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException; PLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException; HSPLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException; PLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException; HSPLokhttp3/internal/connection/RealCall;->redactedUrl$okhttp()Ljava/lang/String; PLokhttp3/internal/connection/RealCall;->redactedUrl$okhttp()Ljava/lang/String; HSPLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket; PLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket; Lokhttp3/internal/connection/RealCall$AsyncCall; HSPLokhttp3/internal/connection/RealCall$AsyncCall;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/Callback;)V PLokhttp3/internal/connection/RealCall$AsyncCall;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/Callback;)V HSPLokhttp3/internal/connection/RealCall$AsyncCall;->executeOn(Ljava/util/concurrent/ExecutorService;)V PLokhttp3/internal/connection/RealCall$AsyncCall;->executeOn(Ljava/util/concurrent/ExecutorService;)V HSPLokhttp3/internal/connection/RealCall$AsyncCall;->getCall()Lokhttp3/internal/connection/RealCall; PLokhttp3/internal/connection/RealCall$AsyncCall;->getCall()Lokhttp3/internal/connection/RealCall; HSPLokhttp3/internal/connection/RealCall$AsyncCall;->getCallsPerHost()Ljava/util/concurrent/atomic/AtomicInteger; PLokhttp3/internal/connection/RealCall$AsyncCall;->getCallsPerHost()Ljava/util/concurrent/atomic/AtomicInteger; HSPLokhttp3/internal/connection/RealCall$AsyncCall;->getHost()Ljava/lang/String; PLokhttp3/internal/connection/RealCall$AsyncCall;->getHost()Ljava/lang/String; HSPLokhttp3/internal/connection/RealCall$AsyncCall;->reuseCallsPerHostFrom(Lokhttp3/internal/connection/RealCall$AsyncCall;)V PLokhttp3/internal/connection/RealCall$AsyncCall;->reuseCallsPerHostFrom(Lokhttp3/internal/connection/RealCall$AsyncCall;)V HSPLokhttp3/internal/connection/RealCall$AsyncCall;->run()V PLokhttp3/internal/connection/RealCall$AsyncCall;->run()V Lokhttp3/internal/connection/RealCall$CallReference; HSPLokhttp3/internal/connection/RealCall$CallReference;->(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V PLokhttp3/internal/connection/RealCall$CallReference;->(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V Lokhttp3/internal/connection/RealCall$timeout$1; HSPLokhttp3/internal/connection/RealCall$timeout$1;->(Lokhttp3/internal/connection/RealCall;)V PLokhttp3/internal/connection/RealCall$timeout$1;->(Lokhttp3/internal/connection/RealCall;)V Lokhttp3/internal/connection/RealConnection; HSPLokhttp3/internal/connection/RealConnection;->()V PLokhttp3/internal/connection/RealConnection;->()V HSPLokhttp3/internal/connection/RealConnection;->(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Route;Ljava/net/Socket;Ljava/net/Socket;Lokhttp3/Handshake;Lokhttp3/Protocol;Lokio/BufferedSource;Lokio/BufferedSink;I)V PLokhttp3/internal/connection/RealConnection;->(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Route;Ljava/net/Socket;Ljava/net/Socket;Lokhttp3/Handshake;Lokhttp3/Protocol;Lokio/BufferedSource;Lokio/BufferedSink;I)V HSPLokhttp3/internal/connection/RealConnection;->getCalls()Ljava/util/List; PLokhttp3/internal/connection/RealConnection;->getCalls()Ljava/util/List; HSPLokhttp3/internal/connection/RealConnection;->getIdleAtNs()J PLokhttp3/internal/connection/RealConnection;->getIdleAtNs()J HSPLokhttp3/internal/connection/RealConnection;->getNoNewExchanges()Z PLokhttp3/internal/connection/RealConnection;->getNoNewExchanges()Z HSPLokhttp3/internal/connection/RealConnection;->handshake()Lokhttp3/Handshake; PLokhttp3/internal/connection/RealConnection;->handshake()Lokhttp3/Handshake; HSPLokhttp3/internal/connection/RealConnection;->incrementSuccessCount$okhttp()V PLokhttp3/internal/connection/RealConnection;->incrementSuccessCount$okhttp()V HSPLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec; PLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec; HSPLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V PLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/connection/RealConnection;->protocol()Lokhttp3/Protocol; PLokhttp3/internal/connection/RealConnection;->protocol()Lokhttp3/Protocol; HSPLokhttp3/internal/connection/RealConnection;->route()Lokhttp3/Route; PLokhttp3/internal/connection/RealConnection;->route()Lokhttp3/Route; HSPLokhttp3/internal/connection/RealConnection;->setIdleAtNs(J)V PLokhttp3/internal/connection/RealConnection;->setIdleAtNs(J)V HSPLokhttp3/internal/connection/RealConnection;->start()V PLokhttp3/internal/connection/RealConnection;->start()V Lokhttp3/internal/connection/RealConnection$Companion; HSPLokhttp3/internal/connection/RealConnection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/connection/RealConnection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/connection/RealConnectionPool; HSPLokhttp3/internal/connection/RealConnectionPool;->()V PLokhttp3/internal/connection/RealConnectionPool;->()V HSPLokhttp3/internal/connection/RealConnectionPool;->(Lokhttp3/internal/concurrent/TaskRunner;IJLjava/util/concurrent/TimeUnit;)V PLokhttp3/internal/connection/RealConnectionPool;->(Lokhttp3/internal/concurrent/TaskRunner;IJLjava/util/concurrent/TimeUnit;)V HSPLokhttp3/internal/connection/RealConnectionPool;->callAcquirePooledConnection(ZLokhttp3/Address;Lokhttp3/internal/connection/RealCall;Ljava/util/List;Z)Lokhttp3/internal/connection/RealConnection; PLokhttp3/internal/connection/RealConnectionPool;->callAcquirePooledConnection(ZLokhttp3/Address;Lokhttp3/internal/connection/RealCall;Ljava/util/List;Z)Lokhttp3/internal/connection/RealConnection; HSPLokhttp3/internal/connection/RealConnectionPool;->cleanup(J)J PLokhttp3/internal/connection/RealConnectionPool;->cleanup(J)J HSPLokhttp3/internal/connection/RealConnectionPool;->connectionBecameIdle(Lokhttp3/internal/connection/RealConnection;)Z PLokhttp3/internal/connection/RealConnectionPool;->connectionBecameIdle(Lokhttp3/internal/connection/RealConnection;)Z HSPLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I PLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I HSPLokhttp3/internal/connection/RealConnectionPool;->put(Lokhttp3/internal/connection/RealConnection;)V PLokhttp3/internal/connection/RealConnectionPool;->put(Lokhttp3/internal/connection/RealConnection;)V Lokhttp3/internal/connection/RealConnectionPool$Companion; HSPLokhttp3/internal/connection/RealConnectionPool$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/connection/RealConnectionPool$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/connection/RealConnectionPool$cleanupTask$1; HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V PLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J PLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J Lokhttp3/internal/connection/RealRoutePlanner; HSPLokhttp3/internal/connection/RealRoutePlanner;->(Lokhttp3/OkHttpClient;Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/http/RealInterceptorChain;)V PLokhttp3/internal/connection/RealRoutePlanner;->(Lokhttp3/OkHttpClient;Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/http/RealInterceptorChain;)V HSPLokhttp3/internal/connection/RealRoutePlanner;->getAddress()Lokhttp3/Address; PLokhttp3/internal/connection/RealRoutePlanner;->getAddress()Lokhttp3/Address; HSPLokhttp3/internal/connection/RealRoutePlanner;->hasNext(Lokhttp3/internal/connection/RealConnection;)Z PLokhttp3/internal/connection/RealRoutePlanner;->hasNext(Lokhttp3/internal/connection/RealConnection;)Z HSPLokhttp3/internal/connection/RealRoutePlanner;->isCanceled()Z PLokhttp3/internal/connection/RealRoutePlanner;->isCanceled()Z HSPLokhttp3/internal/connection/RealRoutePlanner;->plan()Lokhttp3/internal/connection/RoutePlanner$Plan; PLokhttp3/internal/connection/RealRoutePlanner;->plan()Lokhttp3/internal/connection/RoutePlanner$Plan; HSPLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ConnectPlan; PLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ConnectPlan; HSPLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp(Lokhttp3/Route;Ljava/util/List;)Lokhttp3/internal/connection/ConnectPlan; PLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp(Lokhttp3/Route;Ljava/util/List;)Lokhttp3/internal/connection/ConnectPlan; HSPLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ReusePlan; PLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ReusePlan; HSPLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp(Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;)Lokhttp3/internal/connection/ReusePlan; PLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp(Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;)Lokhttp3/internal/connection/ReusePlan; HSPLokhttp3/internal/connection/RealRoutePlanner;->sameHostAndPort(Lokhttp3/HttpUrl;)Z PLokhttp3/internal/connection/RealRoutePlanner;->sameHostAndPort(Lokhttp3/HttpUrl;)Z Lokhttp3/internal/connection/RouteDatabase; HSPLokhttp3/internal/connection/RouteDatabase;->()V PLokhttp3/internal/connection/RouteDatabase;->()V HSPLokhttp3/internal/connection/RouteDatabase;->connected(Lokhttp3/Route;)V PLokhttp3/internal/connection/RouteDatabase;->connected(Lokhttp3/Route;)V HSPLokhttp3/internal/connection/RouteDatabase;->shouldPostpone(Lokhttp3/Route;)Z PLokhttp3/internal/connection/RouteDatabase;->shouldPostpone(Lokhttp3/Route;)Z Lokhttp3/internal/connection/RoutePlanner; HSPLokhttp3/internal/connection/RoutePlanner;->hasNext$default(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/connection/RealConnection;ILjava/lang/Object;)Z PLokhttp3/internal/connection/RoutePlanner;->hasNext$default(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/connection/RealConnection;ILjava/lang/Object;)Z Lokhttp3/internal/connection/RoutePlanner$ConnectResult; HSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;)V PLokhttp3/internal/connection/RoutePlanner$ConnectResult;->(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;)V HSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/connection/RoutePlanner$ConnectResult;->(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getNextPlan()Lokhttp3/internal/connection/RoutePlanner$Plan; PLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getNextPlan()Lokhttp3/internal/connection/RoutePlanner$Plan; HSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getPlan()Lokhttp3/internal/connection/RoutePlanner$Plan; PLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getPlan()Lokhttp3/internal/connection/RoutePlanner$Plan; HSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getThrowable()Ljava/lang/Throwable; PLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getThrowable()Ljava/lang/Throwable; HSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->isSuccess()Z PLokhttp3/internal/connection/RoutePlanner$ConnectResult;->isSuccess()Z Lokhttp3/internal/connection/RoutePlanner$Plan; Lokhttp3/internal/connection/RouteSelector; HSPLokhttp3/internal/connection/RouteSelector;->()V PLokhttp3/internal/connection/RouteSelector;->()V HSPLokhttp3/internal/connection/RouteSelector;->(Lokhttp3/Address;Lokhttp3/internal/connection/RouteDatabase;Lokhttp3/Call;ZLokhttp3/EventListener;)V PLokhttp3/internal/connection/RouteSelector;->(Lokhttp3/Address;Lokhttp3/internal/connection/RouteDatabase;Lokhttp3/Call;ZLokhttp3/EventListener;)V HSPLokhttp3/internal/connection/RouteSelector;->hasNext()Z PLokhttp3/internal/connection/RouteSelector;->hasNext()Z HSPLokhttp3/internal/connection/RouteSelector;->next()Lokhttp3/internal/connection/RouteSelector$Selection; PLokhttp3/internal/connection/RouteSelector;->next()Lokhttp3/internal/connection/RouteSelector$Selection; Lokhttp3/internal/connection/RouteSelector$Companion; HSPLokhttp3/internal/connection/RouteSelector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/connection/RouteSelector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/connection/RouteSelector$Selection; HSPLokhttp3/internal/connection/RouteSelector$Selection;->(Ljava/util/List;)V PLokhttp3/internal/connection/RouteSelector$Selection;->(Ljava/util/List;)V HSPLokhttp3/internal/connection/RouteSelector$Selection;->getRoutes()Ljava/util/List; PLokhttp3/internal/connection/RouteSelector$Selection;->getRoutes()Ljava/util/List; HSPLokhttp3/internal/connection/RouteSelector$Selection;->hasNext()Z PLokhttp3/internal/connection/RouteSelector$Selection;->hasNext()Z HSPLokhttp3/internal/connection/RouteSelector$Selection;->next()Lokhttp3/Route; PLokhttp3/internal/connection/RouteSelector$Selection;->next()Lokhttp3/Route; Lokhttp3/internal/http/BridgeInterceptor; HSPLokhttp3/internal/http/BridgeInterceptor;->(Lokhttp3/CookieJar;)V PLokhttp3/internal/http/BridgeInterceptor;->(Lokhttp3/CookieJar;)V HSPLokhttp3/internal/http/BridgeInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLokhttp3/internal/http/BridgeInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Lokhttp3/internal/http/CallServerInterceptor; HSPLokhttp3/internal/http/CallServerInterceptor;->(Z)V PLokhttp3/internal/http/CallServerInterceptor;->(Z)V HSPLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Lokhttp3/internal/http/ExchangeCodec; Lokhttp3/internal/http/ExchangeCodec$Carrier; Lokhttp3/internal/http/HttpHeaders; HSPLokhttp3/internal/http/HttpHeaders;->()V PLokhttp3/internal/http/HttpHeaders;->()V HSPLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z PLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z HSPLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V PLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V Lokhttp3/internal/http/HttpMethod; HSPLokhttp3/internal/http/HttpMethod;->()V PLokhttp3/internal/http/HttpMethod;->()V HSPLokhttp3/internal/http/HttpMethod;->()V PLokhttp3/internal/http/HttpMethod;->()V HSPLokhttp3/internal/http/HttpMethod;->invalidatesCache(Ljava/lang/String;)Z PLokhttp3/internal/http/HttpMethod;->invalidatesCache(Ljava/lang/String;)Z HSPLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z PLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z Lokhttp3/internal/http/RealInterceptorChain; HSPLokhttp3/internal/http/RealInterceptorChain;->(Lokhttp3/internal/connection/RealCall;Ljava/util/List;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)V PLokhttp3/internal/http/RealInterceptorChain;->(Lokhttp3/internal/connection/RealCall;Ljava/util/List;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)V HSPLokhttp3/internal/http/RealInterceptorChain;->call()Lokhttp3/Call; PLokhttp3/internal/http/RealInterceptorChain;->call()Lokhttp3/Call; HSPLokhttp3/internal/http/RealInterceptorChain;->connection()Lokhttp3/Connection; PLokhttp3/internal/http/RealInterceptorChain;->connection()Lokhttp3/Connection; HSPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp$default(Lokhttp3/internal/http/RealInterceptorChain;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;IIIILjava/lang/Object;)Lokhttp3/internal/http/RealInterceptorChain; PLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp$default(Lokhttp3/internal/http/RealInterceptorChain;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;IIIILjava/lang/Object;)Lokhttp3/internal/http/RealInterceptorChain; HSPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp(ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)Lokhttp3/internal/http/RealInterceptorChain; PLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp(ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)Lokhttp3/internal/http/RealInterceptorChain; HSPLokhttp3/internal/http/RealInterceptorChain;->getCall$okhttp()Lokhttp3/internal/connection/RealCall; PLokhttp3/internal/http/RealInterceptorChain;->getCall$okhttp()Lokhttp3/internal/connection/RealCall; HSPLokhttp3/internal/http/RealInterceptorChain;->getExchange$okhttp()Lokhttp3/internal/connection/Exchange; PLokhttp3/internal/http/RealInterceptorChain;->getExchange$okhttp()Lokhttp3/internal/connection/Exchange; HSPLokhttp3/internal/http/RealInterceptorChain;->getReadTimeoutMillis$okhttp()I PLokhttp3/internal/http/RealInterceptorChain;->getReadTimeoutMillis$okhttp()I HSPLokhttp3/internal/http/RealInterceptorChain;->getRequest$okhttp()Lokhttp3/Request; PLokhttp3/internal/http/RealInterceptorChain;->getRequest$okhttp()Lokhttp3/Request; HSPLokhttp3/internal/http/RealInterceptorChain;->getWriteTimeoutMillis$okhttp()I PLokhttp3/internal/http/RealInterceptorChain;->getWriteTimeoutMillis$okhttp()I HSPLokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;)Lokhttp3/Response; PLokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;)Lokhttp3/Response; HSPLokhttp3/internal/http/RealInterceptorChain;->request()Lokhttp3/Request; PLokhttp3/internal/http/RealInterceptorChain;->request()Lokhttp3/Request; Lokhttp3/internal/http/RealResponseBody; HSPLokhttp3/internal/http/RealResponseBody;->(Ljava/lang/String;JLokio/BufferedSource;)V PLokhttp3/internal/http/RealResponseBody;->(Ljava/lang/String;JLokio/BufferedSource;)V HSPLokhttp3/internal/http/RealResponseBody;->contentLength()J PLokhttp3/internal/http/RealResponseBody;->contentLength()J HSPLokhttp3/internal/http/RealResponseBody;->contentType()Lokhttp3/MediaType; PLokhttp3/internal/http/RealResponseBody;->contentType()Lokhttp3/MediaType; HSPLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource; PLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource; Lokhttp3/internal/http/RequestLine; HSPLokhttp3/internal/http/RequestLine;->()V PLokhttp3/internal/http/RequestLine;->()V HSPLokhttp3/internal/http/RequestLine;->()V PLokhttp3/internal/http/RequestLine;->()V HSPLokhttp3/internal/http/RequestLine;->requestPath(Lokhttp3/HttpUrl;)Ljava/lang/String; PLokhttp3/internal/http/RequestLine;->requestPath(Lokhttp3/HttpUrl;)Ljava/lang/String; Lokhttp3/internal/http/RetryAndFollowUpInterceptor; HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->()V PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->()V HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->(Lokhttp3/OkHttpClient;)V PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->(Lokhttp3/OkHttpClient;)V HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request; PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request; HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; Lokhttp3/internal/http/RetryAndFollowUpInterceptor$Companion; HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http/RetryAndFollowUpInterceptor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http/StatusLine; HSPLokhttp3/internal/http/StatusLine;->()V PLokhttp3/internal/http/StatusLine;->()V HSPLokhttp3/internal/http/StatusLine;->(Lokhttp3/Protocol;ILjava/lang/String;)V PLokhttp3/internal/http/StatusLine;->(Lokhttp3/Protocol;ILjava/lang/String;)V HSPLokhttp3/internal/http/StatusLine;->toString()Ljava/lang/String; PLokhttp3/internal/http/StatusLine;->toString()Ljava/lang/String; Lokhttp3/internal/http/StatusLine$Companion; HSPLokhttp3/internal/http/StatusLine$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http/StatusLine$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine; PLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine; Lokhttp3/internal/http2/ErrorCode; HSPLokhttp3/internal/http2/ErrorCode;->()V PLokhttp3/internal/http2/ErrorCode;->()V HSPLokhttp3/internal/http2/ErrorCode;->(Ljava/lang/String;II)V PLokhttp3/internal/http2/ErrorCode;->(Ljava/lang/String;II)V Lokhttp3/internal/http2/ErrorCode$Companion; HSPLokhttp3/internal/http2/ErrorCode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/ErrorCode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http2/Header; HSPLokhttp3/internal/http2/Header;->()V PLokhttp3/internal/http2/Header;->()V HSPLokhttp3/internal/http2/Header;->(Ljava/lang/String;Ljava/lang/String;)V PLokhttp3/internal/http2/Header;->(Ljava/lang/String;Ljava/lang/String;)V HSPLokhttp3/internal/http2/Header;->(Lokio/ByteString;Ljava/lang/String;)V PLokhttp3/internal/http2/Header;->(Lokio/ByteString;Ljava/lang/String;)V HSPLokhttp3/internal/http2/Header;->(Lokio/ByteString;Lokio/ByteString;)V PLokhttp3/internal/http2/Header;->(Lokio/ByteString;Lokio/ByteString;)V Lokhttp3/internal/http2/Header$Companion; HSPLokhttp3/internal/http2/Header$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Header$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http2/Hpack; HSPLokhttp3/internal/http2/Hpack;->()V PLokhttp3/internal/http2/Hpack;->()V HSPLokhttp3/internal/http2/Hpack;->()V PLokhttp3/internal/http2/Hpack;->()V HSPLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)Lokio/ByteString; PLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)Lokio/ByteString; HSPLokhttp3/internal/http2/Hpack;->getNAME_TO_FIRST_INDEX()Ljava/util/Map; PLokhttp3/internal/http2/Hpack;->getNAME_TO_FIRST_INDEX()Ljava/util/Map; HSPLokhttp3/internal/http2/Hpack;->getSTATIC_HEADER_TABLE()[Lokhttp3/internal/http2/Header; PLokhttp3/internal/http2/Hpack;->getSTATIC_HEADER_TABLE()[Lokhttp3/internal/http2/Header; Lokhttp3/internal/http2/Hpack$Reader; HSPLokhttp3/internal/http2/Hpack$Reader;->(Lokio/Source;II)V PLokhttp3/internal/http2/Hpack$Reader;->(Lokio/Source;II)V HSPLokhttp3/internal/http2/Hpack$Reader;->(Lokio/Source;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Hpack$Reader;->(Lokio/Source;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I PLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I HSPLokhttp3/internal/http2/Hpack$Reader;->getAndResetHeaderList()Ljava/util/List; PLokhttp3/internal/http2/Hpack$Reader;->getAndResetHeaderList()Ljava/util/List; HSPLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString; PLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString; HSPLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V PLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V HSPLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString; PLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString; HSPLokhttp3/internal/http2/Hpack$Reader;->readHeaders()V PLokhttp3/internal/http2/Hpack$Reader;->readHeaders()V HSPLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I PLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I Lokhttp3/internal/http2/Hpack$Writer; HSPLokhttp3/internal/http2/Hpack$Writer;->(IZLokio/Buffer;)V PLokhttp3/internal/http2/Hpack$Writer;->(IZLokio/Buffer;)V HSPLokhttp3/internal/http2/Hpack$Writer;->(IZLokio/Buffer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Hpack$Writer;->(IZLokio/Buffer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V PLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V HSPLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V PLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V HSPLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V PLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V HSPLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/List;)V PLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/List;)V HSPLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V PLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V Lokhttp3/internal/http2/Http2; HSPLokhttp3/internal/http2/Http2;->()V PLokhttp3/internal/http2/Http2;->()V HSPLokhttp3/internal/http2/Http2;->()V PLokhttp3/internal/http2/Http2;->()V Lokhttp3/internal/http2/Http2Connection; HSPLokhttp3/internal/http2/Http2Connection;->()V PLokhttp3/internal/http2/Http2Connection;->()V HSPLokhttp3/internal/http2/Http2Connection;->(Lokhttp3/internal/http2/Http2Connection$Builder;)V PLokhttp3/internal/http2/Http2Connection;->(Lokhttp3/internal/http2/Http2Connection$Builder;)V HSPLokhttp3/internal/http2/Http2Connection;->access$getDEFAULT_SETTINGS$cp()Lokhttp3/internal/http2/Settings; PLokhttp3/internal/http2/Http2Connection;->access$getDEFAULT_SETTINGS$cp()Lokhttp3/internal/http2/Settings; HSPLokhttp3/internal/http2/Http2Connection;->access$getSettingsListenerQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue; PLokhttp3/internal/http2/Http2Connection;->access$getSettingsListenerQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue; HSPLokhttp3/internal/http2/Http2Connection;->access$getWriterQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue; PLokhttp3/internal/http2/Http2Connection;->access$getWriterQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue; HSPLokhttp3/internal/http2/Http2Connection;->access$setWriteBytesMaximum$p(Lokhttp3/internal/http2/Http2Connection;J)V PLokhttp3/internal/http2/Http2Connection;->access$setWriteBytesMaximum$p(Lokhttp3/internal/http2/Http2Connection;J)V HSPLokhttp3/internal/http2/Http2Connection;->flush()V PLokhttp3/internal/http2/Http2Connection;->flush()V HSPLokhttp3/internal/http2/Http2Connection;->getClient$okhttp()Z PLokhttp3/internal/http2/Http2Connection;->getClient$okhttp()Z HSPLokhttp3/internal/http2/Http2Connection;->getConnectionName$okhttp()Ljava/lang/String; PLokhttp3/internal/http2/Http2Connection;->getConnectionName$okhttp()Ljava/lang/String; HSPLokhttp3/internal/http2/Http2Connection;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener; PLokhttp3/internal/http2/Http2Connection;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener; HSPLokhttp3/internal/http2/Http2Connection;->getOkHttpSettings()Lokhttp3/internal/http2/Settings; PLokhttp3/internal/http2/Http2Connection;->getOkHttpSettings()Lokhttp3/internal/http2/Settings; HSPLokhttp3/internal/http2/Http2Connection;->getPeerSettings()Lokhttp3/internal/http2/Settings; PLokhttp3/internal/http2/Http2Connection;->getPeerSettings()Lokhttp3/internal/http2/Settings; HSPLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream; PLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream; HSPLokhttp3/internal/http2/Http2Connection;->getWriteBytesMaximum()J PLokhttp3/internal/http2/Http2Connection;->getWriteBytesMaximum()J HSPLokhttp3/internal/http2/Http2Connection;->getWriter()Lokhttp3/internal/http2/Http2Writer; PLokhttp3/internal/http2/Http2Connection;->getWriter()Lokhttp3/internal/http2/Http2Writer; HSPLokhttp3/internal/http2/Http2Connection;->newStream(ILjava/util/List;Z)Lokhttp3/internal/http2/Http2Stream; PLokhttp3/internal/http2/Http2Connection;->newStream(ILjava/util/List;Z)Lokhttp3/internal/http2/Http2Stream; HSPLokhttp3/internal/http2/Http2Connection;->newStream(Ljava/util/List;Z)Lokhttp3/internal/http2/Http2Stream; PLokhttp3/internal/http2/Http2Connection;->newStream(Ljava/util/List;Z)Lokhttp3/internal/http2/Http2Stream; HSPLokhttp3/internal/http2/Http2Connection;->pushedStream$okhttp(I)Z PLokhttp3/internal/http2/Http2Connection;->pushedStream$okhttp(I)Z HSPLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream; PLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream; HSPLokhttp3/internal/http2/Http2Connection;->setPeerSettings(Lokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Http2Connection;->setPeerSettings(Lokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Http2Connection;->start$default(Lokhttp3/internal/http2/Http2Connection;ZILjava/lang/Object;)V PLokhttp3/internal/http2/Http2Connection;->start$default(Lokhttp3/internal/http2/Http2Connection;ZILjava/lang/Object;)V HSPLokhttp3/internal/http2/Http2Connection;->start(Z)V PLokhttp3/internal/http2/Http2Connection;->start(Z)V HSPLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V PLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V Lokhttp3/internal/http2/Http2Connection$Builder; HSPLokhttp3/internal/http2/Http2Connection$Builder;->(ZLokhttp3/internal/concurrent/TaskRunner;)V PLokhttp3/internal/http2/Http2Connection$Builder;->(ZLokhttp3/internal/concurrent/TaskRunner;)V HSPLokhttp3/internal/http2/Http2Connection$Builder;->getClient$okhttp()Z PLokhttp3/internal/http2/Http2Connection$Builder;->getClient$okhttp()Z HSPLokhttp3/internal/http2/Http2Connection$Builder;->getConnectionName$okhttp()Ljava/lang/String; PLokhttp3/internal/http2/Http2Connection$Builder;->getConnectionName$okhttp()Ljava/lang/String; HSPLokhttp3/internal/http2/Http2Connection$Builder;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener; PLokhttp3/internal/http2/Http2Connection$Builder;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener; HSPLokhttp3/internal/http2/Http2Connection$Builder;->getPingIntervalMillis$okhttp()I PLokhttp3/internal/http2/Http2Connection$Builder;->getPingIntervalMillis$okhttp()I HSPLokhttp3/internal/http2/Http2Connection$Builder;->getPushObserver$okhttp()Lokhttp3/internal/http2/PushObserver; PLokhttp3/internal/http2/Http2Connection$Builder;->getPushObserver$okhttp()Lokhttp3/internal/http2/PushObserver; HSPLokhttp3/internal/http2/Http2Connection$Builder;->getSink$okhttp()Lokio/BufferedSink; PLokhttp3/internal/http2/Http2Connection$Builder;->getSink$okhttp()Lokio/BufferedSink; HSPLokhttp3/internal/http2/Http2Connection$Builder;->getSocket$okhttp()Ljava/net/Socket; PLokhttp3/internal/http2/Http2Connection$Builder;->getSocket$okhttp()Ljava/net/Socket; HSPLokhttp3/internal/http2/Http2Connection$Builder;->getSource$okhttp()Lokio/BufferedSource; PLokhttp3/internal/http2/Http2Connection$Builder;->getSource$okhttp()Lokio/BufferedSource; HSPLokhttp3/internal/http2/Http2Connection$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner; PLokhttp3/internal/http2/Http2Connection$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner; HSPLokhttp3/internal/http2/Http2Connection$Builder;->listener(Lokhttp3/internal/http2/Http2Connection$Listener;)Lokhttp3/internal/http2/Http2Connection$Builder; PLokhttp3/internal/http2/Http2Connection$Builder;->listener(Lokhttp3/internal/http2/Http2Connection$Listener;)Lokhttp3/internal/http2/Http2Connection$Builder; HSPLokhttp3/internal/http2/Http2Connection$Builder;->pingIntervalMillis(I)Lokhttp3/internal/http2/Http2Connection$Builder; PLokhttp3/internal/http2/Http2Connection$Builder;->pingIntervalMillis(I)Lokhttp3/internal/http2/Http2Connection$Builder; HSPLokhttp3/internal/http2/Http2Connection$Builder;->setConnectionName$okhttp(Ljava/lang/String;)V PLokhttp3/internal/http2/Http2Connection$Builder;->setConnectionName$okhttp(Ljava/lang/String;)V HSPLokhttp3/internal/http2/Http2Connection$Builder;->setSink$okhttp(Lokio/BufferedSink;)V PLokhttp3/internal/http2/Http2Connection$Builder;->setSink$okhttp(Lokio/BufferedSink;)V HSPLokhttp3/internal/http2/Http2Connection$Builder;->setSocket$okhttp(Ljava/net/Socket;)V PLokhttp3/internal/http2/Http2Connection$Builder;->setSocket$okhttp(Ljava/net/Socket;)V HSPLokhttp3/internal/http2/Http2Connection$Builder;->setSource$okhttp(Lokio/BufferedSource;)V PLokhttp3/internal/http2/Http2Connection$Builder;->setSource$okhttp(Lokio/BufferedSource;)V HSPLokhttp3/internal/http2/Http2Connection$Builder;->socket(Ljava/net/Socket;Ljava/lang/String;Lokio/BufferedSource;Lokio/BufferedSink;)Lokhttp3/internal/http2/Http2Connection$Builder; PLokhttp3/internal/http2/Http2Connection$Builder;->socket(Ljava/net/Socket;Ljava/lang/String;Lokio/BufferedSource;Lokio/BufferedSink;)Lokhttp3/internal/http2/Http2Connection$Builder; Lokhttp3/internal/http2/Http2Connection$Companion; HSPLokhttp3/internal/http2/Http2Connection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Http2Connection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http2/Http2Connection$Listener; HSPLokhttp3/internal/http2/Http2Connection$Listener;->()V PLokhttp3/internal/http2/Http2Connection$Listener;->()V HSPLokhttp3/internal/http2/Http2Connection$Listener;->()V PLokhttp3/internal/http2/Http2Connection$Listener;->()V Lokhttp3/internal/http2/Http2Connection$Listener$Companion; HSPLokhttp3/internal/http2/Http2Connection$Listener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Http2Connection$Listener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1; HSPLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;->()V PLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;->()V Lokhttp3/internal/http2/Http2Connection$ReaderRunnable; HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->applyAndAckSettings(ZLokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->applyAndAckSettings(ZLokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(ZILokio/BufferedSource;I)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(ZILokio/BufferedSource;I)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ZIILjava/util/List;)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ZIILjava/util/List;)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object; PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object; HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(ZLokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(ZLokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(IJ)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(IJ)V Lokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2; HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->(Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->(Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()Ljava/lang/Object; PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()Ljava/lang/Object; HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()V Lokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1; HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->(Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;ZLokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->(Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;ZLokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()Ljava/lang/Object; PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()Ljava/lang/Object; HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()V Lokhttp3/internal/http2/Http2ExchangeCodec; HSPLokhttp3/internal/http2/Http2ExchangeCodec;->()V PLokhttp3/internal/http2/Http2ExchangeCodec;->()V HSPLokhttp3/internal/http2/Http2ExchangeCodec;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/ExchangeCodec$Carrier;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V PLokhttp3/internal/http2/Http2ExchangeCodec;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/ExchangeCodec$Carrier;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V HSPLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_REQUEST_HEADERS$cp()Ljava/util/List; PLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_REQUEST_HEADERS$cp()Ljava/util/List; HSPLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_RESPONSE_HEADERS$cp()Ljava/util/List; PLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_RESPONSE_HEADERS$cp()Ljava/util/List; HSPLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V PLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V HSPLokhttp3/internal/http2/Http2ExchangeCodec;->getCarrier()Lokhttp3/internal/http/ExchangeCodec$Carrier; PLokhttp3/internal/http2/Http2ExchangeCodec;->getCarrier()Lokhttp3/internal/http/ExchangeCodec$Carrier; HSPLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source; PLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source; HSPLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder; PLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder; HSPLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J PLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J HSPLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V PLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V Lokhttp3/internal/http2/Http2ExchangeCodec$Companion; HSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->http2HeadersList(Lokhttp3/Request;)Ljava/util/List; PLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->http2HeadersList(Lokhttp3/Request;)Ljava/util/List; HSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->readHttp2HeadersList(Lokhttp3/Headers;Lokhttp3/Protocol;)Lokhttp3/Response$Builder; PLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->readHttp2HeadersList(Lokhttp3/Headers;Lokhttp3/Protocol;)Lokhttp3/Response$Builder; Lokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1; HSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;->()V PLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;->()V HSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;->()V PLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;->()V Lokhttp3/internal/http2/Http2Reader; HSPLokhttp3/internal/http2/Http2Reader;->()V PLokhttp3/internal/http2/Http2Reader;->()V HSPLokhttp3/internal/http2/Http2Reader;->(Lokio/BufferedSource;Z)V PLokhttp3/internal/http2/Http2Reader;->(Lokio/BufferedSource;Z)V HSPLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z PLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z HSPLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V PLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V HSPLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List; PLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List; Lokhttp3/internal/http2/Http2Reader$Companion; HSPLokhttp3/internal/http2/Http2Reader$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Http2Reader$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I PLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I Lokhttp3/internal/http2/Http2Reader$ContinuationSource; HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->(Lokio/BufferedSource;)V PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->(Lokio/BufferedSource;)V HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->getLeft()I PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->getLeft()I HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setFlags(I)V PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setFlags(I)V HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLeft(I)V PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLeft(I)V HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLength(I)V PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLength(I)V HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setPadding(I)V PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setPadding(I)V HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setStreamId(I)V PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setStreamId(I)V Lokhttp3/internal/http2/Http2Reader$Handler; Lokhttp3/internal/http2/Http2Stream; HSPLokhttp3/internal/http2/Http2Stream;->()V PLokhttp3/internal/http2/Http2Stream;->()V HSPLokhttp3/internal/http2/Http2Stream;->(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V PLokhttp3/internal/http2/Http2Stream;->(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V HSPLokhttp3/internal/http2/Http2Stream;->access$doReadTimeout(Lokhttp3/internal/http2/Http2Stream;)Z PLokhttp3/internal/http2/Http2Stream;->access$doReadTimeout(Lokhttp3/internal/http2/Http2Stream;)Z HSPLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V PLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V HSPLokhttp3/internal/http2/Http2Stream;->getConnection()Lokhttp3/internal/http2/Http2Connection; PLokhttp3/internal/http2/Http2Stream;->getConnection()Lokhttp3/internal/http2/Http2Connection; HSPLokhttp3/internal/http2/Http2Stream;->getErrorCode$okhttp()Lokhttp3/internal/http2/ErrorCode; PLokhttp3/internal/http2/Http2Stream;->getErrorCode$okhttp()Lokhttp3/internal/http2/ErrorCode; HSPLokhttp3/internal/http2/Http2Stream;->getReadBytesAcknowledged()J PLokhttp3/internal/http2/Http2Stream;->getReadBytesAcknowledged()J HSPLokhttp3/internal/http2/Http2Stream;->getReadBytesTotal()J PLokhttp3/internal/http2/Http2Stream;->getReadBytesTotal()J HSPLokhttp3/internal/http2/Http2Stream;->getReadTimeout$okhttp()Lokhttp3/internal/http2/Http2Stream$StreamTimeout; PLokhttp3/internal/http2/Http2Stream;->getReadTimeout$okhttp()Lokhttp3/internal/http2/Http2Stream$StreamTimeout; HSPLokhttp3/internal/http2/Http2Stream;->getSink$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSink; PLokhttp3/internal/http2/Http2Stream;->getSink$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSink; HSPLokhttp3/internal/http2/Http2Stream;->getSink()Lokio/Sink; PLokhttp3/internal/http2/Http2Stream;->getSink()Lokio/Sink; HSPLokhttp3/internal/http2/Http2Stream;->getSource$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSource; PLokhttp3/internal/http2/Http2Stream;->getSource$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSource; HSPLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z PLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z HSPLokhttp3/internal/http2/Http2Stream;->isOpen()Z PLokhttp3/internal/http2/Http2Stream;->isOpen()Z HSPLokhttp3/internal/http2/Http2Stream;->readTimeout()Lokio/Timeout; PLokhttp3/internal/http2/Http2Stream;->readTimeout()Lokio/Timeout; HSPLokhttp3/internal/http2/Http2Stream;->receiveData(Lokio/BufferedSource;I)V PLokhttp3/internal/http2/Http2Stream;->receiveData(Lokio/BufferedSource;I)V HSPLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V PLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V HSPLokhttp3/internal/http2/Http2Stream;->setReadBytesTotal$okhttp(J)V PLokhttp3/internal/http2/Http2Stream;->setReadBytesTotal$okhttp(J)V HSPLokhttp3/internal/http2/Http2Stream;->takeHeaders(Z)Lokhttp3/Headers; PLokhttp3/internal/http2/Http2Stream;->takeHeaders(Z)Lokhttp3/Headers; HSPLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V PLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V HSPLokhttp3/internal/http2/Http2Stream;->writeTimeout()Lokio/Timeout; PLokhttp3/internal/http2/Http2Stream;->writeTimeout()Lokio/Timeout; Lokhttp3/internal/http2/Http2Stream$Companion; HSPLokhttp3/internal/http2/Http2Stream$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Http2Stream$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http2/Http2Stream$FramingSink; HSPLokhttp3/internal/http2/Http2Stream$FramingSink;->(Lokhttp3/internal/http2/Http2Stream;Z)V PLokhttp3/internal/http2/Http2Stream$FramingSink;->(Lokhttp3/internal/http2/Http2Stream;Z)V HSPLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V PLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V HSPLokhttp3/internal/http2/Http2Stream$FramingSink;->getClosed()Z PLokhttp3/internal/http2/Http2Stream$FramingSink;->getClosed()Z HSPLokhttp3/internal/http2/Http2Stream$FramingSink;->getFinished()Z PLokhttp3/internal/http2/Http2Stream$FramingSink;->getFinished()Z Lokhttp3/internal/http2/Http2Stream$FramingSource; HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->(Lokhttp3/internal/http2/Http2Stream;JZ)V PLokhttp3/internal/http2/Http2Stream$FramingSource;->(Lokhttp3/internal/http2/Http2Stream;JZ)V HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V PLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->getClosed$okhttp()Z PLokhttp3/internal/http2/Http2Stream$FramingSource;->getClosed$okhttp()Z HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->getFinished$okhttp()Z PLokhttp3/internal/http2/Http2Stream$FramingSource;->getFinished$okhttp()Z HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J PLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->receive$okhttp(Lokio/BufferedSource;J)V PLokhttp3/internal/http2/Http2Stream$FramingSource;->receive$okhttp(Lokio/BufferedSource;J)V HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->setFinished$okhttp(Z)V PLokhttp3/internal/http2/Http2Stream$FramingSource;->setFinished$okhttp(Z)V HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->setTrailers(Lokhttp3/Headers;)V PLokhttp3/internal/http2/Http2Stream$FramingSource;->setTrailers(Lokhttp3/Headers;)V HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V PLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V Lokhttp3/internal/http2/Http2Stream$StreamTimeout; HSPLokhttp3/internal/http2/Http2Stream$StreamTimeout;->(Lokhttp3/internal/http2/Http2Stream;)V PLokhttp3/internal/http2/Http2Stream$StreamTimeout;->(Lokhttp3/internal/http2/Http2Stream;)V HSPLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V PLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V Lokhttp3/internal/http2/Http2Writer; HSPLokhttp3/internal/http2/Http2Writer;->()V PLokhttp3/internal/http2/Http2Writer;->()V HSPLokhttp3/internal/http2/Http2Writer;->(Lokio/BufferedSink;Z)V PLokhttp3/internal/http2/Http2Writer;->(Lokio/BufferedSink;Z)V HSPLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Http2Writer;->connectionPreface()V PLokhttp3/internal/http2/Http2Writer;->connectionPreface()V HSPLokhttp3/internal/http2/Http2Writer;->flush()V PLokhttp3/internal/http2/Http2Writer;->flush()V HSPLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V PLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V HSPLokhttp3/internal/http2/Http2Writer;->headers(ZILjava/util/List;)V PLokhttp3/internal/http2/Http2Writer;->headers(ZILjava/util/List;)V HSPLokhttp3/internal/http2/Http2Writer;->settings(Lokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Http2Writer;->settings(Lokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Http2Writer;->windowUpdate(IJ)V PLokhttp3/internal/http2/Http2Writer;->windowUpdate(IJ)V Lokhttp3/internal/http2/Http2Writer$Companion; HSPLokhttp3/internal/http2/Http2Writer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Http2Writer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/http2/Huffman; HSPLokhttp3/internal/http2/Huffman;->()V PLokhttp3/internal/http2/Huffman;->()V HSPLokhttp3/internal/http2/Huffman;->()V PLokhttp3/internal/http2/Huffman;->()V HSPLokhttp3/internal/http2/Huffman;->addCode(III)V PLokhttp3/internal/http2/Huffman;->addCode(III)V HSPLokhttp3/internal/http2/Huffman;->decode(Lokio/BufferedSource;JLokio/BufferedSink;)V HPLokhttp3/internal/http2/Huffman;->decode(Lokio/BufferedSource;JLokio/BufferedSink;)V HSPLokhttp3/internal/http2/Huffman;->encode(Lokio/ByteString;Lokio/BufferedSink;)V PLokhttp3/internal/http2/Huffman;->encode(Lokio/ByteString;Lokio/BufferedSink;)V HSPLokhttp3/internal/http2/Huffman;->encodedLength(Lokio/ByteString;)I PLokhttp3/internal/http2/Huffman;->encodedLength(Lokio/ByteString;)I Lokhttp3/internal/http2/Huffman$Node; HSPLokhttp3/internal/http2/Huffman$Node;->()V PLokhttp3/internal/http2/Huffman$Node;->()V HSPLokhttp3/internal/http2/Huffman$Node;->(II)V PLokhttp3/internal/http2/Huffman$Node;->(II)V HSPLokhttp3/internal/http2/Huffman$Node;->getChildren()[Lokhttp3/internal/http2/Huffman$Node; PLokhttp3/internal/http2/Huffman$Node;->getChildren()[Lokhttp3/internal/http2/Huffman$Node; HSPLokhttp3/internal/http2/Huffman$Node;->getSymbol()I PLokhttp3/internal/http2/Huffman$Node;->getSymbol()I HSPLokhttp3/internal/http2/Huffman$Node;->getTerminalBitCount()I PLokhttp3/internal/http2/Huffman$Node;->getTerminalBitCount()I Lokhttp3/internal/http2/PushObserver; HSPLokhttp3/internal/http2/PushObserver;->()V PLokhttp3/internal/http2/PushObserver;->()V Lokhttp3/internal/http2/PushObserver$Companion; HSPLokhttp3/internal/http2/PushObserver$Companion;->()V PLokhttp3/internal/http2/PushObserver$Companion;->()V HSPLokhttp3/internal/http2/PushObserver$Companion;->()V PLokhttp3/internal/http2/PushObserver$Companion;->()V Lokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel; HSPLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;->()V PLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;->()V Lokhttp3/internal/http2/Settings; HSPLokhttp3/internal/http2/Settings;->()V PLokhttp3/internal/http2/Settings;->()V HSPLokhttp3/internal/http2/Settings;->()V PLokhttp3/internal/http2/Settings;->()V HSPLokhttp3/internal/http2/Settings;->get(I)I PLokhttp3/internal/http2/Settings;->get(I)I HSPLokhttp3/internal/http2/Settings;->getHeaderTableSize()I PLokhttp3/internal/http2/Settings;->getHeaderTableSize()I HSPLokhttp3/internal/http2/Settings;->getInitialWindowSize()I PLokhttp3/internal/http2/Settings;->getInitialWindowSize()I HSPLokhttp3/internal/http2/Settings;->getMaxConcurrentStreams()I PLokhttp3/internal/http2/Settings;->getMaxConcurrentStreams()I HSPLokhttp3/internal/http2/Settings;->getMaxFrameSize(I)I PLokhttp3/internal/http2/Settings;->getMaxFrameSize(I)I HSPLokhttp3/internal/http2/Settings;->isSet(I)Z PLokhttp3/internal/http2/Settings;->isSet(I)Z HSPLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V PLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V HSPLokhttp3/internal/http2/Settings;->set(II)Lokhttp3/internal/http2/Settings; PLokhttp3/internal/http2/Settings;->set(II)Lokhttp3/internal/http2/Settings; HSPLokhttp3/internal/http2/Settings;->size()I PLokhttp3/internal/http2/Settings;->size()I Lokhttp3/internal/http2/Settings$Companion; HSPLokhttp3/internal/http2/Settings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/http2/Settings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/platform/Android10Platform; HSPLokhttp3/internal/platform/Android10Platform;->()V PLokhttp3/internal/platform/Android10Platform;->()V HSPLokhttp3/internal/platform/Android10Platform;->()V PLokhttp3/internal/platform/Android10Platform;->()V HSPLokhttp3/internal/platform/Android10Platform;->access$isSupported$cp()Z PLokhttp3/internal/platform/Android10Platform;->access$isSupported$cp()Z HSPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; PLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; HSPLokhttp3/internal/platform/Android10Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V PLokhttp3/internal/platform/Android10Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V HSPLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; PLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; HSPLokhttp3/internal/platform/Android10Platform;->getStackTraceForCloseable(Ljava/lang/String;)Ljava/lang/Object; PLokhttp3/internal/platform/Android10Platform;->getStackTraceForCloseable(Ljava/lang/String;)Ljava/lang/Object; Lokhttp3/internal/platform/Android10Platform$Companion; HSPLokhttp3/internal/platform/Android10Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/Android10Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/platform/Android10Platform$Companion;->buildIfSupported()Lokhttp3/internal/platform/Platform; PLokhttp3/internal/platform/Android10Platform$Companion;->buildIfSupported()Lokhttp3/internal/platform/Platform; Lokhttp3/internal/platform/Platform; HSPLokhttp3/internal/platform/Platform;->()V PLokhttp3/internal/platform/Platform;->()V HSPLokhttp3/internal/platform/Platform;->()V PLokhttp3/internal/platform/Platform;->()V HSPLokhttp3/internal/platform/Platform;->access$getPlatform$cp()Lokhttp3/internal/platform/Platform; PLokhttp3/internal/platform/Platform;->access$getPlatform$cp()Lokhttp3/internal/platform/Platform; HSPLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V PLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V HSPLokhttp3/internal/platform/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V PLokhttp3/internal/platform/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V HSPLokhttp3/internal/platform/Platform;->getPrefix()Ljava/lang/String; PLokhttp3/internal/platform/Platform;->getPrefix()Ljava/lang/String; HSPLokhttp3/internal/platform/Platform;->log$default(Lokhttp3/internal/platform/Platform;Ljava/lang/String;ILjava/lang/Throwable;ILjava/lang/Object;)V PLokhttp3/internal/platform/Platform;->log$default(Lokhttp3/internal/platform/Platform;Ljava/lang/String;ILjava/lang/Throwable;ILjava/lang/Object;)V HSPLokhttp3/internal/platform/Platform;->log(Ljava/lang/String;ILjava/lang/Throwable;)V PLokhttp3/internal/platform/Platform;->log(Ljava/lang/String;ILjava/lang/Throwable;)V HSPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext; PLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext; HSPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory; PLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory; HSPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager; PLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager; Lokhttp3/internal/platform/Platform$Companion; HSPLokhttp3/internal/platform/Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/platform/Platform$Companion;->access$findPlatform(Lokhttp3/internal/platform/Platform$Companion;)Lokhttp3/internal/platform/Platform; PLokhttp3/internal/platform/Platform$Companion;->access$findPlatform(Lokhttp3/internal/platform/Platform$Companion;)Lokhttp3/internal/platform/Platform; HSPLokhttp3/internal/platform/Platform$Companion;->alpnProtocolNames(Ljava/util/List;)Ljava/util/List; PLokhttp3/internal/platform/Platform$Companion;->alpnProtocolNames(Ljava/util/List;)Ljava/util/List; HSPLokhttp3/internal/platform/Platform$Companion;->findPlatform()Lokhttp3/internal/platform/Platform; PLokhttp3/internal/platform/Platform$Companion;->findPlatform()Lokhttp3/internal/platform/Platform; HSPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z PLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z Lokhttp3/internal/platform/android/Android10SocketAdapter; HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V PLokhttp3/internal/platform/android/Android10SocketAdapter;->()V HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V PLokhttp3/internal/platform/android/Android10SocketAdapter;->()V HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V PLokhttp3/internal/platform/android/Android10SocketAdapter;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; PLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z PLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->matchesSocket(Ljavax/net/ssl/SSLSocket;)Z PLokhttp3/internal/platform/android/Android10SocketAdapter;->matchesSocket(Ljavax/net/ssl/SSLSocket;)Z Lokhttp3/internal/platform/android/Android10SocketAdapter$Companion; HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->buildIfSupported()Lokhttp3/internal/platform/android/SocketAdapter; PLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->buildIfSupported()Lokhttp3/internal/platform/android/SocketAdapter; HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->isSupported()Z PLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->isSupported()Z Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->()V PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->()V HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->clean(Ljava/util/List;Ljava/lang/String;)Ljava/util/List; PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->clean(Ljava/util/List;Ljava/lang/String;)Ljava/util/List; HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->hashCode()I PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->hashCode()I Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion; HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->buildIfSupported(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->buildIfSupported(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; Lokhttp3/internal/platform/android/AndroidLog; HSPLokhttp3/internal/platform/android/AndroidLog;->()V PLokhttp3/internal/platform/android/AndroidLog;->()V HSPLokhttp3/internal/platform/android/AndroidLog;->()V PLokhttp3/internal/platform/android/AndroidLog;->()V HSPLokhttp3/internal/platform/android/AndroidLog;->androidLog$okhttp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V PLokhttp3/internal/platform/android/AndroidLog;->androidLog$okhttp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V HSPLokhttp3/internal/platform/android/AndroidLog;->enable()V PLokhttp3/internal/platform/android/AndroidLog;->enable()V Lokhttp3/internal/platform/android/AndroidLogHandler; HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V PLokhttp3/internal/platform/android/AndroidLogHandler;->()V HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V PLokhttp3/internal/platform/android/AndroidLogHandler;->()V HSPLokhttp3/internal/platform/android/AndroidLogHandler;->publish(Ljava/util/logging/LogRecord;)V PLokhttp3/internal/platform/android/AndroidLogHandler;->publish(Ljava/util/logging/LogRecord;)V Lokhttp3/internal/platform/android/AndroidLogKt; HSPLokhttp3/internal/platform/android/AndroidLogKt;->access$getAndroidLevel(Ljava/util/logging/LogRecord;)I PLokhttp3/internal/platform/android/AndroidLogKt;->access$getAndroidLevel(Ljava/util/logging/LogRecord;)I Lokhttp3/internal/platform/android/AndroidSocketAdapter; HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->()V PLokhttp3/internal/platform/android/AndroidSocketAdapter;->()V HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->access$getPlayProviderFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; PLokhttp3/internal/platform/android/AndroidSocketAdapter;->access$getPlayProviderFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion; HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->factory(Ljava/lang/String;)Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; PLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->factory(Ljava/lang/String;)Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1; HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;->(Ljava/lang/String;)V PLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;->(Ljava/lang/String;)V Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter; HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->()V PLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->()V HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; PLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion; HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1; HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;->()V PLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;->()V Lokhttp3/internal/platform/android/ConscryptSocketAdapter; HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->()V PLokhttp3/internal/platform/android/ConscryptSocketAdapter;->()V HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; PLokhttp3/internal/platform/android/ConscryptSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion; HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1; HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;->()V PLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;->()V Lokhttp3/internal/platform/android/DeferredSocketAdapter; HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V PLokhttp3/internal/platform/android/DeferredSocketAdapter;->(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z PLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; Lokhttp3/internal/platform/android/SocketAdapter; Lokhttp3/internal/tls/CertificateChainCleaner; HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V PLokhttp3/internal/tls/CertificateChainCleaner;->()V HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V PLokhttp3/internal/tls/CertificateChainCleaner;->()V Lokhttp3/internal/tls/CertificateChainCleaner$Companion; HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/internal/tls/CertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->get(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; PLokhttp3/internal/tls/CertificateChainCleaner$Companion;->get(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; Lokhttp3/internal/tls/OkHostnameVerifier; HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V PLokhttp3/internal/tls/OkHostnameVerifier;->()V HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V PLokhttp3/internal/tls/OkHostnameVerifier;->()V HSPLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List; PLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List; HSPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z PLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z HSPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z PLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z Lokhttp3/logging/HttpLoggingInterceptor; HSPLokhttp3/logging/HttpLoggingInterceptor;->(Lokhttp3/logging/HttpLoggingInterceptor$Logger;)V PLokhttp3/logging/HttpLoggingInterceptor;->(Lokhttp3/logging/HttpLoggingInterceptor$Logger;)V HSPLokhttp3/logging/HttpLoggingInterceptor;->(Lokhttp3/logging/HttpLoggingInterceptor$Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokhttp3/logging/HttpLoggingInterceptor;->(Lokhttp3/logging/HttpLoggingInterceptor$Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokhttp3/logging/HttpLoggingInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; PLokhttp3/logging/HttpLoggingInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; HSPLokhttp3/logging/HttpLoggingInterceptor;->level(Lokhttp3/logging/HttpLoggingInterceptor$Level;)V PLokhttp3/logging/HttpLoggingInterceptor;->level(Lokhttp3/logging/HttpLoggingInterceptor$Level;)V HSPLokhttp3/logging/HttpLoggingInterceptor;->logHeader(Lokhttp3/Headers;I)V PLokhttp3/logging/HttpLoggingInterceptor;->logHeader(Lokhttp3/Headers;I)V Lokhttp3/logging/HttpLoggingInterceptor$Level; HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->()V PLokhttp3/logging/HttpLoggingInterceptor$Level;->()V HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->(Ljava/lang/String;I)V PLokhttp3/logging/HttpLoggingInterceptor$Level;->(Ljava/lang/String;I)V Lokhttp3/logging/HttpLoggingInterceptor$Logger; HSPLokhttp3/logging/HttpLoggingInterceptor$Logger;->()V PLokhttp3/logging/HttpLoggingInterceptor$Logger;->()V Lokhttp3/logging/HttpLoggingInterceptor$Logger$Companion; HSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;->()V PLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;->()V HSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;->()V PLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;->()V Lokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger; HSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;->()V PLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;->()V HSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;->log(Ljava/lang/String;)V PLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;->log(Ljava/lang/String;)V Lokio/-Base64; HSPLokio/-Base64;->()V PLokio/-Base64;->()V HSPLokio/-Base64;->encodeBase64$default([B[BILjava/lang/Object;)Ljava/lang/String; PLokio/-Base64;->encodeBase64$default([B[BILjava/lang/Object;)Ljava/lang/String; HSPLokio/-Base64;->encodeBase64([B[B)Ljava/lang/String; PLokio/-Base64;->encodeBase64([B[B)Ljava/lang/String; Lokio/-SegmentedByteString; HSPLokio/-SegmentedByteString;->()V PLokio/-SegmentedByteString;->()V HSPLokio/-SegmentedByteString;->arrayRangeEquals([BI[BII)Z HPLokio/-SegmentedByteString;->arrayRangeEquals([BI[BII)Z HSPLokio/-SegmentedByteString;->checkOffsetAndCount(JJJ)V HPLokio/-SegmentedByteString;->checkOffsetAndCount(JJJ)V HSPLokio/-SegmentedByteString;->getDEFAULT__ByteString_size()I PLokio/-SegmentedByteString;->getDEFAULT__ByteString_size()I HSPLokio/-SegmentedByteString;->resolveDefaultParameter(Lokio/ByteString;I)I PLokio/-SegmentedByteString;->resolveDefaultParameter(Lokio/ByteString;I)I HSPLokio/-SegmentedByteString;->resolveDefaultParameter([BI)I PLokio/-SegmentedByteString;->resolveDefaultParameter([BI)I HSPLokio/-SegmentedByteString;->reverseBytes(I)I PLokio/-SegmentedByteString;->reverseBytes(I)I Lokio/AsyncTimeout; HSPLokio/AsyncTimeout;->()V PLokio/AsyncTimeout;->()V HSPLokio/AsyncTimeout;->()V PLokio/AsyncTimeout;->()V HSPLokio/AsyncTimeout;->access$getCondition$cp()Ljava/util/concurrent/locks/Condition; PLokio/AsyncTimeout;->access$getCondition$cp()Ljava/util/concurrent/locks/Condition; HSPLokio/AsyncTimeout;->access$getHead$cp()Lokio/AsyncTimeout; PLokio/AsyncTimeout;->access$getHead$cp()Lokio/AsyncTimeout; HSPLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_MILLIS$cp()J PLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_MILLIS$cp()J HSPLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_NANOS$cp()J PLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_NANOS$cp()J HSPLokio/AsyncTimeout;->access$getInQueue$p(Lokio/AsyncTimeout;)Z PLokio/AsyncTimeout;->access$getInQueue$p(Lokio/AsyncTimeout;)Z HSPLokio/AsyncTimeout;->access$getLock$cp()Ljava/util/concurrent/locks/ReentrantLock; PLokio/AsyncTimeout;->access$getLock$cp()Ljava/util/concurrent/locks/ReentrantLock; HSPLokio/AsyncTimeout;->access$getNext$p(Lokio/AsyncTimeout;)Lokio/AsyncTimeout; PLokio/AsyncTimeout;->access$getNext$p(Lokio/AsyncTimeout;)Lokio/AsyncTimeout; HSPLokio/AsyncTimeout;->access$remainingNanos(Lokio/AsyncTimeout;J)J PLokio/AsyncTimeout;->access$remainingNanos(Lokio/AsyncTimeout;J)J HSPLokio/AsyncTimeout;->access$setHead$cp(Lokio/AsyncTimeout;)V PLokio/AsyncTimeout;->access$setHead$cp(Lokio/AsyncTimeout;)V HSPLokio/AsyncTimeout;->access$setInQueue$p(Lokio/AsyncTimeout;Z)V PLokio/AsyncTimeout;->access$setInQueue$p(Lokio/AsyncTimeout;Z)V HSPLokio/AsyncTimeout;->access$setNext$p(Lokio/AsyncTimeout;Lokio/AsyncTimeout;)V PLokio/AsyncTimeout;->access$setNext$p(Lokio/AsyncTimeout;Lokio/AsyncTimeout;)V HSPLokio/AsyncTimeout;->access$setTimeoutAt$p(Lokio/AsyncTimeout;J)V PLokio/AsyncTimeout;->access$setTimeoutAt$p(Lokio/AsyncTimeout;J)V HSPLokio/AsyncTimeout;->enter()V PLokio/AsyncTimeout;->enter()V HSPLokio/AsyncTimeout;->exit()Z PLokio/AsyncTimeout;->exit()Z HSPLokio/AsyncTimeout;->sink(Lokio/Sink;)Lokio/Sink; PLokio/AsyncTimeout;->sink(Lokio/Sink;)Lokio/Sink; HSPLokio/AsyncTimeout;->source(Lokio/Source;)Lokio/Source; PLokio/AsyncTimeout;->source(Lokio/Source;)Lokio/Source; Lokio/AsyncTimeout$Companion; HSPLokio/AsyncTimeout$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/AsyncTimeout$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokio/AsyncTimeout$Companion;->access$cancelScheduledTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;)Z PLokio/AsyncTimeout$Companion;->access$cancelScheduledTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;)Z HSPLokio/AsyncTimeout$Companion;->access$scheduleTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;JZ)V PLokio/AsyncTimeout$Companion;->access$scheduleTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;JZ)V HSPLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout; PLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout; Lokio/AsyncTimeout$Watchdog; HSPLokio/AsyncTimeout$Watchdog;->()V PLokio/AsyncTimeout$Watchdog;->()V HSPLokio/AsyncTimeout$Watchdog;->run()V PLokio/AsyncTimeout$Watchdog;->run()V Lokio/AsyncTimeout$sink$1; HSPLokio/AsyncTimeout$sink$1;->(Lokio/AsyncTimeout;Lokio/Sink;)V PLokio/AsyncTimeout$sink$1;->(Lokio/AsyncTimeout;Lokio/Sink;)V HSPLokio/AsyncTimeout$sink$1;->flush()V PLokio/AsyncTimeout$sink$1;->flush()V HSPLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V PLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V Lokio/AsyncTimeout$source$1; HSPLokio/AsyncTimeout$source$1;->(Lokio/AsyncTimeout;Lokio/Source;)V PLokio/AsyncTimeout$source$1;->(Lokio/AsyncTimeout;Lokio/Source;)V HSPLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J PLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J Lokio/Buffer; HSPLokio/Buffer;->()V PLokio/Buffer;->()V HSPLokio/Buffer;->clear()V PLokio/Buffer;->clear()V HSPLokio/Buffer;->completeSegmentByteCount()J PLokio/Buffer;->completeSegmentByteCount()J HSPLokio/Buffer;->copyTo(Lokio/Buffer;JJ)Lokio/Buffer; PLokio/Buffer;->copyTo(Lokio/Buffer;JJ)Lokio/Buffer; HSPLokio/Buffer;->exhausted()Z HPLokio/Buffer;->exhausted()Z HSPLokio/Buffer;->getByte(J)B HPLokio/Buffer;->getByte(J)B HSPLokio/Buffer;->indexOfElement(Lokio/ByteString;)J PLokio/Buffer;->indexOfElement(Lokio/ByteString;)J HSPLokio/Buffer;->indexOfElement(Lokio/ByteString;J)J PLokio/Buffer;->indexOfElement(Lokio/ByteString;J)J HSPLokio/Buffer;->rangeEquals(JLokio/ByteString;)Z PLokio/Buffer;->rangeEquals(JLokio/ByteString;)Z HSPLokio/Buffer;->rangeEquals(JLokio/ByteString;II)Z PLokio/Buffer;->rangeEquals(JLokio/ByteString;II)Z HSPLokio/Buffer;->read(Lokio/Buffer;J)J PLokio/Buffer;->read(Lokio/Buffer;J)J HSPLokio/Buffer;->read([BII)I PLokio/Buffer;->read([BII)I HSPLokio/Buffer;->readByte()B PLokio/Buffer;->readByte()B HSPLokio/Buffer;->readByteArray(J)[B PLokio/Buffer;->readByteArray(J)[B HSPLokio/Buffer;->readByteString()Lokio/ByteString; PLokio/Buffer;->readByteString()Lokio/ByteString; HSPLokio/Buffer;->readByteString(J)Lokio/ByteString; PLokio/Buffer;->readByteString(J)Lokio/ByteString; HSPLokio/Buffer;->readFully([B)V PLokio/Buffer;->readFully([B)V HSPLokio/Buffer;->readInt()I PLokio/Buffer;->readInt()I HSPLokio/Buffer;->readIntLe()I PLokio/Buffer;->readIntLe()I HSPLokio/Buffer;->readShort()S PLokio/Buffer;->readShort()S HSPLokio/Buffer;->readUtf8CodePoint()I HPLokio/Buffer;->readUtf8CodePoint()I HSPLokio/Buffer;->setSize$okio(J)V PLokio/Buffer;->setSize$okio(J)V HSPLokio/Buffer;->size()J HPLokio/Buffer;->size()J HSPLokio/Buffer;->skip(J)V HPLokio/Buffer;->skip(J)V HSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; HPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; HSPLokio/Buffer;->write(Lokio/Buffer;J)V HPLokio/Buffer;->write(Lokio/Buffer;J)V HSPLokio/Buffer;->write(Lokio/ByteString;)Lokio/Buffer; PLokio/Buffer;->write(Lokio/ByteString;)Lokio/Buffer; HSPLokio/Buffer;->write([B)Lokio/Buffer; PLokio/Buffer;->write([B)Lokio/Buffer; HSPLokio/Buffer;->write([BII)Lokio/Buffer; PLokio/Buffer;->write([BII)Lokio/Buffer; HSPLokio/Buffer;->writeAll(Lokio/Source;)J PLokio/Buffer;->writeAll(Lokio/Source;)J HSPLokio/Buffer;->writeByte(I)Lokio/Buffer; PLokio/Buffer;->writeByte(I)Lokio/Buffer; HSPLokio/Buffer;->writeByte(I)Lokio/BufferedSink; PLokio/Buffer;->writeByte(I)Lokio/BufferedSink; HSPLokio/Buffer;->writeDecimalLong(J)Lokio/Buffer; PLokio/Buffer;->writeDecimalLong(J)Lokio/Buffer; HSPLokio/Buffer;->writeInt(I)Lokio/Buffer; PLokio/Buffer;->writeInt(I)Lokio/Buffer; HSPLokio/Buffer;->writeShort(I)Lokio/Buffer; PLokio/Buffer;->writeShort(I)Lokio/Buffer; HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;)Lokio/Buffer; PLokio/Buffer;->writeUtf8(Ljava/lang/String;)Lokio/Buffer; HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;II)Lokio/Buffer; HPLokio/Buffer;->writeUtf8(Ljava/lang/String;II)Lokio/Buffer; Lokio/Buffer$UnsafeCursor; HSPLokio/Buffer$UnsafeCursor;->()V PLokio/Buffer$UnsafeCursor;->()V Lokio/BufferedSink; Lokio/BufferedSource; Lokio/ByteString; HSPLokio/ByteString;->()V PLokio/ByteString;->()V HSPLokio/ByteString;->([B)V HPLokio/ByteString;->([B)V HSPLokio/ByteString;->base64()Ljava/lang/String; PLokio/ByteString;->base64()Ljava/lang/String; HSPLokio/ByteString;->compareTo(Ljava/lang/Object;)I PLokio/ByteString;->compareTo(Ljava/lang/Object;)I HSPLokio/ByteString;->compareTo(Lokio/ByteString;)I PLokio/ByteString;->compareTo(Lokio/ByteString;)I HSPLokio/ByteString;->digest$okio(Ljava/lang/String;)Lokio/ByteString; PLokio/ByteString;->digest$okio(Ljava/lang/String;)Lokio/ByteString; HSPLokio/ByteString;->endsWith(Lokio/ByteString;)Z PLokio/ByteString;->endsWith(Lokio/ByteString;)Z HSPLokio/ByteString;->equals(Ljava/lang/Object;)Z PLokio/ByteString;->equals(Ljava/lang/Object;)Z HSPLokio/ByteString;->getByte(I)B PLokio/ByteString;->getByte(I)B HSPLokio/ByteString;->getData$okio()[B PLokio/ByteString;->getData$okio()[B HSPLokio/ByteString;->getHashCode$okio()I PLokio/ByteString;->getHashCode$okio()I HSPLokio/ByteString;->getSize$okio()I PLokio/ByteString;->getSize$okio()I HSPLokio/ByteString;->getUtf8$okio()Ljava/lang/String; PLokio/ByteString;->getUtf8$okio()Ljava/lang/String; HSPLokio/ByteString;->hashCode()I PLokio/ByteString;->hashCode()I HSPLokio/ByteString;->hex()Ljava/lang/String; PLokio/ByteString;->hex()Ljava/lang/String; HSPLokio/ByteString;->indexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I PLokio/ByteString;->indexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I HSPLokio/ByteString;->indexOf(Lokio/ByteString;I)I PLokio/ByteString;->indexOf(Lokio/ByteString;I)I HSPLokio/ByteString;->indexOf([BI)I PLokio/ByteString;->indexOf([BI)I HSPLokio/ByteString;->internalArray$okio()[B PLokio/ByteString;->internalArray$okio()[B HSPLokio/ByteString;->internalGet$okio(I)B PLokio/ByteString;->internalGet$okio(I)B HSPLokio/ByteString;->lastIndexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I PLokio/ByteString;->lastIndexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I HSPLokio/ByteString;->lastIndexOf(Lokio/ByteString;I)I PLokio/ByteString;->lastIndexOf(Lokio/ByteString;I)I HSPLokio/ByteString;->lastIndexOf([BI)I PLokio/ByteString;->lastIndexOf([BI)I HSPLokio/ByteString;->md5()Lokio/ByteString; PLokio/ByteString;->md5()Lokio/ByteString; HSPLokio/ByteString;->rangeEquals(ILokio/ByteString;II)Z PLokio/ByteString;->rangeEquals(ILokio/ByteString;II)Z HSPLokio/ByteString;->rangeEquals(I[BII)Z PLokio/ByteString;->rangeEquals(I[BII)Z HSPLokio/ByteString;->setHashCode$okio(I)V PLokio/ByteString;->setHashCode$okio(I)V HSPLokio/ByteString;->setUtf8$okio(Ljava/lang/String;)V PLokio/ByteString;->setUtf8$okio(Ljava/lang/String;)V HSPLokio/ByteString;->size()I PLokio/ByteString;->size()I HSPLokio/ByteString;->startsWith(Lokio/ByteString;)Z PLokio/ByteString;->startsWith(Lokio/ByteString;)Z HSPLokio/ByteString;->substring$default(Lokio/ByteString;IIILjava/lang/Object;)Lokio/ByteString; PLokio/ByteString;->substring$default(Lokio/ByteString;IIILjava/lang/Object;)Lokio/ByteString; HSPLokio/ByteString;->substring(II)Lokio/ByteString; PLokio/ByteString;->substring(II)Lokio/ByteString; HSPLokio/ByteString;->toAsciiLowercase()Lokio/ByteString; PLokio/ByteString;->toAsciiLowercase()Lokio/ByteString; HSPLokio/ByteString;->utf8()Ljava/lang/String; PLokio/ByteString;->utf8()Ljava/lang/String; HSPLokio/ByteString;->write$okio(Lokio/Buffer;II)V PLokio/ByteString;->write$okio(Lokio/Buffer;II)V Lokio/ByteString$Companion; HSPLokio/ByteString$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/ByteString$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString; PLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString; HSPLokio/ByteString$Companion;->encodeUtf8(Ljava/lang/String;)Lokio/ByteString; PLokio/ByteString$Companion;->encodeUtf8(Ljava/lang/String;)Lokio/ByteString; HSPLokio/ByteString$Companion;->of$default(Lokio/ByteString$Companion;[BIIILjava/lang/Object;)Lokio/ByteString; PLokio/ByteString$Companion;->of$default(Lokio/ByteString$Companion;[BIIILjava/lang/Object;)Lokio/ByteString; HSPLokio/ByteString$Companion;->of([BII)Lokio/ByteString; PLokio/ByteString$Companion;->of([BII)Lokio/ByteString; Lokio/FileMetadata; HSPLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;)V PLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;)V HSPLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokio/FileMetadata;->getSize()Ljava/lang/Long; PLokio/FileMetadata;->getSize()Ljava/lang/Long; HSPLokio/FileMetadata;->getSymlinkTarget()Lokio/Path; PLokio/FileMetadata;->getSymlinkTarget()Lokio/Path; Lokio/FileSystem; HSPLokio/FileSystem;->()V PLokio/FileSystem;->()V HSPLokio/FileSystem;->()V PLokio/FileSystem;->()V HSPLokio/FileSystem;->appendingSink(Lokio/Path;)Lokio/Sink; PLokio/FileSystem;->appendingSink(Lokio/Path;)Lokio/Sink; HSPLokio/FileSystem;->createDirectories(Lokio/Path;)V PLokio/FileSystem;->createDirectories(Lokio/Path;)V HSPLokio/FileSystem;->createDirectories(Lokio/Path;Z)V PLokio/FileSystem;->createDirectories(Lokio/Path;Z)V HSPLokio/FileSystem;->createDirectory(Lokio/Path;)V PLokio/FileSystem;->createDirectory(Lokio/Path;)V HSPLokio/FileSystem;->delete(Lokio/Path;)V PLokio/FileSystem;->delete(Lokio/Path;)V HSPLokio/FileSystem;->exists(Lokio/Path;)Z PLokio/FileSystem;->exists(Lokio/Path;)Z HSPLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata; PLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata; HSPLokio/FileSystem;->sink(Lokio/Path;)Lokio/Sink; PLokio/FileSystem;->sink(Lokio/Path;)Lokio/Sink; Lokio/FileSystem$Companion; HSPLokio/FileSystem$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/FileSystem$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokio/ForwardingFileSystem; HSPLokio/ForwardingFileSystem;->(Lokio/FileSystem;)V PLokio/ForwardingFileSystem;->(Lokio/FileSystem;)V HSPLokio/ForwardingFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink; PLokio/ForwardingFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink; HSPLokio/ForwardingFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V PLokio/ForwardingFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V HSPLokio/ForwardingFileSystem;->createDirectory(Lokio/Path;Z)V PLokio/ForwardingFileSystem;->createDirectory(Lokio/Path;Z)V HSPLokio/ForwardingFileSystem;->delete(Lokio/Path;Z)V PLokio/ForwardingFileSystem;->delete(Lokio/Path;Z)V HSPLokio/ForwardingFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; PLokio/ForwardingFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; HSPLokio/ForwardingFileSystem;->onPathParameter(Lokio/Path;Ljava/lang/String;Ljava/lang/String;)Lokio/Path; PLokio/ForwardingFileSystem;->onPathParameter(Lokio/Path;Ljava/lang/String;Ljava/lang/String;)Lokio/Path; HSPLokio/ForwardingFileSystem;->sink(Lokio/Path;Z)Lokio/Sink; PLokio/ForwardingFileSystem;->sink(Lokio/Path;Z)Lokio/Sink; Lokio/ForwardingSink; HSPLokio/ForwardingSink;->(Lokio/Sink;)V PLokio/ForwardingSink;->(Lokio/Sink;)V HSPLokio/ForwardingSink;->close()V PLokio/ForwardingSink;->close()V HSPLokio/ForwardingSink;->flush()V PLokio/ForwardingSink;->flush()V HSPLokio/ForwardingSink;->write(Lokio/Buffer;J)V PLokio/ForwardingSink;->write(Lokio/Buffer;J)V Lokio/ForwardingSource; HSPLokio/ForwardingSource;->(Lokio/Source;)V PLokio/ForwardingSource;->(Lokio/Source;)V HSPLokio/ForwardingSource;->close()V PLokio/ForwardingSource;->close()V HSPLokio/ForwardingSource;->delegate()Lokio/Source; PLokio/ForwardingSource;->delegate()Lokio/Source; Lokio/GzipSource; HSPLokio/GzipSource;->(Lokio/Source;)V PLokio/GzipSource;->(Lokio/Source;)V HSPLokio/GzipSource;->checkEqual(IILjava/lang/String;)V PLokio/GzipSource;->checkEqual(IILjava/lang/String;)V HSPLokio/GzipSource;->close()V PLokio/GzipSource;->close()V HSPLokio/GzipSource;->read(Lokio/Buffer;J)J PLokio/GzipSource;->read(Lokio/Buffer;J)J HSPLokio/GzipSource;->updateCrc(JLokio/Buffer;J)V PLokio/GzipSource;->updateCrc(JLokio/Buffer;J)V Lokio/InflaterSource; HSPLokio/InflaterSource;->(Lokio/BufferedSource;Ljava/util/zip/Inflater;)V PLokio/InflaterSource;->(Lokio/BufferedSource;Ljava/util/zip/Inflater;)V HSPLokio/InflaterSource;->close()V PLokio/InflaterSource;->close()V HSPLokio/InflaterSource;->read(Lokio/Buffer;J)J PLokio/InflaterSource;->read(Lokio/Buffer;J)J HSPLokio/InflaterSource;->readOrInflate(Lokio/Buffer;J)J PLokio/InflaterSource;->readOrInflate(Lokio/Buffer;J)J HSPLokio/InflaterSource;->refill()Z PLokio/InflaterSource;->refill()Z Lokio/InputStreamSource; HSPLokio/InputStreamSource;->(Ljava/io/InputStream;Lokio/Timeout;)V PLokio/InputStreamSource;->(Ljava/io/InputStream;Lokio/Timeout;)V HSPLokio/InputStreamSource;->read(Lokio/Buffer;J)J PLokio/InputStreamSource;->read(Lokio/Buffer;J)J Lokio/JvmSystemFileSystem; HSPLokio/JvmSystemFileSystem;->()V PLokio/JvmSystemFileSystem;->()V HSPLokio/JvmSystemFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink; PLokio/JvmSystemFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink; HSPLokio/JvmSystemFileSystem;->createDirectory(Lokio/Path;Z)V PLokio/JvmSystemFileSystem;->createDirectory(Lokio/Path;Z)V HSPLokio/JvmSystemFileSystem;->delete(Lokio/Path;Z)V PLokio/JvmSystemFileSystem;->delete(Lokio/Path;Z)V HSPLokio/JvmSystemFileSystem;->sink(Lokio/Path;Z)Lokio/Sink; PLokio/JvmSystemFileSystem;->sink(Lokio/Path;Z)Lokio/Sink; Lokio/JvmSystemFileSystem$$ExternalSyntheticOutline0; HSPLokio/JvmSystemFileSystem$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; PLokio/JvmSystemFileSystem$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap; Lokio/NioSystemFileSystem; HSPLokio/NioSystemFileSystem;->()V PLokio/NioSystemFileSystem;->()V HSPLokio/NioSystemFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V PLokio/NioSystemFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V HSPLokio/NioSystemFileSystem;->metadataOrNull(Ljava/nio/file/Path;)Lokio/FileMetadata; PLokio/NioSystemFileSystem;->metadataOrNull(Ljava/nio/file/Path;)Lokio/FileMetadata; HSPLokio/NioSystemFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; PLokio/NioSystemFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; HSPLokio/NioSystemFileSystem;->zeroToNull(Ljava/nio/file/attribute/FileTime;)Ljava/lang/Long; PLokio/NioSystemFileSystem;->zeroToNull(Ljava/nio/file/attribute/FileTime;)Ljava/lang/Long; Lokio/Okio; HSPLokio/Okio;->buffer(Lokio/Sink;)Lokio/BufferedSink; PLokio/Okio;->buffer(Lokio/Sink;)Lokio/BufferedSink; HSPLokio/Okio;->buffer(Lokio/Source;)Lokio/BufferedSource; PLokio/Okio;->buffer(Lokio/Source;)Lokio/BufferedSource; HSPLokio/Okio;->sink(Ljava/net/Socket;)Lokio/Sink; PLokio/Okio;->sink(Ljava/net/Socket;)Lokio/Sink; HSPLokio/Okio;->source(Ljava/net/Socket;)Lokio/Source; PLokio/Okio;->source(Ljava/net/Socket;)Lokio/Source; Lokio/Okio__JvmOkioKt; HSPLokio/Okio__JvmOkioKt;->()V PLokio/Okio__JvmOkioKt;->()V HSPLokio/Okio__JvmOkioKt;->sink$default(Ljava/io/File;ZILjava/lang/Object;)Lokio/Sink; PLokio/Okio__JvmOkioKt;->sink$default(Ljava/io/File;ZILjava/lang/Object;)Lokio/Sink; HSPLokio/Okio__JvmOkioKt;->sink(Ljava/io/File;Z)Lokio/Sink; PLokio/Okio__JvmOkioKt;->sink(Ljava/io/File;Z)Lokio/Sink; HSPLokio/Okio__JvmOkioKt;->sink(Ljava/io/OutputStream;)Lokio/Sink; PLokio/Okio__JvmOkioKt;->sink(Ljava/io/OutputStream;)Lokio/Sink; HSPLokio/Okio__JvmOkioKt;->sink(Ljava/net/Socket;)Lokio/Sink; PLokio/Okio__JvmOkioKt;->sink(Ljava/net/Socket;)Lokio/Sink; HSPLokio/Okio__JvmOkioKt;->source(Ljava/net/Socket;)Lokio/Source; PLokio/Okio__JvmOkioKt;->source(Ljava/net/Socket;)Lokio/Source; Lokio/Okio__OkioKt; HSPLokio/Okio__OkioKt;->buffer(Lokio/Sink;)Lokio/BufferedSink; PLokio/Okio__OkioKt;->buffer(Lokio/Sink;)Lokio/BufferedSink; HSPLokio/Okio__OkioKt;->buffer(Lokio/Source;)Lokio/BufferedSource; PLokio/Okio__OkioKt;->buffer(Lokio/Source;)Lokio/BufferedSource; Lokio/Options; HSPLokio/Options;->()V PLokio/Options;->()V HSPLokio/Options;->([Lokio/ByteString;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/Options;->([Lokio/ByteString;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lokio/Options$Companion; HSPLokio/Options$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/Options$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/List;IILjava/util/List;)V PLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/List;IILjava/util/List;)V HSPLokio/Options$Companion;->of([Lokio/ByteString;)Lokio/Options; PLokio/Options$Companion;->of([Lokio/ByteString;)Lokio/Options; Lokio/OutputStreamSink; HSPLokio/OutputStreamSink;->(Ljava/io/OutputStream;Lokio/Timeout;)V PLokio/OutputStreamSink;->(Ljava/io/OutputStream;Lokio/Timeout;)V HSPLokio/OutputStreamSink;->close()V PLokio/OutputStreamSink;->close()V HSPLokio/OutputStreamSink;->flush()V PLokio/OutputStreamSink;->flush()V HSPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V PLokio/OutputStreamSink;->write(Lokio/Buffer;J)V Lokio/Path; HSPLokio/Path;->()V PLokio/Path;->()V HSPLokio/Path;->(Lokio/ByteString;)V PLokio/Path;->(Lokio/ByteString;)V HSPLokio/Path;->getBytes$okio()Lokio/ByteString; PLokio/Path;->getBytes$okio()Lokio/ByteString; HSPLokio/Path;->isAbsolute()Z PLokio/Path;->isAbsolute()Z HSPLokio/Path;->parent()Lokio/Path; PLokio/Path;->parent()Lokio/Path; HSPLokio/Path;->resolve(Ljava/lang/String;)Lokio/Path; PLokio/Path;->resolve(Ljava/lang/String;)Lokio/Path; HSPLokio/Path;->toFile()Ljava/io/File; PLokio/Path;->toFile()Ljava/io/File; HSPLokio/Path;->toNioPath()Ljava/nio/file/Path; PLokio/Path;->toNioPath()Ljava/nio/file/Path; HSPLokio/Path;->toString()Ljava/lang/String; PLokio/Path;->toString()Ljava/lang/String; HSPLokio/Path;->volumeLetter()Ljava/lang/Character; PLokio/Path;->volumeLetter()Ljava/lang/Character; Lokio/Path$$ExternalSyntheticApiModelOutline0; HSPLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path; PLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path; HSPLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/nio/file/attribute/FileTime;)J PLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/nio/file/attribute/FileTime;)J Lokio/Path$Companion; HSPLokio/Path$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/Path$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/io/File;ZILjava/lang/Object;)Lokio/Path; PLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/io/File;ZILjava/lang/Object;)Lokio/Path; HSPLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/lang/String;ZILjava/lang/Object;)Lokio/Path; PLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/lang/String;ZILjava/lang/Object;)Lokio/Path; HSPLokio/Path$Companion;->get(Ljava/io/File;Z)Lokio/Path; PLokio/Path$Companion;->get(Ljava/io/File;Z)Lokio/Path; HSPLokio/Path$Companion;->get(Ljava/lang/String;Z)Lokio/Path; PLokio/Path$Companion;->get(Ljava/lang/String;Z)Lokio/Path; Lokio/RealBufferedSink; HSPLokio/RealBufferedSink;->(Lokio/Sink;)V PLokio/RealBufferedSink;->(Lokio/Sink;)V HSPLokio/RealBufferedSink;->close()V PLokio/RealBufferedSink;->close()V HSPLokio/RealBufferedSink;->emitCompleteSegments()Lokio/BufferedSink; PLokio/RealBufferedSink;->emitCompleteSegments()Lokio/BufferedSink; HSPLokio/RealBufferedSink;->flush()V PLokio/RealBufferedSink;->flush()V HSPLokio/RealBufferedSink;->getBuffer()Lokio/Buffer; PLokio/RealBufferedSink;->getBuffer()Lokio/Buffer; HSPLokio/RealBufferedSink;->write(Lokio/Buffer;J)V PLokio/RealBufferedSink;->write(Lokio/Buffer;J)V HSPLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink; PLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeByte(I)Lokio/BufferedSink; PLokio/RealBufferedSink;->writeByte(I)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeDecimalLong(J)Lokio/BufferedSink; PLokio/RealBufferedSink;->writeDecimalLong(J)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink; PLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink; PLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lokio/BufferedSink; PLokio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lokio/BufferedSink; Lokio/RealBufferedSource; HSPLokio/RealBufferedSource;->(Lokio/Source;)V PLokio/RealBufferedSource;->(Lokio/Source;)V HSPLokio/RealBufferedSource;->close()V PLokio/RealBufferedSource;->close()V HSPLokio/RealBufferedSource;->exhausted()Z HPLokio/RealBufferedSource;->exhausted()Z HSPLokio/RealBufferedSource;->getBuffer()Lokio/Buffer; PLokio/RealBufferedSource;->getBuffer()Lokio/Buffer; HSPLokio/RealBufferedSource;->read(Lokio/Buffer;J)J PLokio/RealBufferedSource;->read(Lokio/Buffer;J)J HSPLokio/RealBufferedSource;->readByte()B PLokio/RealBufferedSource;->readByte()B HSPLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString; PLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString; HSPLokio/RealBufferedSource;->readInt()I PLokio/RealBufferedSource;->readInt()I HSPLokio/RealBufferedSource;->readIntLe()I PLokio/RealBufferedSource;->readIntLe()I HSPLokio/RealBufferedSource;->readShort()S PLokio/RealBufferedSource;->readShort()S HSPLokio/RealBufferedSource;->readUtf8CodePoint()I HPLokio/RealBufferedSource;->readUtf8CodePoint()I HSPLokio/RealBufferedSource;->request(J)Z HPLokio/RealBufferedSource;->request(J)Z HSPLokio/RealBufferedSource;->require(J)V HPLokio/RealBufferedSource;->require(J)V HSPLokio/RealBufferedSource;->skip(J)V PLokio/RealBufferedSource;->skip(J)V Lokio/Segment; HSPLokio/Segment;->()V PLokio/Segment;->()V HSPLokio/Segment;->()V PLokio/Segment;->()V HSPLokio/Segment;->([BIIZZ)V PLokio/Segment;->([BIIZZ)V HSPLokio/Segment;->compact()V PLokio/Segment;->compact()V HSPLokio/Segment;->pop()Lokio/Segment; PLokio/Segment;->pop()Lokio/Segment; HSPLokio/Segment;->push(Lokio/Segment;)Lokio/Segment; PLokio/Segment;->push(Lokio/Segment;)Lokio/Segment; HSPLokio/Segment;->sharedCopy()Lokio/Segment; PLokio/Segment;->sharedCopy()Lokio/Segment; HSPLokio/Segment;->split(I)Lokio/Segment; PLokio/Segment;->split(I)Lokio/Segment; HSPLokio/Segment;->writeTo(Lokio/Segment;I)V PLokio/Segment;->writeTo(Lokio/Segment;I)V Lokio/Segment$Companion; HSPLokio/Segment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/Segment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokio/SegmentPool; HSPLokio/SegmentPool;->()V PLokio/SegmentPool;->()V HSPLokio/SegmentPool;->()V PLokio/SegmentPool;->()V HSPLokio/SegmentPool;->firstRef()Ljava/util/concurrent/atomic/AtomicReference; HPLokio/SegmentPool;->firstRef()Ljava/util/concurrent/atomic/AtomicReference; HSPLokio/SegmentPool;->recycle(Lokio/Segment;)V HPLokio/SegmentPool;->recycle(Lokio/Segment;)V HSPLokio/SegmentPool;->take()Lokio/Segment; HPLokio/SegmentPool;->take()Lokio/Segment; Lokio/Sink; Lokio/SocketAsyncTimeout; HSPLokio/SocketAsyncTimeout;->(Ljava/net/Socket;)V PLokio/SocketAsyncTimeout;->(Ljava/net/Socket;)V Lokio/Source; Lokio/Timeout; HSPLokio/Timeout;->()V PLokio/Timeout;->()V HSPLokio/Timeout;->()V PLokio/Timeout;->()V HSPLokio/Timeout;->hasDeadline()Z PLokio/Timeout;->hasDeadline()Z HSPLokio/Timeout;->throwIfReached()V PLokio/Timeout;->throwIfReached()V HSPLokio/Timeout;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/Timeout; PLokio/Timeout;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/Timeout; HSPLokio/Timeout;->timeoutNanos()J PLokio/Timeout;->timeoutNanos()J Lokio/Timeout$Companion; HSPLokio/Timeout$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/Timeout$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokio/Timeout$Companion$NONE$1; HSPLokio/Timeout$Companion$NONE$1;->()V PLokio/Timeout$Companion$NONE$1;->()V Lokio/Utf8; HSPLokio/Utf8;->size$default(Ljava/lang/String;IIILjava/lang/Object;)J PLokio/Utf8;->size$default(Ljava/lang/String;IIILjava/lang/Object;)J HSPLokio/Utf8;->size(Ljava/lang/String;II)J PLokio/Utf8;->size(Ljava/lang/String;II)J Lokio/_JvmPlatformKt; HSPLokio/_JvmPlatformKt;->asUtf8ToByteArray(Ljava/lang/String;)[B PLokio/_JvmPlatformKt;->asUtf8ToByteArray(Ljava/lang/String;)[B HSPLokio/_JvmPlatformKt;->toUtf8String([B)Ljava/lang/String; PLokio/_JvmPlatformKt;->toUtf8String([B)Ljava/lang/String; Lokio/internal/-Buffer; HSPLokio/internal/-Buffer;->()V PLokio/internal/-Buffer;->()V HSPLokio/internal/-Buffer;->getHEX_DIGIT_BYTES()[B PLokio/internal/-Buffer;->getHEX_DIGIT_BYTES()[B Lokio/internal/-ByteString; HSPLokio/internal/-ByteString;->()V PLokio/internal/-ByteString;->()V HSPLokio/internal/-ByteString;->access$decodeHexDigit(C)I PLokio/internal/-ByteString;->access$decodeHexDigit(C)I HSPLokio/internal/-ByteString;->commonWrite(Lokio/ByteString;Lokio/Buffer;II)V PLokio/internal/-ByteString;->commonWrite(Lokio/ByteString;Lokio/Buffer;II)V HSPLokio/internal/-ByteString;->getHEX_DIGIT_CHARS()[C PLokio/internal/-ByteString;->getHEX_DIGIT_CHARS()[C Lokio/internal/-FileSystem; HSPLokio/internal/-FileSystem;->commonCreateDirectories(Lokio/FileSystem;Lokio/Path;Z)V PLokio/internal/-FileSystem;->commonCreateDirectories(Lokio/FileSystem;Lokio/Path;Z)V HSPLokio/internal/-FileSystem;->commonExists(Lokio/FileSystem;Lokio/Path;)Z PLokio/internal/-FileSystem;->commonExists(Lokio/FileSystem;Lokio/Path;)Z HSPLokio/internal/-FileSystem;->commonMetadata(Lokio/FileSystem;Lokio/Path;)Lokio/FileMetadata; PLokio/internal/-FileSystem;->commonMetadata(Lokio/FileSystem;Lokio/Path;)Lokio/FileMetadata; Lokio/internal/-Path; HSPLokio/internal/-Path;->()V PLokio/internal/-Path;->()V HSPLokio/internal/-Path;->access$getBACKSLASH$p()Lokio/ByteString; PLokio/internal/-Path;->access$getBACKSLASH$p()Lokio/ByteString; HSPLokio/internal/-Path;->access$getDOT$p()Lokio/ByteString; PLokio/internal/-Path;->access$getDOT$p()Lokio/ByteString; HSPLokio/internal/-Path;->access$getIndexOfLastSlash(Lokio/Path;)I PLokio/internal/-Path;->access$getIndexOfLastSlash(Lokio/Path;)I HSPLokio/internal/-Path;->access$getSLASH$p()Lokio/ByteString; PLokio/internal/-Path;->access$getSLASH$p()Lokio/ByteString; HSPLokio/internal/-Path;->access$lastSegmentIsDotDot(Lokio/Path;)Z PLokio/internal/-Path;->access$lastSegmentIsDotDot(Lokio/Path;)Z HSPLokio/internal/-Path;->access$rootLength(Lokio/Path;)I PLokio/internal/-Path;->access$rootLength(Lokio/Path;)I HSPLokio/internal/-Path;->commonResolve(Lokio/Path;Lokio/Path;Z)Lokio/Path; PLokio/internal/-Path;->commonResolve(Lokio/Path;Lokio/Path;Z)Lokio/Path; HSPLokio/internal/-Path;->commonToPath(Ljava/lang/String;Z)Lokio/Path; PLokio/internal/-Path;->commonToPath(Ljava/lang/String;Z)Lokio/Path; HSPLokio/internal/-Path;->getSlash(Lokio/Path;)Lokio/ByteString; PLokio/internal/-Path;->getSlash(Lokio/Path;)Lokio/ByteString; HSPLokio/internal/-Path;->toPath(Lokio/Buffer;Z)Lokio/Path; PLokio/internal/-Path;->toPath(Lokio/Buffer;Z)Lokio/Path; HSPLokio/internal/-Path;->toSlash(B)Lokio/ByteString; PLokio/internal/-Path;->toSlash(B)Lokio/ByteString; HSPLokio/internal/-Path;->toSlash(Ljava/lang/String;)Lokio/ByteString; PLokio/internal/-Path;->toSlash(Ljava/lang/String;)Lokio/ByteString; Lokio/internal/ResourceFileSystem; HSPLokio/internal/ResourceFileSystem;->()V PLokio/internal/ResourceFileSystem;->()V HSPLokio/internal/ResourceFileSystem;->(Ljava/lang/ClassLoader;Z)V PLokio/internal/ResourceFileSystem;->(Ljava/lang/ClassLoader;Z)V Lokio/internal/ResourceFileSystem$Companion; HSPLokio/internal/ResourceFileSystem$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLokio/internal/ResourceFileSystem$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V Lokio/internal/ResourceFileSystem$roots$2; HSPLokio/internal/ResourceFileSystem$roots$2;->(Ljava/lang/ClassLoader;)V PLokio/internal/ResourceFileSystem$roots$2;->(Ljava/lang/ClassLoader;)V Lorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0; HSPLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;->(ILjava/lang/Object;Ljava/lang/Object;)V PLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;->(ILjava/lang/Object;Ljava/lang/Object;)V HSPLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;->run()V PLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;->run()V Lorg/acra/file/CrashReportPersister; HSPLorg/acra/file/CrashReportPersister;->(I)V HPLorg/acra/file/CrashReportPersister;->(I)V HSPLorg/acra/file/CrashReportPersister;->computeScaleFactor-H7hwNQA(JJ)J HPLorg/acra/file/CrashReportPersister;->computeScaleFactor-H7hwNQA(JJ)J HSPLorg/acra/file/CrashReportPersister;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt; HPLorg/acra/file/CrashReportPersister;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt; HSPLorg/acra/file/CrashReportPersister;->entityType-OLwlOKw()I PLorg/acra/file/CrashReportPersister;->entityType-OLwlOKw()I Lorg/acra/file/ReportLocator$special$$inlined$sortedBy$1; HSPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;->(I)V HPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;->(I)V HSPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I Lorg/acra/log/AndroidLogDelegate; HSPLorg/acra/log/AndroidLogDelegate;->()V PLorg/acra/log/AndroidLogDelegate;->()V Lorg/acra/startup/Report; Lorg/acra/util/Installation; HSPLorg/acra/util/Installation;->()V PLorg/acra/util/Installation;->()V PLorg/acra/util/Installation;->getChromeReaderMode()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLorg/acra/util/Installation;->getCloudOff()Landroidx/compose/ui/graphics/vector/ImageVector; PLorg/acra/util/Installation;->getCloudOff()Landroidx/compose/ui/graphics/vector/ImageVector; PLorg/acra/util/Installation;->getCollectionsBookmark()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLorg/acra/util/Installation;->getDeleteSweep()Landroidx/compose/ui/graphics/vector/ImageVector; PLorg/acra/util/Installation;->getDeleteSweep()Landroidx/compose/ui/graphics/vector/ImageVector; Lorg/acra/util/StubCreator; HSPLorg/acra/util/StubCreator;->finalConstraints-tfFHcEY(JZIF)J HPLorg/acra/util/StubCreator;->finalConstraints-tfFHcEY(JZIF)J PLorg/acra/util/StubCreator;->getArrowBack()Landroidx/compose/ui/graphics/vector/ImageVector; PLorg/acra/util/StubCreator;->getCode()Landroidx/compose/ui/graphics/vector/ImageVector; Lorg/commonmark/node/SourceSpans; HSPLorg/commonmark/node/SourceSpans;->()V HPLorg/commonmark/node/SourceSpans;->()V HSPLorg/commonmark/node/SourceSpans;->(I)V PLorg/commonmark/node/SourceSpans;->(I)V HSPLorg/commonmark/node/SourceSpans;->(Ljava/util/List;)V HPLorg/commonmark/node/SourceSpans;->(Ljava/util/List;)V HSPLorg/commonmark/node/SourceSpans;->add(I)V HPLorg/commonmark/node/SourceSpans;->add(I)V HSPLorg/commonmark/node/SourceSpans;->addInitializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V HPLorg/commonmark/node/SourceSpans;->addInitializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V HSPLorg/commonmark/node/SourceSpans;->build()Landroidx/lifecycle/viewmodel/InitializerViewModelFactory; PLorg/commonmark/node/SourceSpans;->build()Landroidx/lifecycle/viewmodel/InitializerViewModelFactory; HSPLorg/commonmark/node/SourceSpans;->isNotEmpty()Z HPLorg/commonmark/node/SourceSpans;->isNotEmpty()Z HSPLorg/commonmark/node/SourceSpans;->peek()I HPLorg/commonmark/node/SourceSpans;->peek()I HSPLorg/commonmark/node/SourceSpans;->takeMax()I HPLorg/commonmark/node/SourceSpans;->takeMax()I Lorg/jsoup/nodes/Element$$ExternalSyntheticLambda0; HSPLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;->(Ljava/lang/Object;)V PLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;->(Ljava/lang/Object;)V HSPLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;->create(Lokhttp3/Call;)Lokhttp3/EventListener; PLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;->create(Lokhttp3/Call;)Lokhttp3/EventListener; Lorg/jsoup/select/NodeFilter; Lorg/nibor/autolink/internal/Scanner; Lorg/slf4j/ILoggerFactory; Lrikka/shizuku/ShizukuProvider; HSPLrikka/shizuku/ShizukuProvider;->()V PLrikka/shizuku/ShizukuProvider;->()V HSPLrikka/shizuku/ShizukuProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V PLrikka/shizuku/ShizukuProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V HSPLrikka/shizuku/ShizukuProvider;->onCreate()Z PLrikka/shizuku/ShizukuProvider;->onCreate()Z Lrikka/shizuku/SystemServiceHelper; HSPLrikka/shizuku/SystemServiceHelper;->()V PLrikka/shizuku/SystemServiceHelper;->()V HSPLrikka/shizuku/SystemServiceHelper;->getSystemService()Landroid/os/IBinder; PLrikka/shizuku/SystemServiceHelper;->getSystemService()Landroid/os/IBinder; Lrikka/sui/Sui; HSPLrikka/sui/Sui;->byteArrayToSetOfTriggers([B)Ljava/util/LinkedHashSet; PLrikka/sui/Sui;->byteArrayToSetOfTriggers([B)Ljava/util/LinkedHashSet; HSPLrikka/sui/Sui;->init(Ljava/lang/String;)Z PLrikka/sui/Sui;->init(Ljava/lang/String;)Z HSPLrikka/sui/Sui;->intToBackoffPolicy(I)Landroidx/work/BackoffPolicy; PLrikka/sui/Sui;->intToBackoffPolicy(I)Landroidx/work/BackoffPolicy; HSPLrikka/sui/Sui;->intToNetworkType(I)Landroidx/work/NetworkType; PLrikka/sui/Sui;->intToNetworkType(I)Landroidx/work/NetworkType; HSPLrikka/sui/Sui;->intToOutOfQuotaPolicy(I)Landroidx/work/OutOfQuotaPolicy; PLrikka/sui/Sui;->intToOutOfQuotaPolicy(I)Landroidx/work/OutOfQuotaPolicy; HSPLrikka/sui/Sui;->intToState(I)Landroidx/work/WorkInfo$State; PLrikka/sui/Sui;->intToState(I)Landroidx/work/WorkInfo$State; HSPLrikka/sui/Sui;->isEnabled()Z PLrikka/sui/Sui;->isEnabled()Z HSPLrikka/sui/Sui;->isSui()Z PLrikka/sui/Sui;->isSui()Z HSPLrikka/sui/Sui;->networkTypeToInt(Landroidx/work/NetworkType;)I PLrikka/sui/Sui;->networkTypeToInt(Landroidx/work/NetworkType;)I HSPLrikka/sui/Sui;->setOfTriggersToByteArray(Ljava/util/Set;)[B PLrikka/sui/Sui;->setOfTriggersToByteArray(Ljava/util/Set;)[B HSPLrikka/sui/Sui;->stateToInt(Landroidx/work/WorkInfo$State;)I PLrikka/sui/Sui;->stateToInt(Landroidx/work/WorkInfo$State;)I Lsoup/compose/material/motion/MotionConstants; HSPLsoup/compose/material/motion/MotionConstants;->()V PLsoup/compose/material/motion/MotionConstants;->()V HSPLsoup/compose/material/motion/MotionConstants;->getDefaultSlideDistance-D9Ej5fM()F PLsoup/compose/material/motion/MotionConstants;->getDefaultSlideDistance-D9Ej5fM()F Lsoup/compose/material/motion/animation/MaterialSharedAxisKt; HSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->getForOutgoing$1()I PLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->getForOutgoing$1()I HSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughIn()Landroidx/compose/animation/EnterTransition; HPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughIn()Landroidx/compose/animation/EnterTransition; HSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughOut()Landroidx/compose/animation/ExitTransition; HPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughOut()Landroidx/compose/animation/ExitTransition; HSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialSharedAxisX$default(ZI)Landroidx/compose/animation/ContentTransform; HPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialSharedAxisX$default(ZI)Landroidx/compose/animation/ContentTransform; Lsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1; HSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->(IIZ)V HPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->(IIZ)V PLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(I)Ljava/lang/Integer; HPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(I)Ljava/lang/Integer; PLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference; HSPLtachiyomi/core/preference/AndroidPreference;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;)V HPLtachiyomi/core/preference/AndroidPreference;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;)V HSPLtachiyomi/core/preference/AndroidPreference;->access$getKey$p(Ltachiyomi/core/preference/AndroidPreference;)Ljava/lang/String; PLtachiyomi/core/preference/AndroidPreference;->access$getKey$p(Ltachiyomi/core/preference/AndroidPreference;)Ljava/lang/String; HSPLtachiyomi/core/preference/AndroidPreference;->changes()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/core/preference/AndroidPreference;->changes()Lkotlinx/coroutines/flow/Flow; HSPLtachiyomi/core/preference/AndroidPreference;->get()Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference;->get()Ljava/lang/Object; HSPLtachiyomi/core/preference/AndroidPreference;->isSet()Z PLtachiyomi/core/preference/AndroidPreference;->isSet()Z HSPLtachiyomi/core/preference/AndroidPreference;->set(Ljava/lang/Object;)V PLtachiyomi/core/preference/AndroidPreference;->set(Ljava/lang/Object;)V Ltachiyomi/core/preference/AndroidPreference$BooleanPrimitive; HSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Z)V HPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Z)V HSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1; PLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1; Ltachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1; HSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;->(Ljava/lang/String;Z)V PLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;->(Ljava/lang/String;Z)V HSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$IntPrimitive; HSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;I)V HPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;I)V HSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1; PLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1; Ltachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1; HSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;->(Ljava/lang/String;I)V PLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;->(Ljava/lang/String;I)V HSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$LongPrimitive; HSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;J)V PLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;J)V HSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1; PLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1; Ltachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1; HSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;->(JLjava/lang/String;)V PLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;->(JLjava/lang/String;)V HSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$Object; HSPLtachiyomi/core/preference/AndroidPreference$Object;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HPLtachiyomi/core/preference/AndroidPreference$Object;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLtachiyomi/core/preference/AndroidPreference$Object;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/core/preference/AndroidPreference$Object;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$StringPrimitive; HSPLtachiyomi/core/preference/AndroidPreference$StringPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/String;)V PLtachiyomi/core/preference/AndroidPreference$StringPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/String;)V HSPLtachiyomi/core/preference/AndroidPreference$StringPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$StringPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$StringSetPrimitive; HSPLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/util/Set;)V PLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;->(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/util/Set;)V HSPLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1; HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;Ltachiyomi/core/preference/AndroidPreference;)V HPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;Ltachiyomi/core/preference/AndroidPreference;)V HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2; HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V HPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2$1; HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2$1;->(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V PLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2$1;->(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1; HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Ltachiyomi/core/preference/AndroidPreference;)V HPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Ltachiyomi/core/preference/AndroidPreference;)V HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2; HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V HPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2$1; HSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2$1;->(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2$1;->(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V Ltachiyomi/core/preference/AndroidPreference$changes$2; HSPLtachiyomi/core/preference/AndroidPreference$changes$2;->(Lkotlin/coroutines/Continuation;)V HPLtachiyomi/core/preference/AndroidPreference$changes$2;->(Lkotlin/coroutines/Continuation;)V HSPLtachiyomi/core/preference/AndroidPreference$changes$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLtachiyomi/core/preference/AndroidPreference$changes$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLtachiyomi/core/preference/AndroidPreference$changes$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreference$changes$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/core/preference/AndroidPreference$changes$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/core/preference/AndroidPreference$changes$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreferenceStore; HSPLtachiyomi/core/preference/AndroidPreferenceStore;->(Landroid/app/Application;)V PLtachiyomi/core/preference/AndroidPreferenceStore;->(Landroid/app/Application;)V HSPLtachiyomi/core/preference/AndroidPreferenceStore;->getBoolean(Ljava/lang/String;Z)Ltachiyomi/core/preference/AndroidPreference$BooleanPrimitive; HPLtachiyomi/core/preference/AndroidPreferenceStore;->getBoolean(Ljava/lang/String;Z)Ltachiyomi/core/preference/AndroidPreference$BooleanPrimitive; HSPLtachiyomi/core/preference/AndroidPreferenceStore;->getInt(ILjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$IntPrimitive; PLtachiyomi/core/preference/AndroidPreferenceStore;->getInt(ILjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$IntPrimitive; HSPLtachiyomi/core/preference/AndroidPreferenceStore;->getLong(JLjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$LongPrimitive; PLtachiyomi/core/preference/AndroidPreferenceStore;->getLong(JLjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$LongPrimitive; HSPLtachiyomi/core/preference/AndroidPreferenceStore;->getObject(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ltachiyomi/core/preference/AndroidPreference$Object; HPLtachiyomi/core/preference/AndroidPreferenceStore;->getObject(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ltachiyomi/core/preference/AndroidPreference$Object; HSPLtachiyomi/core/preference/AndroidPreferenceStore;->getString(Ljava/lang/String;Ljava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$StringPrimitive; PLtachiyomi/core/preference/AndroidPreferenceStore;->getString(Ljava/lang/String;Ljava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$StringPrimitive; HSPLtachiyomi/core/preference/AndroidPreferenceStore;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ltachiyomi/core/preference/AndroidPreference$StringSetPrimitive; PLtachiyomi/core/preference/AndroidPreferenceStore;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ltachiyomi/core/preference/AndroidPreference$StringSetPrimitive; Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1; HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/Continuation;)V PLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/Continuation;)V HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0; HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V HPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V PLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1; HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;->(Landroid/content/SharedPreferences;Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;)V HPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;->(Landroid/content/SharedPreferences;Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;)V HSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;->invoke()Ljava/lang/Object; PLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;->invoke()Ljava/lang/Object; Ltachiyomi/core/preference/Preference; Ltachiyomi/core/preference/PreferenceStore; Ltachiyomi/core/preference/TriState; HSPLtachiyomi/core/preference/TriState;->()V PLtachiyomi/core/preference/TriState;->()V HSPLtachiyomi/core/preference/TriState;->(Ljava/lang/String;I)V PLtachiyomi/core/preference/TriState;->(Ljava/lang/String;I)V Ltachiyomi/core/provider/AndroidBackupFolderProvider; HSPLtachiyomi/core/provider/AndroidBackupFolderProvider;->(Landroid/app/Application;)V PLtachiyomi/core/provider/AndroidBackupFolderProvider;->(Landroid/app/Application;)V Ltachiyomi/core/provider/AndroidDownloadFolderProvider; HSPLtachiyomi/core/provider/AndroidDownloadFolderProvider;->(Landroid/app/Application;)V PLtachiyomi/core/provider/AndroidDownloadFolderProvider;->(Landroid/app/Application;)V HSPLtachiyomi/core/provider/AndroidDownloadFolderProvider;->path()Ljava/lang/String; PLtachiyomi/core/provider/AndroidDownloadFolderProvider;->path()Ljava/lang/String; Ltachiyomi/core/provider/FolderProvider; Ltachiyomi/core/util/lang/CoroutinesExtensionsKt; HSPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchIO(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; PLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchIO(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; HSPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchNow(Lkotlin/jvm/functions/Function2;)V PLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchNow(Lkotlin/jvm/functions/Function2;)V HSPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->withIOContext(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->withIOContext(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/data/AndroidDatabaseHandler; HSPLtachiyomi/data/AndroidDatabaseHandler;->(Ltachiyomi/data/Database;Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/data/AndroidDatabaseHandler;->(Ltachiyomi/data/Database;Lapp/cash/sqldelight/db/SqlDriver;)V HSPLtachiyomi/data/AndroidDatabaseHandler;->subscribeToList(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1; PLtachiyomi/data/AndroidDatabaseHandler;->subscribeToList(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1; Ltachiyomi/data/CategoriesQueries; HSPLtachiyomi/data/CategoriesQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/data/CategoriesQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V HSPLtachiyomi/data/CategoriesQueries;->getCategories(Lkotlin/jvm/functions/Function4;)Lapp/cash/sqldelight/Query; PLtachiyomi/data/CategoriesQueries;->getCategories(Lkotlin/jvm/functions/Function4;)Lapp/cash/sqldelight/Query; Ltachiyomi/data/CategoriesQueries$getCategories$1; HSPLtachiyomi/data/CategoriesQueries$getCategories$1;->(Lkotlin/jvm/functions/Function4;)V PLtachiyomi/data/CategoriesQueries$getCategories$1;->(Lkotlin/jvm/functions/Function4;)V HSPLtachiyomi/data/CategoriesQueries$getCategories$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/CategoriesQueries$getCategories$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/ChaptersQueries; HSPLtachiyomi/data/ChaptersQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/data/ChaptersQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V Ltachiyomi/data/Database; HSPLtachiyomi/data/Database;->()V PLtachiyomi/data/Database;->()V Ltachiyomi/data/Database$Companion; HSPLtachiyomi/data/Database$Companion;->()V PLtachiyomi/data/Database$Companion;->()V HSPLtachiyomi/data/Database$Companion;->()V PLtachiyomi/data/Database$Companion;->()V Ltachiyomi/data/DatabaseHandler; Ltachiyomi/data/DateColumnAdapter; HSPLtachiyomi/data/DateColumnAdapter;->()V PLtachiyomi/data/DateColumnAdapter;->()V HSPLtachiyomi/data/DateColumnAdapter;->()V PLtachiyomi/data/DateColumnAdapter;->()V Ltachiyomi/data/History$Adapter; HSPLtachiyomi/data/History$Adapter;->(Ltachiyomi/data/DateColumnAdapter;)V PLtachiyomi/data/History$Adapter;->(Ltachiyomi/data/DateColumnAdapter;)V Ltachiyomi/data/HistoryQueries; HSPLtachiyomi/data/HistoryQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V PLtachiyomi/data/HistoryQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V Ltachiyomi/data/Manga_syncQueries; HSPLtachiyomi/data/Manga_syncQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/data/Manga_syncQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V HSPLtachiyomi/data/Manga_syncQueries;->getTracks(Lkotlin/jvm/functions/Function13;)Lapp/cash/sqldelight/Query; PLtachiyomi/data/Manga_syncQueries;->getTracks(Lkotlin/jvm/functions/Function13;)Lapp/cash/sqldelight/Query; Ltachiyomi/data/Manga_syncQueries$getTracks$1; HSPLtachiyomi/data/Manga_syncQueries$getTracks$1;->(Lkotlin/jvm/functions/Function13;)V PLtachiyomi/data/Manga_syncQueries$getTracks$1;->(Lkotlin/jvm/functions/Function13;)V Ltachiyomi/data/Mangas$Adapter; HSPLtachiyomi/data/Mangas$Adapter;->(Ltachiyomi/data/StringListColumnAdapter;Ltachiyomi/data/UpdateStrategyColumnAdapter;)V PLtachiyomi/data/Mangas$Adapter;->(Ltachiyomi/data/StringListColumnAdapter;Ltachiyomi/data/UpdateStrategyColumnAdapter;)V Ltachiyomi/data/MangasQueries; HSPLtachiyomi/data/MangasQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V PLtachiyomi/data/MangasQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V Ltachiyomi/data/Mangas_categoriesQueries; HSPLtachiyomi/data/Mangas_categoriesQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/data/Mangas_categoriesQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V Ltachiyomi/data/SourcesQueries; HSPLtachiyomi/data/SourcesQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/data/SourcesQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V HSPLtachiyomi/data/SourcesQueries;->findAll(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; PLtachiyomi/data/SourcesQueries;->findAll(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; Ltachiyomi/data/SourcesQueries$findAll$1; HSPLtachiyomi/data/SourcesQueries$findAll$1;->(Lkotlin/jvm/functions/Function3;)V PLtachiyomi/data/SourcesQueries$findAll$1;->(Lkotlin/jvm/functions/Function3;)V Ltachiyomi/data/StringListColumnAdapter; HSPLtachiyomi/data/StringListColumnAdapter;->()V PLtachiyomi/data/StringListColumnAdapter;->()V HSPLtachiyomi/data/StringListColumnAdapter;->()V PLtachiyomi/data/StringListColumnAdapter;->()V Ltachiyomi/data/UpdateStrategyColumnAdapter; HSPLtachiyomi/data/UpdateStrategyColumnAdapter;->()V PLtachiyomi/data/UpdateStrategyColumnAdapter;->()V HSPLtachiyomi/data/UpdateStrategyColumnAdapter;->()V PLtachiyomi/data/UpdateStrategyColumnAdapter;->()V Ltachiyomi/data/category/CategoryMapperKt; HSPLtachiyomi/data/category/CategoryMapperKt;->()V PLtachiyomi/data/category/CategoryMapperKt;->()V HSPLtachiyomi/data/category/CategoryMapperKt;->getCategoryMapper()Lkotlin/jvm/functions/Function4; PLtachiyomi/data/category/CategoryMapperKt;->getCategoryMapper()Lkotlin/jvm/functions/Function4; Ltachiyomi/data/category/CategoryMapperKt$categoryMapper$1; HSPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->()V PLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->()V HSPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->()V PLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->()V HSPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/category/CategoryRepositoryImpl; HSPLtachiyomi/data/category/CategoryRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/category/CategoryRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V HSPLtachiyomi/data/category/CategoryRepositoryImpl;->getAllAsFlow()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/category/CategoryRepositoryImpl;->getAllAsFlow()Lkotlinx/coroutines/flow/Flow; Ltachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1; HSPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->()V PLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->()V HSPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->()V PLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->()V HSPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/chapter/ChapterRepositoryImpl; HSPLtachiyomi/data/chapter/ChapterRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/chapter/ChapterRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V Ltachiyomi/data/data/DatabaseImpl; HSPLtachiyomi/data/data/DatabaseImpl;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)V PLtachiyomi/data/data/DatabaseImpl;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)V HSPLtachiyomi/data/data/DatabaseImpl;->getCategoriesQueries()Ltachiyomi/data/CategoriesQueries; PLtachiyomi/data/data/DatabaseImpl;->getCategoriesQueries()Ltachiyomi/data/CategoriesQueries; HSPLtachiyomi/data/data/DatabaseImpl;->getHistoryViewQueries()Ltachiyomi/view/HistoryViewQueries; PLtachiyomi/data/data/DatabaseImpl;->getHistoryViewQueries()Ltachiyomi/view/HistoryViewQueries; HSPLtachiyomi/data/data/DatabaseImpl;->getLibraryViewQueries()Ltachiyomi/view/LibraryViewQueries; PLtachiyomi/data/data/DatabaseImpl;->getLibraryViewQueries()Ltachiyomi/view/LibraryViewQueries; HSPLtachiyomi/data/data/DatabaseImpl;->getManga_syncQueries()Ltachiyomi/data/Manga_syncQueries; PLtachiyomi/data/data/DatabaseImpl;->getManga_syncQueries()Ltachiyomi/data/Manga_syncQueries; HSPLtachiyomi/data/data/DatabaseImpl;->getSourcesQueries()Ltachiyomi/data/SourcesQueries; PLtachiyomi/data/data/DatabaseImpl;->getSourcesQueries()Ltachiyomi/data/SourcesQueries; HSPLtachiyomi/data/data/DatabaseImpl;->getUpdatesViewQueries()Ltachiyomi/view/UpdatesViewQueries; PLtachiyomi/data/data/DatabaseImpl;->getUpdatesViewQueries()Ltachiyomi/view/UpdatesViewQueries; Ltachiyomi/data/data/DatabaseImpl$Schema; HSPLtachiyomi/data/data/DatabaseImpl$Schema;->()V PLtachiyomi/data/data/DatabaseImpl$Schema;->()V HSPLtachiyomi/data/data/DatabaseImpl$Schema;->()V PLtachiyomi/data/data/DatabaseImpl$Schema;->()V Ltachiyomi/data/data/DatabaseImplKt; HSPLtachiyomi/data/data/DatabaseImplKt;->newInstance(Lkotlin/reflect/KClass;Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)Ltachiyomi/data/Database; PLtachiyomi/data/data/DatabaseImplKt;->newInstance(Lkotlin/reflect/KClass;Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)Ltachiyomi/data/Database; Ltachiyomi/data/history/HistoryMapperKt; HSPLtachiyomi/data/history/HistoryMapperKt;->()V PLtachiyomi/data/history/HistoryMapperKt;->()V HSPLtachiyomi/data/history/HistoryMapperKt;->getHistoryWithRelationsMapper()Lkotlin/jvm/functions/Function11; PLtachiyomi/data/history/HistoryMapperKt;->getHistoryWithRelationsMapper()Lkotlin/jvm/functions/Function11; Ltachiyomi/data/history/HistoryMapperKt$historyMapper$1; HSPLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;->()V PLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;->()V HSPLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;->()V PLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;->()V Ltachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1; HSPLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;->()V PLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;->()V HSPLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;->()V PLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;->()V Ltachiyomi/data/history/HistoryRepositoryImpl; HSPLtachiyomi/data/history/HistoryRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/history/HistoryRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V HSPLtachiyomi/data/history/HistoryRepositoryImpl;->getHistory(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/history/HistoryRepositoryImpl;->getHistory(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; Ltachiyomi/data/history/HistoryRepositoryImpl$getHistory$1; HSPLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;->(Ljava/lang/String;)V PLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;->(Ljava/lang/String;)V HSPLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/manga/MangaMapperKt; HSPLtachiyomi/data/manga/MangaMapperKt;->()V PLtachiyomi/data/manga/MangaMapperKt;->()V HSPLtachiyomi/data/manga/MangaMapperKt;->getLibraryManga()Lkotlin/jvm/functions/FunctionN; PLtachiyomi/data/manga/MangaMapperKt;->getLibraryManga()Lkotlin/jvm/functions/FunctionN; Ltachiyomi/data/manga/MangaMapperKt$libraryManga$1; HSPLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;->()V PLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;->()V HSPLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;->()V PLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;->()V Ltachiyomi/data/manga/MangaMapperKt$mangaMapper$1; HSPLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;->()V PLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;->()V HSPLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;->()V PLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;->()V Ltachiyomi/data/manga/MangaRepositoryImpl; HSPLtachiyomi/data/manga/MangaRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/manga/MangaRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V HSPLtachiyomi/data/manga/MangaRepositoryImpl;->getLibraryMangaAsFlow()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/manga/MangaRepositoryImpl;->getLibraryMangaAsFlow()Lkotlinx/coroutines/flow/Flow; Ltachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1; HSPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->()V PLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->()V HSPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->()V PLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->()V HSPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/source/SourceMapperKt; HSPLtachiyomi/data/source/SourceMapperKt;->()V PLtachiyomi/data/source/SourceMapperKt;->()V HSPLtachiyomi/data/source/SourceMapperKt;->getSourceDataMapper()Lkotlin/jvm/functions/Function3; PLtachiyomi/data/source/SourceMapperKt;->getSourceDataMapper()Lkotlin/jvm/functions/Function3; Ltachiyomi/data/source/SourceMapperKt$sourceDataMapper$1; HSPLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;->()V PLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;->()V HSPLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;->()V PLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;->()V Ltachiyomi/data/source/SourceMapperKt$sourceMapper$1; HSPLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;->()V PLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;->()V HSPLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;->()V PLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;->()V Ltachiyomi/data/source/StubSourceRepositoryImpl; HSPLtachiyomi/data/source/StubSourceRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/source/StubSourceRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V HSPLtachiyomi/data/source/StubSourceRepositoryImpl;->subscribeAll()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/source/StubSourceRepositoryImpl;->subscribeAll()Lkotlinx/coroutines/flow/Flow; Ltachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1; HSPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->()V PLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->()V HSPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->()V PLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->()V HSPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/track/TrackMapperKt; HSPLtachiyomi/data/track/TrackMapperKt;->()V PLtachiyomi/data/track/TrackMapperKt;->()V HSPLtachiyomi/data/track/TrackMapperKt;->getTrackMapper()Lkotlin/jvm/functions/Function13; PLtachiyomi/data/track/TrackMapperKt;->getTrackMapper()Lkotlin/jvm/functions/Function13; Ltachiyomi/data/track/TrackMapperKt$trackMapper$1; HSPLtachiyomi/data/track/TrackMapperKt$trackMapper$1;->()V PLtachiyomi/data/track/TrackMapperKt$trackMapper$1;->()V HSPLtachiyomi/data/track/TrackMapperKt$trackMapper$1;->()V PLtachiyomi/data/track/TrackMapperKt$trackMapper$1;->()V Ltachiyomi/data/track/TrackRepositoryImpl; HSPLtachiyomi/data/track/TrackRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/track/TrackRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V HSPLtachiyomi/data/track/TrackRepositoryImpl;->getTracksAsFlow()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/track/TrackRepositoryImpl;->getTracksAsFlow()Lkotlinx/coroutines/flow/Flow; Ltachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1; HSPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->()V PLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->()V HSPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->()V PLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->()V HSPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/updates/UpdatesMapperKt; HSPLtachiyomi/data/updates/UpdatesMapperKt;->()V PLtachiyomi/data/updates/UpdatesMapperKt;->()V HSPLtachiyomi/data/updates/UpdatesMapperKt;->getUpdateWithRelationMapper()Lkotlin/jvm/functions/Function14; PLtachiyomi/data/updates/UpdatesMapperKt;->getUpdateWithRelationMapper()Lkotlin/jvm/functions/Function14; Ltachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1; HSPLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;->()V PLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;->()V HSPLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;->()V PLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;->()V Ltachiyomi/data/updates/UpdatesRepositoryImpl; HSPLtachiyomi/data/updates/UpdatesRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V PLtachiyomi/data/updates/UpdatesRepositoryImpl;->(Ltachiyomi/data/DatabaseHandler;)V HSPLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeAll(J)Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeAll(J)Lkotlinx/coroutines/flow/Flow; HSPLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeWithRead(J)Lkotlinx/coroutines/flow/Flow; PLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeWithRead(J)Lkotlinx/coroutines/flow/Flow; Ltachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1; HSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;->(J)V PLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;->(J)V HSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1; HSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;->(J)V PLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;->(J)V HSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/domain/backup/service/BackupPreferences; HSPLtachiyomi/domain/backup/service/BackupPreferences;->(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V PLtachiyomi/domain/backup/service/BackupPreferences;->(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V HSPLtachiyomi/domain/backup/service/BackupPreferences;->backupInterval()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/backup/service/BackupPreferences;->backupInterval()Ltachiyomi/core/preference/Preference; Ltachiyomi/domain/category/interactor/CreateCategoryWithName; Ltachiyomi/domain/category/interactor/DeleteCategory; Ltachiyomi/domain/category/interactor/GetCategories; HSPLtachiyomi/domain/category/interactor/GetCategories;->(Ltachiyomi/domain/category/repository/CategoryRepository;)V PLtachiyomi/domain/category/interactor/GetCategories;->(Ltachiyomi/domain/category/repository/CategoryRepository;)V HSPLtachiyomi/domain/category/interactor/GetCategories;->subscribe()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/domain/category/interactor/GetCategories;->subscribe()Lkotlinx/coroutines/flow/Flow; Ltachiyomi/domain/category/interactor/RenameCategory; Ltachiyomi/domain/category/interactor/ReorderCategory; Ltachiyomi/domain/category/interactor/ResetCategoryFlags; Ltachiyomi/domain/category/interactor/SetDisplayMode; HSPLtachiyomi/domain/category/interactor/SetDisplayMode;->(Ltachiyomi/domain/library/service/LibraryPreferences;)V PLtachiyomi/domain/category/interactor/SetDisplayMode;->(Ltachiyomi/domain/library/service/LibraryPreferences;)V Ltachiyomi/domain/category/interactor/SetMangaCategories; HSPLtachiyomi/domain/category/interactor/SetMangaCategories;->(Ltachiyomi/domain/manga/repository/MangaRepository;)V PLtachiyomi/domain/category/interactor/SetMangaCategories;->(Ltachiyomi/domain/manga/repository/MangaRepository;)V Ltachiyomi/domain/category/interactor/SetSortModeForCategory; HSPLtachiyomi/domain/category/interactor/SetSortModeForCategory;->(Ltachiyomi/domain/category/repository/CategoryRepository;Ltachiyomi/domain/library/service/LibraryPreferences;)V PLtachiyomi/domain/category/interactor/SetSortModeForCategory;->(Ltachiyomi/domain/category/repository/CategoryRepository;Ltachiyomi/domain/library/service/LibraryPreferences;)V Ltachiyomi/domain/category/interactor/UpdateCategory; Ltachiyomi/domain/category/model/Category; HSPLtachiyomi/domain/category/model/Category;->()V PLtachiyomi/domain/category/model/Category;->()V HSPLtachiyomi/domain/category/model/Category;->(Ljava/lang/String;JJJ)V PLtachiyomi/domain/category/model/Category;->(Ljava/lang/String;JJJ)V HSPLtachiyomi/domain/category/model/Category;->getFlags()J PLtachiyomi/domain/category/model/Category;->getFlags()J HSPLtachiyomi/domain/category/model/Category;->getId()J PLtachiyomi/domain/category/model/Category;->getId()J HSPLtachiyomi/domain/category/model/Category;->hashCode()I PLtachiyomi/domain/category/model/Category;->hashCode()I HSPLtachiyomi/domain/category/model/Category;->isSystemCategory()Z PLtachiyomi/domain/category/model/Category;->isSystemCategory()Z Ltachiyomi/domain/category/model/Category$Companion; HSPLtachiyomi/domain/category/model/Category$Companion;->()V PLtachiyomi/domain/category/model/Category$Companion;->()V HSPLtachiyomi/domain/category/model/Category$Companion;->(I)V PLtachiyomi/domain/category/model/Category$Companion;->(I)V Ltachiyomi/domain/category/repository/CategoryRepository; Ltachiyomi/domain/chapter/interactor/GetChapter; HSPLtachiyomi/domain/chapter/interactor/GetChapter;->(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V PLtachiyomi/domain/chapter/interactor/GetChapter;->(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId; HSPLtachiyomi/domain/chapter/interactor/GetChapterByMangaId;->(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V PLtachiyomi/domain/chapter/interactor/GetChapterByMangaId;->(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V Ltachiyomi/domain/chapter/interactor/SetMangaDefaultChapterFlags; Ltachiyomi/domain/chapter/interactor/ShouldUpdateDbChapter; Ltachiyomi/domain/chapter/interactor/UpdateChapter; HSPLtachiyomi/domain/chapter/interactor/UpdateChapter;->(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V PLtachiyomi/domain/chapter/interactor/UpdateChapter;->(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V Ltachiyomi/domain/chapter/repository/ChapterRepository; Ltachiyomi/domain/download/service/DownloadPreferences; HSPLtachiyomi/domain/download/service/DownloadPreferences;->(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V PLtachiyomi/domain/download/service/DownloadPreferences;->(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V HSPLtachiyomi/domain/download/service/DownloadPreferences;->downloadsDirectory()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/download/service/DownloadPreferences;->downloadsDirectory()Ltachiyomi/core/preference/Preference; Ltachiyomi/domain/history/interactor/GetHistory; HSPLtachiyomi/domain/history/interactor/GetHistory;->(Ltachiyomi/domain/history/repository/HistoryRepository;)V PLtachiyomi/domain/history/interactor/GetHistory;->(Ltachiyomi/domain/history/repository/HistoryRepository;)V HSPLtachiyomi/domain/history/interactor/GetHistory;->subscribe(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; PLtachiyomi/domain/history/interactor/GetHistory;->subscribe(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; Ltachiyomi/domain/history/interactor/GetNextChapters; HSPLtachiyomi/domain/history/interactor/GetNextChapters;->(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;Ltachiyomi/domain/manga/interactor/GetManga;Ltachiyomi/domain/history/repository/HistoryRepository;)V PLtachiyomi/domain/history/interactor/GetNextChapters;->(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;Ltachiyomi/domain/manga/interactor/GetManga;Ltachiyomi/domain/history/repository/HistoryRepository;)V Ltachiyomi/domain/history/interactor/GetTotalReadDuration; Ltachiyomi/domain/history/interactor/RemoveHistory; HSPLtachiyomi/domain/history/interactor/RemoveHistory;->(Ltachiyomi/domain/history/repository/HistoryRepository;)V PLtachiyomi/domain/history/interactor/RemoveHistory;->(Ltachiyomi/domain/history/repository/HistoryRepository;)V Ltachiyomi/domain/history/interactor/UpsertHistory; Ltachiyomi/domain/history/repository/HistoryRepository; Ltachiyomi/domain/library/model/Flag; Ltachiyomi/domain/library/model/FlagWithMask; Ltachiyomi/domain/library/model/LibrarySort; HSPLtachiyomi/domain/library/model/LibrarySort;->()V PLtachiyomi/domain/library/model/LibrarySort;->()V HSPLtachiyomi/domain/library/model/LibrarySort;->(Ltachiyomi/domain/library/model/LibrarySort$Type;Ltachiyomi/domain/library/model/LibrarySort$Direction;)V PLtachiyomi/domain/library/model/LibrarySort;->(Ltachiyomi/domain/library/model/LibrarySort$Type;Ltachiyomi/domain/library/model/LibrarySort$Direction;)V HSPLtachiyomi/domain/library/model/LibrarySort;->access$getDirections$delegate$cp()Lkotlin/Lazy; PLtachiyomi/domain/library/model/LibrarySort;->access$getDirections$delegate$cp()Lkotlin/Lazy; HSPLtachiyomi/domain/library/model/LibrarySort;->access$getTypes$delegate$cp()Lkotlin/Lazy; PLtachiyomi/domain/library/model/LibrarySort;->access$getTypes$delegate$cp()Lkotlin/Lazy; HSPLtachiyomi/domain/library/model/LibrarySort;->isAscending()Z PLtachiyomi/domain/library/model/LibrarySort;->isAscending()Z Ltachiyomi/domain/library/model/LibrarySort$Companion; HSPLtachiyomi/domain/library/model/LibrarySort$Companion;->()V PLtachiyomi/domain/library/model/LibrarySort$Companion;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Companion;->(I)V PLtachiyomi/domain/library/model/LibrarySort$Companion;->(I)V Ltachiyomi/domain/library/model/LibrarySort$Companion$directions$2; HSPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->()V PLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->()V PLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->invoke()Ljava/lang/Object; PLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->invoke()Ljava/lang/Object; Ltachiyomi/domain/library/model/LibrarySort$Companion$types$2; HSPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->()V PLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->()V PLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->invoke()Ljava/lang/Object; PLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->invoke()Ljava/lang/Object; Ltachiyomi/domain/library/model/LibrarySort$Direction; HSPLtachiyomi/domain/library/model/LibrarySort$Direction;->()V PLtachiyomi/domain/library/model/LibrarySort$Direction;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Direction;->(J)V PLtachiyomi/domain/library/model/LibrarySort$Direction;->(J)V HSPLtachiyomi/domain/library/model/LibrarySort$Direction;->getFlag()J PLtachiyomi/domain/library/model/LibrarySort$Direction;->getFlag()J HSPLtachiyomi/domain/library/model/LibrarySort$Direction;->getMask()J PLtachiyomi/domain/library/model/LibrarySort$Direction;->getMask()J Ltachiyomi/domain/library/model/LibrarySort$Direction$Ascending; HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->()V PLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->()V PLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Direction$Companion; HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;->()V PLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;->(I)V PLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;->(I)V Ltachiyomi/domain/library/model/LibrarySort$Direction$Descending; HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->()V PLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->()V PLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->equals(Ljava/lang/Object;)Z PLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->equals(Ljava/lang/Object;)Z HSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type; HSPLtachiyomi/domain/library/model/LibrarySort$Type;->()V PLtachiyomi/domain/library/model/LibrarySort$Type;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type;->(J)V PLtachiyomi/domain/library/model/LibrarySort$Type;->(J)V HSPLtachiyomi/domain/library/model/LibrarySort$Type;->getFlag()J PLtachiyomi/domain/library/model/LibrarySort$Type;->getFlag()J HSPLtachiyomi/domain/library/model/LibrarySort$Type;->getMask()J PLtachiyomi/domain/library/model/LibrarySort$Type;->getMask()J Ltachiyomi/domain/library/model/LibrarySort$Type$Alphabetical; HSPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate; HSPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$Companion; HSPLtachiyomi/domain/library/model/LibrarySort$Type$Companion;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$Companion;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$Companion;->(I)V PLtachiyomi/domain/library/model/LibrarySort$Type$Companion;->(I)V Ltachiyomi/domain/library/model/LibrarySort$Type$DateAdded; HSPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$LastRead; HSPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$LastUpdate; HSPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$LatestChapter; HSPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$TotalChapters; HSPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->hashCode()I Ltachiyomi/domain/library/model/LibrarySort$Type$UnreadCount; HSPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->()V PLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->()V HSPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->hashCode()I PLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->hashCode()I Ltachiyomi/domain/library/model/LibrarySortModeKt; HSPLtachiyomi/domain/library/model/LibrarySortModeKt;->getSort(Ltachiyomi/domain/category/model/Category;)Ltachiyomi/domain/library/model/LibrarySort; PLtachiyomi/domain/library/model/LibrarySortModeKt;->getSort(Ltachiyomi/domain/category/model/Category;)Ltachiyomi/domain/library/model/LibrarySort; Ltachiyomi/domain/library/model/Mask; Ltachiyomi/domain/library/service/LibraryPreferences; HSPLtachiyomi/domain/library/service/LibraryPreferences;->()V PLtachiyomi/domain/library/service/LibraryPreferences;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V PLtachiyomi/domain/library/service/LibraryPreferences;->(Ltachiyomi/core/preference/PreferenceStore;)V HSPLtachiyomi/domain/library/service/LibraryPreferences;->autoClearChapterCache()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->autoClearChapterCache()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->categoryNumberOfItems()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->categoryNumberOfItems()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->categoryTabs()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->categoryTabs()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->downloadBadge()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->downloadBadge()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->filterBookmarked()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->filterBookmarked()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->filterCompleted()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->filterCompleted()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->filterDownloaded()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->filterDownloaded()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->filterStarted()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->filterStarted()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->filterUnread()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->filterUnread()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->languageBadge()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->languageBadge()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->lastUsedCategory()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->lastUsedCategory()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateInterval()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateInterval()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateLastTimestamp()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateLastTimestamp()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->localBadge()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->localBadge()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->newShowUpdatesCount()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->newShowUpdatesCount()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->newUpdatesCount()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->newUpdatesCount()Ltachiyomi/core/preference/Preference; HSPLtachiyomi/domain/library/service/LibraryPreferences;->showContinueReadingButton()Ltachiyomi/core/preference/Preference; PLtachiyomi/domain/library/service/LibraryPreferences;->showContinueReadingButton()Ltachiyomi/core/preference/Preference; Ltachiyomi/domain/library/service/LibraryPreferences$Companion; HSPLtachiyomi/domain/library/service/LibraryPreferences$Companion;->()V PLtachiyomi/domain/library/service/LibraryPreferences$Companion;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences$Companion;->(I)V PLtachiyomi/domain/library/service/LibraryPreferences$Companion;->(I)V Ltachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$2; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$2;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$2;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$2; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$2;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$2;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$2; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$2;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$2;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$2; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$2;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$2;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;->()V HSPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;->()V Ltachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$2; HSPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$2;->()V PLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$2;->()V Ltachiyomi/domain/manga/interactor/GetDuplicateLibraryManga; Ltachiyomi/domain/manga/interactor/GetFavorites; Ltachiyomi/domain/manga/interactor/GetLibraryManga; HSPLtachiyomi/domain/manga/interactor/GetLibraryManga;->(Ltachiyomi/domain/manga/repository/MangaRepository;)V PLtachiyomi/domain/manga/interactor/GetLibraryManga;->(Ltachiyomi/domain/manga/repository/MangaRepository;)V HSPLtachiyomi/domain/manga/interactor/GetLibraryManga;->subscribe()Lkotlinx/coroutines/flow/Flow; PLtachiyomi/domain/manga/interactor/GetLibraryManga;->subscribe()Lkotlinx/coroutines/flow/Flow; Ltachiyomi/domain/manga/interactor/GetManga; HSPLtachiyomi/domain/manga/interactor/GetManga;->(Ltachiyomi/domain/manga/repository/MangaRepository;)V PLtachiyomi/domain/manga/interactor/GetManga;->(Ltachiyomi/domain/manga/repository/MangaRepository;)V Ltachiyomi/domain/manga/interactor/GetMangaWithChapters; Ltachiyomi/domain/manga/interactor/NetworkToLocalManga; Ltachiyomi/domain/manga/interactor/ResetViewerFlags; Ltachiyomi/domain/manga/interactor/SetFetchInterval; HSPLtachiyomi/domain/manga/interactor/SetFetchInterval;->(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;)V PLtachiyomi/domain/manga/interactor/SetFetchInterval;->(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;)V Ltachiyomi/domain/manga/interactor/SetMangaChapterFlags; Ltachiyomi/domain/manga/repository/MangaRepository; Ltachiyomi/domain/release/interactor/GetApplicationRelease; Ltachiyomi/domain/release/service/ReleaseService; Ltachiyomi/domain/source/interactor/GetRemoteManga; Ltachiyomi/domain/source/interactor/GetSourcesWithNonLibraryManga; Ltachiyomi/domain/source/repository/SourceRepository; Ltachiyomi/domain/source/repository/StubSourceRepository; Ltachiyomi/domain/source/service/SourceManager; Ltachiyomi/domain/track/interactor/DeleteTrack; Ltachiyomi/domain/track/interactor/GetTracks; Ltachiyomi/domain/track/interactor/GetTracksPerManga; HSPLtachiyomi/domain/track/interactor/GetTracksPerManga;->(Ltachiyomi/domain/track/repository/TrackRepository;)V PLtachiyomi/domain/track/interactor/GetTracksPerManga;->(Ltachiyomi/domain/track/repository/TrackRepository;)V HSPLtachiyomi/domain/track/interactor/GetTracksPerManga;->subscribe()Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1; PLtachiyomi/domain/track/interactor/GetTracksPerManga;->subscribe()Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1; Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1; HSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V PLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V HSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2; HSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V HSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1; HSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;->(Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;->(Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V HSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/domain/track/interactor/InsertTrack; Ltachiyomi/domain/track/repository/TrackRepository; Ltachiyomi/domain/updates/interactor/GetUpdates; HSPLtachiyomi/domain/updates/interactor/GetUpdates;->(Ltachiyomi/domain/updates/repository/UpdatesRepository;)V PLtachiyomi/domain/updates/interactor/GetUpdates;->(Ltachiyomi/domain/updates/repository/UpdatesRepository;)V HSPLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(J)Lkotlinx/coroutines/flow/Flow; PLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(J)Lkotlinx/coroutines/flow/Flow; HSPLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(Ljava/util/Calendar;)Lkotlinx/coroutines/flow/Flow; PLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(Ljava/util/Calendar;)Lkotlinx/coroutines/flow/Flow; Ltachiyomi/domain/updates/repository/UpdatesRepository; Ltachiyomi/presentation/core/components/ActionButtonKt; HSPLtachiyomi/presentation/core/components/ActionButtonKt;->ActionButton(Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V HPLtachiyomi/presentation/core/components/ActionButtonKt;->ActionButton(Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V Ltachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1; HSPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;->(ILandroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;)V PLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;->(ILandroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;)V HSPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/LazyListKt; HSPLtachiyomi/presentation/core/components/LazyListKt;->ScrollbarLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HPLtachiyomi/presentation/core/components/LazyListKt;->ScrollbarLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V Ltachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt; HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;->()V Ltachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1; HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1; HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1; HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1; HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1; HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V PLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V HSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ConstantsKt; HSPLtachiyomi/presentation/core/components/material/ConstantsKt;->()V PLtachiyomi/presentation/core/components/material/ConstantsKt;->()V HSPLtachiyomi/presentation/core/components/material/ConstantsKt;->getPadding()Ltachiyomi/presentation/core/components/material/Padding; PLtachiyomi/presentation/core/components/material/ConstantsKt;->getPadding()Ltachiyomi/presentation/core/components/material/Padding; Ltachiyomi/presentation/core/components/material/FabPosition; HSPLtachiyomi/presentation/core/components/material/FabPosition;->()V PLtachiyomi/presentation/core/components/material/FabPosition;->()V HSPLtachiyomi/presentation/core/components/material/FabPosition;->(I)V PLtachiyomi/presentation/core/components/material/FabPosition;->(I)V HSPLtachiyomi/presentation/core/components/material/FabPosition;->access$getEnd$cp()I PLtachiyomi/presentation/core/components/material/FabPosition;->access$getEnd$cp()I HSPLtachiyomi/presentation/core/components/material/FabPosition;->box-impl(I)Ltachiyomi/presentation/core/components/material/FabPosition; PLtachiyomi/presentation/core/components/material/FabPosition;->box-impl(I)Ltachiyomi/presentation/core/components/material/FabPosition; PLtachiyomi/presentation/core/components/material/FabPosition;->equals(Ljava/lang/Object;)Z Ltachiyomi/presentation/core/components/material/FabPosition$Companion; HSPLtachiyomi/presentation/core/components/material/FabPosition$Companion;->()V PLtachiyomi/presentation/core/components/material/FabPosition$Companion;->()V HSPLtachiyomi/presentation/core/components/material/FabPosition$Companion;->(I)V PLtachiyomi/presentation/core/components/material/FabPosition$Companion;->(I)V Ltachiyomi/presentation/core/components/material/NavigationBarKt; HSPLtachiyomi/presentation/core/components/material/NavigationBarKt;->NavigationBar-HsRjFd4(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLtachiyomi/presentation/core/components/material/NavigationBarKt;->NavigationBar-HsRjFd4(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V Ltachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1; HSPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;I)V PLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;I)V HSPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$2; HSPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$2;->(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V PLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$2;->(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V Ltachiyomi/presentation/core/components/material/Padding; HSPLtachiyomi/presentation/core/components/material/Padding;->()V PLtachiyomi/presentation/core/components/material/Padding;->()V HSPLtachiyomi/presentation/core/components/material/Padding;->getSmall-D9Ej5fM()F PLtachiyomi/presentation/core/components/material/Padding;->getSmall-D9Ej5fM()F Ltachiyomi/presentation/core/components/material/ScaffoldKt; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->()V PLtachiyomi/presentation/core/components/material/ScaffoldKt;->()V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->Scaffold-UynuKms(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt;->Scaffold-UynuKms(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->access$ScaffoldLayout-sqSdXeA(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt;->access$ScaffoldLayout-sqSdXeA(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->getLocalFabPlacement()Landroidx/compose/runtime/StaticProvidableCompositionLocal; PLtachiyomi/presentation/core/components/material/ScaffoldKt;->getLocalFabPlacement()Landroidx/compose/runtime/StaticProvidableCompositionLocal; Ltachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;->()V PLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;->()V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;->()V PLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;->()V Ltachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;->(Landroidx/compose/foundation/layout/MutableWindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;->(Landroidx/compose/foundation/layout/MutableWindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;->(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/MutableWindowInsets;Lkotlin/jvm/functions/Function2;IILkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;->(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/MutableWindowInsets;Lkotlin/jvm/functions/Function2;IILkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V PLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$3; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;III)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;III)V Ltachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;->(IILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V PLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;->(IILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/ArrayList;ILjava/util/ArrayList;ILkotlin/jvm/functions/Function3;I)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/ArrayList;ILjava/util/ArrayList;ILkotlin/jvm/functions/Function3;I)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1; HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->(Ltachiyomi/presentation/core/components/material/FabPlacement;Lkotlin/jvm/functions/Function2;I)V HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->(Ltachiyomi/presentation/core/components/material/FabPlacement;Lkotlin/jvm/functions/Function2;I)V HSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/components/material/ScaffoldLayoutContent; HSPLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;->()V PLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;->()V HSPLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;->(Ljava/lang/String;I)V PLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;->(Ljava/lang/String;I)V Ltachiyomi/presentation/core/screens/EmptyScreenAction; HSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->(ILandroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V PLtachiyomi/presentation/core/screens/EmptyScreenAction;->(ILandroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V HSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; PLtachiyomi/presentation/core/screens/EmptyScreenAction;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; HSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getOnClick()Lkotlin/jvm/functions/Function0; PLtachiyomi/presentation/core/screens/EmptyScreenAction;->getOnClick()Lkotlin/jvm/functions/Function0; HSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getStringResId()I PLtachiyomi/presentation/core/screens/EmptyScreenAction;->getStringResId()I Ltachiyomi/presentation/core/screens/EmptyScreenKt; HSPLtachiyomi/presentation/core/screens/EmptyScreenKt;->()V PLtachiyomi/presentation/core/screens/EmptyScreenKt;->()V HSPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(ILandroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V HPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(ILandroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V HSPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V HPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V Ltachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$1; HSPLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$1;->(ILandroidx/compose/ui/Modifier;Ljava/util/List;II)V PLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$1;->(ILandroidx/compose/ui/Modifier;Ljava/util/List;II)V Ltachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$3; HSPLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$3;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;II)V PLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$3;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;II)V Ltachiyomi/presentation/core/screens/LoadingScreenKt; HSPLtachiyomi/presentation/core/screens/LoadingScreenKt;->LoadingScreen(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V PLtachiyomi/presentation/core/screens/LoadingScreenKt;->LoadingScreen(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V Ltachiyomi/presentation/core/util/ModifierKt; HSPLtachiyomi/presentation/core/util/ModifierKt;->secondaryItemAlpha(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HPLtachiyomi/presentation/core/util/ModifierKt;->secondaryItemAlpha(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; Ltachiyomi/presentation/core/util/PreferenceKt; HSPLtachiyomi/presentation/core/util/PreferenceKt;->collectAsState(Ltachiyomi/core/preference/Preference;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; HPLtachiyomi/presentation/core/util/PreferenceKt;->collectAsState(Ltachiyomi/core/preference/Preference;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; Ltachiyomi/presentation/core/util/ScrollbarKt; HSPLtachiyomi/presentation/core/util/ScrollbarKt;->()V PLtachiyomi/presentation/core/util/ScrollbarKt;->()V HSPLtachiyomi/presentation/core/util/ScrollbarKt;->drawVerticalScrollbar(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZF)Landroidx/compose/ui/Modifier; HPLtachiyomi/presentation/core/util/ScrollbarKt;->drawVerticalScrollbar(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZF)Landroidx/compose/ui/Modifier; Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/gestures/Orientation;F)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/gestures/Orientation;F)V HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;->(Landroidx/compose/foundation/gestures/Orientation;ZLkotlin/jvm/functions/Function6;)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;->(Landroidx/compose/foundation/gestures/Orientation;ZLkotlin/jvm/functions/Function6;)V HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->(Lkotlinx/coroutines/flow/MutableSharedFlow;Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->(Lkotlinx/coroutines/flow/MutableSharedFlow;Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1$1; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1$1;->(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1$1;->(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;->(Lkotlin/jvm/functions/Function6;ZZFJLandroidx/compose/animation/core/Animatable;)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;->(Lkotlin/jvm/functions/Function6;ZZFJLandroidx/compose/animation/core/Animatable;)V HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2$1; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2$1;->(Landroidx/compose/animation/core/Animatable;)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2$1;->(Landroidx/compose/animation/core/Animatable;)V Ltachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$nestedScrollConnection$1$1; HSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$nestedScrollConnection$1$1;->(Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/flow/MutableSharedFlow;)V PLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$nestedScrollConnection$1$1;->(Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/flow/MutableSharedFlow;)V Ltachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1; HSPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;->(ZJJJLkotlin/jvm/functions/Function0;)V PLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;->(ZJJJLkotlin/jvm/functions/Function0;)V HSPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/widget/TachiyomiWidgetManager; HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager;->(Ltachiyomi/domain/updates/interactor/GetUpdates;Leu/kanade/tachiyomi/core/security/SecurityPreferences;)V PLtachiyomi/presentation/widget/TachiyomiWidgetManager;->(Ltachiyomi/domain/updates/interactor/GetUpdates;Leu/kanade/tachiyomi/core/security/SecurityPreferences;)V HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager;->init(Landroid/content/Context;Landroidx/lifecycle/LifecycleCoroutineScopeImpl;)V PLtachiyomi/presentation/widget/TachiyomiWidgetManager;->init(Landroid/content/Context;Landroidx/lifecycle/LifecycleCoroutineScopeImpl;)V Ltachiyomi/presentation/widget/TachiyomiWidgetManager$init$1; HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->(Lkotlin/coroutines/Continuation;)V PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->(Lkotlin/coroutines/Continuation;)V HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/widget/TachiyomiWidgetManager$init$2; HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget; HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;->()V HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;->()V Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion; HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;->()V HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;->(I)V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;->(I)V Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1; HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;->()V HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;->()V Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2; HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;->()V HSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;->()V PLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;->()V Ltachiyomi/source/local/LocalSource; HSPLtachiyomi/source/local/LocalSource;->()V PLtachiyomi/source/local/LocalSource;->()V HSPLtachiyomi/source/local/LocalSource;->(Landroid/content/Context;Ltachiyomi/source/local/io/LocalSourceFileSystem;Ltachiyomi/source/local/image/LocalCoverManager;)V PLtachiyomi/source/local/LocalSource;->(Landroid/content/Context;Ltachiyomi/source/local/io/LocalSourceFileSystem;Ltachiyomi/source/local/image/LocalCoverManager;)V Ltachiyomi/source/local/LocalSource$$ExternalSyntheticLambda0; HSPLtachiyomi/source/local/LocalSource$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function2;I)V PLtachiyomi/source/local/LocalSource$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function2;I)V Ltachiyomi/source/local/LocalSource$Companion; HSPLtachiyomi/source/local/LocalSource$Companion;->()V PLtachiyomi/source/local/LocalSource$Companion;->()V HSPLtachiyomi/source/local/LocalSource$Companion;->(I)V PLtachiyomi/source/local/LocalSource$Companion;->(I)V Ltachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1; HSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;->()V PLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;->()V HSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;->()V PLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;->()V Ltachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2; HSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;->()V PLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;->()V HSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;->()V PLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;->()V Ltachiyomi/source/local/filter/OrderBy; HSPLtachiyomi/source/local/filter/OrderBy;->(Landroid/content/Context;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V PLtachiyomi/source/local/filter/OrderBy;->(Landroid/content/Context;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V Ltachiyomi/source/local/filter/OrderBy$Latest; HSPLtachiyomi/source/local/filter/OrderBy$Latest;->(Landroid/content/Context;)V PLtachiyomi/source/local/filter/OrderBy$Latest;->(Landroid/content/Context;)V Ltachiyomi/source/local/filter/OrderBy$Popular; HSPLtachiyomi/source/local/filter/OrderBy$Popular;->(Landroid/content/Context;)V PLtachiyomi/source/local/filter/OrderBy$Popular;->(Landroid/content/Context;)V Ltachiyomi/source/local/image/LocalCoverManager; HSPLtachiyomi/source/local/image/LocalCoverManager;->(Landroid/app/Application;Ltachiyomi/source/local/io/LocalSourceFileSystem;)V PLtachiyomi/source/local/image/LocalCoverManager;->(Landroid/app/Application;Ltachiyomi/source/local/io/LocalSourceFileSystem;)V Ltachiyomi/source/local/io/Format$UnknownFormatException; Ltachiyomi/source/local/io/LocalSourceFileSystem; HSPLtachiyomi/source/local/io/LocalSourceFileSystem;->(Landroid/app/Application;)V PLtachiyomi/source/local/io/LocalSourceFileSystem;->(Landroid/app/Application;)V Ltachiyomi/view/HistoryViewQueries; HSPLtachiyomi/view/HistoryViewQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V PLtachiyomi/view/HistoryViewQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V HSPLtachiyomi/view/HistoryViewQueries;->access$getDriver(Ltachiyomi/view/HistoryViewQueries;)Lapp/cash/sqldelight/db/SqlDriver; PLtachiyomi/view/HistoryViewQueries;->access$getDriver(Ltachiyomi/view/HistoryViewQueries;)Lapp/cash/sqldelight/db/SqlDriver; HSPLtachiyomi/view/HistoryViewQueries;->history(Ljava/lang/String;Lkotlin/jvm/functions/Function11;)Lapp/cash/sqldelight/Query; PLtachiyomi/view/HistoryViewQueries;->history(Ljava/lang/String;Lkotlin/jvm/functions/Function11;)Lapp/cash/sqldelight/Query; Ltachiyomi/view/HistoryViewQueries$HistoryQuery; HSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->(Ltachiyomi/view/HistoryViewQueries;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V PLtachiyomi/view/HistoryViewQueries$HistoryQuery;->(Ltachiyomi/view/HistoryViewQueries;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V HSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V PLtachiyomi/view/HistoryViewQueries$HistoryQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V HSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; PLtachiyomi/view/HistoryViewQueries$HistoryQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; HSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->getQuery()Ljava/lang/String; PLtachiyomi/view/HistoryViewQueries$HistoryQuery;->getQuery()Ljava/lang/String; Ltachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1; HSPLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;->(Ltachiyomi/view/HistoryViewQueries$HistoryQuery;)V PLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;->(Ltachiyomi/view/HistoryViewQueries$HistoryQuery;)V HSPLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/view/HistoryViewQueries$history$1; HSPLtachiyomi/view/HistoryViewQueries$history$1;->(Lkotlin/jvm/functions/Function11;Ltachiyomi/view/HistoryViewQueries;)V PLtachiyomi/view/HistoryViewQueries$history$1;->(Lkotlin/jvm/functions/Function11;Ltachiyomi/view/HistoryViewQueries;)V Ltachiyomi/view/LibraryViewQueries; HSPLtachiyomi/view/LibraryViewQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V PLtachiyomi/view/LibraryViewQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V HSPLtachiyomi/view/LibraryViewQueries;->library(Lkotlin/jvm/functions/FunctionN;)Lapp/cash/sqldelight/Query; PLtachiyomi/view/LibraryViewQueries;->library(Lkotlin/jvm/functions/FunctionN;)Lapp/cash/sqldelight/Query; Ltachiyomi/view/LibraryViewQueries$library$1; HSPLtachiyomi/view/LibraryViewQueries$library$1;->(Lkotlin/jvm/functions/FunctionN;Ltachiyomi/view/LibraryViewQueries;)V PLtachiyomi/view/LibraryViewQueries$library$1;->(Lkotlin/jvm/functions/FunctionN;Ltachiyomi/view/LibraryViewQueries;)V Ltachiyomi/view/UpdatesViewQueries; HSPLtachiyomi/view/UpdatesViewQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V PLtachiyomi/view/UpdatesViewQueries;->(Lapp/cash/sqldelight/db/SqlDriver;)V HSPLtachiyomi/view/UpdatesViewQueries;->access$getDriver(Ltachiyomi/view/UpdatesViewQueries;)Lapp/cash/sqldelight/db/SqlDriver; PLtachiyomi/view/UpdatesViewQueries;->access$getDriver(Ltachiyomi/view/UpdatesViewQueries;)Lapp/cash/sqldelight/db/SqlDriver; HSPLtachiyomi/view/UpdatesViewQueries;->getRecentUpdates(JJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query; PLtachiyomi/view/UpdatesViewQueries;->getRecentUpdates(JJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query; HSPLtachiyomi/view/UpdatesViewQueries;->getUpdatesByReadStatus(ZJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query; PLtachiyomi/view/UpdatesViewQueries;->getUpdatesByReadStatus(ZJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query; Ltachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery; HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->(Ltachiyomi/view/UpdatesViewQueries;JJLkotlin/jvm/functions/Function1;)V PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->(Ltachiyomi/view/UpdatesViewQueries;JJLkotlin/jvm/functions/Function1;)V HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getAfter()J PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getAfter()J HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getLimit()J PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getLimit()J Ltachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1; HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;->(Ltachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;)V PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;->(Ltachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;)V HSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery; HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->(Ltachiyomi/view/UpdatesViewQueries;ZJLkotlin/jvm/functions/Function1;)V PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->(Ltachiyomi/view/UpdatesViewQueries;ZJLkotlin/jvm/functions/Function1;)V HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value; HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getAfter()J PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getAfter()J HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getRead()Z PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getRead()Z Ltachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1; HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;->(Ltachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;)V PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;->(Ltachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;)V HSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; Ltachiyomi/view/UpdatesViewQueries$getRecentUpdates$1; HSPLtachiyomi/view/UpdatesViewQueries$getRecentUpdates$1;->(Lkotlin/jvm/functions/Function14;)V PLtachiyomi/view/UpdatesViewQueries$getRecentUpdates$1;->(Lkotlin/jvm/functions/Function14;)V Ltachiyomi/view/UpdatesViewQueries$getUpdatesByReadStatus$1; HSPLtachiyomi/view/UpdatesViewQueries$getUpdatesByReadStatus$1;->(Lkotlin/jvm/functions/Function14;)V PLtachiyomi/view/UpdatesViewQueries$getUpdatesByReadStatus$1;->(Lkotlin/jvm/functions/Function14;)V Luy/kohesive/injekt/InjektKt; HSPLuy/kohesive/injekt/InjektKt;->()V PLuy/kohesive/injekt/InjektKt;->()V HSPLuy/kohesive/injekt/InjektKt;->getInjekt()Luy/kohesive/injekt/api/InjektScope; PLuy/kohesive/injekt/InjektKt;->getInjekt()Luy/kohesive/injekt/api/InjektScope; Luy/kohesive/injekt/api/FullTypeReference; HSPLuy/kohesive/injekt/api/FullTypeReference;->()V HPLuy/kohesive/injekt/api/FullTypeReference;->()V HSPLuy/kohesive/injekt/api/FullTypeReference;->getType()Ljava/lang/reflect/Type; PLuy/kohesive/injekt/api/FullTypeReference;->getType()Ljava/lang/reflect/Type; Luy/kohesive/injekt/api/InjektFactory; Luy/kohesive/injekt/api/InjektModule; Luy/kohesive/injekt/api/InjektModule$DefaultImpls; HSPLuy/kohesive/injekt/api/InjektModule$DefaultImpls;->registerWith(Luy/kohesive/injekt/api/InjektModule;Luy/kohesive/injekt/api/InjektRegistrar;)V PLuy/kohesive/injekt/api/InjektModule$DefaultImpls;->registerWith(Luy/kohesive/injekt/api/InjektModule;Luy/kohesive/injekt/api/InjektRegistrar;)V Luy/kohesive/injekt/api/InjektRegistrar; Luy/kohesive/injekt/api/InjektRegistrar$DefaultImpls; HSPLuy/kohesive/injekt/api/InjektRegistrar$DefaultImpls;->importModule(Luy/kohesive/injekt/api/InjektRegistrar;Luy/kohesive/injekt/api/InjektModule;)V PLuy/kohesive/injekt/api/InjektRegistrar$DefaultImpls;->importModule(Luy/kohesive/injekt/api/InjektRegistrar;Luy/kohesive/injekt/api/InjektModule;)V Luy/kohesive/injekt/api/InjektRegistry; Luy/kohesive/injekt/api/InjektScope; HSPLuy/kohesive/injekt/api/InjektScope;->(Luy/kohesive/injekt/api/InjektRegistrar;)V PLuy/kohesive/injekt/api/InjektScope;->(Luy/kohesive/injekt/api/InjektRegistrar;)V HSPLuy/kohesive/injekt/api/InjektScope;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object; PLuy/kohesive/injekt/api/InjektScope;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object; HSPLuy/kohesive/injekt/api/InjektScope;->importModule(Luy/kohesive/injekt/api/InjektModule;)V PLuy/kohesive/injekt/api/InjektScope;->importModule(Luy/kohesive/injekt/api/InjektModule;)V Luy/kohesive/injekt/api/TypeReference; Luy/kohesive/injekt/registry/default/DefaultRegistrar; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->()V PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->()V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getExistingValues$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Ljava/util/concurrent/ConcurrentHashMap; PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getExistingValues$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Ljava/util/concurrent/ConcurrentHashMap; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getNOKEY$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Luy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1; PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getNOKEY$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Luy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingleton(Luy/kohesive/injekt/api/TypeReference;Ljava/lang/Object;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingleton(Luy/kohesive/injekt/api/TypeReference;Ljava/lang/Object;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingletonFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingletonFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object; HPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->importModule(Luy/kohesive/injekt/api/InjektModule;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar;->importModule(Luy/kohesive/injekt/api/InjektModule;)V Luy/kohesive/injekt/registry/default/DefaultRegistrar$Instance; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->(Ljava/lang/reflect/Type;Ljava/lang/Object;)V HPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->(Ljava/lang/reflect/Type;Ljava/lang/Object;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->equals(Ljava/lang/Object;)Z HPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->equals(Ljava/lang/Object;)Z HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->hashCode()I HPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->hashCode()I Luy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;->()V PLuy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;->()V Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;->(Ljava/lang/Object;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;->(Ljava/lang/Object;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;->invoke()Ljava/lang/Object; PLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;->invoke()Ljava/lang/Object; Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;->(Luy/kohesive/injekt/registry/default/DefaultRegistrar;Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;->(Luy/kohesive/injekt/registry/default/DefaultRegistrar;Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;->invoke()Ljava/lang/Object; HPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;->invoke()Ljava/lang/Object; Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;->(Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;)V PLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;->(Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;)V HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;->invoke()Ljava/lang/Object; PLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;->invoke()Ljava/lang/Object; Luy/kohesive/injekt/registry/default/DefaultRegistrar$threadedValues$1; HSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$threadedValues$1;->()V PLuy/kohesive/injekt/registry/default/DefaultRegistrar$threadedValues$1;->()V ================================================ FILE: app/src/main/java/eu/kanade/core/preference/CheckboxState.kt ================================================ package eu.kanade.core.preference import androidx.compose.ui.state.ToggleableState import tachiyomi.core.common.preference.CheckboxState fun CheckboxState.TriState.asToggleableState() = when (this) { is CheckboxState.TriState.Exclude -> ToggleableState.Indeterminate is CheckboxState.TriState.Include -> ToggleableState.On is CheckboxState.TriState.None -> ToggleableState.Off } ================================================ FILE: app/src/main/java/eu/kanade/core/preference/PreferenceMutableState.kt ================================================ package eu.kanade.core.preference import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import tachiyomi.core.common.preference.Preference class PreferenceMutableState( private val preference: Preference, scope: CoroutineScope, ) : MutableState { private val state = mutableStateOf(preference.get()) init { preference.changes() .onEach { state.value = it } .launchIn(scope) } override var value: T get() = state.value set(value) { preference.set(value) } override fun component1(): T { return state.value } override fun component2(): (T) -> Unit { return preference::set } } fun Preference.asState(scope: CoroutineScope) = PreferenceMutableState(this, scope) ================================================ FILE: app/src/main/java/eu/kanade/core/util/CollectionUtils.kt ================================================ package eu.kanade.core.util import androidx.compose.ui.util.fastFilter import androidx.compose.ui.util.fastForEach import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract fun List.insertSeparators( generator: (before: T?, after: T?) -> R?, ): List { if (isEmpty()) return emptyList() val newList = mutableListOf() for (i in -1..lastIndex) { val before = getOrNull(i) before?.let(newList::add) val after = getOrNull(i + 1) val separator = generator.invoke(before, after) separator?.let(newList::add) } return newList } /** * Similar to [eu.kanade.core.util.insertSeparators] but iterates from last to first element */ fun List.insertSeparatorsReversed( generator: (before: T?, after: T?) -> R?, ): List { if (isEmpty()) return emptyList() val newList = mutableListOf() for (i in size downTo 0) { val after = getOrNull(i) after?.let(newList::add) val before = getOrNull(i - 1) val separator = generator.invoke(before, after) separator?.let(newList::add) } return newList.asReversed() } fun HashSet.addOrRemove(value: E, shouldAdd: Boolean) { if (shouldAdd) { add(value) } else { remove(value) } } /** * Returns a list containing all elements not matching the given [predicate]. * * **Do not use for collections that come from public APIs**, since they may not support random * access in an efficient way, and this method may actually be a lot slower. Only use for * collections that are created by code we control and are known to support random access. */ @OptIn(ExperimentalContracts::class) inline fun List.fastFilterNot(predicate: (T) -> Boolean): List { contract { callsInPlace(predicate) } return fastFilter { !predicate(it) } } /** * Splits the original collection into pair of lists, * where *first* list contains elements for which [predicate] yielded `true`, * while *second* list contains elements for which [predicate] yielded `false`. * * **Do not use for collections that come from public APIs**, since they may not support random * access in an efficient way, and this method may actually be a lot slower. Only use for * collections that are created by code we control and are known to support random access. */ @OptIn(ExperimentalContracts::class) inline fun List.fastPartition(predicate: (T) -> Boolean): Pair, List> { contract { callsInPlace(predicate) } val first = ArrayList() val second = ArrayList() fastForEach { if (predicate(it)) { first.add(it) } else { second.add(it) } } return Pair(first, second) } /** * Returns the number of entries not matching the given [predicate]. * * **Do not use for collections that come from public APIs**, since they may not support random * access in an efficient way, and this method may actually be a lot slower. Only use for * collections that are created by code we control and are known to support random access. */ @OptIn(ExperimentalContracts::class) inline fun List.fastCountNot(predicate: (T) -> Boolean): Int { contract { callsInPlace(predicate) } var count = size fastForEach { if (predicate(it)) --count } return count } ================================================ FILE: app/src/main/java/eu/kanade/core/util/SourceUtil.kt ================================================ package eu.kanade.core.util import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @Composable fun ifSourcesLoaded(): Boolean { return remember { Injekt.get().isInitialized }.collectAsState().value } ================================================ FILE: app/src/main/java/eu/kanade/domain/DomainModule.kt ================================================ package eu.kanade.domain import eu.kanade.domain.chapter.interactor.GetAvailableScanlators import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.download.interactor.DeleteDownload import eu.kanade.domain.extension.interactor.GetExtensionLanguages import eu.kanade.domain.extension.interactor.GetExtensionSources import eu.kanade.domain.extension.interactor.GetExtensionsByType import eu.kanade.domain.extension.interactor.TrustExtension import eu.kanade.domain.manga.interactor.GetExcludedScanlators import eu.kanade.domain.manga.interactor.SetExcludedScanlators import eu.kanade.domain.manga.interactor.SetMangaViewerFlags import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.source.interactor.GetEnabledSources import eu.kanade.domain.source.interactor.GetIncognitoState import eu.kanade.domain.source.interactor.GetLanguagesWithSources import eu.kanade.domain.source.interactor.GetSourcesWithFavoriteCount import eu.kanade.domain.source.interactor.SetMigrateSorting import eu.kanade.domain.source.interactor.ToggleIncognito import eu.kanade.domain.source.interactor.ToggleLanguage import eu.kanade.domain.source.interactor.ToggleSource import eu.kanade.domain.source.interactor.ToggleSourcePin import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.domain.track.interactor.RefreshTracks import eu.kanade.domain.track.interactor.SyncChapterProgressWithTrack import eu.kanade.domain.track.interactor.TrackChapter import mihon.data.repository.ExtensionRepoRepositoryImpl import mihon.domain.chapter.interactor.FilterChaptersForDownload import mihon.domain.extensionrepo.interactor.CreateExtensionRepo import mihon.domain.extensionrepo.interactor.DeleteExtensionRepo import mihon.domain.extensionrepo.interactor.GetExtensionRepo import mihon.domain.extensionrepo.interactor.GetExtensionRepoCount import mihon.domain.extensionrepo.interactor.ReplaceExtensionRepo import mihon.domain.extensionrepo.interactor.UpdateExtensionRepo import mihon.domain.extensionrepo.repository.ExtensionRepoRepository import mihon.domain.extensionrepo.service.ExtensionRepoService import mihon.domain.migration.usecases.MigrateMangaUseCase import mihon.domain.upcoming.interactor.GetUpcomingManga import tachiyomi.data.category.CategoryRepositoryImpl import tachiyomi.data.chapter.ChapterRepositoryImpl import tachiyomi.data.history.HistoryRepositoryImpl import tachiyomi.data.manga.MangaRepositoryImpl import tachiyomi.data.release.ReleaseServiceImpl import tachiyomi.data.source.SourceRepositoryImpl import tachiyomi.data.source.StubSourceRepositoryImpl import tachiyomi.data.track.TrackRepositoryImpl import tachiyomi.data.updates.UpdatesRepositoryImpl import tachiyomi.domain.category.interactor.CreateCategoryWithName import tachiyomi.domain.category.interactor.DeleteCategory import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.RenameCategory import tachiyomi.domain.category.interactor.ReorderCategory import tachiyomi.domain.category.interactor.ResetCategoryFlags import tachiyomi.domain.category.interactor.SetDisplayMode import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.interactor.SetSortModeForCategory import tachiyomi.domain.category.interactor.UpdateCategory import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.chapter.interactor.GetBookmarkedChaptersByMangaId import tachiyomi.domain.chapter.interactor.GetChapter import tachiyomi.domain.chapter.interactor.GetChapterByUrlAndMangaId import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.interactor.SetMangaDefaultChapterFlags import tachiyomi.domain.chapter.interactor.ShouldUpdateDbChapter import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.repository.ChapterRepository import tachiyomi.domain.history.interactor.GetHistory import tachiyomi.domain.history.interactor.GetNextChapters import tachiyomi.domain.history.interactor.GetTotalReadDuration import tachiyomi.domain.history.interactor.RemoveHistory import tachiyomi.domain.history.interactor.UpsertHistory import tachiyomi.domain.history.repository.HistoryRepository import tachiyomi.domain.manga.interactor.FetchInterval import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.interactor.GetLibraryManga import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.interactor.GetMangaByUrlAndSourceId import tachiyomi.domain.manga.interactor.GetMangaWithChapters import tachiyomi.domain.manga.interactor.NetworkToLocalManga import tachiyomi.domain.manga.interactor.ResetViewerFlags import tachiyomi.domain.manga.interactor.SetMangaChapterFlags import tachiyomi.domain.manga.interactor.UpdateMangaNotes import tachiyomi.domain.manga.repository.MangaRepository import tachiyomi.domain.release.interactor.GetApplicationRelease import tachiyomi.domain.release.service.ReleaseService import tachiyomi.domain.source.interactor.GetRemoteManga import tachiyomi.domain.source.interactor.GetSourcesWithNonLibraryManga import tachiyomi.domain.source.repository.SourceRepository import tachiyomi.domain.source.repository.StubSourceRepository import tachiyomi.domain.track.interactor.DeleteTrack import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.interactor.GetTracksPerManga import tachiyomi.domain.track.interactor.InsertTrack import tachiyomi.domain.track.repository.TrackRepository import tachiyomi.domain.updates.interactor.GetUpdates import tachiyomi.domain.updates.repository.UpdatesRepository import uy.kohesive.injekt.api.InjektModule import uy.kohesive.injekt.api.InjektRegistrar import uy.kohesive.injekt.api.addFactory import uy.kohesive.injekt.api.addSingletonFactory import uy.kohesive.injekt.api.get class DomainModule : InjektModule { override fun InjektRegistrar.registerInjectables() { addSingletonFactory { CategoryRepositoryImpl(get()) } addFactory { GetCategories(get()) } addFactory { ResetCategoryFlags(get(), get()) } addFactory { SetDisplayMode(get()) } addFactory { SetSortModeForCategory(get(), get()) } addFactory { CreateCategoryWithName(get(), get()) } addFactory { RenameCategory(get()) } addFactory { ReorderCategory(get()) } addFactory { UpdateCategory(get()) } addFactory { DeleteCategory(get(), get(), get()) } addSingletonFactory { MangaRepositoryImpl(get()) } addFactory { GetDuplicateLibraryManga(get()) } addFactory { GetFavorites(get()) } addFactory { GetLibraryManga(get()) } addFactory { GetMangaWithChapters(get(), get()) } addFactory { GetMangaByUrlAndSourceId(get()) } addFactory { GetManga(get()) } addFactory { GetNextChapters(get(), get(), get()) } addFactory { GetUpcomingManga(get()) } addFactory { ResetViewerFlags(get()) } addFactory { SetMangaChapterFlags(get()) } addFactory { FetchInterval(get()) } addFactory { SetMangaDefaultChapterFlags(get(), get(), get()) } addFactory { SetMangaViewerFlags(get()) } addFactory { NetworkToLocalManga(get()) } addFactory { UpdateManga(get(), get()) } addFactory { UpdateMangaNotes(get()) } addFactory { SetMangaCategories(get()) } addFactory { GetExcludedScanlators(get()) } addFactory { SetExcludedScanlators(get()) } addFactory { MigrateMangaUseCase( get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), ) } addSingletonFactory { ReleaseServiceImpl(get(), get()) } addFactory { GetApplicationRelease(get(), get()) } addSingletonFactory { TrackRepositoryImpl(get()) } addFactory { TrackChapter(get(), get(), get(), get()) } addFactory { AddTracks(get(), get(), get(), get()) } addFactory { RefreshTracks(get(), get(), get(), get()) } addFactory { DeleteTrack(get()) } addFactory { GetTracksPerManga(get()) } addFactory { GetTracks(get()) } addFactory { InsertTrack(get()) } addFactory { SyncChapterProgressWithTrack(get(), get(), get()) } addSingletonFactory { ChapterRepositoryImpl(get()) } addFactory { GetChapter(get()) } addFactory { GetChaptersByMangaId(get()) } addFactory { GetBookmarkedChaptersByMangaId(get()) } addFactory { GetChapterByUrlAndMangaId(get()) } addFactory { UpdateChapter(get()) } addFactory { SetReadStatus(get(), get(), get(), get()) } addFactory { ShouldUpdateDbChapter() } addFactory { SyncChaptersWithSource(get(), get(), get(), get(), get(), get(), get(), get(), get()) } addFactory { GetAvailableScanlators(get()) } addFactory { FilterChaptersForDownload(get(), get(), get()) } addSingletonFactory { HistoryRepositoryImpl(get()) } addFactory { GetHistory(get()) } addFactory { UpsertHistory(get()) } addFactory { RemoveHistory(get()) } addFactory { GetTotalReadDuration(get()) } addFactory { DeleteDownload(get(), get()) } addFactory { GetExtensionsByType(get(), get()) } addFactory { GetExtensionSources(get()) } addFactory { GetExtensionLanguages(get(), get()) } addSingletonFactory { UpdatesRepositoryImpl(get()) } addFactory { GetUpdates(get()) } addSingletonFactory { SourceRepositoryImpl(get(), get()) } addSingletonFactory { StubSourceRepositoryImpl(get()) } addFactory { GetEnabledSources(get(), get()) } addFactory { GetLanguagesWithSources(get(), get()) } addFactory { GetRemoteManga(get()) } addFactory { GetSourcesWithFavoriteCount(get(), get()) } addFactory { GetSourcesWithNonLibraryManga(get()) } addFactory { SetMigrateSorting(get()) } addFactory { ToggleLanguage(get()) } addFactory { ToggleSource(get()) } addFactory { ToggleSourcePin(get()) } addFactory { TrustExtension(get(), get()) } addSingletonFactory { ExtensionRepoRepositoryImpl(get()) } addFactory { ExtensionRepoService(get(), get()) } addFactory { GetExtensionRepo(get()) } addFactory { GetExtensionRepoCount(get()) } addFactory { CreateExtensionRepo(get(), get()) } addFactory { DeleteExtensionRepo(get()) } addFactory { ReplaceExtensionRepo(get()) } addFactory { UpdateExtensionRepo(get(), get()) } addFactory { ToggleIncognito(get()) } addFactory { GetIncognitoState(get(), get(), get()) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/base/BasePreferences.kt ================================================ package eu.kanade.domain.base import android.content.Context import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.util.system.GLUtil import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.i18n.MR class BasePreferences( val context: Context, preferenceStore: PreferenceStore, ) { val downloadedOnly: Preference = preferenceStore.getBoolean( Preference.appStateKey("pref_downloaded_only"), false, ) val incognitoMode: Preference = preferenceStore.getBoolean(Preference.appStateKey("incognito_mode"), false) val extensionInstaller: ExtensionInstallerPreference = ExtensionInstallerPreference(context, preferenceStore) val shownOnboardingFlow: Preference = preferenceStore.getBoolean( Preference.appStateKey("onboarding_complete"), false, ) enum class ExtensionInstaller(val titleRes: StringResource, val requiresSystemPermission: Boolean) { LEGACY(MR.strings.ext_installer_legacy, true), PACKAGEINSTALLER(MR.strings.ext_installer_packageinstaller, true), SHIZUKU(MR.strings.ext_installer_shizuku, false), PRIVATE(MR.strings.ext_installer_private, false), } val displayProfile: Preference = preferenceStore.getString("pref_display_profile_key", "") val hardwareBitmapThreshold: Preference = preferenceStore.getInt( "pref_hardware_bitmap_threshold", GLUtil.SAFE_TEXTURE_LIMIT, ) val alwaysDecodeLongStripWithSSIV: Preference = preferenceStore.getBoolean( "pref_always_decode_long_strip_with_ssiv", false, ) val installationId: Preference = preferenceStore.getString(Preference.appStateKey("installation_id"), "") } ================================================ FILE: app/src/main/java/eu/kanade/domain/base/ExtensionInstallerPreference.kt ================================================ package eu.kanade.domain.base import android.content.Context import eu.kanade.domain.base.BasePreferences.ExtensionInstaller import eu.kanade.tachiyomi.util.system.hasMiuiPackageInstaller import eu.kanade.tachiyomi.util.system.isShizukuInstalled import kotlinx.coroutines.CoroutineScope import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum class ExtensionInstallerPreference( private val context: Context, preferenceStore: PreferenceStore, ) : Preference { private val basePref = preferenceStore.getEnum(key(), defaultValue()) override fun key() = "extension_installer" val entries get() = ExtensionInstaller.entries.run { if (context.hasMiuiPackageInstaller) { filter { it != ExtensionInstaller.PACKAGEINSTALLER } } else { toList() } } override fun defaultValue() = if (context.hasMiuiPackageInstaller) { ExtensionInstaller.LEGACY } else { ExtensionInstaller.PACKAGEINSTALLER } private fun check(value: ExtensionInstaller): ExtensionInstaller { when (value) { ExtensionInstaller.PACKAGEINSTALLER -> { if (context.hasMiuiPackageInstaller) return ExtensionInstaller.LEGACY } ExtensionInstaller.SHIZUKU -> { if (!context.isShizukuInstalled) return defaultValue() } else -> {} } return value } override fun get(): ExtensionInstaller { val value = basePref.get() val checkedValue = check(value) if (value != checkedValue) { basePref.set(checkedValue) } return checkedValue } override fun set(value: ExtensionInstaller) { basePref.set(check(value)) } override fun isSet() = basePref.isSet() override fun delete() = basePref.delete() override fun changes() = basePref.changes() override fun stateIn(scope: CoroutineScope) = basePref.stateIn(scope) } ================================================ FILE: app/src/main/java/eu/kanade/domain/chapter/interactor/GetAvailableScanlators.kt ================================================ package eu.kanade.domain.chapter.interactor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import tachiyomi.domain.chapter.repository.ChapterRepository class GetAvailableScanlators( private val repository: ChapterRepository, ) { private fun List.cleanupAvailableScanlators(): Set { return mapNotNull { it.ifBlank { null } }.toSet() } suspend fun await(mangaId: Long): Set { return repository.getScanlatorsByMangaId(mangaId) .cleanupAvailableScanlators() } fun subscribe(mangaId: Long): Flow> { return repository.getScanlatorsByMangaIdAsFlow(mangaId) .map { it.cleanupAvailableScanlators() } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/chapter/interactor/SetReadStatus.kt ================================================ package eu.kanade.domain.chapter.interactor import eu.kanade.domain.download.interactor.DeleteDownload import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.ChapterUpdate import tachiyomi.domain.chapter.repository.ChapterRepository import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class SetReadStatus( private val downloadPreferences: DownloadPreferences, private val deleteDownload: DeleteDownload, private val mangaRepository: MangaRepository, private val chapterRepository: ChapterRepository, ) { private val mapper = { chapter: Chapter, read: Boolean -> ChapterUpdate( read = read, lastPageRead = if (!read) 0 else null, id = chapter.id, ) } suspend fun await(read: Boolean, vararg chapters: Chapter): Result = withNonCancellableContext { val chaptersToUpdate = chapters.filter { when (read) { true -> !it.read false -> it.read || it.lastPageRead > 0 } } if (chaptersToUpdate.isEmpty()) { return@withNonCancellableContext Result.NoChapters } try { chapterRepository.updateAll( chaptersToUpdate.map { mapper(it, read) }, ) } catch (e: Exception) { logcat(LogPriority.ERROR, e) return@withNonCancellableContext Result.InternalError(e) } if (read && downloadPreferences.removeAfterMarkedAsRead.get()) { chaptersToUpdate .groupBy { it.mangaId } .forEach { (mangaId, chapters) -> deleteDownload.awaitAll( manga = mangaRepository.getMangaById(mangaId), chapters = chapters.toTypedArray(), ) } } Result.Success } suspend fun await(mangaId: Long, read: Boolean): Result = withNonCancellableContext { await( read = read, chapters = chapterRepository .getChapterByMangaId(mangaId) .toTypedArray(), ) } suspend fun await(manga: Manga, read: Boolean) = await(manga.id, read) sealed interface Result { data object Success : Result data object NoChapters : Result data class InternalError(val error: Throwable) : Result } } ================================================ FILE: app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt ================================================ package eu.kanade.domain.chapter.interactor import eu.kanade.domain.chapter.model.copyFromSChapter import eu.kanade.domain.chapter.model.toSChapter import eu.kanade.domain.manga.interactor.GetExcludedScanlators import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.toSManga import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.online.HttpSource import tachiyomi.data.chapter.ChapterSanitizer import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.interactor.ShouldUpdateDbChapter import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.NoChaptersException import tachiyomi.domain.chapter.model.toChapterUpdate import tachiyomi.domain.chapter.repository.ChapterRepository import tachiyomi.domain.chapter.service.ChapterRecognition import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.source.local.isLocal import java.lang.Long.max import java.time.ZonedDateTime import java.util.TreeSet class SyncChaptersWithSource( private val downloadManager: DownloadManager, private val downloadProvider: DownloadProvider, private val chapterRepository: ChapterRepository, private val shouldUpdateDbChapter: ShouldUpdateDbChapter, private val updateManga: UpdateManga, private val updateChapter: UpdateChapter, private val getChaptersByMangaId: GetChaptersByMangaId, private val getExcludedScanlators: GetExcludedScanlators, private val libraryPreferences: LibraryPreferences, ) { /** * Method to synchronize db chapters with source ones * * @param rawSourceChapters the chapters from the source. * @param manga the manga the chapters belong to. * @param source the source the manga belongs to. * @return Newly added chapters */ suspend fun await( rawSourceChapters: List, manga: Manga, source: Source, manualFetch: Boolean = false, fetchWindow: Pair = Pair(0, 0), ): List { if (rawSourceChapters.isEmpty() && !source.isLocal()) { throw NoChaptersException() } val now = ZonedDateTime.now() val nowMillis = now.toInstant().toEpochMilli() val sourceChapters = rawSourceChapters .distinctBy { it.url } .mapIndexed { i, sChapter -> Chapter.create() .copyFromSChapter(sChapter) .copy(name = with(ChapterSanitizer) { sChapter.name.sanitize(manga.title) }) .copy(mangaId = manga.id, sourceOrder = i.toLong()) } val dbChapters = getChaptersByMangaId.await(manga.id) val newChapters = mutableListOf() val updatedChapters = mutableListOf() val removedChapters = dbChapters.filterNot { dbChapter -> sourceChapters.any { sourceChapter -> dbChapter.url == sourceChapter.url } } // Used to not set upload date of older chapters // to a higher value than newer chapters var maxSeenUploadDate = 0L for (sourceChapter in sourceChapters) { var chapter = sourceChapter // Update metadata from source if necessary. if (source is HttpSource) { val sChapter = chapter.toSChapter() source.prepareNewChapter(sChapter, manga.toSManga()) chapter = chapter.copyFromSChapter(sChapter) } // Recognize chapter number for the chapter. val chapterNumber = ChapterRecognition.parseChapterNumber(manga.title, chapter.name, chapter.chapterNumber) chapter = chapter.copy(chapterNumber = chapterNumber) val dbChapter = dbChapters.find { it.url == chapter.url } if (dbChapter == null) { val toAddChapter = if (chapter.dateUpload == 0L) { val altDateUpload = if (maxSeenUploadDate == 0L) nowMillis else maxSeenUploadDate chapter.copy(dateUpload = altDateUpload) } else { maxSeenUploadDate = max(maxSeenUploadDate, sourceChapter.dateUpload) chapter } newChapters.add(toAddChapter) } else { if (shouldUpdateDbChapter.await(dbChapter, chapter)) { val shouldRenameChapter = downloadProvider.isChapterDirNameChanged(dbChapter, chapter) && downloadManager.isChapterDownloaded( dbChapter.name, dbChapter.scanlator, dbChapter.url, manga.title, manga.source, ) if (shouldRenameChapter) { downloadManager.renameChapter(source, manga, dbChapter, chapter) } var toChangeChapter = dbChapter.copy( name = chapter.name, chapterNumber = chapter.chapterNumber, scanlator = chapter.scanlator, sourceOrder = chapter.sourceOrder, ) if (chapter.dateUpload != 0L) { toChangeChapter = toChangeChapter.copy(dateUpload = chapter.dateUpload) } updatedChapters.add(toChangeChapter) } } } // Return if there's nothing to add, delete, or update to avoid unnecessary db transactions. if (newChapters.isEmpty() && removedChapters.isEmpty() && updatedChapters.isEmpty()) { if (manualFetch || manga.fetchInterval == 0 || manga.nextUpdate < fetchWindow.first) { updateManga.awaitUpdateFetchInterval( manga, now, fetchWindow, ) } return emptyList() } val changedOrDuplicateReadUrls = mutableSetOf() val deletedChapterNumbers = TreeSet() val deletedReadChapterNumbers = TreeSet() val deletedBookmarkedChapterNumbers = TreeSet() val readChapterNumbers = dbChapters .asSequence() .filter { it.read && it.isRecognizedNumber } .map { it.chapterNumber } .toSet() removedChapters.forEach { chapter -> if (chapter.read) deletedReadChapterNumbers.add(chapter.chapterNumber) if (chapter.bookmark) deletedBookmarkedChapterNumbers.add(chapter.chapterNumber) deletedChapterNumbers.add(chapter.chapterNumber) } val deletedChapterNumberDateFetchMap = removedChapters.sortedByDescending { it.dateFetch } .associate { it.chapterNumber to it.dateFetch } val markDuplicateAsRead = libraryPreferences.markDuplicateReadChapterAsRead.get() .contains(LibraryPreferences.MARK_DUPLICATE_CHAPTER_READ_NEW) // Date fetch is set in such a way that the upper ones will have bigger value than the lower ones // Sources MUST return the chapters from most to less recent, which is common. var itemCount = newChapters.size var updatedToAdd = newChapters.map { toAddItem -> var chapter = toAddItem.copy(dateFetch = nowMillis + itemCount--) if (chapter.chapterNumber in readChapterNumbers && markDuplicateAsRead) { changedOrDuplicateReadUrls.add(chapter.url) chapter = chapter.copy(read = true) } if (!chapter.isRecognizedNumber || chapter.chapterNumber !in deletedChapterNumbers) return@map chapter chapter = chapter.copy( read = chapter.chapterNumber in deletedReadChapterNumbers, bookmark = chapter.chapterNumber in deletedBookmarkedChapterNumbers, ) // Try to to use the fetch date of the original entry to not pollute 'Updates' tab deletedChapterNumberDateFetchMap[chapter.chapterNumber]?.let { chapter = chapter.copy(dateFetch = it) } changedOrDuplicateReadUrls.add(chapter.url) chapter } if (removedChapters.isNotEmpty()) { val toDeleteIds = removedChapters.map { it.id } chapterRepository.removeChaptersWithIds(toDeleteIds) } if (updatedToAdd.isNotEmpty()) { updatedToAdd = chapterRepository.addAll(updatedToAdd) } if (updatedChapters.isNotEmpty()) { val chapterUpdates = updatedChapters.map { it.toChapterUpdate() } updateChapter.awaitAll(chapterUpdates) } updateManga.awaitUpdateFetchInterval(manga, now, fetchWindow) // Set this manga as updated since chapters were changed // Note that last_update actually represents last time the chapter list changed at all updateManga.awaitUpdateLastUpdate(manga.id) val excludedScanlators = getExcludedScanlators.await(manga.id).toHashSet() return updatedToAdd.filterNot { it.url in changedOrDuplicateReadUrls || it.scanlator in excludedScanlators } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/chapter/model/Chapter.kt ================================================ package eu.kanade.domain.chapter.model import eu.kanade.tachiyomi.data.database.models.ChapterImpl import eu.kanade.tachiyomi.source.model.SChapter import tachiyomi.domain.chapter.model.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter as DbChapter // TODO: Remove when all deps are migrated fun Chapter.toSChapter(): SChapter { return SChapter.create().also { it.url = url it.name = name it.date_upload = dateUpload it.chapter_number = chapterNumber.toFloat() it.scanlator = scanlator } } fun Chapter.copyFromSChapter(sChapter: SChapter): Chapter { return this.copy( name = sChapter.name, url = sChapter.url, dateUpload = sChapter.date_upload, chapterNumber = sChapter.chapter_number.toDouble(), scanlator = sChapter.scanlator?.ifBlank { null }?.trim(), ) } fun Chapter.toDbChapter(): DbChapter = ChapterImpl().also { it.id = id it.manga_id = mangaId it.url = url it.name = name it.scanlator = scanlator it.read = read it.bookmark = bookmark it.last_page_read = lastPageRead.toInt() it.date_fetch = dateFetch it.date_upload = dateUpload it.chapter_number = chapterNumber.toFloat() it.source_order = sourceOrder.toInt() } ================================================ FILE: app/src/main/java/eu/kanade/domain/chapter/model/ChapterFilter.kt ================================================ package eu.kanade.domain.chapter.model import eu.kanade.domain.manga.model.downloadedFilter import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.ui.manga.ChapterList import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.service.getChapterSort import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.applyFilter import tachiyomi.source.local.isLocal /** * Applies the view filters to the list of chapters obtained from the database. * @return an observable of the list of chapters filtered and sorted. */ fun List.applyFilters(manga: Manga, downloadManager: DownloadManager): List { val isLocalManga = manga.isLocal() val unreadFilter = manga.unreadFilter val downloadedFilter = manga.downloadedFilter val bookmarkedFilter = manga.bookmarkedFilter return filter { chapter -> applyFilter(unreadFilter) { !chapter.read } } .filter { chapter -> applyFilter(bookmarkedFilter) { chapter.bookmark } } .filter { chapter -> applyFilter(downloadedFilter) { val downloaded = downloadManager.isChapterDownloaded( chapter.name, chapter.scanlator, chapter.url, manga.title, manga.source, ) downloaded || isLocalManga } } .sortedWith(getChapterSort(manga)) } /** * Applies the view filters to the list of chapters obtained from the database. * @return an observable of the list of chapters filtered and sorted. */ fun List.applyFilters(manga: Manga): Sequence { val isLocalManga = manga.isLocal() val unreadFilter = manga.unreadFilter val downloadedFilter = manga.downloadedFilter val bookmarkedFilter = manga.bookmarkedFilter return asSequence() .filter { (chapter) -> applyFilter(unreadFilter) { !chapter.read } } .filter { (chapter) -> applyFilter(bookmarkedFilter) { chapter.bookmark } } .filter { applyFilter(downloadedFilter) { it.isDownloaded || isLocalManga } } .sortedWith { (chapter1), (chapter2) -> getChapterSort(manga).invoke(chapter1, chapter2) } } ================================================ FILE: app/src/main/java/eu/kanade/domain/download/interactor/DeleteDownload.kt ================================================ package eu.kanade.domain.download.interactor import eu.kanade.tachiyomi.data.download.DownloadManager import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager class DeleteDownload( private val sourceManager: SourceManager, private val downloadManager: DownloadManager, ) { suspend fun awaitAll(manga: Manga, vararg chapters: Chapter) = withNonCancellableContext { sourceManager.get(manga.source)?.let { source -> downloadManager.deleteChapters(chapters.toList(), manga, source) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionLanguages.kt ================================================ package eu.kanade.domain.extension.interactor import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine class GetExtensionLanguages( private val preferences: SourcePreferences, private val extensionManager: ExtensionManager, ) { fun subscribe(): Flow> { return combine( preferences.enabledLanguages.changes(), extensionManager.availableExtensionsFlow, ) { enabledLanguage, availableExtensions -> availableExtensions .flatMap { ext -> if (ext.sources.isEmpty()) { listOf(ext.lang) } else { ext.sources.map { it.lang } } } .distinct() .sortedWith( compareBy { it !in enabledLanguage }.then(LocaleHelper.comparator), ) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionSources.kt ================================================ package eu.kanade.domain.extension.interactor import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.source.Source import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map class GetExtensionSources( private val preferences: SourcePreferences, ) { fun subscribe(extension: Extension.Installed): Flow> { val isMultiSource = extension.sources.size > 1 val isMultiLangSingleSource = isMultiSource && extension.sources.map { it.name }.distinct().size == 1 return preferences.disabledSources.changes().map { disabledSources -> fun Source.isEnabled() = id.toString() !in disabledSources extension.sources .map { source -> ExtensionSourceItem( source = source, enabled = source.isEnabled(), labelAsName = isMultiSource && !isMultiLangSingleSource, ) } } } } data class ExtensionSourceItem( val source: Source, val enabled: Boolean, val labelAsName: Boolean, ) ================================================ FILE: app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionsByType.kt ================================================ package eu.kanade.domain.extension.interactor import eu.kanade.domain.extension.model.Extensions import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.model.Extension import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine class GetExtensionsByType( private val preferences: SourcePreferences, private val extensionManager: ExtensionManager, ) { fun subscribe(): Flow { val showNsfwSources = preferences.showNsfwSource.get() return combine( preferences.enabledLanguages.changes(), extensionManager.installedExtensionsFlow, extensionManager.untrustedExtensionsFlow, extensionManager.availableExtensionsFlow, ) { enabledLanguages, _installed, _untrusted, _available -> val (updates, installed) = _installed .filter { (showNsfwSources || !it.isNsfw) } .sortedWith( compareBy { !it.isObsolete } .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name }, ) .partition { it.hasUpdate } val untrusted = _untrusted .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name }) val available = _available .filter { extension -> _installed.none { it.pkgName == extension.pkgName } && _untrusted.none { it.pkgName == extension.pkgName } && (showNsfwSources || !extension.isNsfw) } .flatMap { ext -> if (ext.sources.isEmpty()) { return@flatMap if (ext.lang in enabledLanguages) listOf(ext) else emptyList() } ext.sources.filter { it.lang in enabledLanguages } .map { ext.copy( name = it.name, lang = it.lang, pkgName = "${ext.pkgName}-${it.id}", sources = listOf(it), ) } } .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name }) Extensions(updates, installed, available, untrusted) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt ================================================ package eu.kanade.domain.extension.interactor import android.content.pm.PackageInfo import androidx.core.content.pm.PackageInfoCompat import eu.kanade.domain.source.service.SourcePreferences import mihon.domain.extensionrepo.repository.ExtensionRepoRepository import tachiyomi.core.common.preference.getAndSet class TrustExtension( private val extensionRepoRepository: ExtensionRepoRepository, private val preferences: SourcePreferences, ) { suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List): Boolean { val trustedFingerprints = extensionRepoRepository.getAll().map { it.signingKeyFingerprint }.toHashSet() val key = "${pkgInfo.packageName}:${PackageInfoCompat.getLongVersionCode(pkgInfo)}:${fingerprints.last()}" return trustedFingerprints.any { fingerprints.contains(it) } || key in preferences.trustedExtensions.get() } fun trust(pkgName: String, versionCode: Long, signatureHash: String) { preferences.trustedExtensions.getAndSet { exts -> // Remove previously trusted versions val removed = exts.filterNot { it.startsWith("$pkgName:") }.toMutableSet() removed.also { it += "$pkgName:$versionCode:$signatureHash" } } } fun revokeAll() { preferences.trustedExtensions.delete() } } ================================================ FILE: app/src/main/java/eu/kanade/domain/extension/model/Extensions.kt ================================================ package eu.kanade.domain.extension.model import eu.kanade.tachiyomi.extension.model.Extension data class Extensions( val updates: List, val installed: List, val available: List, val untrusted: List, ) ================================================ FILE: app/src/main/java/eu/kanade/domain/manga/interactor/GetExcludedScanlators.kt ================================================ package eu.kanade.domain.manga.interactor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import tachiyomi.data.DatabaseHandler class GetExcludedScanlators( private val handler: DatabaseHandler, ) { suspend fun await(mangaId: Long): Set { return handler.awaitList { excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(mangaId) } .toSet() } fun subscribe(mangaId: Long): Flow> { return handler.subscribeToList { excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(mangaId) } .map { it.toSet() } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/manga/interactor/SetExcludedScanlators.kt ================================================ package eu.kanade.domain.manga.interactor import tachiyomi.data.DatabaseHandler class SetExcludedScanlators( private val handler: DatabaseHandler, ) { suspend fun await(mangaId: Long, excludedScanlators: Set) { handler.await(inTransaction = true) { val currentExcluded = handler.awaitList { excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(mangaId) }.toSet() val toAdd = excludedScanlators.minus(currentExcluded) for (scanlator in toAdd) { excluded_scanlatorsQueries.insert(mangaId, scanlator) } val toRemove = currentExcluded.minus(excludedScanlators) excluded_scanlatorsQueries.remove(mangaId, toRemove) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/manga/interactor/SetMangaViewerFlags.kt ================================================ package eu.kanade.domain.manga.interactor import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.repository.MangaRepository class SetMangaViewerFlags( private val mangaRepository: MangaRepository, ) { suspend fun awaitSetReadingMode(id: Long, flag: Long) { val manga = mangaRepository.getMangaById(id) mangaRepository.update( MangaUpdate( id = id, viewerFlags = manga.viewerFlags.setFlag(flag, ReadingMode.MASK.toLong()), ), ) } suspend fun awaitSetOrientation(id: Long, flag: Long) { val manga = mangaRepository.getMangaById(id) mangaRepository.update( MangaUpdate( id = id, viewerFlags = manga.viewerFlags.setFlag(flag, ReaderOrientation.MASK.toLong()), ), ) } private fun Long.setFlag(flag: Long, mask: Long): Long { return this and mask.inv() or (flag and mask) } } ================================================ FILE: app/src/main/java/eu/kanade/domain/manga/interactor/UpdateManga.kt ================================================ package eu.kanade.domain.manga.interactor import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.source.model.SManga import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.FetchInterval import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.repository.MangaRepository import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.ZonedDateTime class UpdateManga( private val mangaRepository: MangaRepository, private val fetchInterval: FetchInterval, ) { suspend fun await(mangaUpdate: MangaUpdate): Boolean { return mangaRepository.update(mangaUpdate) } suspend fun awaitAll(mangaUpdates: List): Boolean { return mangaRepository.updateAll(mangaUpdates) } suspend fun awaitUpdateFromSource( localManga: Manga, remoteManga: SManga, manualFetch: Boolean, coverCache: CoverCache = Injekt.get(), libraryPreferences: LibraryPreferences = Injekt.get(), downloadManager: DownloadManager = Injekt.get(), ): Boolean { val remoteTitle = try { remoteManga.title } catch (_: UninitializedPropertyAccessException) { "" } // if the manga isn't a favorite (or 'update titles' preference is enabled), set its title from source and update in db val title = if (remoteTitle.isNotEmpty() && (!localManga.favorite || libraryPreferences.updateMangaTitles.get())) { remoteTitle } else { null } val coverLastModified = when { // Never refresh covers if the url is empty to avoid "losing" existing covers remoteManga.thumbnail_url.isNullOrEmpty() -> null !manualFetch && localManga.thumbnailUrl == remoteManga.thumbnail_url -> null localManga.isLocal() -> Instant.now().toEpochMilli() localManga.hasCustomCover(coverCache) -> { coverCache.deleteFromCache(localManga, false) null } else -> { coverCache.deleteFromCache(localManga, false) Instant.now().toEpochMilli() } } val thumbnailUrl = remoteManga.thumbnail_url?.takeIf { it.isNotEmpty() } val success = mangaRepository.update( MangaUpdate( id = localManga.id, title = title, coverLastModified = coverLastModified, author = remoteManga.author, artist = remoteManga.artist, description = remoteManga.description, genre = remoteManga.getGenres(), thumbnailUrl = thumbnailUrl, status = remoteManga.status.toLong(), updateStrategy = remoteManga.update_strategy, initialized = true, ), ) if (success && title != null) { downloadManager.renameManga(localManga, title) } return success } suspend fun awaitUpdateFetchInterval( manga: Manga, dateTime: ZonedDateTime = ZonedDateTime.now(), window: Pair = fetchInterval.getWindow(dateTime), ): Boolean { return mangaRepository.update( fetchInterval.toMangaUpdate(manga, dateTime, window), ) } suspend fun awaitUpdateLastUpdate(mangaId: Long): Boolean { return mangaRepository.update(MangaUpdate(id = mangaId, lastUpdate = Instant.now().toEpochMilli())) } suspend fun awaitUpdateCoverLastModified(mangaId: Long): Boolean { return mangaRepository.update(MangaUpdate(id = mangaId, coverLastModified = Instant.now().toEpochMilli())) } suspend fun awaitUpdateFavorite(mangaId: Long, favorite: Boolean): Boolean { val dateAdded = when (favorite) { true -> Instant.now().toEpochMilli() false -> 0 } return mangaRepository.update( MangaUpdate(id = mangaId, favorite = favorite, dateAdded = dateAdded), ) } } ================================================ FILE: app/src/main/java/eu/kanade/domain/manga/model/Manga.kt ================================================ package eu.kanade.domain.manga.model import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.core.common.preference.TriState import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.metadata.comicinfo.ComicInfoPublishingStatus import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get // TODO: move these into the domain model val Manga.readingMode: Long get() = viewerFlags and ReadingMode.MASK.toLong() val Manga.readerOrientation: Long get() = viewerFlags and ReaderOrientation.MASK.toLong() val Manga.downloadedFilter: TriState get() { if (Injekt.get().downloadedOnly.get()) return TriState.ENABLED_IS return when (downloadedFilterRaw) { Manga.CHAPTER_SHOW_DOWNLOADED -> TriState.ENABLED_IS Manga.CHAPTER_SHOW_NOT_DOWNLOADED -> TriState.ENABLED_NOT else -> TriState.DISABLED } } fun Manga.chaptersFiltered(): Boolean { return unreadFilter != TriState.DISABLED || downloadedFilter != TriState.DISABLED || bookmarkedFilter != TriState.DISABLED } fun Manga.toSManga(): SManga = SManga.create().also { it.url = url it.title = title it.artist = artist it.author = author it.description = description it.genre = genre.orEmpty().joinToString() it.status = status.toInt() it.thumbnail_url = thumbnailUrl it.initialized = initialized } fun Manga.copyFrom(other: SManga): Manga { val author = other.author ?: author val artist = other.artist ?: artist val description = other.description ?: description val genres = if (other.genre != null) { other.getGenres() } else { genre } val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl return this.copy( author = author, artist = artist, description = description, genre = genres, thumbnailUrl = thumbnailUrl, status = other.status.toLong(), updateStrategy = other.update_strategy, initialized = other.initialized && initialized, ) } fun Manga.hasCustomCover(coverCache: CoverCache = Injekt.get()): Boolean { return coverCache.getCustomCoverFile(id).exists() } /** * Creates a ComicInfo instance based on the manga and chapter metadata. */ fun getComicInfo( manga: Manga, chapter: Chapter, urls: List, categories: List?, sourceName: String, ) = ComicInfo( title = ComicInfo.Title(chapter.name), series = ComicInfo.Series(manga.title), number = chapter.chapterNumber.takeIf { it >= 0 }?.let { if ((it.rem(1) == 0.0)) { ComicInfo.Number(it.toInt().toString()) } else { ComicInfo.Number(it.toString()) } }, web = ComicInfo.Web(urls.joinToString(" ")), summary = manga.description?.let { ComicInfo.Summary(it) }, writer = manga.author?.let { ComicInfo.Writer(it) }, penciller = manga.artist?.let { ComicInfo.Penciller(it) }, translator = chapter.scanlator?.let { ComicInfo.Translator(it) }, genre = manga.genre?.let { ComicInfo.Genre(it.joinToString()) }, publishingStatus = ComicInfo.PublishingStatusTachiyomi( ComicInfoPublishingStatus.toComicInfoValue(manga.status), ), categories = categories?.let { ComicInfo.CategoriesTachiyomi(it.joinToString()) }, source = ComicInfo.SourceMihon(sourceName), inker = null, colorist = null, letterer = null, coverArtist = null, tags = null, ) ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/GetEnabledSources.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import tachiyomi.domain.source.model.Pin import tachiyomi.domain.source.model.Pins import tachiyomi.domain.source.model.Source import tachiyomi.domain.source.repository.SourceRepository import tachiyomi.source.local.isLocal class GetEnabledSources( private val repository: SourceRepository, private val preferences: SourcePreferences, ) { fun subscribe(): Flow> { return combine( preferences.pinnedSources.changes(), preferences.enabledLanguages.changes(), preferences.disabledSources.changes(), preferences.lastUsedSource.changes(), repository.getSources(), ) { pinnedSourceIds, enabledLanguages, disabledSources, lastUsedSource, sources -> sources .filter { it.lang in enabledLanguages || it.isLocal() } .filterNot { it.id.toString() in disabledSources } .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name }) .flatMap { val flag = if ("${it.id}" in pinnedSourceIds) Pins.pinned else Pins.unpinned val source = it.copy(pin = flag) val toFlatten = mutableListOf(source) if (source.id == lastUsedSource) { toFlatten.add(source.copy(isUsedLast = true, pin = source.pin - Pin.Actual)) } toFlatten } } .distinctUntilChanged() } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/GetIncognitoState.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.ExtensionManager import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged class GetIncognitoState( private val basePreferences: BasePreferences, private val sourcePreferences: SourcePreferences, private val extensionManager: ExtensionManager, ) { fun await(sourceId: Long?): Boolean { if (basePreferences.incognitoMode.get()) return true if (sourceId == null) return false val extensionPackage = extensionManager.getExtensionPackage(sourceId) ?: return false return extensionPackage in sourcePreferences.incognitoExtensions.get() } fun subscribe(sourceId: Long?): Flow { if (sourceId == null) return basePreferences.incognitoMode.changes() return combine( basePreferences.incognitoMode.changes(), sourcePreferences.incognitoExtensions.changes(), extensionManager.getExtensionPackageAsFlow(sourceId), ) { incognito, incognitoExtensions, extensionPackage -> incognito || (extensionPackage in incognitoExtensions) } .distinctUntilChanged() } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/GetLanguagesWithSources.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import tachiyomi.domain.source.model.Source import tachiyomi.domain.source.repository.SourceRepository import java.util.SortedMap class GetLanguagesWithSources( private val repository: SourceRepository, private val preferences: SourcePreferences, ) { fun subscribe(): Flow>> { return combine( preferences.enabledLanguages.changes(), preferences.disabledSources.changes(), repository.getOnlineSources(), ) { enabledLanguage, disabledSource, onlineSources -> val sortedSources = onlineSources.sortedWith( compareBy { it.id.toString() in disabledSource } .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name }, ) sortedSources .groupBy { it.lang } .toSortedMap( compareBy { it !in enabledLanguage }.then(LocaleHelper.comparator), ) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import tachiyomi.core.common.util.lang.compareToWithCollator import tachiyomi.domain.source.model.Source import tachiyomi.domain.source.repository.SourceRepository import tachiyomi.source.local.isLocal import java.util.Collections class GetSourcesWithFavoriteCount( private val repository: SourceRepository, private val preferences: SourcePreferences, ) { fun subscribe(): Flow>> { return combine( preferences.migrationSortingDirection.changes(), preferences.migrationSortingMode.changes(), repository.getSourcesWithFavoriteCount(), ) { direction, mode, list -> list .filterNot { it.first.isLocal() } .sortedWith(sortFn(direction, mode)) } } private fun sortFn( direction: SetMigrateSorting.Direction, sorting: SetMigrateSorting.Mode, ): java.util.Comparator> { val sortFn: (Pair, Pair) -> Int = { a, b -> when (sorting) { SetMigrateSorting.Mode.ALPHABETICAL -> { when { a.first.isStub && !b.first.isStub -> -1 b.first.isStub && !a.first.isStub -> 1 else -> a.first.name.lowercase().compareToWithCollator(b.first.name.lowercase()) } } SetMigrateSorting.Mode.TOTAL -> { when { a.first.isStub && !b.first.isStub -> -1 b.first.isStub && !a.first.isStub -> 1 else -> a.second.compareTo(b.second) } } } } return when (direction) { SetMigrateSorting.Direction.ASCENDING -> Comparator(sortFn) SetMigrateSorting.Direction.DESCENDING -> Collections.reverseOrder(sortFn) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/SetMigrateSorting.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences class SetMigrateSorting( private val preferences: SourcePreferences, ) { fun await(mode: Mode, direction: Direction) { preferences.migrationSortingMode.set(mode) preferences.migrationSortingDirection.set(direction) } enum class Mode { ALPHABETICAL, TOTAL, } enum class Direction { ASCENDING, DESCENDING, } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/ToggleIncognito.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import tachiyomi.core.common.preference.getAndSet class ToggleIncognito( private val preferences: SourcePreferences, ) { fun await(extensions: String, enable: Boolean) { preferences.incognitoExtensions.getAndSet { if (enable) it.plus(extensions) else it.minus(extensions) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/ToggleLanguage.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import tachiyomi.core.common.preference.getAndSet class ToggleLanguage( val preferences: SourcePreferences, ) { fun await(language: String) { val isEnabled = language in preferences.enabledLanguages.get() preferences.enabledLanguages.getAndSet { enabled -> if (isEnabled) enabled.minus(language) else enabled.plus(language) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import tachiyomi.core.common.preference.getAndSet import tachiyomi.domain.source.model.Source class ToggleSource( private val preferences: SourcePreferences, ) { fun await(source: Source, enable: Boolean = isEnabled(source.id)) { await(source.id, enable) } fun await(sourceId: Long, enable: Boolean = isEnabled(sourceId)) { preferences.disabledSources.getAndSet { disabled -> if (enable) disabled.minus("$sourceId") else disabled.plus("$sourceId") } } fun await(sourceIds: List, enable: Boolean) { val transformedSourceIds = sourceIds.map { it.toString() } preferences.disabledSources.getAndSet { disabled -> if (enable) disabled.minus(transformedSourceIds) else disabled.plus(transformedSourceIds) } } private fun isEnabled(sourceId: Long): Boolean { return sourceId.toString() in preferences.disabledSources.get() } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/interactor/ToggleSourcePin.kt ================================================ package eu.kanade.domain.source.interactor import eu.kanade.domain.source.service.SourcePreferences import tachiyomi.core.common.preference.getAndSet import tachiyomi.domain.source.model.Source class ToggleSourcePin( private val preferences: SourcePreferences, ) { fun await(source: Source) { val isPinned = source.id.toString() in preferences.pinnedSources.get() preferences.pinnedSources.getAndSet { pinned -> if (isPinned) pinned.minus("${source.id}") else pinned.plus("${source.id}") } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/model/Source.kt ================================================ package eu.kanade.domain.source.model import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.core.graphics.drawable.toBitmap import eu.kanade.tachiyomi.extension.ExtensionManager import tachiyomi.domain.source.model.Source import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get val Source.icon: ImageBitmap? get() { return Injekt.get().getAppIconForSource(id) ?.toBitmap() ?.asImageBitmap() } ================================================ FILE: app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt ================================================ package eu.kanade.domain.source.service import eu.kanade.domain.source.interactor.SetMigrateSorting import eu.kanade.tachiyomi.util.system.LocaleHelper import mihon.domain.migration.models.MigrationFlag import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import tachiyomi.core.common.preference.getLongArray import tachiyomi.domain.library.model.LibraryDisplayMode class SourcePreferences( preferenceStore: PreferenceStore, ) { val sourceDisplayMode: Preference = preferenceStore.getObjectFromString( "pref_display_mode_catalogue", LibraryDisplayMode.default, LibraryDisplayMode.Serializer::serialize, LibraryDisplayMode.Serializer::deserialize, ) val enabledLanguages: Preference> = preferenceStore.getStringSet( "source_languages", LocaleHelper.getDefaultEnabledLanguages(), ) val disabledSources: Preference> = preferenceStore.getStringSet("hidden_catalogues", emptySet()) val incognitoExtensions: Preference> = preferenceStore.getStringSet("incognito_extensions", emptySet()) val pinnedSources: Preference> = preferenceStore.getStringSet("pinned_catalogues", emptySet()) val lastUsedSource: Preference = preferenceStore.getLong( Preference.appStateKey("last_catalogue_source"), -1, ) val showNsfwSource: Preference = preferenceStore.getBoolean("show_nsfw_source", true) val migrationSortingMode: Preference = preferenceStore.getEnum( "pref_migration_sorting", SetMigrateSorting.Mode.ALPHABETICAL, ) val migrationSortingDirection: Preference = preferenceStore.getEnum( "pref_migration_direction", SetMigrateSorting.Direction.ASCENDING, ) val hideInLibraryItems: Preference = preferenceStore.getBoolean("browse_hide_in_library_items", false) val extensionRepos: Preference> = preferenceStore.getStringSet("extension_repos", emptySet()) val extensionUpdatesCount: Preference = preferenceStore.getInt("ext_updates_count", 0) val trustedExtensions: Preference> = preferenceStore.getStringSet( Preference.appStateKey("trusted_extensions"), emptySet(), ) val globalSearchFilterState: Preference = preferenceStore.getBoolean( Preference.appStateKey("has_filters_toggle_state"), false, ) val migrationSources: Preference> = preferenceStore.getLongArray("migration_sources", emptyList()) val migrationFlags: Preference> = preferenceStore.getObjectFromInt( key = "migration_flags", defaultValue = MigrationFlag.entries.toSet(), serializer = { MigrationFlag.toBit(it) }, deserializer = { value: Int -> MigrationFlag.fromBit(value) }, ) val migrationDeepSearchMode: Preference = preferenceStore.getBoolean("migration_deep_search", false) val migrationPrioritizeByChapters: Preference = preferenceStore.getBoolean( "migration_prioritize_by_chapters", false, ) val migrationHideUnmatched: Preference = preferenceStore.getBoolean("migration_hide_unmatched", false) val migrationHideWithoutUpdates: Preference = preferenceStore.getBoolean( "migration_hide_without_updates", false, ) } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt ================================================ package eu.kanade.domain.track.interactor import eu.kanade.domain.track.model.toDbTrack import eu.kanade.domain.track.model.toDomainTrack import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.util.lang.convertEpochMillisZone import logcat.LogPriority import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.history.interactor.GetHistory import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.track.interactor.InsertTrack import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.ZoneOffset class AddTracks( private val insertTrack: InsertTrack, private val syncChapterProgressWithTrack: SyncChapterProgressWithTrack, private val getChaptersByMangaId: GetChaptersByMangaId, private val trackerManager: TrackerManager, ) { // TODO: update all trackers based on common data suspend fun bind(tracker: Tracker, item: Track, mangaId: Long) = withNonCancellableContext { withIOContext { val allChapters = getChaptersByMangaId.await(mangaId) val hasReadChapters = allChapters.any { it.read } tracker.bind(item, hasReadChapters) var track = item.toDomainTrack(idRequired = false) ?: return@withIOContext insertTrack.await(track) // TODO: merge into [SyncChapterProgressWithTrack]? // Update chapter progress if newer chapters marked read locally if (hasReadChapters) { val latestLocalReadChapterNumber = allChapters .sortedBy { it.chapterNumber } .takeWhile { it.read } .lastOrNull() ?.chapterNumber ?: -1.0 if (latestLocalReadChapterNumber > track.lastChapterRead) { track = track.copy( lastChapterRead = latestLocalReadChapterNumber, ) tracker.setRemoteLastChapterRead(track.toDbTrack(), latestLocalReadChapterNumber.toInt()) } if (track.startDate <= 0) { val firstReadChapterDate = Injekt.get().await(mangaId) .sortedBy { it.readAt } .firstOrNull() ?.readAt firstReadChapterDate?.let { val startDate = firstReadChapterDate.time.convertEpochMillisZone( ZoneOffset.systemDefault(), ZoneOffset.UTC, ) track = track.copy( startDate = startDate, ) tracker.setRemoteStartDate(track.toDbTrack(), startDate) } } } syncChapterProgressWithTrack.await(mangaId, track, tracker) } } suspend fun bindEnhancedTrackers(manga: Manga, source: Source) = withNonCancellableContext { withIOContext { trackerManager.loggedInTrackers() .filterIsInstance() .filter { it.accept(source) } .forEach { service -> try { service.match(manga)?.let { track -> track.manga_id = manga.id (service as Tracker).bind(track) insertTrack.await(track.toDomainTrack(idRequired = false)!!) syncChapterProgressWithTrack.await( manga.id, track.toDomainTrack(idRequired = false)!!, service, ) } } catch (e: Exception) { logcat( LogPriority.WARN, e, ) { "Could not match manga: ${manga.title} with service $service" } } } } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt ================================================ package eu.kanade.domain.track.interactor import eu.kanade.domain.track.model.toDbTrack import eu.kanade.domain.track.model.toDomainTrack import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.supervisorScope import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.interactor.InsertTrack class RefreshTracks( private val getTracks: GetTracks, private val trackerManager: TrackerManager, private val insertTrack: InsertTrack, private val syncChapterProgressWithTrack: SyncChapterProgressWithTrack, ) { /** * Fetches updated tracking data from all logged in trackers. * * @return Failed updates. */ suspend fun await(mangaId: Long): List> { return supervisorScope { return@supervisorScope getTracks.await(mangaId) .map { it to trackerManager.get(it.trackerId) } .filter { (_, service) -> service?.isLoggedIn == true } .map { (track, service) -> async { return@async try { val updatedTrack = service!!.refresh(track.toDbTrack()).toDomainTrack()!! insertTrack.await(updatedTrack) syncChapterProgressWithTrack.await(mangaId, updatedTrack, service) null } catch (e: Throwable) { service to e } } } .awaitAll() .filterNotNull() } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/interactor/SyncChapterProgressWithTrack.kt ================================================ package eu.kanade.domain.track.interactor import eu.kanade.domain.track.model.toDbTrack import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.Tracker import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.toChapterUpdate import tachiyomi.domain.track.interactor.InsertTrack import tachiyomi.domain.track.model.Track import kotlin.math.max class SyncChapterProgressWithTrack( private val updateChapter: UpdateChapter, private val insertTrack: InsertTrack, private val getChaptersByMangaId: GetChaptersByMangaId, ) { suspend fun await( mangaId: Long, remoteTrack: Track, tracker: Tracker, ) { if (tracker !is EnhancedTracker) { return } val sortedChapters = getChaptersByMangaId.await(mangaId) .sortedBy { it.chapterNumber } .filter { it.isRecognizedNumber } val chapterUpdates = sortedChapters .filter { chapter -> chapter.chapterNumber <= remoteTrack.lastChapterRead && !chapter.read } .map { it.copy(read = true).toChapterUpdate() } // only take into account continuous reading val localLastRead = sortedChapters.takeWhile { it.read }.lastOrNull()?.chapterNumber ?: 0F val lastRead = max(remoteTrack.lastChapterRead, localLastRead.toDouble()) val updatedTrack = remoteTrack.copy(lastChapterRead = lastRead) try { tracker.update(updatedTrack.toDbTrack()) updateChapter.awaitAll(chapterUpdates) insertTrack.await(updatedTrack) } catch (e: Throwable) { logcat(LogPriority.WARN, e) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt ================================================ package eu.kanade.domain.track.interactor import android.content.Context import eu.kanade.domain.track.model.toDbTrack import eu.kanade.domain.track.model.toDomainTrack import eu.kanade.domain.track.service.DelayedTrackingUpdateJob import eu.kanade.domain.track.store.DelayedTrackingStore import eu.kanade.tachiyomi.data.track.TrackerManager import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.interactor.InsertTrack class TrackChapter( private val getTracks: GetTracks, private val trackerManager: TrackerManager, private val insertTrack: InsertTrack, private val delayedTrackingStore: DelayedTrackingStore, ) { suspend fun await(context: Context, mangaId: Long, chapterNumber: Double, setupJobOnFailure: Boolean = true) { withNonCancellableContext { val tracks = getTracks.await(mangaId) if (tracks.isEmpty()) return@withNonCancellableContext tracks.mapNotNull { track -> val service = trackerManager.get(track.trackerId) if (service == null || !service.isLoggedIn || chapterNumber <= track.lastChapterRead) { return@mapNotNull null } async { runCatching { try { val updatedTrack = service.refresh(track.toDbTrack()) .toDomainTrack(idRequired = true)!! .copy(lastChapterRead = chapterNumber) service.update(updatedTrack.toDbTrack(), true) insertTrack.await(updatedTrack) delayedTrackingStore.remove(track.id) } catch (e: Exception) { delayedTrackingStore.add(track.id, chapterNumber) if (setupJobOnFailure) { DelayedTrackingUpdateJob.setupTask(context) } throw e } } } } .awaitAll() .mapNotNull { it.exceptionOrNull() } .forEach { logcat(LogPriority.WARN, it) } } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/model/AutoTrackState.kt ================================================ package eu.kanade.domain.track.model import dev.icerock.moko.resources.StringResource import tachiyomi.i18n.MR enum class AutoTrackState(val titleRes: StringResource) { ALWAYS(MR.strings.lock_always), ASK(MR.strings.default_category_summary), NEVER(MR.strings.lock_never), } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/model/Track.kt ================================================ package eu.kanade.domain.track.model import tachiyomi.domain.track.model.Track import eu.kanade.tachiyomi.data.database.models.Track as DbTrack fun Track.copyPersonalFrom(other: Track): Track { return this.copy( lastChapterRead = other.lastChapterRead, score = other.score, status = other.status, startDate = other.startDate, finishDate = other.finishDate, private = other.private, ) } fun Track.toDbTrack(): DbTrack = DbTrack.create(trackerId).also { it.id = id it.manga_id = mangaId it.remote_id = remoteId it.library_id = libraryId it.title = title it.last_chapter_read = lastChapterRead it.total_chapters = totalChapters it.status = status it.score = score it.tracking_url = remoteUrl it.started_reading_date = startDate it.finished_reading_date = finishDate it.private = private } fun DbTrack.toDomainTrack(idRequired: Boolean = true): Track? { val trackId = id ?: if (!idRequired) -1 else return null return Track( id = trackId, mangaId = manga_id, trackerId = tracker_id, remoteId = remote_id, libraryId = library_id, title = title, lastChapterRead = last_chapter_read, totalChapters = total_chapters, status = status, score = score, remoteUrl = tracking_url, startDate = started_reading_date, finishDate = finished_reading_date, private = private, ) } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/service/DelayedTrackingUpdateJob.kt ================================================ package eu.kanade.domain.track.service import android.content.Context import androidx.work.BackoffPolicy import androidx.work.Constraints import androidx.work.CoroutineWorker import androidx.work.ExistingWorkPolicy import androidx.work.NetworkType import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkerParameters import eu.kanade.domain.track.interactor.TrackChapter import eu.kanade.domain.track.store.DelayedTrackingStore import eu.kanade.tachiyomi.util.system.workManager import logcat.LogPriority import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.track.interactor.GetTracks import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.concurrent.TimeUnit class DelayedTrackingUpdateJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { override suspend fun doWork(): Result { if (runAttemptCount > 3) { return Result.failure() } val getTracks = Injekt.get() val trackChapter = Injekt.get() val delayedTrackingStore = Injekt.get() withIOContext { delayedTrackingStore.getItems() .mapNotNull { val track = getTracks.awaitOne(it.trackId) if (track == null) { delayedTrackingStore.remove(it.trackId) } track?.copy(lastChapterRead = it.lastChapterRead.toDouble()) } .forEach { track -> logcat(LogPriority.DEBUG) { "Updating delayed track item: ${track.mangaId}, last chapter read: ${track.lastChapterRead}" } trackChapter.await(context, track.mangaId, track.lastChapterRead, setupJobOnFailure = false) } } return if (delayedTrackingStore.getItems().isEmpty()) Result.success() else Result.retry() } companion object { private const val TAG = "DelayedTrackingUpdate" fun setupTask(context: Context) { val constraints = Constraints( requiredNetworkType = NetworkType.CONNECTED, ) val request = OneTimeWorkRequestBuilder() .setConstraints(constraints) .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 5, TimeUnit.MINUTES) .addTag(TAG) .build() context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt ================================================ package eu.kanade.domain.track.service import eu.kanade.domain.track.model.AutoTrackState import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.anilist.Anilist import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum class TrackPreferences( private val preferenceStore: PreferenceStore, ) { fun trackUsername(tracker: Tracker) = preferenceStore.getString( Preference.privateKey("pref_mangasync_username_${tracker.id}"), "", ) fun trackPassword(tracker: Tracker) = preferenceStore.getString( Preference.privateKey("pref_mangasync_password_${tracker.id}"), "", ) fun trackAuthExpired(tracker: Tracker) = preferenceStore.getBoolean( Preference.privateKey("pref_tracker_auth_expired_${tracker.id}"), false, ) fun setCredentials(tracker: Tracker, username: String, password: String) { trackUsername(tracker).set(username) trackPassword(tracker).set(password) trackAuthExpired(tracker).set(false) } fun trackToken(tracker: Tracker) = preferenceStore.getString(Preference.privateKey("track_token_${tracker.id}"), "") val anilistScoreType: Preference = preferenceStore.getString("anilist_score_type", Anilist.POINT_10) val autoUpdateTrack: Preference = preferenceStore.getBoolean("pref_auto_update_manga_sync_key", true) val autoUpdateTrackOnMarkRead: Preference = preferenceStore.getEnum( "pref_auto_update_manga_on_mark_read", AutoTrackState.ALWAYS, ) } ================================================ FILE: app/src/main/java/eu/kanade/domain/track/store/DelayedTrackingStore.kt ================================================ package eu.kanade.domain.track.store import android.content.Context import androidx.core.content.edit import logcat.LogPriority import tachiyomi.core.common.util.system.logcat class DelayedTrackingStore(context: Context) { /** * Preference file where queued tracking updates are stored. */ private val preferences = context.getSharedPreferences("tracking_queue", Context.MODE_PRIVATE) fun add(trackId: Long, lastChapterRead: Double) { val previousLastChapterRead = preferences.getFloat(trackId.toString(), 0f) if (lastChapterRead > previousLastChapterRead) { logcat(LogPriority.DEBUG) { "Queuing track item: $trackId, last chapter read: $lastChapterRead" } preferences.edit { putFloat(trackId.toString(), lastChapterRead.toFloat()) } } } fun remove(trackId: Long) { preferences.edit { remove(trackId.toString()) } } fun getItems(): List { return preferences.all.mapNotNull { DelayedTrackingItem( trackId = it.key.toLong(), lastChapterRead = it.value.toString().toFloat(), ) } } data class DelayedTrackingItem( val trackId: Long, val lastChapterRead: Float, ) } ================================================ FILE: app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt ================================================ package eu.kanade.domain.ui import eu.kanade.domain.ui.model.AppTheme import eu.kanade.domain.ui.model.TabletUiMode import eu.kanade.domain.ui.model.ThemeMode import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.util.Locale class UiPreferences( preferenceStore: PreferenceStore, ) { val themeMode: Preference = preferenceStore.getEnum("pref_theme_mode_key", ThemeMode.SYSTEM) val appTheme: Preference = preferenceStore.getEnum( "pref_app_theme", if (DeviceUtil.isDynamicColorAvailable) { AppTheme.MONET } else { AppTheme.DEFAULT }, ) val themeDarkAmoled: Preference = preferenceStore.getBoolean("pref_theme_dark_amoled_key", false) val relativeTime: Preference = preferenceStore.getBoolean("relative_time_v2", true) val dateFormat: Preference = preferenceStore.getString("app_date_format", "") val tabletUiMode: Preference = preferenceStore.getEnum("tablet_ui_mode", TabletUiMode.AUTOMATIC) val imagesInDescription: Preference = preferenceStore.getBoolean("pref_render_images_description", true) companion object { fun dateFormat(format: String): DateTimeFormatter = when (format) { "" -> DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT) else -> DateTimeFormatter.ofPattern(format, Locale.getDefault()) } } } ================================================ FILE: app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt ================================================ package eu.kanade.domain.ui.model import dev.icerock.moko.resources.StringResource import tachiyomi.i18n.MR enum class AppTheme(val titleRes: StringResource?) { DEFAULT(MR.strings.label_default), MONET(MR.strings.theme_monet), CATPPUCCIN(MR.strings.theme_catppuccin), GREEN_APPLE(MR.strings.theme_greenapple), LAVENDER(MR.strings.theme_lavender), MIDNIGHT_DUSK(MR.strings.theme_midnightdusk), NORD(MR.strings.theme_nord), STRAWBERRY_DAIQUIRI(MR.strings.theme_strawberrydaiquiri), TAKO(MR.strings.theme_tako), TEALTURQUOISE(MR.strings.theme_tealturquoise), TIDAL_WAVE(MR.strings.theme_tidalwave), YINYANG(MR.strings.theme_yinyang), YOTSUBA(MR.strings.theme_yotsuba), MONOCHROME(MR.strings.theme_monochrome), // Deprecated DARK_BLUE(null), HOT_PINK(null), BLUE(null), } ================================================ FILE: app/src/main/java/eu/kanade/domain/ui/model/TabletUiMode.kt ================================================ package eu.kanade.domain.ui.model import dev.icerock.moko.resources.StringResource import tachiyomi.i18n.MR enum class TabletUiMode(val titleRes: StringResource) { AUTOMATIC(MR.strings.automatic_background), ALWAYS(MR.strings.lock_always), LANDSCAPE(MR.strings.landscape), NEVER(MR.strings.lock_never), } ================================================ FILE: app/src/main/java/eu/kanade/domain/ui/model/ThemeMode.kt ================================================ package eu.kanade.domain.ui.model import androidx.appcompat.app.AppCompatDelegate enum class ThemeMode { LIGHT, DARK, SYSTEM, } fun setAppCompatDelegateThemeMode(themeMode: ThemeMode) { AppCompatDelegate.setDefaultNightMode( when (themeMode) { ThemeMode.LIGHT -> AppCompatDelegate.MODE_NIGHT_NO ThemeMode.DARK -> AppCompatDelegate.MODE_NIGHT_YES ThemeMode.SYSTEM -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import eu.kanade.presentation.browse.components.BrowseSourceComfortableGrid import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid import eu.kanade.presentation.browse.components.BrowseSourceList import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.formattedMessage import eu.kanade.tachiyomi.source.Source import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.StateFlow import tachiyomi.core.common.i18n.stringResource import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.model.StubSource import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.source.local.LocalSource @Composable fun BrowseSourceContent( source: Source?, mangaList: LazyPagingItems>, columns: GridCells, displayMode: LibraryDisplayMode, snackbarHostState: SnackbarHostState, contentPadding: PaddingValues, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onLocalSourceHelpClick: () -> Unit, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) { val context = LocalContext.current val errorState = mangaList.loadState.refresh.takeIf { it is LoadState.Error } ?: mangaList.loadState.append.takeIf { it is LoadState.Error } val getErrorMessage: (LoadState.Error) -> String = { state -> with(context) { state.error.formattedMessage } } LaunchedEffect(errorState) { if (mangaList.itemCount > 0 && errorState != null && errorState is LoadState.Error) { val result = snackbarHostState.showSnackbar( message = getErrorMessage(errorState), actionLabel = context.stringResource(MR.strings.action_retry), duration = SnackbarDuration.Indefinite, ) when (result) { SnackbarResult.Dismissed -> snackbarHostState.currentSnackbarData?.dismiss() SnackbarResult.ActionPerformed -> mangaList.retry() } } } if (mangaList.itemCount == 0 && mangaList.loadState.refresh is LoadState.Loading) { LoadingScreen(Modifier.padding(contentPadding)) return } if (mangaList.itemCount == 0) { EmptyScreen( modifier = Modifier.padding(contentPadding), message = when (errorState) { is LoadState.Error -> getErrorMessage(errorState) else -> stringResource(MR.strings.no_results_found) }, actions = if (source is LocalSource) { persistentListOf( EmptyScreenAction( stringRes = MR.strings.local_source_help_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onLocalSourceHelpClick, ), ) } else { persistentListOf( EmptyScreenAction( stringRes = MR.strings.action_retry, icon = Icons.Outlined.Refresh, onClick = mangaList::refresh, ), EmptyScreenAction( stringRes = MR.strings.action_open_in_web_view, icon = Icons.Outlined.Public, onClick = onWebViewClick, ), EmptyScreenAction( stringRes = MR.strings.label_help, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onHelpClick, ), ) }, ) return } when (displayMode) { LibraryDisplayMode.ComfortableGrid -> { BrowseSourceComfortableGrid( mangaList = mangaList, columns = columns, contentPadding = contentPadding, onMangaClick = onMangaClick, onMangaLongClick = onMangaLongClick, ) } LibraryDisplayMode.List -> { BrowseSourceList( mangaList = mangaList, contentPadding = contentPadding, onMangaClick = onMangaClick, onMangaLongClick = onMangaLongClick, ) } LibraryDisplayMode.CompactGrid, LibraryDisplayMode.CoverOnlyGrid -> { BrowseSourceCompactGrid( mangaList = mangaList, columns = columns, contentPadding = contentPadding, onMangaClick = onMangaClick, onMangaLongClick = onMangaLongClick, ) } } } @Composable internal fun MissingSourceScreen( source: StubSource, navigateUp: () -> Unit, ) { Scaffold( topBar = { scrollBehavior -> AppBar( title = source.name, navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) }, ) { paddingValues -> EmptyScreen( message = stringResource(MR.strings.source_not_installed, source.toString()), modifier = Modifier.padding(paddingValues), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt ================================================ package eu.kanade.presentation.browse import android.content.Intent import android.net.Uri import android.provider.Settings import android.util.DisplayMetrics import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Launch import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import eu.kanade.domain.extension.interactor.ExtensionSourceItem import eu.kanade.presentation.browse.components.ExtensionIcon import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable fun ExtensionDetailsScreen( navigateUp: () -> Unit, state: ExtensionDetailsScreenModel.State, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickEnableAll: () -> Unit, onClickDisableAll: () -> Unit, onClickClearCookies: () -> Unit, onClickUninstall: () -> Unit, onClickSource: (sourceId: Long) -> Unit, onClickIncognito: (Boolean) -> Unit, ) { val uriHandler = LocalUriHandler.current val url = remember(state.extension) { val regex = """https://raw.githubusercontent.com/(.+?)/(.+?)/.+""".toRegex() regex.find(state.extension?.repoUrl.orEmpty()) ?.let { val (user, repo) = it.destructured "https://github.com/$user/$repo" } ?: state.extension?.repoUrl } Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.label_extension_info), navigateUp = navigateUp, actions = { AppBarActions( actions = persistentListOf().builder() .apply { if (url != null) { add( AppBar.Action( title = stringResource(MR.strings.action_open_repo), icon = Icons.AutoMirrored.Outlined.Launch, onClick = { uriHandler.openUri(url) }, ), ) } addAll( listOf( AppBar.OverflowAction( title = stringResource(MR.strings.action_enable_all), onClick = onClickEnableAll, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_disable_all), onClick = onClickDisableAll, ), AppBar.OverflowAction( title = stringResource(MR.strings.pref_clear_cookies), onClick = onClickClearCookies, ), ), ) } .build(), ) }, scrollBehavior = scrollBehavior, ) }, ) { paddingValues -> if (state.extension == null) { EmptyScreen( MR.strings.empty_screen, modifier = Modifier.padding(paddingValues), ) return@Scaffold } ExtensionDetails( contentPadding = paddingValues, extension = state.extension, sources = state.sources, incognitoMode = state.isIncognito, onClickSourcePreferences = onClickSourcePreferences, onClickUninstall = onClickUninstall, onClickSource = onClickSource, onClickIncognito = onClickIncognito, ) } } @Composable private fun ExtensionDetails( contentPadding: PaddingValues, extension: Extension.Installed, sources: ImmutableList, incognitoMode: Boolean, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickUninstall: () -> Unit, onClickSource: (sourceId: Long) -> Unit, onClickIncognito: (Boolean) -> Unit, ) { val context = LocalContext.current var showNsfwWarning by remember { mutableStateOf(false) } ScrollbarLazyColumn( contentPadding = contentPadding, ) { if (extension.isObsolete) { item { WarningBanner(MR.strings.obsolete_extension_message) } } item { DetailsHeader( extension = extension, extIncognitoMode = incognitoMode, onClickUninstall = onClickUninstall, onClickAppInfo = { Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { data = Uri.fromParts("package", extension.pkgName, null) context.startActivity(this) } Unit }.takeIf { extension.isShared }, onClickAgeRating = { showNsfwWarning = true }, onExtIncognitoChange = onClickIncognito, ) } items( items = sources, key = { it.source.id }, ) { source -> SourceSwitchPreference( modifier = Modifier.animateItem(), source = source, onClickSourcePreferences = onClickSourcePreferences, onClickSource = onClickSource, ) } } if (showNsfwWarning) { NsfwWarningDialog( onClickConfirm = { showNsfwWarning = false }, ) } } @Composable private fun DetailsHeader( extension: Extension, extIncognitoMode: Boolean, onClickAgeRating: () -> Unit, onClickUninstall: () -> Unit, onClickAppInfo: (() -> Unit)?, onExtIncognitoChange: (Boolean) -> Unit, ) { val context = LocalContext.current Column { Column( modifier = Modifier .fillMaxWidth() .padding(horizontal = MaterialTheme.padding.medium) .padding( top = MaterialTheme.padding.medium, bottom = MaterialTheme.padding.small, ) .clickable { val extDebugInfo = buildString { append( """ Extension name: ${extension.name} (lang: ${extension.lang}; package: ${extension.pkgName}) Extension version: ${extension.versionName} (lib: ${extension.libVersion}; version code: ${extension.versionCode}) NSFW: ${extension.isNsfw} """.trimIndent(), ) if (extension is Extension.Installed) { append("\n\n") append( """ Update available: ${extension.hasUpdate} Obsolete: ${extension.isObsolete} Shared: ${extension.isShared} Repository: ${extension.repoUrl} """.trimIndent(), ) } } context.copyToClipboard("Extension Debug information", extDebugInfo) }, horizontalAlignment = Alignment.CenterHorizontally, ) { ExtensionIcon( modifier = Modifier .size(112.dp), extension = extension, density = DisplayMetrics.DENSITY_XXXHIGH, ) Text( text = extension.name, style = MaterialTheme.typography.headlineSmall, textAlign = TextAlign.Center, ) val strippedPkgName = extension.pkgName.substringAfter("eu.kanade.tachiyomi.extension.") Text( text = strippedPkgName, style = MaterialTheme.typography.bodySmall, ) } Row( modifier = Modifier .fillMaxWidth() .padding( horizontal = MaterialTheme.padding.extraLarge, vertical = MaterialTheme.padding.small, ), horizontalArrangement = Arrangement.SpaceEvenly, verticalAlignment = Alignment.CenterVertically, ) { InfoText( modifier = Modifier.weight(1f), primaryText = extension.versionName, secondaryText = stringResource(MR.strings.ext_info_version), ) InfoDivider() InfoText( modifier = Modifier.weight(if (extension.isNsfw) 1.5f else 1f), primaryText = LocaleHelper.getSourceDisplayName(extension.lang, context), secondaryText = stringResource(MR.strings.ext_info_language), ) if (extension.isNsfw) { InfoDivider() InfoText( modifier = Modifier.weight(1f), primaryText = stringResource(MR.strings.ext_nsfw_short), primaryTextStyle = MaterialTheme.typography.bodyLarge.copy( color = MaterialTheme.colorScheme.error, fontWeight = FontWeight.Medium, ), secondaryText = stringResource(MR.strings.ext_info_age_rating), onClick = onClickAgeRating, ) } } Row( modifier = Modifier .padding(horizontal = MaterialTheme.padding.medium) .padding(top = MaterialTheme.padding.small), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium), ) { OutlinedButton( modifier = Modifier.weight(1f), onClick = onClickUninstall, ) { Text(stringResource(MR.strings.ext_uninstall)) } if (onClickAppInfo != null) { Button( modifier = Modifier.weight(1f), onClick = onClickAppInfo, ) { Text( text = stringResource(MR.strings.ext_app_info), color = MaterialTheme.colorScheme.onPrimary, ) } } } TextPreferenceWidget( modifier = Modifier.padding(horizontal = MaterialTheme.padding.small), title = stringResource(MR.strings.pref_incognito_mode), subtitle = stringResource(MR.strings.pref_incognito_mode_extension_summary), icon = ImageVector.vectorResource(R.drawable.ic_glasses_24dp), widget = { Row( verticalAlignment = Alignment.CenterVertically, ) { Switch( checked = extIncognitoMode, onCheckedChange = onExtIncognitoChange, modifier = Modifier.padding(start = TrailingWidgetBuffer), ) } }, ) HorizontalDivider() } } @Composable private fun InfoText( primaryText: String, secondaryText: String, modifier: Modifier = Modifier, primaryTextStyle: TextStyle = MaterialTheme.typography.bodyLarge, onClick: (() -> Unit)? = null, ) { val clickableModifier = if (onClick != null) { Modifier.clickable(interactionSource = null, indication = null, onClick = onClick) } else { Modifier } Column( modifier = modifier.then(clickableModifier), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, ) { Text( text = primaryText, textAlign = TextAlign.Center, style = primaryTextStyle, ) Text( text = secondaryText + if (onClick != null) " ⓘ" else "", textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f), ) } } @Composable private fun InfoDivider() { VerticalDivider( modifier = Modifier.height(20.dp), ) } @Composable private fun SourceSwitchPreference( source: ExtensionSourceItem, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickSource: (sourceId: Long) -> Unit, modifier: Modifier = Modifier, ) { val context = LocalContext.current TextPreferenceWidget( modifier = modifier, title = if (source.labelAsName) { source.source.toString() } else { LocaleHelper.getSourceDisplayName(source.source.lang, context) }, widget = { Row( verticalAlignment = Alignment.CenterVertically, ) { if (source.source is ConfigurableSource) { IconButton(onClick = { onClickSourcePreferences(source.source.id) }) { Icon( imageVector = Icons.Outlined.Settings, contentDescription = stringResource(MR.strings.label_settings), tint = MaterialTheme.colorScheme.onSurface, ) } } Switch( checked = source.enabled, onCheckedChange = null, modifier = Modifier.padding(start = TrailingWidgetBuffer), ) } }, onPreferenceClick = { onClickSource(source.source.id) }, ) } @Composable private fun NsfwWarningDialog( onClickConfirm: () -> Unit, ) { AlertDialog( text = { Text(text = stringResource(MR.strings.ext_nsfw_warning)) }, confirmButton = { TextButton(onClick = onClickConfirm) { Text(text = stringResource(MR.strings.action_ok)) } }, onDismissRequest = onClickConfirm, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget import eu.kanade.tachiyomi.ui.browse.extension.ExtensionFilterState import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable fun ExtensionFilterScreen( navigateUp: () -> Unit, state: ExtensionFilterState.Success, onClickToggle: (String) -> Unit, ) { Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.label_extensions), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> if (state.isEmpty) { EmptyScreen( stringRes = MR.strings.empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold } ExtensionFilterContent( contentPadding = contentPadding, state = state, onClickLang = onClickToggle, ) } } @Composable private fun ExtensionFilterContent( contentPadding: PaddingValues, state: ExtensionFilterState.Success, onClickLang: (String) -> Unit, ) { val context = LocalContext.current LazyColumn( contentPadding = contentPadding, ) { items(state.languages) { language -> SwitchPreferenceWidget( modifier = Modifier.animateItem(), title = LocaleHelper.getSourceDisplayName(language, context), checked = language in state.enabledLanguages, onCheckedChanged = { onClickLang(language) }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.GetApp import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.VerifiedUser import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.browse.components.BaseBrowseItem import eu.kanade.presentation.browse.components.ExtensionIcon import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.manga.components.DotSeparatorNoSpaceText import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.ui.browse.extension.ExtensionUiModel import eu.kanade.tachiyomi.ui.browse.extension.ExtensionsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.plus import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun ExtensionScreen( state: ExtensionsScreenModel.State, contentPadding: PaddingValues, searchQuery: String?, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onOpenWebView: (Extension.Available) -> Unit, onInstallExtension: (Extension.Available) -> Unit, onUninstallExtension: (Extension) -> Unit, onUpdateExtension: (Extension.Installed) -> Unit, onTrustExtension: (Extension.Untrusted) -> Unit, onOpenExtension: (Extension.Installed) -> Unit, onClickUpdateAll: () -> Unit, onRefresh: () -> Unit, ) { val navigator = LocalNavigator.currentOrThrow PullRefresh( refreshing = state.isRefreshing, onRefresh = onRefresh, enabled = !state.isLoading, ) { when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> { val msg = if (!searchQuery.isNullOrEmpty()) { MR.strings.no_results_found } else { MR.strings.empty_screen } EmptyScreen( stringRes = msg, modifier = Modifier.padding(contentPadding), actions = persistentListOf( EmptyScreenAction( stringRes = MR.strings.label_extension_repos, icon = Icons.Outlined.Settings, onClick = { navigator.push(ExtensionReposScreen()) }, ), ), ) } else -> { ExtensionContent( state = state, contentPadding = contentPadding, onLongClickItem = onLongClickItem, onClickItemCancel = onClickItemCancel, onOpenWebView = onOpenWebView, onInstallExtension = onInstallExtension, onUninstallExtension = onUninstallExtension, onUpdateExtension = onUpdateExtension, onTrustExtension = onTrustExtension, onOpenExtension = onOpenExtension, onClickUpdateAll = onClickUpdateAll, ) } } } } @Composable private fun ExtensionContent( state: ExtensionsScreenModel.State, contentPadding: PaddingValues, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onOpenWebView: (Extension.Available) -> Unit, onInstallExtension: (Extension.Available) -> Unit, onUninstallExtension: (Extension) -> Unit, onUpdateExtension: (Extension.Installed) -> Unit, onTrustExtension: (Extension.Untrusted) -> Unit, onOpenExtension: (Extension.Installed) -> Unit, onClickUpdateAll: () -> Unit, ) { val context = LocalContext.current var trustState by remember { mutableStateOf(null) } val installGranted = rememberRequestPackageInstallsPermissionState(initialValue = true) FastScrollLazyColumn( contentPadding = contentPadding + topSmallPaddingValues, ) { if (!installGranted && state.installer?.requiresSystemPermission == true) { item(key = "extension-permissions-warning") { WarningBanner( textRes = MR.strings.ext_permission_install_apps_warning, modifier = Modifier.clickable { context.launchRequestPackageInstallsPermission() }, ) } } state.items.forEach { (header, items) -> item( contentType = "header", key = "extensionHeader-${header.hashCode()}", ) { when (header) { is ExtensionUiModel.Header.Resource -> { val action: @Composable RowScope.() -> Unit = if (header.textRes == MR.strings.ext_updates_pending) { { Button(onClick = { onClickUpdateAll() }) { Text( text = stringResource(MR.strings.ext_update_all), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.onPrimary, ), ) } } } else { {} } ExtensionHeader( textRes = header.textRes, modifier = Modifier.animateItemFastScroll(), action = action, ) } is ExtensionUiModel.Header.Text -> { ExtensionHeader( text = header.text, modifier = Modifier.animateItemFastScroll(), ) } } } items( items = items, contentType = { "item" }, key = { item -> when (item.extension) { is Extension.Untrusted -> "extension-untrusted-${item.hashCode()}" is Extension.Installed -> "extension-installed-${item.hashCode()}" is Extension.Available -> "extension-available-${item.hashCode()}" } }, ) { item -> ExtensionItem( modifier = Modifier.animateItemFastScroll(), item = item, onClickItem = { when (it) { is Extension.Available -> onInstallExtension(it) is Extension.Installed -> onOpenExtension(it) is Extension.Untrusted -> { trustState = it } } }, onLongClickItem = onLongClickItem, onClickItemSecondaryAction = { when (it) { is Extension.Available -> onOpenWebView(it) is Extension.Installed -> onOpenExtension(it) else -> {} } }, onClickItemCancel = onClickItemCancel, onClickItemAction = { when (it) { is Extension.Available -> onInstallExtension(it) is Extension.Installed -> { if (it.hasUpdate) { onUpdateExtension(it) } else { onOpenExtension(it) } } is Extension.Untrusted -> { trustState = it } } }, ) } } } if (trustState != null) { ExtensionTrustDialog( onClickConfirm = { onTrustExtension(trustState!!) trustState = null }, onClickDismiss = { onUninstallExtension(trustState!!) trustState = null }, onDismissRequest = { trustState = null }, ) } } @Composable private fun ExtensionItem( item: ExtensionUiModel.Item, onClickItem: (Extension) -> Unit, onLongClickItem: (Extension) -> Unit, onClickItemCancel: (Extension) -> Unit, onClickItemAction: (Extension) -> Unit, onClickItemSecondaryAction: (Extension) -> Unit, modifier: Modifier = Modifier, ) { val (extension, installStep) = item BaseBrowseItem( modifier = modifier .combinedClickable( onClick = { onClickItem(extension) }, onLongClick = { onLongClickItem(extension) }, ), onClickItem = { onClickItem(extension) }, onLongClickItem = { onLongClickItem(extension) }, icon = { Box( modifier = Modifier .size(40.dp), contentAlignment = Alignment.Center, ) { val idle = installStep.isCompleted() if (!idle) { CircularProgressIndicator( modifier = Modifier.size(40.dp), strokeWidth = 2.dp, ) } val padding by animateDpAsState( targetValue = if (idle) 0.dp else 8.dp, label = "iconPadding", ) ExtensionIcon( extension = extension, modifier = Modifier .matchParentSize() .padding(padding), ) } }, action = { ExtensionItemActions( extension = extension, installStep = installStep, onClickItemCancel = onClickItemCancel, onClickItemAction = onClickItemAction, onClickItemSecondaryAction = onClickItemSecondaryAction, ) }, ) { ExtensionItemContent( extension = extension, installStep = installStep, modifier = Modifier.weight(1f), ) } } @Composable private fun ExtensionItemContent( extension: Extension, installStep: InstallStep, modifier: Modifier = Modifier, ) { Column( modifier = modifier.padding(start = MaterialTheme.padding.medium), ) { Text( text = extension.name, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) // Won't look good but it's not like we can ellipsize overflowing content FlowRow( modifier = Modifier.secondaryItemAlpha(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { ProvideTextStyle(value = MaterialTheme.typography.bodySmall) { var hasAlreadyShownAnElement by remember { mutableStateOf(false) } if (extension is Extension.Installed && extension.lang.isNotEmpty()) { hasAlreadyShownAnElement = true Text( text = LocaleHelper.getSourceDisplayName(extension.lang, LocalContext.current), ) } if (extension.versionName.isNotEmpty()) { if (hasAlreadyShownAnElement) DotSeparatorNoSpaceText() hasAlreadyShownAnElement = true Text( text = extension.versionName, ) } val warning = when { extension is Extension.Untrusted -> MR.strings.ext_untrusted extension is Extension.Installed && extension.isObsolete -> MR.strings.ext_obsolete extension.isNsfw -> MR.strings.ext_nsfw_short else -> null } if (warning != null) { if (hasAlreadyShownAnElement) DotSeparatorNoSpaceText() hasAlreadyShownAnElement = true Text( text = stringResource(warning).uppercase(), color = MaterialTheme.colorScheme.error, maxLines = 1, overflow = TextOverflow.Ellipsis, ) } if (extension is Extension.Installed && !extension.isShared) { if (hasAlreadyShownAnElement) DotSeparatorNoSpaceText() Text( text = stringResource(MR.strings.ext_installer_private), ) } if (!installStep.isCompleted()) { DotSeparatorNoSpaceText() Text( text = when (installStep) { InstallStep.Pending -> stringResource(MR.strings.ext_pending) InstallStep.Downloading -> stringResource(MR.strings.ext_downloading) InstallStep.Installing -> stringResource(MR.strings.ext_installing) else -> error("Must not show non-install process text") }, ) } } } } } @Composable private fun ExtensionItemActions( extension: Extension, installStep: InstallStep, modifier: Modifier = Modifier, onClickItemCancel: (Extension) -> Unit = {}, onClickItemAction: (Extension) -> Unit = {}, onClickItemSecondaryAction: (Extension) -> Unit = {}, ) { val isIdle = installStep.isCompleted() Row( modifier = modifier, horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { when { !isIdle -> { IconButton(onClick = { onClickItemCancel(extension) }) { Icon( imageVector = Icons.Outlined.Close, contentDescription = stringResource(MR.strings.action_cancel), ) } } installStep == InstallStep.Error -> { IconButton(onClick = { onClickItemAction(extension) }) { Icon( imageVector = Icons.Outlined.Refresh, contentDescription = stringResource(MR.strings.action_retry), ) } } installStep == InstallStep.Idle -> { when (extension) { is Extension.Installed -> { IconButton(onClick = { onClickItemSecondaryAction(extension) }) { Icon( imageVector = Icons.Outlined.Settings, contentDescription = stringResource(MR.strings.action_settings), ) } if (extension.hasUpdate) { IconButton(onClick = { onClickItemAction(extension) }) { Icon( imageVector = Icons.Outlined.GetApp, contentDescription = stringResource(MR.strings.ext_update), ) } } } is Extension.Untrusted -> { IconButton(onClick = { onClickItemAction(extension) }) { Icon( imageVector = Icons.Outlined.VerifiedUser, contentDescription = stringResource(MR.strings.ext_trust), ) } } is Extension.Available -> { if (extension.sources.isNotEmpty()) { IconButton( onClick = { onClickItemSecondaryAction(extension) }, ) { Icon( imageVector = Icons.Outlined.Public, contentDescription = stringResource(MR.strings.action_open_in_web_view), ) } } IconButton(onClick = { onClickItemAction(extension) }) { Icon( imageVector = Icons.Outlined.GetApp, contentDescription = stringResource(MR.strings.ext_install), ) } } } } } } } @Composable private fun ExtensionHeader( textRes: StringResource, modifier: Modifier = Modifier, action: @Composable RowScope.() -> Unit = {}, ) { ExtensionHeader( text = stringResource(textRes), modifier = modifier, action = action, ) } @Composable private fun ExtensionHeader( text: String, modifier: Modifier = Modifier, action: @Composable RowScope.() -> Unit = {}, ) { Row( modifier = modifier.padding(horizontal = MaterialTheme.padding.medium), verticalAlignment = Alignment.CenterVertically, ) { Text( text = text, modifier = Modifier .padding(vertical = 8.dp) .weight(1f), style = MaterialTheme.typography.header, ) action() } } @Composable private fun ExtensionTrustDialog( onClickConfirm: () -> Unit, onClickDismiss: () -> Unit, onDismissRequest: () -> Unit, ) { AlertDialog( title = { Text(text = stringResource(MR.strings.untrusted_extension)) }, text = { Text(text = stringResource(MR.strings.untrusted_extension_message)) }, confirmButton = { TextButton(onClick = onClickConfirm) { Text(text = stringResource(MR.strings.ext_trust)) } }, dismissButton = { TextButton(onClick = onClickDismiss) { Text(text = stringResource(MR.strings.ext_uninstall)) } }, onDismissRequest = onDismissRequest, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.ui.Modifier import eu.kanade.presentation.browse.components.GlobalSearchCardRow import eu.kanade.presentation.browse.components.GlobalSearchErrorResultItem import eu.kanade.presentation.browse.components.GlobalSearchLoadingResultItem import eu.kanade.presentation.browse.components.GlobalSearchResultItem import eu.kanade.presentation.browse.components.GlobalSearchToolbar import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchItemResult import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchScreenModel import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.components.material.Scaffold @Composable fun GlobalSearchScreen( state: SearchScreenModel.State, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, onChangeSearchFilter: (SourceFilter) -> Unit, onToggleResults: () -> Unit, getManga: @Composable (Manga) -> State, onClickSource: (CatalogueSource) -> Unit, onClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit, ) { Scaffold( topBar = { scrollBehavior -> GlobalSearchToolbar( searchQuery = state.searchQuery, progress = state.progress, total = state.total, navigateUp = navigateUp, onChangeSearchQuery = onChangeSearchQuery, onSearch = onSearch, hideSourceFilter = false, sourceFilter = state.sourceFilter, onChangeSearchFilter = onChangeSearchFilter, onlyShowHasResults = state.onlyShowHasResults, onToggleResults = onToggleResults, scrollBehavior = scrollBehavior, ) }, ) { paddingValues -> GlobalSearchContent( items = state.filteredItems, contentPadding = paddingValues, getManga = getManga, onClickSource = onClickSource, onClickItem = onClickItem, onLongClickItem = onLongClickItem, ) } } @Composable internal fun GlobalSearchContent( items: Map, contentPadding: PaddingValues, getManga: @Composable (Manga) -> State, onClickSource: (CatalogueSource) -> Unit, onClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit, fromSourceId: Long? = null, ) { LazyColumn( contentPadding = contentPadding, ) { items.forEach { (source, result) -> item(key = source.id) { GlobalSearchResultItem( title = fromSourceId?.let { "▶ ${source.name}".takeIf { source.id == fromSourceId } } ?: source.name, subtitle = LocaleHelper.getLocalizedDisplayName(source.lang), onClick = { onClickSource(source) }, modifier = Modifier.animateItem(), ) { when (result) { SearchItemResult.Loading -> { GlobalSearchLoadingResultItem() } is SearchItemResult.Success -> { GlobalSearchCardRow( titles = result.result, getManga = getManga, onClick = onClickItem, onLongClick = onLongClickItem, ) } is SearchItemResult.Error -> { GlobalSearchErrorResultItem(message = result.throwable.message) } } } } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/MigrateSearchScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.runtime.Composable import androidx.compose.runtime.State import eu.kanade.presentation.browse.components.GlobalSearchToolbar import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchScreenModel import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.components.material.Scaffold @Composable fun MigrateSearchScreen( state: SearchScreenModel.State, fromSourceId: Long?, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, onChangeSearchFilter: (SourceFilter) -> Unit, onToggleResults: () -> Unit, getManga: @Composable (Manga) -> State, onClickSource: (CatalogueSource) -> Unit, onClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit, ) { Scaffold( topBar = { scrollBehavior -> GlobalSearchToolbar( searchQuery = state.searchQuery, progress = state.progress, total = state.total, navigateUp = navigateUp, onChangeSearchQuery = onChangeSearchQuery, onSearch = onSearch, hideSourceFilter = true, sourceFilter = state.sourceFilter, onChangeSearchFilter = onChangeSearchFilter, onlyShowHasResults = state.onlyShowHasResults, onToggleResults = onToggleResults, scrollBehavior = scrollBehavior, ) }, ) { paddingValues -> GlobalSearchContent( fromSourceId = fromSourceId, items = state.filteredItems, contentPadding = paddingValues, getManga = getManga, onClickSource = onClickSource, onClickItem = onClickItem, onLongClickItem = onLongClickItem, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowDownward import androidx.compose.material.icons.outlined.ArrowUpward import androidx.compose.material.icons.outlined.Numbers import androidx.compose.material.icons.outlined.SortByAlpha import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextOverflow import eu.kanade.domain.source.interactor.SetMigrateSorting import eu.kanade.presentation.browse.components.BaseSourceItem import eu.kanade.presentation.browse.components.SourceIcon import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrateSourceScreenModel import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.ImmutableList import tachiyomi.domain.source.model.Source import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Badge import tachiyomi.presentation.core.components.BadgeGroup import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.plus import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun MigrateSourceScreen( state: MigrateSourceScreenModel.State, contentPadding: PaddingValues, onClickItem: (Source) -> Unit, onToggleSortingDirection: () -> Unit, onToggleSortingMode: () -> Unit, ) { val context = LocalContext.current when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> EmptyScreen( stringRes = MR.strings.information_empty_library, modifier = Modifier.padding(contentPadding), ) else -> MigrateSourceList( list = state.items, contentPadding = contentPadding, onClickItem = onClickItem, onLongClickItem = { source -> val sourceId = source.id.toString() context.copyToClipboard(sourceId, sourceId) }, sortingMode = state.sortingMode, onToggleSortingMode = onToggleSortingMode, sortingDirection = state.sortingDirection, onToggleSortingDirection = onToggleSortingDirection, ) } } @Composable private fun MigrateSourceList( list: ImmutableList>, contentPadding: PaddingValues, onClickItem: (Source) -> Unit, onLongClickItem: (Source) -> Unit, sortingMode: SetMigrateSorting.Mode, onToggleSortingMode: () -> Unit, sortingDirection: SetMigrateSorting.Direction, onToggleSortingDirection: () -> Unit, ) { ScrollbarLazyColumn( contentPadding = contentPadding + topSmallPaddingValues, ) { stickyHeader(key = STICKY_HEADER_KEY_PREFIX) { Row( modifier = Modifier .background(MaterialTheme.colorScheme.background) .padding(start = MaterialTheme.padding.medium), verticalAlignment = Alignment.CenterVertically, ) { Text( text = stringResource(MR.strings.migration_selection_prompt), modifier = Modifier.weight(1f), style = MaterialTheme.typography.header, ) IconButton(onClick = onToggleSortingMode) { when (sortingMode) { SetMigrateSorting.Mode.ALPHABETICAL -> Icon( Icons.Outlined.SortByAlpha, contentDescription = stringResource(MR.strings.action_sort_alpha), ) SetMigrateSorting.Mode.TOTAL -> Icon( Icons.Outlined.Numbers, contentDescription = stringResource(MR.strings.action_sort_count), ) } } IconButton(onClick = onToggleSortingDirection) { when (sortingDirection) { SetMigrateSorting.Direction.ASCENDING -> Icon( Icons.Outlined.ArrowUpward, contentDescription = stringResource(MR.strings.action_asc), ) SetMigrateSorting.Direction.DESCENDING -> Icon( Icons.Outlined.ArrowDownward, contentDescription = stringResource(MR.strings.action_desc), ) } } } } items( items = list, key = { (source, _) -> "migrate-${source.id}" }, ) { (source, count) -> MigrateSourceItem( modifier = Modifier.animateItem(), source = source, count = count, onClickItem = { onClickItem(source) }, onLongClickItem = { onLongClickItem(source) }, ) } } } @Composable private fun MigrateSourceItem( source: Source, count: Long, onClickItem: () -> Unit, onLongClickItem: () -> Unit, modifier: Modifier = Modifier, ) { BaseSourceItem( modifier = modifier, source = source, showLanguageInContent = source.lang != "", onClickItem = onClickItem, onLongClickItem = onLongClickItem, icon = { SourceIcon(source = source) }, action = { BadgeGroup { Badge(text = "$count") } }, content = { _, sourceLangString -> Column( modifier = Modifier .padding(horizontal = MaterialTheme.padding.medium) .weight(1f), ) { Text( text = source.name.ifBlank { source.id.toString() }, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) Row( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), verticalAlignment = Alignment.CenterVertically, ) { if (sourceLangString != null) { Text( modifier = Modifier.secondaryItemAlpha(), text = sourceLangString, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, ) } if (source.isStub) { Text( modifier = Modifier.secondaryItemAlpha(), text = stringResource(MR.strings.not_installed), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.error, ) } } } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items import androidx.compose.material3.Checkbox import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.browse.components.BaseSourceItem import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.tachiyomi.ui.browse.source.SourcesFilterScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.model.Source import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable fun SourcesFilterScreen( navigateUp: () -> Unit, state: SourcesFilterScreenModel.State.Success, onClickLanguage: (String) -> Unit, onClickSource: (Source) -> Unit, ) { Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.label_sources), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> if (state.isEmpty) { EmptyScreen( stringRes = MR.strings.source_filter_empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold } SourcesFilterContent( contentPadding = contentPadding, state = state, onClickLanguage = onClickLanguage, onClickSource = onClickSource, ) } } @Composable private fun SourcesFilterContent( contentPadding: PaddingValues, state: SourcesFilterScreenModel.State.Success, onClickLanguage: (String) -> Unit, onClickSource: (Source) -> Unit, ) { FastScrollLazyColumn( contentPadding = contentPadding, ) { state.items.forEach { (language, sources) -> val enabled = language in state.enabledLanguages item( key = language, contentType = "source-filter-header", ) { SourcesFilterHeader( modifier = Modifier.animateItemFastScroll(), language = language, enabled = enabled, onClickItem = onClickLanguage, ) } if (enabled) { items( items = sources, key = { "source-filter-${it.key()}" }, contentType = { "source-filter-item" }, ) { source -> SourcesFilterItem( modifier = Modifier.animateItemFastScroll(), source = source, enabled = "${source.id}" !in state.disabledSources, onClickItem = onClickSource, ) } } } } } @Composable private fun SourcesFilterHeader( language: String, enabled: Boolean, onClickItem: (String) -> Unit, modifier: Modifier = Modifier, ) { SwitchPreferenceWidget( modifier = modifier, title = LocaleHelper.getSourceDisplayName(language, LocalContext.current), checked = enabled, onCheckedChanged = { onClickItem(language) }, ) } @Composable private fun SourcesFilterItem( source: Source, enabled: Boolean, onClickItem: (Source) -> Unit, modifier: Modifier = Modifier, ) { BaseSourceItem( modifier = modifier, source = source, showLanguageInContent = false, onClickItem = { onClickItem(source) }, action = { Checkbox(checked = enabled, onCheckedChange = null) }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt ================================================ package eu.kanade.presentation.browse import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PushPin import androidx.compose.material.icons.outlined.PushPin import androidx.compose.material3.AlertDialog import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import eu.kanade.presentation.browse.components.BaseSourceItem import eu.kanade.tachiyomi.ui.browse.source.SourcesScreenModel import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel.Listing import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.model.Pin import tachiyomi.domain.source.model.Source import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.SECONDARY_ALPHA import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.plus import tachiyomi.source.local.isLocal @Composable fun SourcesScreen( state: SourcesScreenModel.State, contentPadding: PaddingValues, onClickItem: (Source, Listing) -> Unit, onClickPin: (Source) -> Unit, onLongClickItem: (Source) -> Unit, ) { when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> EmptyScreen( stringRes = MR.strings.source_empty_screen, modifier = Modifier.padding(contentPadding), ) else -> { ScrollbarLazyColumn( contentPadding = contentPadding + topSmallPaddingValues, ) { items( items = state.items, contentType = { when (it) { is SourceUiModel.Header -> "header" is SourceUiModel.Item -> "item" } }, key = { when (it) { is SourceUiModel.Header -> it.hashCode() is SourceUiModel.Item -> "source-${it.source.key()}" } }, ) { model -> when (model) { is SourceUiModel.Header -> { SourceHeader( modifier = Modifier.animateItem(), language = model.language, ) } is SourceUiModel.Item -> SourceItem( modifier = Modifier.animateItem(), source = model.source, onClickItem = onClickItem, onLongClickItem = onLongClickItem, onClickPin = onClickPin, ) } } } } } } @Composable private fun SourceHeader( language: String, modifier: Modifier = Modifier, ) { val context = LocalContext.current Text( text = LocaleHelper.getSourceDisplayName(language, context), modifier = modifier .padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small), style = MaterialTheme.typography.header, ) } @Composable private fun SourceItem( source: Source, onClickItem: (Source, Listing) -> Unit, onLongClickItem: (Source) -> Unit, onClickPin: (Source) -> Unit, modifier: Modifier = Modifier, ) { BaseSourceItem( modifier = modifier, source = source, onClickItem = { onClickItem(source, Listing.Popular) }, onLongClickItem = { onLongClickItem(source) }, action = { if (source.supportsLatest) { TextButton(onClick = { onClickItem(source, Listing.Latest) }) { Text( text = stringResource(MR.strings.latest), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.primary, ), ) } } SourcePinButton( isPinned = Pin.Pinned in source.pin, onClick = { onClickPin(source) }, ) }, ) } @Composable private fun SourcePinButton( isPinned: Boolean, onClick: () -> Unit, ) { val icon = if (isPinned) Icons.Filled.PushPin else Icons.Outlined.PushPin val tint = if (isPinned) { MaterialTheme.colorScheme.primary } else { MaterialTheme.colorScheme.onBackground.copy( alpha = SECONDARY_ALPHA, ) } val description = if (isPinned) MR.strings.action_unpin else MR.strings.action_pin IconButton(onClick = onClick) { Icon( imageVector = icon, tint = tint, contentDescription = stringResource(description), ) } } @Composable fun SourceOptionsDialog( source: Source, onClickPin: () -> Unit, onClickDisable: () -> Unit, onDismiss: () -> Unit, ) { AlertDialog( title = { Text(text = source.visualName) }, text = { Column { val textId = if (Pin.Pinned in source.pin) MR.strings.action_unpin else MR.strings.action_pin Text( text = stringResource(textId), modifier = Modifier .clickable(onClick = onClickPin) .fillMaxWidth() .padding(vertical = 16.dp), ) if (!source.isLocal()) { Text( text = stringResource(MR.strings.action_disable), modifier = Modifier .clickable(onClick = onClickDisable) .fillMaxWidth() .padding(vertical = 16.dp), ) } } }, onDismissRequest = onDismiss, confirmButton = {}, ) } sealed interface SourceUiModel { data class Item(val source: Source) : SourceUiModel data class Header(val language: String) : SourceUiModel } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BaseBrowseItem.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import tachiyomi.presentation.core.components.material.padding @Composable fun BaseBrowseItem( modifier: Modifier = Modifier, onClickItem: () -> Unit = {}, onLongClickItem: () -> Unit = {}, icon: @Composable RowScope.() -> Unit = {}, action: @Composable RowScope.() -> Unit = {}, content: @Composable RowScope.() -> Unit = {}, ) { Row( modifier = modifier .combinedClickable( onClick = onClickItem, onLongClick = onLongClickItem, ) .padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small), verticalAlignment = Alignment.CenterVertically, ) { icon() content() action() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BaseSourceItem.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextOverflow import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.model.Source import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun BaseSourceItem( source: Source, modifier: Modifier = Modifier, showLanguageInContent: Boolean = true, onClickItem: () -> Unit = {}, onLongClickItem: () -> Unit = {}, icon: @Composable RowScope.(Source) -> Unit = defaultIcon, action: @Composable RowScope.(Source) -> Unit = {}, content: @Composable RowScope.(Source, String?) -> Unit = defaultContent, ) { val sourceLangString = LocaleHelper.getSourceDisplayName(source.lang, LocalContext.current).takeIf { showLanguageInContent } BaseBrowseItem( modifier = modifier, onClickItem = onClickItem, onLongClickItem = onLongClickItem, icon = { icon.invoke(this, source) }, action = { action.invoke(this, source) }, content = { content.invoke(this, source, sourceLangString) }, ) } private val defaultIcon: @Composable RowScope.(Source) -> Unit = { source -> SourceIcon(source = source) } private val defaultContent: @Composable RowScope.(Source, String?) -> Unit = { source, sourceLangString -> Column( modifier = Modifier .padding(horizontal = MaterialTheme.padding.medium) .weight(1f), ) { Text( text = source.name, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) if (sourceLangString != null) { Text( modifier = Modifier.secondaryItemAlpha(), text = sourceLangString, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseBadges.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.CollectionsBookmark import androidx.compose.runtime.Composable import tachiyomi.presentation.core.components.Badge @Composable internal fun InLibraryBadge(enabled: Boolean) { if (enabled) { Badge( imageVector = Icons.Outlined.CollectionsBookmark, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseIcons.kt ================================================ package eu.kanade.presentation.browse.components import android.util.DisplayMetrics import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.height import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Dangerous import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.imageResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.core.graphics.drawable.toBitmap import coil3.compose.AsyncImage import eu.kanade.domain.source.model.icon import eu.kanade.presentation.util.rememberResourceBitmapPainter import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.util.ExtensionLoader import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.source.model.Source import tachiyomi.source.local.isLocal private val defaultModifier = Modifier .height(40.dp) .aspectRatio(1f) @Composable fun SourceIcon( source: Source, modifier: Modifier = Modifier, ) { val icon = source.icon when { source.isStub && icon == null -> { Image( imageVector = Icons.Filled.Warning, contentDescription = null, colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.error), modifier = modifier.then(defaultModifier), ) } icon != null -> { Image( bitmap = icon, contentDescription = null, modifier = modifier.then(defaultModifier), ) } source.isLocal() -> { Image( painter = painterResource(R.mipmap.ic_local_source), contentDescription = null, modifier = modifier.then(defaultModifier), ) } else -> { Image( painter = painterResource(R.mipmap.ic_default_source), contentDescription = null, modifier = modifier.then(defaultModifier), ) } } } @Composable fun ExtensionIcon( extension: Extension, modifier: Modifier = Modifier, density: Int = DisplayMetrics.DENSITY_DEFAULT, ) { when (extension) { is Extension.Available -> { AsyncImage( model = extension.iconUrl, contentDescription = null, placeholder = ColorPainter(Color(0x1F888888)), error = rememberResourceBitmapPainter(id = R.drawable.cover_error), modifier = modifier .clip(MaterialTheme.shapes.extraSmall), ) } is Extension.Installed -> { val icon by extension.getIcon(density) when (icon) { Result.Loading -> Box(modifier = modifier) is Result.Success -> Image( bitmap = (icon as Result.Success).value, contentDescription = null, modifier = modifier, ) Result.Error -> Image( bitmap = ImageBitmap.imageResource(id = R.mipmap.ic_default_source), contentDescription = null, modifier = modifier, ) } } is Extension.Untrusted -> Image( imageVector = Icons.Filled.Dangerous, contentDescription = null, colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.error), modifier = modifier.then(defaultModifier), ) } } @Composable private fun Extension.getIcon(density: Int = DisplayMetrics.DENSITY_DEFAULT): State> { val context = LocalContext.current return produceState>(initialValue = Result.Loading, this) { withIOContext { value = try { val appInfo = ExtensionLoader.getExtensionPackageInfoFromPkgName(context, pkgName)!!.applicationInfo!! val appResources = context.packageManager.getResourcesForApplication(appInfo) Result.Success( appResources.getDrawableForDensity(appInfo.icon, density, null)!! .toBitmap() .asImageBitmap(), ) } catch (e: Exception) { Result.Error } } } } sealed class Result { data object Loading : Result() data object Error : Result() data class Success(val value: T) : Result() } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.unit.dp import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import eu.kanade.presentation.library.components.CommonMangaItemDefaults import eu.kanade.presentation.library.components.MangaComfortableGridItem import kotlinx.coroutines.flow.StateFlow import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaCover import tachiyomi.presentation.core.util.plus @Composable fun BrowseSourceComfortableGrid( mangaList: LazyPagingItems>, columns: GridCells, contentPadding: PaddingValues, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) { LazyVerticalGrid( columns = columns, contentPadding = contentPadding + PaddingValues(8.dp), verticalArrangement = Arrangement.spacedBy(CommonMangaItemDefaults.GridVerticalSpacer), horizontalArrangement = Arrangement.spacedBy(CommonMangaItemDefaults.GridHorizontalSpacer), ) { if (mangaList.loadState.prepend is LoadState.Loading) { item(span = { GridItemSpan(maxLineSpan) }) { BrowseSourceLoadingItem() } } items(count = mangaList.itemCount) { index -> val manga by mangaList[index]?.collectAsState() ?: return@items BrowseSourceComfortableGridItem( manga = manga, onClick = { onMangaClick(manga) }, onLongClick = { onMangaLongClick(manga) }, ) } if (mangaList.loadState.refresh is LoadState.Loading || mangaList.loadState.append is LoadState.Loading) { item(span = { GridItemSpan(maxLineSpan) }) { BrowseSourceLoadingItem() } } } } @Composable private fun BrowseSourceComfortableGridItem( manga: Manga, onClick: () -> Unit = {}, onLongClick: () -> Unit = onClick, ) { MangaComfortableGridItem( title = manga.title, coverData = MangaCover( mangaId = manga.id, sourceId = manga.source, isMangaFavorite = manga.favorite, url = manga.thumbnailUrl, lastModified = manga.coverLastModified, ), coverAlpha = if (manga.favorite) CommonMangaItemDefaults.BrowseFavoriteCoverAlpha else 1f, coverBadgeStart = { InLibraryBadge(enabled = manga.favorite) }, onLongClick = onLongClick, onClick = onClick, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.unit.dp import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import eu.kanade.presentation.library.components.CommonMangaItemDefaults import eu.kanade.presentation.library.components.MangaCompactGridItem import kotlinx.coroutines.flow.StateFlow import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaCover import tachiyomi.presentation.core.util.plus @Composable fun BrowseSourceCompactGrid( mangaList: LazyPagingItems>, columns: GridCells, contentPadding: PaddingValues, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) { LazyVerticalGrid( columns = columns, contentPadding = contentPadding + PaddingValues(8.dp), verticalArrangement = Arrangement.spacedBy(CommonMangaItemDefaults.GridVerticalSpacer), horizontalArrangement = Arrangement.spacedBy(CommonMangaItemDefaults.GridHorizontalSpacer), ) { if (mangaList.loadState.prepend is LoadState.Loading) { item(span = { GridItemSpan(maxLineSpan) }) { BrowseSourceLoadingItem() } } items(count = mangaList.itemCount) { index -> val manga by mangaList[index]?.collectAsState() ?: return@items BrowseSourceCompactGridItem( manga = manga, onClick = { onMangaClick(manga) }, onLongClick = { onMangaLongClick(manga) }, ) } if (mangaList.loadState.refresh is LoadState.Loading || mangaList.loadState.append is LoadState.Loading) { item(span = { GridItemSpan(maxLineSpan) }) { BrowseSourceLoadingItem() } } } } @Composable private fun BrowseSourceCompactGridItem( manga: Manga, onClick: () -> Unit = {}, onLongClick: () -> Unit = onClick, ) { MangaCompactGridItem( title = manga.title, coverData = MangaCover( mangaId = manga.id, sourceId = manga.source, isMangaFavorite = manga.favorite, url = manga.thumbnailUrl, lastModified = manga.coverLastModified, ), coverAlpha = if (manga.favorite) CommonMangaItemDefaults.BrowseFavoriteCoverAlpha else 1f, coverBadgeStart = { InLibraryBadge(enabled = manga.favorite) }, onLongClick = onLongClick, onClick = onClick, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun RemoveMangaDialog( onDismissRequest: () -> Unit, onConfirm: () -> Unit, mangaToRemove: Manga, ) { AlertDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton( onClick = { onDismissRequest() onConfirm() }, ) { Text(text = stringResource(MR.strings.action_remove)) } }, title = { Text(text = stringResource(MR.strings.are_you_sure)) }, text = { Text(text = stringResource(MR.strings.remove_manga, mangaToRemove.title)) }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.unit.dp import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import eu.kanade.presentation.library.components.CommonMangaItemDefaults import eu.kanade.presentation.library.components.MangaListItem import kotlinx.coroutines.flow.StateFlow import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaCover import tachiyomi.presentation.core.util.plus @Composable fun BrowseSourceList( mangaList: LazyPagingItems>, contentPadding: PaddingValues, onMangaClick: (Manga) -> Unit, onMangaLongClick: (Manga) -> Unit, ) { LazyColumn( contentPadding = contentPadding + PaddingValues(vertical = 8.dp), ) { item { if (mangaList.loadState.prepend is LoadState.Loading) { BrowseSourceLoadingItem() } } items(count = mangaList.itemCount) { index -> val manga by mangaList[index]?.collectAsState() ?: return@items BrowseSourceListItem( manga = manga, onClick = { onMangaClick(manga) }, onLongClick = { onMangaLongClick(manga) }, ) } item { if (mangaList.loadState.refresh is LoadState.Loading || mangaList.loadState.append is LoadState.Loading) { BrowseSourceLoadingItem() } } } } @Composable private fun BrowseSourceListItem( manga: Manga, onClick: () -> Unit = {}, onLongClick: () -> Unit = onClick, ) { MangaListItem( title = manga.title, coverData = MangaCover( mangaId = manga.id, sourceId = manga.source, isMangaFavorite = manga.favorite, url = manga.thumbnailUrl, lastModified = manga.coverLastModified, ), coverAlpha = if (manga.favorite) CommonMangaItemDefaults.BrowseFavoriteCoverAlpha else 1f, badge = { InLibraryBadge(enabled = manga.favorite) }, onLongClick = onLongClick, onClick = onClick, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceLoadingItem.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @Composable internal fun BrowseSourceLoadingItem() { Row( modifier = Modifier .fillMaxWidth() .padding(vertical = 16.dp), horizontalArrangement = Arrangement.Center, ) { CircularProgressIndicator() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ViewList import androidx.compose.material.icons.filled.ViewModule import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.RadioMenuItem import eu.kanade.presentation.components.SearchToolbar import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.Source import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.LocalSource @Composable fun BrowseSourceToolbar( searchQuery: String?, onSearchQueryChange: (String?) -> Unit, source: Source?, displayMode: LibraryDisplayMode, onDisplayModeChange: (LibraryDisplayMode) -> Unit, navigateUp: () -> Unit, onWebViewClick: () -> Unit, onHelpClick: () -> Unit, onSettingsClick: () -> Unit, onSearch: (String) -> Unit, scrollBehavior: TopAppBarScrollBehavior? = null, ) { // Avoid capturing unstable source in actions lambda val title = source?.name val isLocalSource = source is LocalSource val isConfigurableSource = source is ConfigurableSource var selectingDisplayMode by remember { mutableStateOf(false) } SearchToolbar( navigateUp = navigateUp, titleContent = { AppBarTitle(title) }, searchQuery = searchQuery, onChangeSearchQuery = onSearchQueryChange, onSearch = onSearch, onClickCloseSearch = navigateUp, actions = { AppBarActions( actions = persistentListOf().builder() .apply { add( AppBar.Action( title = stringResource(MR.strings.action_display_mode), icon = if (displayMode == LibraryDisplayMode.List) { Icons.AutoMirrored.Filled.ViewList } else { Icons.Filled.ViewModule }, onClick = { selectingDisplayMode = true }, ), ) if (isLocalSource) { add( AppBar.OverflowAction( title = stringResource(MR.strings.label_help), onClick = onHelpClick, ), ) } else { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_open_in_web_view), onClick = onWebViewClick, ), ) } if (isConfigurableSource) { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_settings), onClick = onSettingsClick, ), ) } } .build(), ) DropdownMenu( expanded = selectingDisplayMode, onDismissRequest = { selectingDisplayMode = false }, ) { RadioMenuItem( text = { Text(text = stringResource(MR.strings.action_display_comfortable_grid)) }, isChecked = displayMode == LibraryDisplayMode.ComfortableGrid, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.ComfortableGrid) } RadioMenuItem( text = { Text(text = stringResource(MR.strings.action_display_grid)) }, isChecked = displayMode == LibraryDisplayMode.CompactGrid, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.CompactGrid) } RadioMenuItem( text = { Text(text = stringResource(MR.strings.action_display_list)) }, isChecked = displayMode == LibraryDisplayMode.List, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.List) } } }, scrollBehavior = scrollBehavior, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchCardRow.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import eu.kanade.presentation.library.components.CommonMangaItemDefaults import eu.kanade.presentation.library.components.MangaComfortableGridItem import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaCover import tachiyomi.domain.manga.model.asMangaCover import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchCardRow( titles: List, getManga: @Composable (Manga) -> State, onClick: (Manga) -> Unit, onLongClick: (Manga) -> Unit, ) { if (titles.isEmpty()) { EmptyResultItem() return } LazyRow( contentPadding = PaddingValues(MaterialTheme.padding.small), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { items(titles) { val title by getManga(it) MangaItem( title = title.title, cover = title.asMangaCover(), isFavorite = title.favorite, onClick = { onClick(title) }, onLongClick = { onLongClick(title) }, ) } } } @Composable private fun MangaItem( title: String, cover: MangaCover, isFavorite: Boolean, onClick: () -> Unit, onLongClick: () -> Unit, ) { Box(modifier = Modifier.width(96.dp)) { MangaComfortableGridItem( title = title, titleMaxLines = 3, coverData = cover, coverBadgeStart = { InLibraryBadge(enabled = isFavorite) }, coverAlpha = if (isFavorite) CommonMangaItemDefaults.BrowseFavoriteCoverAlpha else 1f, onClick = onClick, onLongClick = onLongClick, ) } } @Composable private fun EmptyResultItem() { Text( text = stringResource(MR.strings.no_results_found), modifier = Modifier .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchResultItems.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward import androidx.compose.material.icons.outlined.Error import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchResultItem( title: String, subtitle: String, onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable () -> Unit, ) { Column(modifier = modifier) { Row( modifier = Modifier .padding( start = MaterialTheme.padding.medium, end = MaterialTheme.padding.extraSmall, ) .fillMaxWidth() .clickable(onClick = onClick), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { Column { Text( text = title, style = MaterialTheme.typography.titleMedium, ) Text(text = subtitle) } IconButton(onClick = onClick) { Icon(imageVector = Icons.AutoMirrored.Outlined.ArrowForward, contentDescription = null) } } content() } } @Composable fun GlobalSearchLoadingResultItem() { Box( modifier = Modifier .fillMaxWidth() .padding(vertical = MaterialTheme.padding.medium), ) { CircularProgressIndicator( modifier = Modifier .size(16.dp) .align(Alignment.Center), strokeWidth = 2.dp, ) } } @Composable fun GlobalSearchErrorResultItem(message: String?) { Column( modifier = Modifier .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ) .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, ) { Icon(imageVector = Icons.Outlined.Error, contentDescription = null) Spacer(Modifier.height(4.dp)) Text( text = message ?: stringResource(MR.strings.unknown_error), textAlign = TextAlign.Center, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt ================================================ package eu.kanade.presentation.browse.components import androidx.compose.foundation.background import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.PushPin import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import eu.kanade.presentation.components.SearchToolbar import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchToolbar( searchQuery: String?, progress: Int, total: Int, navigateUp: () -> Unit, onChangeSearchQuery: (String?) -> Unit, onSearch: (String) -> Unit, hideSourceFilter: Boolean, sourceFilter: SourceFilter, onChangeSearchFilter: (SourceFilter) -> Unit, onlyShowHasResults: Boolean, onToggleResults: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, ) { Column(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) { Box { SearchToolbar( searchQuery = searchQuery, onChangeSearchQuery = onChangeSearchQuery, onSearch = onSearch, onClickCloseSearch = navigateUp, navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) if (progress in 1.. stringResource(MR.strings.label_default) else -> name } fun Category.visualName(context: Context): String = when { isSystemCategory -> context.stringResource(MR.strings.label_default) else -> name } ================================================ FILE: app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt ================================================ package eu.kanade.presentation.category import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Modifier import eu.kanade.presentation.category.components.CategoryFloatingActionButton import eu.kanade.presentation.category.components.CategoryListItem import eu.kanade.presentation.components.AppBar import eu.kanade.tachiyomi.ui.category.CategoryScreenState import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyListState import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.plus @Composable fun CategoryScreen( state: CategoryScreenState.Success, onClickCreate: () -> Unit, onClickRename: (Category) -> Unit, onClickDelete: (Category) -> Unit, onChangeOrder: (Category, Int) -> Unit, navigateUp: () -> Unit, ) { val lazyListState = rememberLazyListState() Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.action_edit_categories), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) }, floatingActionButton = { CategoryFloatingActionButton( lazyListState = lazyListState, onCreate = onClickCreate, ) }, ) { paddingValues -> if (state.isEmpty) { EmptyScreen( stringRes = MR.strings.information_empty_category, modifier = Modifier.padding(paddingValues), ) return@Scaffold } CategoryContent( categories = state.categories, lazyListState = lazyListState, paddingValues = paddingValues, onClickRename = onClickRename, onClickDelete = onClickDelete, onChangeOrder = onChangeOrder, ) } } @Composable private fun CategoryContent( categories: List, lazyListState: LazyListState, paddingValues: PaddingValues, onClickRename: (Category) -> Unit, onClickDelete: (Category) -> Unit, onChangeOrder: (Category, Int) -> Unit, ) { val categoriesState = remember { categories.toMutableStateList() } val reorderableState = rememberReorderableLazyListState(lazyListState, paddingValues) { from, to -> val item = categoriesState.removeAt(from.index) categoriesState.add(to.index, item) onChangeOrder(item, to.index) } LaunchedEffect(categories) { if (!reorderableState.isAnyItemDragging) { categoriesState.clear() categoriesState.addAll(categories) } } LazyColumn( modifier = Modifier.fillMaxSize(), state = lazyListState, contentPadding = paddingValues + topSmallPaddingValues + PaddingValues(horizontal = MaterialTheme.padding.medium), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { items( items = categoriesState, key = { category -> category.key }, ) { category -> ReorderableItem(reorderableState, category.key) { CategoryListItem( modifier = Modifier.animateItem(), category = category, onRename = { onClickRename(category) }, onDelete = { onClickDelete(category) }, ) } } } } private val Category.key inline get() = "category-$id" ================================================ FILE: app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt ================================================ package eu.kanade.presentation.category.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.AlertDialog import androidx.compose.material3.Checkbox import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.TriStateCheckbox import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import eu.kanade.core.preference.asToggleableState import eu.kanade.presentation.category.visualName import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay import tachiyomi.core.common.preference.CheckboxState import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import kotlin.time.Duration.Companion.seconds @Composable fun CategoryCreateDialog( onDismissRequest: () -> Unit, onCreate: (String) -> Unit, categories: ImmutableList, ) { var name by remember { mutableStateOf("") } val focusRequester = remember { FocusRequester() } val nameAlreadyExists = remember(name) { categories.contains(name) } AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton( enabled = name.isNotEmpty() && !nameAlreadyExists, onClick = { onCreate(name) onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_add)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, title = { Text(text = stringResource(MR.strings.action_add_category)) }, text = { OutlinedTextField( modifier = Modifier .focusRequester(focusRequester), value = name, onValueChange = { name = it }, label = { Text(text = stringResource(MR.strings.name)) }, supportingText = { val msgRes = if (name.isNotEmpty() && nameAlreadyExists) { MR.strings.error_category_exists } else { MR.strings.information_required_plain } Text(text = stringResource(msgRes)) }, isError = name.isNotEmpty() && nameAlreadyExists, singleLine = true, ) }, ) LaunchedEffect(focusRequester) { // TODO: https://issuetracker.google.com/issues/204502668 delay(0.1.seconds) focusRequester.requestFocus() } } @Composable fun CategoryRenameDialog( onDismissRequest: () -> Unit, onRename: (String) -> Unit, categories: ImmutableList, category: String, ) { var name by remember { mutableStateOf(category) } var valueHasChanged by remember { mutableStateOf(false) } val focusRequester = remember { FocusRequester() } val nameAlreadyExists = remember(name) { categories.contains(name) } AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton( enabled = valueHasChanged && !nameAlreadyExists, onClick = { onRename(name) onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, title = { Text(text = stringResource(MR.strings.action_rename_category)) }, text = { OutlinedTextField( modifier = Modifier.focusRequester(focusRequester), value = name, onValueChange = { valueHasChanged = name != it name = it }, label = { Text(text = stringResource(MR.strings.name)) }, supportingText = { val msgRes = if (valueHasChanged && nameAlreadyExists) { MR.strings.error_category_exists } else { MR.strings.information_required_plain } Text(text = stringResource(msgRes)) }, isError = valueHasChanged && nameAlreadyExists, singleLine = true, ) }, ) LaunchedEffect(focusRequester) { // TODO: https://issuetracker.google.com/issues/204502668 delay(0.1.seconds) focusRequester.requestFocus() } } @Composable fun CategoryDeleteDialog( onDismissRequest: () -> Unit, onDelete: () -> Unit, category: String, ) { AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton(onClick = { onDelete() onDismissRequest() }) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, title = { Text(text = stringResource(MR.strings.delete_category)) }, text = { Text(text = stringResource(MR.strings.delete_category_confirmation, category)) }, ) } @Composable fun ChangeCategoryDialog( initialSelection: ImmutableList>, onDismissRequest: () -> Unit, onEditCategories: () -> Unit, onConfirm: (List, List) -> Unit, ) { if (initialSelection.isEmpty()) { AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { tachiyomi.presentation.core.components.material.TextButton( onClick = { onDismissRequest() onEditCategories() }, ) { Text(text = stringResource(MR.strings.action_edit_categories)) } }, title = { Text(text = stringResource(MR.strings.action_move_category)) }, text = { Text(text = stringResource(MR.strings.information_empty_category_dialog)) }, ) return } var selection by remember { mutableStateOf(initialSelection) } AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { Row { tachiyomi.presentation.core.components.material.TextButton(onClick = { onDismissRequest() onEditCategories() }) { Text(text = stringResource(MR.strings.action_edit)) } Spacer(modifier = Modifier.weight(1f)) tachiyomi.presentation.core.components.material.TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } tachiyomi.presentation.core.components.material.TextButton( onClick = { onDismissRequest() onConfirm( selection .filter { it is CheckboxState.State.Checked || it is CheckboxState.TriState.Include } .map { it.value.id }, selection .filter { it is CheckboxState.State.None || it is CheckboxState.TriState.None } .map { it.value.id }, ) }, ) { Text(text = stringResource(MR.strings.action_ok)) } } }, title = { Text(text = stringResource(MR.strings.action_move_category)) }, text = { Column( modifier = Modifier.verticalScroll(rememberScrollState()), ) { selection.forEach { checkbox -> val onChange: (CheckboxState) -> Unit = { val index = selection.indexOf(it) if (index != -1) { val mutableList = selection.toMutableList() mutableList[index] = it.next() selection = mutableList.toList().toImmutableList() } } Row( modifier = Modifier .fillMaxWidth() .clickable { onChange(checkbox) }, verticalAlignment = Alignment.CenterVertically, ) { when (checkbox) { is CheckboxState.TriState -> { TriStateCheckbox( state = checkbox.asToggleableState(), onClick = { onChange(checkbox) }, ) } is CheckboxState.State -> { Checkbox( checked = checkbox.isChecked, onCheckedChange = { onChange(checkbox) }, ) } } Text( text = checkbox.value.visualName, modifier = Modifier.padding(horizontal = MaterialTheme.padding.medium), ) } } } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt ================================================ package eu.kanade.presentation.category.components import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Add import androidx.compose.material3.Icon import androidx.compose.material3.SmallExtendedFloatingActionButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.shouldExpandFAB @Composable fun CategoryFloatingActionButton( lazyListState: LazyListState, onCreate: () -> Unit, modifier: Modifier = Modifier, ) { SmallExtendedFloatingActionButton( text = { Text(text = stringResource(MR.strings.action_add)) }, icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = null) }, onClick = onCreate, expanded = lazyListState.shouldExpandFAB(), modifier = modifier, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt ================================================ package eu.kanade.presentation.category.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.DragHandle import androidx.compose.material.icons.outlined.Edit import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import sh.calvin.reorderable.ReorderableCollectionItemScope import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReorderableCollectionItemScope.CategoryListItem( category: Category, onRename: () -> Unit, onDelete: () -> Unit, modifier: Modifier = Modifier, ) { ElevatedCard(modifier = modifier) { Row( modifier = Modifier .fillMaxWidth() .clickable(onClick = onRename) .padding(vertical = MaterialTheme.padding.small) .padding( start = MaterialTheme.padding.small, end = MaterialTheme.padding.medium, ), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Outlined.DragHandle, contentDescription = null, modifier = Modifier .padding(MaterialTheme.padding.medium) .draggableHandle(), ) Text( text = category.name, modifier = Modifier.weight(1f), ) IconButton(onClick = onRename) { Icon( imageVector = Icons.Outlined.Edit, contentDescription = stringResource(MR.strings.action_rename_category), ) } IconButton(onClick = onDelete) { Icon( imageVector = Icons.Outlined.Delete, contentDescription = stringResource(MR.strings.action_delete), ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/AdaptiveSheet.kt ================================================ package eu.kanade.presentation.components import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.togetherWith import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import cafe.adriel.voyager.core.annotation.InternalVoyagerApi import cafe.adriel.voyager.core.lifecycle.DisposableEffectIgnoringConfiguration import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.Navigator import eu.kanade.presentation.util.ScreenTransition import eu.kanade.presentation.util.isTabletUi import tachiyomi.presentation.core.components.AdaptiveSheet as AdaptiveSheetImpl @OptIn(InternalVoyagerApi::class) @Composable fun NavigatorAdaptiveSheet( screen: Screen, enableSwipeDismiss: (Navigator) -> Boolean = { true }, onDismissRequest: () -> Unit, ) { Navigator( screen = screen, content = { sheetNavigator -> AdaptiveSheet( onDismissRequest = onDismissRequest, enableSwipeDismiss = enableSwipeDismiss(sheetNavigator), ) { ScreenTransition( navigator = sheetNavigator, transition = { fadeIn(animationSpec = tween(220, delayMillis = 90)) togetherWith fadeOut(animationSpec = tween(90)) }, ) } // Make sure screens are disposed no matter what if (sheetNavigator.parent?.disposeBehavior?.disposeNestedNavigators == false) { DisposableEffectIgnoringConfiguration { onDispose { sheetNavigator.items .asReversed() .forEach(sheetNavigator::dispose) } } } }, ) } /** * Sheet with adaptive position aligned to bottom on small screen, otherwise aligned to center * and will not be able to dismissed with swipe gesture. * * Max width of the content is set to 460 dp. */ @Composable fun AdaptiveSheet( onDismissRequest: () -> Unit, modifier: Modifier = Modifier, enableSwipeDismiss: Boolean = true, content: @Composable () -> Unit, ) { val isTabletUi = isTabletUi() Dialog( onDismissRequest = onDismissRequest, properties = dialogProperties, ) { AdaptiveSheetImpl( isTabletUi = isTabletUi, enableSwipeDismiss = enableSwipeDismiss, onDismissRequest = onDismissRequest, modifier = modifier, ) { content() } } } private val dialogProperties = DialogProperties( usePlatformDefaultWidth = false, decorFitsSystemWindows = true, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/AppBar.kt ================================================ package eu.kanade.presentation.components import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material.icons.outlined.Search import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Text import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TooltipAnchorPosition import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults.rememberTooltipPositionProvider import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.rememberTooltipState import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusDirection import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import kotlinx.collections.immutable.ImmutableList import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide import tachiyomi.presentation.core.util.runOnEnterKeyPressed import tachiyomi.presentation.core.util.secondaryItemAlpha import tachiyomi.presentation.core.util.showSoftKeyboard const val SEARCH_DEBOUNCE_MILLIS = 250L @Composable fun AppBar( title: String?, modifier: Modifier = Modifier, backgroundColor: Color? = null, // Text subtitle: String? = null, // Up button navigateUp: (() -> Unit)? = null, navigationIcon: ImageVector? = null, // Menu actions: @Composable RowScope.() -> Unit = {}, // Action mode actionModeCounter: Int = 0, onCancelActionMode: () -> Unit = {}, actionModeActions: @Composable RowScope.() -> Unit = {}, scrollBehavior: TopAppBarScrollBehavior? = null, ) { val isActionMode by remember(actionModeCounter) { derivedStateOf { actionModeCounter > 0 } } AppBar( modifier = modifier, backgroundColor = backgroundColor, titleContent = { if (isActionMode) { AppBarTitle(actionModeCounter.toString()) } else { AppBarTitle(title, subtitle = subtitle) } }, navigateUp = navigateUp, navigationIcon = navigationIcon, actions = { if (isActionMode) { actionModeActions() } else { actions() } }, isActionMode = isActionMode, onCancelActionMode = onCancelActionMode, scrollBehavior = scrollBehavior, ) } @Composable fun AppBar( // Title titleContent: @Composable () -> Unit, modifier: Modifier = Modifier, backgroundColor: Color? = null, // Up button navigateUp: (() -> Unit)? = null, navigationIcon: ImageVector? = null, // Menu actions: @Composable RowScope.() -> Unit = {}, // Action mode isActionMode: Boolean = false, onCancelActionMode: () -> Unit = {}, scrollBehavior: TopAppBarScrollBehavior? = null, ) { Column( modifier = modifier, ) { TopAppBar( navigationIcon = { if (isActionMode) { IconButton(onClick = onCancelActionMode) { Icon( imageVector = Icons.Outlined.Close, contentDescription = stringResource(MR.strings.action_cancel), ) } } else { navigateUp?.let { IconButton(onClick = it) { UpIcon(navigationIcon = navigationIcon) } } } }, title = titleContent, actions = actions, colors = TopAppBarDefaults.topAppBarColors( containerColor = backgroundColor ?: MaterialTheme.colorScheme.surfaceColorAtElevation( elevation = if (isActionMode) 3.dp else 0.dp, ), ), scrollBehavior = scrollBehavior, ) } } @Composable fun AppBarTitle( title: String?, modifier: Modifier = Modifier, subtitle: String? = null, ) { Column(modifier = modifier) { title?.let { Text( text = it, maxLines = 1, overflow = TextOverflow.Ellipsis, ) } subtitle?.let { Text( text = it, style = MaterialTheme.typography.bodyMedium, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.basicMarquee( repeatDelayMillis = 2_000, ), ) } } } @Composable fun AppBarActions( actions: ImmutableList, ) { var showMenu by remember { mutableStateOf(false) } actions.filterIsInstance().map { TooltipBox( positionProvider = rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text(it.title) } }, state = rememberTooltipState(), focusable = false, ) { IconButton( onClick = it.onClick, enabled = it.enabled, ) { Icon( imageVector = it.icon, tint = it.iconTint ?: LocalContentColor.current, contentDescription = it.title, ) } } } val overflowActions = actions.filterIsInstance() if (overflowActions.isNotEmpty()) { TooltipBox( positionProvider = rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text(stringResource(MR.strings.action_menu_overflow_description)) } }, state = rememberTooltipState(), focusable = false, ) { IconButton( onClick = { showMenu = !showMenu }, ) { Icon( Icons.Outlined.MoreVert, contentDescription = stringResource(MR.strings.action_menu_overflow_description), ) } } DropdownMenu( expanded = showMenu, onDismissRequest = { showMenu = false }, ) { overflowActions.map { DropdownMenuItem( onClick = { it.onClick() showMenu = false }, text = { Text(it.title, fontWeight = FontWeight.Normal) }, ) } } } } /** * @param searchEnabled Set to false if you don't want to show search action. * @param searchQuery If null, use normal toolbar. * @param placeholderText If null, [MR.strings.action_search_hint] is used. */ @Composable fun SearchToolbar( searchQuery: String?, onChangeSearchQuery: (String?) -> Unit, modifier: Modifier = Modifier, titleContent: @Composable () -> Unit = {}, navigateUp: (() -> Unit)? = null, searchEnabled: Boolean = true, placeholderText: String? = null, onSearch: (String) -> Unit = {}, onClickCloseSearch: () -> Unit = { onChangeSearchQuery(null) }, actions: @Composable RowScope.() -> Unit = {}, scrollBehavior: TopAppBarScrollBehavior? = null, visualTransformation: VisualTransformation = VisualTransformation.None, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, ) { val focusRequester = remember { FocusRequester() } AppBar( modifier = modifier, titleContent = { if (searchQuery == null) return@AppBar titleContent() val keyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current val searchAndClearFocus: () -> Unit = f@{ if (searchQuery.isBlank()) return@f onSearch(searchQuery) focusManager.clearFocus() keyboardController?.hide() focusManager.moveFocus(FocusDirection.Next) } BasicTextField( value = searchQuery, onValueChange = onChangeSearchQuery, modifier = Modifier .fillMaxWidth() .focusRequester(focusRequester) .runOnEnterKeyPressed(action = searchAndClearFocus) .showSoftKeyboard(remember { searchQuery.isEmpty() }) .clearFocusOnSoftKeyboardHide(), textStyle = MaterialTheme.typography.titleMedium.copy( color = MaterialTheme.colorScheme.onBackground, fontWeight = FontWeight.Normal, fontSize = 18.sp, ), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = { searchAndClearFocus() }), singleLine = true, cursorBrush = SolidColor(MaterialTheme.colorScheme.onBackground), visualTransformation = visualTransformation, interactionSource = interactionSource, decorationBox = { innerTextField -> TextFieldDefaults.DecorationBox( value = searchQuery, innerTextField = innerTextField, enabled = true, singleLine = true, visualTransformation = visualTransformation, interactionSource = interactionSource, placeholder = { Text( modifier = Modifier.secondaryItemAlpha(), text = (placeholderText ?: stringResource(MR.strings.action_search_hint)), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.titleMedium.copy( fontSize = 18.sp, fontWeight = FontWeight.Normal, ), ) }, container = {}, ) }, ) }, navigateUp = if (searchQuery == null) navigateUp else onClickCloseSearch, actions = { key("search") { val onClick = { onChangeSearchQuery("") } if (!searchEnabled) { // Don't show search action } else if (searchQuery == null) { TooltipBox( positionProvider = rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text(stringResource(MR.strings.action_search)) } }, state = rememberTooltipState(), focusable = false, ) { IconButton( onClick = onClick, ) { Icon( Icons.Outlined.Search, contentDescription = stringResource(MR.strings.action_search), ) } } } else if (searchQuery.isNotEmpty()) { TooltipBox( positionProvider = rememberTooltipPositionProvider(TooltipAnchorPosition.Above), tooltip = { PlainTooltip { Text(stringResource(MR.strings.action_reset)) } }, state = rememberTooltipState(), focusable = false, ) { IconButton( onClick = { onClick() focusRequester.requestFocus() }, ) { Icon( Icons.Outlined.Close, contentDescription = stringResource(MR.strings.action_reset), ) } } } } key("actions") { actions() } }, isActionMode = false, scrollBehavior = scrollBehavior, ) } @Composable fun UpIcon( modifier: Modifier = Modifier, navigationIcon: ImageVector? = null, ) { val icon = navigationIcon ?: Icons.AutoMirrored.Outlined.ArrowBack Icon( imageVector = icon, contentDescription = stringResource(MR.strings.action_bar_up_description), modifier = modifier, ) } sealed interface AppBar { sealed interface AppBarAction data class Action( val title: String, val icon: ImageVector, val iconTint: Color? = null, val onClick: () -> Unit, val enabled: Boolean = true, ) : AppBarAction data class OverflowAction( val title: String, val onClick: () -> Unit, ) : AppBarAction } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/Banners.kt ================================================ package eu.kanade.presentation.components import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.layout.SubcomposeLayout import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEach import androidx.compose.ui.util.fastMap import androidx.compose.ui.util.fastMaxBy import dev.icerock.moko.resources.StringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource val DownloadedOnlyBannerBackgroundColor @Composable get() = MaterialTheme.colorScheme.tertiary val IncognitoModeBannerBackgroundColor @Composable get() = MaterialTheme.colorScheme.primary val IndexingBannerBackgroundColor @Composable get() = MaterialTheme.colorScheme.secondary @Composable fun WarningBanner( textRes: StringResource, modifier: Modifier = Modifier, ) { Text( text = stringResource(textRes), modifier = modifier .fillMaxWidth() .background(MaterialTheme.colorScheme.error) .padding(16.dp), color = MaterialTheme.colorScheme.onError, style = MaterialTheme.typography.bodyMedium, textAlign = TextAlign.Center, ) } @Composable fun AppStateBanners( downloadedOnlyMode: Boolean, incognitoMode: Boolean, indexing: Boolean, modifier: Modifier = Modifier, ) { val density = LocalDensity.current val mainInsets = WindowInsets.statusBars val mainInsetsTop = mainInsets.getTop(density) SubcomposeLayout(modifier = modifier) { constraints -> val indexingPlaceable = subcompose(0) { AnimatedVisibility( visible = indexing, enter = expandVertically(), exit = shrinkVertically(), ) { IndexingDownloadBanner( modifier = Modifier.windowInsetsPadding(mainInsets), ) } }.fastMap { it.measure(constraints) } val indexingHeight = indexingPlaceable.fastMaxBy { it.height }?.height ?: 0 val downloadedOnlyPlaceable = subcompose(1) { AnimatedVisibility( visible = downloadedOnlyMode, enter = expandVertically(), exit = shrinkVertically(), ) { val top = (mainInsetsTop - indexingHeight).coerceAtLeast(0) DownloadedOnlyModeBanner( modifier = Modifier.windowInsetsPadding(WindowInsets(top = top)), ) } }.fastMap { it.measure(constraints) } val downloadedOnlyHeight = downloadedOnlyPlaceable.fastMaxBy { it.height }?.height ?: 0 val incognitoPlaceable = subcompose(2) { AnimatedVisibility( visible = incognitoMode, enter = expandVertically(), exit = shrinkVertically(), ) { val top = (mainInsetsTop - indexingHeight - downloadedOnlyHeight).coerceAtLeast(0) IncognitoModeBanner( modifier = Modifier.windowInsetsPadding(WindowInsets(top = top)), ) } }.fastMap { it.measure(constraints) } val incognitoHeight = incognitoPlaceable.fastMaxBy { it.height }?.height ?: 0 layout(constraints.maxWidth, indexingHeight + downloadedOnlyHeight + incognitoHeight) { indexingPlaceable.fastForEach { it.place(0, 0) } downloadedOnlyPlaceable.fastForEach { it.place(0, indexingHeight) } incognitoPlaceable.fastForEach { it.place(0, indexingHeight + downloadedOnlyHeight) } } } } @Composable private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) { Text( text = stringResource(MR.strings.label_downloaded_only), modifier = Modifier .background(DownloadedOnlyBannerBackgroundColor) .fillMaxWidth() .padding(4.dp) .then(modifier), color = MaterialTheme.colorScheme.onTertiary, textAlign = TextAlign.Center, style = MaterialTheme.typography.labelMedium, ) } @Composable private fun IncognitoModeBanner(modifier: Modifier = Modifier) { Text( text = stringResource(MR.strings.pref_incognito_mode), modifier = Modifier .background(IncognitoModeBannerBackgroundColor) .fillMaxWidth() .padding(4.dp) .then(modifier), color = MaterialTheme.colorScheme.onPrimary, textAlign = TextAlign.Center, style = MaterialTheme.typography.labelMedium, ) } @Composable private fun IndexingDownloadBanner(modifier: Modifier = Modifier) { val density = LocalDensity.current Row( modifier = Modifier .background(color = IndexingBannerBackgroundColor) .fillMaxWidth() .padding(8.dp) .then(modifier), horizontalArrangement = Arrangement.Center, ) { var textHeight by remember { mutableStateOf(0.dp) } CircularProgressIndicator( modifier = Modifier.requiredSize(textHeight), color = MaterialTheme.colorScheme.onSecondary, strokeWidth = textHeight / 8, ) Spacer(modifier = Modifier.width(8.dp)) Text( text = stringResource(MR.strings.download_notifier_cache_renewal), color = MaterialTheme.colorScheme.onSecondary, textAlign = TextAlign.Center, style = MaterialTheme.typography.labelMedium, onTextLayout = { with(density) { textHeight = it.size.height.toDp() } }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/DateText.kt ================================================ package eu.kanade.presentation.components import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import eu.kanade.domain.ui.UiPreferences import eu.kanade.tachiyomi.util.lang.toRelativeString import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.LocalDate import java.time.ZoneId @Composable fun relativeDateText( dateEpochMillis: Long, ): String { return relativeDateText( localDate = LocalDate.ofInstant( Instant.ofEpochMilli(dateEpochMillis), ZoneId.systemDefault(), ) .takeIf { dateEpochMillis != 0L }, ) } @Composable fun relativeDateText( localDate: LocalDate?, ): String { val context = LocalContext.current val preferences = remember { Injekt.get() } val relativeTime = remember { preferences.relativeTime.get() } val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat.get()) } return localDate?.toRelativeString( context = context, relative = relativeTime, dateFormat = dateFormat, ) ?: stringResource(MR.strings.not_applicable) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/DownloadDropdownMenu.kt ================================================ package eu.kanade.presentation.components import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.DpOffset import eu.kanade.presentation.manga.DownloadAction import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource @Composable fun DownloadDropdownMenu( modifier: Modifier = Modifier, expanded: Boolean, onDismissRequest: () -> Unit, onDownloadClicked: (DownloadAction) -> Unit, offset: DpOffset? = null, ) { if (offset != null) { DropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, modifier = modifier, offset = offset, content = { DownloadDropdownMenuItems( onDismissRequest = onDismissRequest, onDownloadClicked = onDownloadClicked, ) }, ) } else { DropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, modifier = modifier, content = { DownloadDropdownMenuItems( onDismissRequest = onDismissRequest, onDownloadClicked = onDownloadClicked, ) }, ) } } @Composable private fun DownloadDropdownMenuItems( onDismissRequest: () -> Unit, onDownloadClicked: (DownloadAction) -> Unit, ) { val options = persistentListOf( DownloadAction.NEXT_1_CHAPTER to pluralStringResource(MR.plurals.download_amount, 1, 1), DownloadAction.NEXT_5_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 5, 5), DownloadAction.NEXT_10_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 10, 10), DownloadAction.NEXT_25_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 25, 25), DownloadAction.UNREAD_CHAPTERS to stringResource(MR.strings.download_unread), DownloadAction.BOOKMARKED_CHAPTERS to stringResource(MR.strings.download_bookmarked), ) options.map { (downloadAction, string) -> DropdownMenuItem( text = { Text(text = string) }, onClick = { onDownloadClicked(downloadAction) onDismissRequest() }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt ================================================ package eu.kanade.presentation.components import androidx.compose.foundation.ScrollState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.rememberScrollState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowRight import androidx.compose.material.icons.outlined.RadioButtonChecked import androidx.compose.material.icons.outlined.RadioButtonUnchecked import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.window.PopupProperties import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import androidx.compose.material3.DropdownMenu as ComposeDropdownMenu /** * DropdownMenu but overlaps anchor and has width constraints to better * match non-Compose implementation. */ @Composable fun DropdownMenu( expanded: Boolean, onDismissRequest: () -> Unit, modifier: Modifier = Modifier, offset: DpOffset = DpOffset(8.dp, (-56).dp), scrollState: ScrollState = rememberScrollState(), properties: PopupProperties = PopupProperties(focusable = true), content: @Composable ColumnScope.() -> Unit, ) { ComposeDropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, modifier = modifier.sizeIn(minWidth = 196.dp, maxWidth = 196.dp), offset = offset, scrollState = scrollState, properties = properties, content = content, ) } @Composable fun RadioMenuItem( text: @Composable () -> Unit, isChecked: Boolean, modifier: Modifier = Modifier, onClick: () -> Unit, ) { DropdownMenuItem( text = text, onClick = onClick, trailingIcon = { if (isChecked) { Icon( imageVector = Icons.Outlined.RadioButtonChecked, contentDescription = stringResource(MR.strings.selected), tint = MaterialTheme.colorScheme.primary, ) } else { Icon( imageVector = Icons.Outlined.RadioButtonUnchecked, contentDescription = stringResource(MR.strings.not_selected), ) } }, modifier = modifier, ) } @Composable fun NestedMenuItem( text: @Composable () -> Unit, children: @Composable ColumnScope.(() -> Unit) -> Unit, modifier: Modifier = Modifier, ) { var nestedExpanded by remember { mutableStateOf(false) } val closeMenu = { nestedExpanded = false } Box { DropdownMenuItem( text = text, onClick = { nestedExpanded = true }, trailingIcon = { Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowRight, contentDescription = null, ) }, ) DropdownMenu( expanded = nestedExpanded, onDismissRequest = closeMenu, modifier = modifier, ) { children(closeMenu) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt ================================================ package eu.kanade.presentation.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction @PreviewLightDark @Composable private fun NoActionPreview() { TachiyomiPreviewTheme { Surface { EmptyScreen( stringRes = MR.strings.empty_screen, ) } } } @PreviewLightDark @Composable private fun WithActionPreview() { TachiyomiPreviewTheme { Surface { EmptyScreen( stringRes = MR.strings.empty_screen, actions = persistentListOf( EmptyScreenAction( stringRes = MR.strings.action_retry, icon = Icons.Outlined.Refresh, onClick = {}, ), EmptyScreenAction( stringRes = MR.strings.getting_started_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = {}, ), ), ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt ================================================ package eu.kanade.presentation.components import androidx.compose.animation.animateContentSize import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.Tab import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEachIndexed import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TabText import tachiyomi.presentation.core.i18n.stringResource object TabbedDialogPaddings { val Horizontal = 24.dp val Vertical = 8.dp } @Composable fun TabbedDialog( onDismissRequest: () -> Unit, tabTitles: ImmutableList, modifier: Modifier = Modifier, tabOverflowMenuContent: (@Composable ColumnScope.(() -> Unit) -> Unit)? = null, pagerState: PagerState = rememberPagerState { tabTitles.size }, content: @Composable (Int) -> Unit, ) { AdaptiveSheet( modifier = modifier, onDismissRequest = onDismissRequest, ) { val scope = rememberCoroutineScope() Column { Row { PrimaryTabRow( modifier = Modifier.weight(1f), selectedTabIndex = pagerState.currentPage, containerColor = MaterialTheme.colorScheme.surfaceContainerHigh, divider = {}, ) { tabTitles.fastForEachIndexed { index, tab -> Tab( selected = pagerState.currentPage == index, onClick = { scope.launch { pagerState.animateScrollToPage(index) } }, text = { TabText(text = tab) }, unselectedContentColor = MaterialTheme.colorScheme.onSurface, ) } } tabOverflowMenuContent?.let { MoreMenu(it) } } HorizontalDivider() HorizontalPager( modifier = Modifier.animateContentSize(), state = pagerState, verticalAlignment = Alignment.Top, pageContent = { page -> content(page) }, ) } } } @Composable private fun MoreMenu( content: @Composable ColumnScope.(() -> Unit) -> Unit, ) { var expanded by remember { mutableStateOf(false) } Box(modifier = Modifier.wrapContentSize(Alignment.TopStart)) { IconButton(onClick = { expanded = true }) { Icon( imageVector = Icons.Default.MoreVert, contentDescription = stringResource(MR.strings.label_more), ) } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, ) { content { expanded = false } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt ================================================ package eu.kanade.presentation.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Tab import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.zIndex import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.TabText import tachiyomi.presentation.core.i18n.stringResource @Composable fun TabbedScreen( titleRes: StringResource, tabs: ImmutableList, state: PagerState = rememberPagerState { tabs.size }, searchQuery: String? = null, onChangeSearchQuery: (String?) -> Unit = {}, ) { val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( topBar = { val tab = tabs[state.currentPage] val searchEnabled = tab.searchEnabled SearchToolbar( titleContent = { AppBarTitle(stringResource(titleRes)) }, searchEnabled = searchEnabled, searchQuery = if (searchEnabled) searchQuery else null, onChangeSearchQuery = onChangeSearchQuery, actions = { AppBarActions(tab.actions) }, ) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { contentPadding -> Column( modifier = Modifier.padding( top = contentPadding.calculateTopPadding(), start = contentPadding.calculateStartPadding(LocalLayoutDirection.current), end = contentPadding.calculateEndPadding(LocalLayoutDirection.current), ), ) { PrimaryTabRow( selectedTabIndex = state.currentPage, modifier = Modifier.zIndex(1f), ) { tabs.forEachIndexed { index, tab -> Tab( selected = state.currentPage == index, onClick = { scope.launch { state.animateScrollToPage(index) } }, text = { TabText(text = stringResource(tab.titleRes), badgeCount = tab.badgeNumber) }, unselectedContentColor = MaterialTheme.colorScheme.onSurface, ) } } HorizontalPager( modifier = Modifier.fillMaxSize(), state = state, verticalAlignment = Alignment.Top, ) { page -> tabs[page].content( PaddingValues(bottom = contentPadding.calculateBottomPadding()), snackbarHostState, ) } } } } data class TabContent( val titleRes: StringResource, val badgeNumber: Int? = null, val searchEnabled: Boolean = false, val actions: ImmutableList = persistentListOf(), val content: @Composable (contentPadding: PaddingValues, snackbarHostState: SnackbarHostState) -> Unit, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt ================================================ package eu.kanade.presentation.crash import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.BugReport import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.util.CrashLogUtil import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable fun CrashScreen( exception: Throwable?, onRestartClick: () -> Unit, ) { val scope = rememberCoroutineScope() val context = LocalContext.current InfoScreen( icon = Icons.Outlined.BugReport, headingText = stringResource(MR.strings.crash_screen_title), subtitleText = stringResource(MR.strings.crash_screen_description, stringResource(MR.strings.app_name)), acceptText = stringResource(MR.strings.pref_dump_crash_logs), onAcceptClick = { scope.launch { CrashLogUtil(context).dumpLogs(exception) } }, rejectText = stringResource(MR.strings.crash_screen_restart_application), onRejectClick = onRestartClick, ) { Box( modifier = Modifier .padding(vertical = MaterialTheme.padding.small) .clip(MaterialTheme.shapes.small) .fillMaxSize() .background(MaterialTheme.colorScheme.surfaceVariant), ) { Text( text = exception.toString(), modifier = Modifier .padding(all = MaterialTheme.padding.small), color = MaterialTheme.colorScheme.onSurfaceVariant, ) } } } @PreviewLightDark @Composable private fun CrashScreenPreview() { TachiyomiPreviewTheme { CrashScreen(exception = RuntimeException("Dummy")) {} } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt ================================================ package eu.kanade.presentation.history import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DeleteSweep import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.relativeDateText import eu.kanade.presentation.history.components.HistoryItem import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.tachiyomi.ui.history.HistoryScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.ListGroupHeader import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import java.time.LocalDate @Composable fun HistoryScreen( state: HistoryScreenModel.State, snackbarHostState: SnackbarHostState, onSearchQueryChange: (String?) -> Unit, onClickCover: (mangaId: Long) -> Unit, onClickResume: (mangaId: Long, chapterId: Long) -> Unit, onClickFavorite: (mangaId: Long) -> Unit, onDialogChange: (HistoryScreenModel.Dialog?) -> Unit, ) { Scaffold( topBar = { scrollBehavior -> SearchToolbar( titleContent = { AppBarTitle(stringResource(MR.strings.history)) }, searchQuery = state.searchQuery, onChangeSearchQuery = onSearchQueryChange, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.pref_clear_history), icon = Icons.Outlined.DeleteSweep, onClick = { onDialogChange(HistoryScreenModel.Dialog.DeleteAll) }, ), ), ) }, scrollBehavior = scrollBehavior, ) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { contentPadding -> state.list.let { if (it == null) { LoadingScreen(Modifier.padding(contentPadding)) } else if (it.isEmpty()) { val msg = if (!state.searchQuery.isNullOrEmpty()) { MR.strings.no_results_found } else { MR.strings.information_no_recent_manga } EmptyScreen( stringRes = msg, modifier = Modifier.padding(contentPadding), ) } else { HistoryScreenContent( history = it, contentPadding = contentPadding, onClickCover = { history -> onClickCover(history.mangaId) }, onClickResume = { history -> onClickResume(history.mangaId, history.chapterId) }, onClickDelete = { item -> onDialogChange(HistoryScreenModel.Dialog.Delete(item)) }, onClickFavorite = { history -> onClickFavorite(history.mangaId) }, ) } } } } @Composable private fun HistoryScreenContent( history: List, contentPadding: PaddingValues, onClickCover: (HistoryWithRelations) -> Unit, onClickResume: (HistoryWithRelations) -> Unit, onClickDelete: (HistoryWithRelations) -> Unit, onClickFavorite: (HistoryWithRelations) -> Unit, ) { FastScrollLazyColumn( contentPadding = contentPadding, ) { items( items = history, key = { "history-${it.hashCode()}" }, contentType = { when (it) { is HistoryUiModel.Header -> "header" is HistoryUiModel.Item -> "item" } }, ) { item -> when (item) { is HistoryUiModel.Header -> { ListGroupHeader( modifier = Modifier.animateItemFastScroll(), text = relativeDateText(item.date), ) } is HistoryUiModel.Item -> { val value = item.item HistoryItem( modifier = Modifier.animateItemFastScroll(), history = value, onClickCover = { onClickCover(value) }, onClickResume = { onClickResume(value) }, onClickDelete = { onClickDelete(value) }, onClickFavorite = { onClickFavorite(value) }, ) } } } } } sealed interface HistoryUiModel { data class Header(val date: LocalDate) : HistoryUiModel data class Item(val item: HistoryWithRelations) : HistoryUiModel } @PreviewLightDark @Composable internal fun HistoryScreenPreviews( @PreviewParameter(HistoryScreenModelStateProvider::class) historyState: HistoryScreenModel.State, ) { TachiyomiPreviewTheme { HistoryScreen( state = historyState, snackbarHostState = SnackbarHostState(), onSearchQueryChange = {}, onClickCover = {}, onClickResume = { _, _ -> run {} }, onDialogChange = {}, onClickFavorite = {}, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/history/HistoryScreenModelStateProvider.kt ================================================ package eu.kanade.presentation.history import androidx.compose.ui.tooling.preview.PreviewParameterProvider import eu.kanade.tachiyomi.ui.history.HistoryScreenModel import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.manga.model.MangaCover import java.time.Instant import java.time.LocalDate import java.time.temporal.ChronoUnit import java.util.Date import kotlin.random.Random class HistoryScreenModelStateProvider : PreviewParameterProvider { private val multiPage = HistoryScreenModel.State( searchQuery = null, list = listOf(HistoryUiModelExamples.headerToday) .asSequence() .plus(HistoryUiModelExamples.items().take(3)) .plus(HistoryUiModelExamples.header { it.minus(1, ChronoUnit.DAYS) }) .plus(HistoryUiModelExamples.items().take(1)) .plus(HistoryUiModelExamples.header { it.minus(2, ChronoUnit.DAYS) }) .plus(HistoryUiModelExamples.items().take(7)) .toList(), dialog = null, ) private val shortRecent = HistoryScreenModel.State( searchQuery = null, list = listOf( HistoryUiModelExamples.headerToday, HistoryUiModelExamples.items().first(), ), dialog = null, ) private val shortFuture = HistoryScreenModel.State( searchQuery = null, list = listOf( HistoryUiModelExamples.headerTomorrow, HistoryUiModelExamples.items().first(), ), dialog = null, ) private val empty = HistoryScreenModel.State( searchQuery = null, list = listOf(), dialog = null, ) private val loadingWithSearchQuery = HistoryScreenModel.State( searchQuery = "Example Search Query", ) private val loading = HistoryScreenModel.State( searchQuery = null, list = null, dialog = null, ) override val values: Sequence = sequenceOf( multiPage, shortRecent, shortFuture, empty, loadingWithSearchQuery, loading, ) private object HistoryUiModelExamples { val headerToday = header() val headerTomorrow = HistoryUiModel.Header(LocalDate.now().plusDays(1)) fun header(instantBuilder: (Instant) -> Instant = { it }) = HistoryUiModel.Header(LocalDate.from(instantBuilder(Instant.now()))) fun items() = sequence { var count = 1 while (true) { yield(randItem { it.copy(title = "Example Title $count") }) count += 1 } } fun randItem(historyBuilder: (HistoryWithRelations) -> HistoryWithRelations = { it }) = HistoryUiModel.Item( historyBuilder( HistoryWithRelations( id = Random.nextLong(), chapterId = Random.nextLong(), mangaId = Random.nextLong(), title = "Test Title", chapterNumber = Random.nextDouble(), readAt = Date.from(Instant.now()), readDuration = Random.nextLong(), coverData = MangaCover( mangaId = Random.nextLong(), sourceId = Random.nextLong(), isMangaFavorite = Random.nextBoolean(), url = "https://example.com/cover.png", lastModified = Random.nextLong(), ), ), ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt ================================================ package eu.kanade.presentation.history.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.material3.AlertDialog import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun HistoryDeleteDialog( onDismissRequest: () -> Unit, onDelete: (Boolean) -> Unit, ) { var removeEverything by remember { mutableStateOf(false) } AlertDialog( title = { Text(text = stringResource(MR.strings.action_remove)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Text(text = stringResource(MR.strings.dialog_with_checkbox_remove_description)) LabeledCheckbox( label = stringResource(MR.strings.dialog_with_checkbox_reset), checked = removeEverything, onCheckedChange = { removeEverything = it }, ) } }, onDismissRequest = onDismissRequest, confirmButton = { TextButton(onClick = { onDelete(removeEverything) onDismissRequest() }) { Text(text = stringResource(MR.strings.action_remove)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } @Composable fun HistoryDeleteAllDialog( onDismissRequest: () -> Unit, onDelete: () -> Unit, ) { AlertDialog( title = { Text(text = stringResource(MR.strings.action_remove_everything)) }, text = { Text(text = stringResource(MR.strings.clear_history_confirmation)) }, onDismissRequest = onDismissRequest, confirmButton = { TextButton(onClick = { onDelete() onDismissRequest() }) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } @PreviewLightDark @Composable private fun HistoryDeleteDialogPreview() { TachiyomiPreviewTheme { HistoryDeleteDialog( onDismissRequest = {}, onDelete = {}, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt ================================================ package eu.kanade.presentation.history.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.FavoriteBorder import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.tachiyomi.util.lang.toTimestampString import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource private val HistoryItemHeight = 96.dp @Composable fun HistoryItem( history: HistoryWithRelations, onClickCover: () -> Unit, onClickResume: () -> Unit, onClickDelete: () -> Unit, onClickFavorite: () -> Unit, modifier: Modifier = Modifier, ) { Row( modifier = modifier .clickable(onClick = onClickResume) .height(HistoryItemHeight) .padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small), verticalAlignment = Alignment.CenterVertically, ) { MangaCover.Book( modifier = Modifier.fillMaxHeight(), data = history.coverData, onClick = onClickCover, ) Column( modifier = Modifier .weight(1f) .padding(start = MaterialTheme.padding.medium, end = MaterialTheme.padding.small), ) { val textStyle = MaterialTheme.typography.bodyMedium Text( text = history.title, fontWeight = FontWeight.SemiBold, maxLines = 2, overflow = TextOverflow.Ellipsis, style = textStyle, ) val readAt = remember { history.readAt?.toTimestampString() ?: "" } Text( text = if (history.chapterNumber > -1) { stringResource( MR.strings.recent_manga_time, formatChapterNumber(history.chapterNumber), readAt, ) } else { readAt }, modifier = Modifier.padding(top = 4.dp), style = textStyle, ) } if (!history.coverData.isMangaFavorite) { IconButton(onClick = onClickFavorite) { Icon( imageVector = Icons.Outlined.FavoriteBorder, contentDescription = stringResource(MR.strings.add_to_library), tint = MaterialTheme.colorScheme.onSurface, ) } } IconButton(onClick = onClickDelete) { Icon( imageVector = Icons.Outlined.Delete, contentDescription = stringResource(MR.strings.action_delete), tint = MaterialTheme.colorScheme.onSurface, ) } } } @PreviewLightDark @Composable private fun HistoryItemPreviews( @PreviewParameter(HistoryWithRelationsProvider::class) historyWithRelations: HistoryWithRelations, ) { TachiyomiPreviewTheme { Surface { HistoryItem( history = historyWithRelations, onClickCover = {}, onClickResume = {}, onClickDelete = {}, onClickFavorite = {}, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/history/components/HistoryWithRelationsProvider.kt ================================================ package eu.kanade.presentation.history.components import androidx.compose.ui.tooling.preview.PreviewParameterProvider import tachiyomi.domain.history.model.HistoryWithRelations import java.util.Date internal class HistoryWithRelationsProvider : PreviewParameterProvider { private val simple = HistoryWithRelations( id = 1L, chapterId = 2L, mangaId = 3L, title = "Test Title", chapterNumber = 10.2, readAt = Date(1697247357L), readDuration = 123L, coverData = tachiyomi.domain.manga.model.MangaCover( mangaId = 3L, sourceId = 4L, isMangaFavorite = false, url = "https://example.com/cover.png", lastModified = 5L, ), ) private val historyWithoutReadAt = HistoryWithRelations( id = 1L, chapterId = 2L, mangaId = 3L, title = "Test Title", chapterNumber = 10.2, readAt = null, readDuration = 123L, coverData = tachiyomi.domain.manga.model.MangaCover( mangaId = 3L, sourceId = 4L, isMangaFavorite = false, url = "https://example.com/cover.png", lastModified = 5L, ), ) private val historyWithNegativeChapterNumber = HistoryWithRelations( id = 1L, chapterId = 2L, mangaId = 3L, title = "Test Title", chapterNumber = -2.0, readAt = Date(1697247357L), readDuration = 123L, coverData = tachiyomi.domain.manga.model.MangaCover( mangaId = 3L, sourceId = 4L, isMangaFavorite = false, url = "https://example.com/cover.png", lastModified = 5L, ), ) override val values: Sequence get() = sequenceOf(simple, historyWithoutReadAt, historyWithNegativeChapterNumber) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/DeleteLibraryMangaDialog.kt ================================================ package eu.kanade.presentation.library import androidx.compose.foundation.layout.Column import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import dev.icerock.moko.resources.StringResource import tachiyomi.core.common.preference.CheckboxState import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.i18n.stringResource @Composable fun DeleteLibraryMangaDialog( containsLocalManga: Boolean, onDismissRequest: () -> Unit, onConfirm: (Boolean, Boolean) -> Unit, ) { var list by remember { mutableStateOf( buildList> { add(CheckboxState.State.None(MR.strings.manga_from_library)) if (!containsLocalManga) { add(CheckboxState.State.None(MR.strings.downloaded_chapters)) } }, ) } AlertDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton( enabled = list.any { it.isChecked }, onClick = { onDismissRequest() onConfirm( list[0].isChecked, list.getOrElse(1) { CheckboxState.State.None(0) }.isChecked, ) }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, title = { Text(text = stringResource(MR.strings.action_remove)) }, text = { Column { list.forEach { state -> LabeledCheckbox( label = stringResource(state.value), checked = state.isChecked, onCheckedChange = { val index = list.indexOf(state) if (index != -1) { val mutableList = list.toMutableList() mutableList[index] = state.next() as CheckboxState.State list = mutableList.toList() } }, ) } } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt ================================================ package eu.kanade.presentation.library import android.content.res.Configuration import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Refresh import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.ui.library.LibrarySettingsScreenModel import eu.kanade.tachiyomi.util.system.isReleaseBuildType import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.common.preference.TriState import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibrarySort import tachiyomi.domain.library.model.sort import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.BaseSortItem import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable fun LibrarySettingsDialog( onDismissRequest: () -> Unit, screenModel: LibrarySettingsScreenModel, category: Category?, ) { TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( stringResource(MR.strings.action_filter), stringResource(MR.strings.action_sort), stringResource(MR.strings.action_display), ), ) { page -> Column( modifier = Modifier .padding(vertical = TabbedDialogPaddings.Vertical) .verticalScroll(rememberScrollState()), ) { when (page) { 0 -> FilterPage( screenModel = screenModel, ) 1 -> SortPage( category = category, screenModel = screenModel, ) 2 -> DisplayPage( screenModel = screenModel, ) } } } } @Composable private fun ColumnScope.FilterPage( screenModel: LibrarySettingsScreenModel, ) { val filterDownloaded by screenModel.libraryPreferences.filterDownloaded.collectAsState() val downloadedOnly by screenModel.preferences.downloadedOnly.collectAsState() val autoUpdateMangaRestrictions by screenModel.libraryPreferences.autoUpdateMangaRestrictions.collectAsState() TriStateItem( label = stringResource(MR.strings.label_downloaded), state = if (downloadedOnly) { TriState.ENABLED_IS } else { filterDownloaded }, enabled = !downloadedOnly, onClick = { screenModel.toggleFilter(LibraryPreferences::filterDownloaded) }, ) val filterUnread by screenModel.libraryPreferences.filterUnread.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_unread), state = filterUnread, onClick = { screenModel.toggleFilter(LibraryPreferences::filterUnread) }, ) val filterStarted by screenModel.libraryPreferences.filterStarted.collectAsState() TriStateItem( label = stringResource(MR.strings.label_started), state = filterStarted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterStarted) }, ) val filterBookmarked by screenModel.libraryPreferences.filterBookmarked.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_bookmarked), state = filterBookmarked, onClick = { screenModel.toggleFilter(LibraryPreferences::filterBookmarked) }, ) val filterCompleted by screenModel.libraryPreferences.filterCompleted.collectAsState() TriStateItem( label = stringResource(MR.strings.completed), state = filterCompleted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterCompleted) }, ) // TODO: re-enable when custom intervals are ready for stable if ((!isReleaseBuildType) && LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in autoUpdateMangaRestrictions) { val filterIntervalCustom by screenModel.libraryPreferences.filterIntervalCustom.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_interval_custom), state = filterIntervalCustom, onClick = { screenModel.toggleFilter(LibraryPreferences::filterIntervalCustom) }, ) } val trackers by screenModel.trackersFlow.collectAsState() when (trackers.size) { 0 -> { // No trackers } 1 -> { val service = trackers[0] val filterTracker by screenModel.libraryPreferences.filterTracking(service.id.toInt()).collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_tracked), state = filterTracker, onClick = { screenModel.toggleTracker(service.id.toInt()) }, ) } else -> { HeadingItem(MR.strings.action_filter_tracked) trackers.map { service -> val filterTracker by screenModel.libraryPreferences.filterTracking(service.id.toInt()).collectAsState() TriStateItem( label = service.name, state = filterTracker, onClick = { screenModel.toggleTracker(service.id.toInt()) }, ) } } } } @Composable private fun ColumnScope.SortPage( category: Category?, screenModel: LibrarySettingsScreenModel, ) { val trackers by screenModel.trackersFlow.collectAsState() val sortingMode = category.sort.type val sortDescending = !category.sort.isAscending val options = remember(trackers.isEmpty()) { val trackerMeanPair = if (trackers.isNotEmpty()) { MR.strings.action_sort_tracker_score to LibrarySort.Type.TrackerMean } else { null } listOfNotNull( MR.strings.action_sort_alpha to LibrarySort.Type.Alphabetical, MR.strings.action_sort_total to LibrarySort.Type.TotalChapters, MR.strings.action_sort_last_read to LibrarySort.Type.LastRead, MR.strings.action_sort_last_manga_update to LibrarySort.Type.LastUpdate, MR.strings.action_sort_unread_count to LibrarySort.Type.UnreadCount, MR.strings.action_sort_latest_chapter to LibrarySort.Type.LatestChapter, MR.strings.action_sort_chapter_fetch_date to LibrarySort.Type.ChapterFetchDate, MR.strings.action_sort_date_added to LibrarySort.Type.DateAdded, trackerMeanPair, MR.strings.action_sort_random to LibrarySort.Type.Random, ) } options.map { (titleRes, mode) -> if (mode == LibrarySort.Type.Random) { BaseSortItem( label = stringResource(titleRes), icon = Icons.Default.Refresh .takeIf { sortingMode == LibrarySort.Type.Random }, onClick = { screenModel.setSort(category, mode, LibrarySort.Direction.Ascending) }, ) return@map } SortItem( label = stringResource(titleRes), sortDescending = sortDescending.takeIf { sortingMode == mode }, onClick = { val isTogglingDirection = sortingMode == mode val direction = when { isTogglingDirection -> if (sortDescending) { LibrarySort.Direction.Ascending } else { LibrarySort.Direction.Descending } else -> if (sortDescending) { LibrarySort.Direction.Descending } else { LibrarySort.Direction.Ascending } } screenModel.setSort(category, mode, direction) }, ) } } private val displayModes = listOf( MR.strings.action_display_grid to LibraryDisplayMode.CompactGrid, MR.strings.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid, MR.strings.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid, MR.strings.action_display_list to LibraryDisplayMode.List, ) @Composable private fun ColumnScope.DisplayPage( screenModel: LibrarySettingsScreenModel, ) { val displayMode by screenModel.libraryPreferences.displayMode.collectAsState() SettingsChipRow(MR.strings.action_display_mode) { displayModes.map { (titleRes, mode) -> FilterChip( selected = displayMode == mode, onClick = { screenModel.setDisplayMode(mode) }, label = { Text(stringResource(titleRes)) }, ) } } if (displayMode != LibraryDisplayMode.List) { val configuration = LocalConfiguration.current val columnPreference = remember { if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { screenModel.libraryPreferences.landscapeColumns } else { screenModel.libraryPreferences.portraitColumns } } val columns by columnPreference.collectAsState() SliderItem( value = columns, valueRange = 0..10, label = stringResource(MR.strings.pref_library_columns), valueString = if (columns > 0) { columns.toString() } else { stringResource(MR.strings.label_auto) }, onChange = columnPreference::set, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) } HeadingItem(MR.strings.overlay_header) CheckboxItem( label = stringResource(MR.strings.action_display_download_badge), pref = screenModel.libraryPreferences.downloadBadge, ) CheckboxItem( label = stringResource(MR.strings.action_display_unread_badge), pref = screenModel.libraryPreferences.unreadBadge, ) CheckboxItem( label = stringResource(MR.strings.action_display_local_badge), pref = screenModel.libraryPreferences.localBadge, ) CheckboxItem( label = stringResource(MR.strings.action_display_language_badge), pref = screenModel.libraryPreferences.languageBadge, ) CheckboxItem( label = stringResource(MR.strings.action_display_show_continue_reading_button), pref = screenModel.libraryPreferences.showContinueReadingButton, ) HeadingItem(MR.strings.tabs_header) CheckboxItem( label = stringResource(MR.strings.action_display_show_tabs), pref = screenModel.libraryPreferences.categoryTabs, ) CheckboxItem( label = stringResource(MR.strings.action_display_show_number_of_items), pref = screenModel.libraryPreferences.categoryNumberOfItems, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/CommonMangaItem.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.FilledIconButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shadow import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.kanade.presentation.manga.components.MangaCover import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.BadgeGroup import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground import tachiyomi.domain.manga.model.MangaCover as MangaCoverModel object CommonMangaItemDefaults { val GridHorizontalSpacer = 4.dp val GridVerticalSpacer = 4.dp @Suppress("ConstPropertyName") const val BrowseFavoriteCoverAlpha = 0.34f } private val ContinueReadingButtonSizeSmall = 28.dp private val ContinueReadingButtonSizeLarge = 32.dp private val ContinueReadingButtonIconSizeSmall = 16.dp private val ContinueReadingButtonIconSizeLarge = 20.dp private val ContinueReadingButtonGridPadding = 6.dp private val ContinueReadingButtonListSpacing = 8.dp private const val GRID_SELECTED_COVER_ALPHA = 0.76f /** * Layout of grid list item with title overlaying the cover. * Accepts null [title] for a cover-only view. */ @Composable fun MangaCompactGridItem( coverData: MangaCoverModel, onClick: () -> Unit, onLongClick: () -> Unit, isSelected: Boolean = false, title: String? = null, onClickContinueReading: (() -> Unit)? = null, coverAlpha: Float = 1f, coverBadgeStart: @Composable (RowScope.() -> Unit)? = null, coverBadgeEnd: @Composable (RowScope.() -> Unit)? = null, ) { GridItemSelectable( isSelected = isSelected, onClick = onClick, onLongClick = onLongClick, ) { MangaGridCover( cover = { MangaCover.Book( modifier = Modifier .fillMaxWidth() .alpha(if (isSelected) GRID_SELECTED_COVER_ALPHA else coverAlpha), data = coverData, ) }, badgesStart = coverBadgeStart, badgesEnd = coverBadgeEnd, content = { if (title != null) { CoverTextOverlay( title = title, onClickContinueReading = onClickContinueReading, ) } else if (onClickContinueReading != null) { ContinueReadingButton( size = ContinueReadingButtonSizeLarge, iconSize = ContinueReadingButtonIconSizeLarge, onClick = onClickContinueReading, modifier = Modifier .padding(ContinueReadingButtonGridPadding) .align(Alignment.BottomEnd), ) } }, ) } } /** * Title overlay for [MangaCompactGridItem] */ @Composable private fun BoxScope.CoverTextOverlay( title: String, onClickContinueReading: (() -> Unit)? = null, ) { Box( modifier = Modifier .clip(RoundedCornerShape(bottomStart = 4.dp, bottomEnd = 4.dp)) .background( Brush.verticalGradient( 0f to Color.Transparent, 1f to Color(0xAA000000), ), ) .fillMaxHeight(0.33f) .fillMaxWidth() .align(Alignment.BottomCenter), ) Row( modifier = Modifier.align(Alignment.BottomStart), verticalAlignment = Alignment.Bottom, ) { GridItemTitle( modifier = Modifier .weight(1f) .padding(8.dp), title = title, style = MaterialTheme.typography.titleSmall.copy( color = Color.White, shadow = Shadow( color = Color.Black, blurRadius = 4f, ), ), minLines = 1, ) if (onClickContinueReading != null) { ContinueReadingButton( size = ContinueReadingButtonSizeSmall, iconSize = ContinueReadingButtonIconSizeSmall, onClick = onClickContinueReading, modifier = Modifier.padding( end = ContinueReadingButtonGridPadding, bottom = ContinueReadingButtonGridPadding, ), ) } } } /** * Layout of grid list item with title below the cover. */ @Composable fun MangaComfortableGridItem( coverData: MangaCoverModel, title: String, onClick: () -> Unit, onLongClick: () -> Unit, isSelected: Boolean = false, titleMaxLines: Int = 2, coverAlpha: Float = 1f, coverBadgeStart: (@Composable RowScope.() -> Unit)? = null, coverBadgeEnd: (@Composable RowScope.() -> Unit)? = null, onClickContinueReading: (() -> Unit)? = null, ) { GridItemSelectable( isSelected = isSelected, onClick = onClick, onLongClick = onLongClick, ) { Column { MangaGridCover( cover = { MangaCover.Book( modifier = Modifier .fillMaxWidth() .alpha(if (isSelected) GRID_SELECTED_COVER_ALPHA else coverAlpha), data = coverData, ) }, badgesStart = coverBadgeStart, badgesEnd = coverBadgeEnd, content = { if (onClickContinueReading != null) { ContinueReadingButton( size = ContinueReadingButtonSizeLarge, iconSize = ContinueReadingButtonIconSizeLarge, onClick = onClickContinueReading, modifier = Modifier .padding(ContinueReadingButtonGridPadding) .align(Alignment.BottomEnd), ) } }, ) GridItemTitle( modifier = Modifier.padding(4.dp), title = title, style = MaterialTheme.typography.titleSmall, minLines = 2, maxLines = titleMaxLines, ) } } } /** * Common cover layout to add contents to be drawn on top of the cover. */ @Composable private fun MangaGridCover( modifier: Modifier = Modifier, cover: @Composable BoxScope.() -> Unit = {}, badgesStart: (@Composable RowScope.() -> Unit)? = null, badgesEnd: (@Composable RowScope.() -> Unit)? = null, content: @Composable (BoxScope.() -> Unit)? = null, ) { Box( modifier = modifier .fillMaxWidth() .aspectRatio(MangaCover.Book.ratio), ) { cover() content?.invoke(this) if (badgesStart != null) { BadgeGroup( modifier = Modifier .padding(4.dp) .align(Alignment.TopStart), content = badgesStart, ) } if (badgesEnd != null) { BadgeGroup( modifier = Modifier .padding(4.dp) .align(Alignment.TopEnd), content = badgesEnd, ) } } } @Composable private fun GridItemTitle( title: String, style: TextStyle, minLines: Int, modifier: Modifier = Modifier, maxLines: Int = 2, ) { Text( modifier = modifier, text = title, fontSize = 12.sp, lineHeight = 18.sp, minLines = minLines, maxLines = maxLines, overflow = TextOverflow.Ellipsis, style = style, ) } /** * Wrapper for grid items to handle selection state, click and long click. */ @Composable private fun GridItemSelectable( isSelected: Boolean, onClick: () -> Unit, onLongClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable () -> Unit, ) { Box( modifier = modifier .clip(MaterialTheme.shapes.small) .combinedClickable( onClick = onClick, onLongClick = onLongClick, ) .selectedOutline(isSelected = isSelected, color = MaterialTheme.colorScheme.secondary) .padding(4.dp), ) { val contentColor = if (isSelected) { MaterialTheme.colorScheme.onSecondary } else { LocalContentColor.current } CompositionLocalProvider(LocalContentColor provides contentColor) { content() } } } /** * @see GridItemSelectable */ private fun Modifier.selectedOutline( isSelected: Boolean, color: Color, ) = drawBehind { if (isSelected) drawRect(color = color) } /** * Layout of list item. */ @Composable fun MangaListItem( coverData: MangaCoverModel, title: String, onClick: () -> Unit, onLongClick: () -> Unit, badge: @Composable (RowScope.() -> Unit), isSelected: Boolean = false, coverAlpha: Float = 1f, onClickContinueReading: (() -> Unit)? = null, ) { Row( modifier = Modifier .selectedBackground(isSelected) .height(56.dp) .combinedClickable( onClick = onClick, onLongClick = onLongClick, ) .padding(horizontal = 16.dp, vertical = 8.dp), verticalAlignment = Alignment.CenterVertically, ) { MangaCover.Square( modifier = Modifier .fillMaxHeight() .alpha(coverAlpha), data = coverData, ) Text( text = title, modifier = Modifier .padding(horizontal = 16.dp) .weight(1f), maxLines = 2, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) BadgeGroup(content = badge) if (onClickContinueReading != null) { ContinueReadingButton( size = ContinueReadingButtonSizeSmall, iconSize = ContinueReadingButtonIconSizeSmall, onClick = onClickContinueReading, modifier = Modifier.padding(start = ContinueReadingButtonListSpacing), ) } } } @Composable private fun ContinueReadingButton( size: Dp, iconSize: Dp, onClick: () -> Unit, modifier: Modifier = Modifier, ) { Box(modifier = modifier) { FilledIconButton( onClick = onClick, shape = MaterialTheme.shapes.small, colors = IconButtonDefaults.filledIconButtonColors( containerColor = MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.9f), contentColor = contentColorFor(MaterialTheme.colorScheme.primaryContainer), ), modifier = Modifier.size(size), ) { Icon( imageVector = Icons.Filled.PlayArrow, contentDescription = stringResource(MR.strings.action_resume), modifier = Modifier.size(iconSize), ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/GlobalSearchItem.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.zIndex import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable internal fun GlobalSearchItem( searchQuery: String, onClick: () -> Unit, modifier: Modifier = Modifier, ) { TextButton( modifier = modifier, onClick = onClick, ) { Text( text = stringResource(MR.strings.action_global_search_query, searchQuery), modifier = Modifier.zIndex(99f), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LazyLibraryGrid.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import tachiyomi.presentation.core.components.FastScrollLazyVerticalGrid import tachiyomi.presentation.core.util.plus @Composable internal fun LazyLibraryGrid( modifier: Modifier = Modifier, columns: Int, contentPadding: PaddingValues, content: LazyGridScope.() -> Unit, ) { FastScrollLazyVerticalGrid( columns = if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns), modifier = modifier, contentPadding = contentPadding + PaddingValues(8.dp), verticalArrangement = Arrangement.spacedBy(CommonMangaItemDefaults.GridVerticalSpacer), horizontalArrangement = Arrangement.spacedBy(CommonMangaItemDefaults.GridHorizontalSpacer), content = content, ) } internal fun LazyGridScope.globalSearchItem( searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) { if (!searchQuery.isNullOrEmpty()) { item( span = { GridItemSpan(maxLineSpan) }, contentType = { "library_global_search_item" }, ) { GlobalSearchItem( searchQuery = searchQuery, onClick = onGlobalSearchClicked, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.Column import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Folder import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.presentation.core.components.Badge @Composable internal fun DownloadsBadge(count: Long) { if (count > 0) { Badge( text = "$count", color = MaterialTheme.colorScheme.tertiary, textColor = MaterialTheme.colorScheme.onTertiary, ) } } @Composable internal fun UnreadBadge(count: Long) { if (count > 0) { Badge(text = "$count") } } @Composable internal fun LanguageBadge( isLocal: Boolean, sourceLanguage: String, ) { if (isLocal) { Badge( imageVector = Icons.Outlined.Folder, color = MaterialTheme.colorScheme.tertiary, iconColor = MaterialTheme.colorScheme.onTertiary, ) } else if (sourceLanguage.isNotEmpty()) { Badge( text = sourceLanguage.uppercase(), color = MaterialTheme.colorScheme.tertiary, textColor = MaterialTheme.colorScheme.onTertiary, ) } } @PreviewLightDark @Composable private fun BadgePreview() { TachiyomiPreviewTheme { Column { DownloadsBadge(count = 10) UnreadBadge(count = 10) LanguageBadge(isLocal = true, sourceLanguage = "EN") LanguageBadge(isLocal = false, sourceLanguage = "EN") } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryComfortableGrid.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.grid.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.tachiyomi.ui.library.LibraryItem import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.MangaCover @Composable internal fun LibraryComfortableGrid( items: List, columns: Int, contentPadding: PaddingValues, selection: Set, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) { LazyLibraryGrid( modifier = Modifier.fillMaxSize(), columns = columns, contentPadding = contentPadding, ) { globalSearchItem(searchQuery, onGlobalSearchClicked) items( items = items, contentType = { "library_comfortable_grid_item" }, ) { libraryItem -> val manga = libraryItem.libraryManga.manga MangaComfortableGridItem( isSelected = manga.id in selection, title = manga.title, coverData = MangaCover( mangaId = manga.id, sourceId = manga.source, isMangaFavorite = manga.favorite, url = manga.thumbnailUrl, lastModified = manga.coverLastModified, ), coverBadgeStart = { DownloadsBadge(count = libraryItem.downloadCount) UnreadBadge(count = libraryItem.unreadCount) }, coverBadgeEnd = { LanguageBadge( isLocal = libraryItem.isLocal, sourceLanguage = libraryItem.sourceLanguage, ) }, onLongClick = { onLongClick(libraryItem.libraryManga) }, onClick = { onClick(libraryItem.libraryManga) }, onClickContinueReading = if (onClickContinueReading != null && libraryItem.unreadCount > 0) { { onClickContinueReading(libraryItem.libraryManga) } } else { null }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryCompactGrid.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.grid.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.tachiyomi.ui.library.LibraryItem import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.MangaCover @Composable internal fun LibraryCompactGrid( items: List, showTitle: Boolean, columns: Int, contentPadding: PaddingValues, selection: Set, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) { LazyLibraryGrid( modifier = Modifier.fillMaxSize(), columns = columns, contentPadding = contentPadding, ) { globalSearchItem(searchQuery, onGlobalSearchClicked) items( items = items, contentType = { "library_compact_grid_item" }, ) { libraryItem -> val manga = libraryItem.libraryManga.manga MangaCompactGridItem( isSelected = manga.id in selection, title = manga.title.takeIf { showTitle }, coverData = MangaCover( mangaId = manga.id, sourceId = manga.source, isMangaFavorite = manga.favorite, url = manga.thumbnailUrl, lastModified = manga.coverLastModified, ), coverBadgeStart = { DownloadsBadge(count = libraryItem.downloadCount) UnreadBadge(count = libraryItem.unreadCount) }, coverBadgeEnd = { LanguageBadge( isLocal = libraryItem.isLocal, sourceLanguage = libraryItem.sourceLanguage, ) }, onLongClick = { onLongClick(libraryItem.libraryManga) }, onClick = { onClick(libraryItem.libraryManga) }, onClickContinueReading = if (onClickContinueReading != null && libraryItem.unreadCount > 0) { { onClickContinueReading(libraryItem.libraryManga) } } else { null }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import eu.kanade.core.preference.PreferenceMutableState import eu.kanade.tachiyomi.ui.library.LibraryItem import kotlinx.coroutines.delay import kotlinx.coroutines.launch import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryManga import tachiyomi.presentation.core.components.material.PullRefresh import kotlin.time.Duration.Companion.seconds @Composable fun LibraryContent( categories: List, searchQuery: String?, selection: Set, contentPadding: PaddingValues, currentPage: Int, hasActiveFilters: Boolean, showPageTabs: Boolean, onChangeCurrentPage: (Int) -> Unit, onClickManga: (Long) -> Unit, onContinueReadingClicked: ((LibraryManga) -> Unit)?, onToggleSelection: (Category, LibraryManga) -> Unit, onToggleRangeSelection: (Category, LibraryManga) -> Unit, onRefresh: () -> Boolean, onGlobalSearchClicked: () -> Unit, getItemCountForCategory: (Category) -> Int?, getDisplayMode: (Int) -> PreferenceMutableState, getColumnsForOrientation: (Boolean) -> PreferenceMutableState, getItemsForCategory: (Category) -> List, ) { Column( modifier = Modifier.padding( top = contentPadding.calculateTopPadding(), start = contentPadding.calculateStartPadding(LocalLayoutDirection.current), end = contentPadding.calculateEndPadding(LocalLayoutDirection.current), ), ) { val pagerState = rememberPagerState(currentPage) { categories.size } val scope = rememberCoroutineScope() var isRefreshing by remember(pagerState.currentPage) { mutableStateOf(false) } if (showPageTabs && categories.isNotEmpty() && (categories.size > 1 || !categories.first().isSystemCategory)) { LaunchedEffect(categories) { if (categories.size <= pagerState.currentPage) { pagerState.scrollToPage(categories.size - 1) } } LibraryTabs( categories = categories, pagerState = pagerState, getItemCountForCategory = getItemCountForCategory, onTabItemClick = { scope.launch { pagerState.animateScrollToPage(it) } }, ) } PullRefresh( refreshing = isRefreshing, enabled = selection.isEmpty(), onRefresh = { val started = onRefresh() if (!started) return@PullRefresh scope.launch { // Fake refresh status but hide it after a second as it's a long running task isRefreshing = true delay(1.seconds) isRefreshing = false } }, ) { LibraryPager( state = pagerState, contentPadding = PaddingValues(bottom = contentPadding.calculateBottomPadding()), hasActiveFilters = hasActiveFilters, selection = selection, searchQuery = searchQuery, onGlobalSearchClicked = onGlobalSearchClicked, getCategoryForPage = { page -> categories[page] }, getDisplayMode = getDisplayMode, getColumnsForOrientation = getColumnsForOrientation, getItemsForCategory = getItemsForCategory, onClickManga = { category, manga -> if (selection.isNotEmpty()) { onToggleSelection(category, manga) } else { onClickManga(manga.manga.id) } }, onLongClickManga = onToggleRangeSelection, onClickContinueReading = onContinueReadingClicked, ) } LaunchedEffect(pagerState.currentPage) { onChangeCurrentPage(pagerState.currentPage) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryList.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.ui.library.LibraryItem import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.MangaCover import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.util.plus @Composable internal fun LibraryList( items: List, contentPadding: PaddingValues, selection: Set, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, searchQuery: String?, onGlobalSearchClicked: () -> Unit, ) { FastScrollLazyColumn( modifier = Modifier.fillMaxSize(), contentPadding = contentPadding + PaddingValues(vertical = 8.dp), ) { item { if (!searchQuery.isNullOrEmpty()) { GlobalSearchItem( modifier = Modifier.fillMaxWidth(), searchQuery = searchQuery, onClick = onGlobalSearchClicked, ) } } items( items = items, contentType = { "library_list_item" }, ) { libraryItem -> val manga = libraryItem.libraryManga.manga MangaListItem( isSelected = manga.id in selection, title = manga.title, coverData = MangaCover( mangaId = manga.id, sourceId = manga.source, isMangaFavorite = manga.favorite, url = manga.thumbnailUrl, lastModified = manga.coverLastModified, ), badge = { DownloadsBadge(count = libraryItem.downloadCount) UnreadBadge(count = libraryItem.unreadCount) LanguageBadge( isLocal = libraryItem.isLocal, sourceLanguage = libraryItem.sourceLanguage, ) }, onLongClick = { onLongClick(libraryItem.libraryManga) }, onClick = { onClick(libraryItem.libraryManga) }, onClickContinueReading = if (onClickContinueReading != null && libraryItem.unreadCount > 0) { { onClickContinueReading(libraryItem.libraryManga) } } else { null }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt ================================================ package eu.kanade.presentation.library.components import android.content.res.Configuration import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.dp import eu.kanade.core.preference.PreferenceMutableState import eu.kanade.tachiyomi.ui.library.LibraryItem import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryManga import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.plus @Composable fun LibraryPager( state: PagerState, contentPadding: PaddingValues, hasActiveFilters: Boolean, selection: Set, searchQuery: String?, onGlobalSearchClicked: () -> Unit, getCategoryForPage: (Int) -> Category, getDisplayMode: (Int) -> PreferenceMutableState, getColumnsForOrientation: (Boolean) -> PreferenceMutableState, getItemsForCategory: (Category) -> List, onClickManga: (Category, LibraryManga) -> Unit, onLongClickManga: (Category, LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, ) { HorizontalPager( modifier = Modifier.fillMaxSize(), state = state, verticalAlignment = Alignment.Top, ) { page -> if (page !in ((state.currentPage - 1)..(state.currentPage + 1))) { // To make sure only one offscreen page is being composed return@HorizontalPager } val category = getCategoryForPage(page) val items = getItemsForCategory(category) if (items.isEmpty()) { LibraryPagerEmptyScreen( searchQuery = searchQuery, hasActiveFilters = hasActiveFilters, contentPadding = contentPadding, onGlobalSearchClicked = onGlobalSearchClicked, ) return@HorizontalPager } val displayMode by getDisplayMode(page) val columns by if (displayMode != LibraryDisplayMode.List) { val configuration = LocalConfiguration.current val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE remember(isLandscape) { getColumnsForOrientation(isLandscape) } } else { remember { mutableIntStateOf(0) } } val onClickManga: (LibraryManga) -> Unit = { onClickManga(category, it) } val onLongClickManga: (LibraryManga) -> Unit = { onLongClickManga(category, it) } when (displayMode) { LibraryDisplayMode.List -> { LibraryList( items = items, contentPadding = contentPadding, selection = selection, onClick = onClickManga, onLongClick = onLongClickManga, onClickContinueReading = onClickContinueReading, searchQuery = searchQuery, onGlobalSearchClicked = onGlobalSearchClicked, ) } LibraryDisplayMode.CompactGrid, LibraryDisplayMode.CoverOnlyGrid -> { LibraryCompactGrid( items = items, showTitle = displayMode is LibraryDisplayMode.CompactGrid, columns = columns, contentPadding = contentPadding, selection = selection, onClick = onClickManga, onLongClick = onLongClickManga, onClickContinueReading = onClickContinueReading, searchQuery = searchQuery, onGlobalSearchClicked = onGlobalSearchClicked, ) } LibraryDisplayMode.ComfortableGrid -> { LibraryComfortableGrid( items = items, columns = columns, contentPadding = contentPadding, selection = selection, onClick = onClickManga, onLongClick = onLongClickManga, onClickContinueReading = onClickContinueReading, searchQuery = searchQuery, onGlobalSearchClicked = onGlobalSearchClicked, ) } } } } @Composable private fun LibraryPagerEmptyScreen( searchQuery: String?, hasActiveFilters: Boolean, contentPadding: PaddingValues, onGlobalSearchClicked: () -> Unit, ) { val msg = when { !searchQuery.isNullOrEmpty() -> MR.strings.no_results_found hasActiveFilters -> MR.strings.error_no_match else -> MR.strings.information_no_manga_category } Column( modifier = Modifier .padding(contentPadding + PaddingValues(8.dp)) .fillMaxSize() .verticalScroll(rememberScrollState()), ) { if (!searchQuery.isNullOrEmpty()) { GlobalSearchItem( modifier = Modifier .fillMaxWidth() .align(Alignment.CenterHorizontally), searchQuery = searchQuery, onClick = onGlobalSearchClicked, ) } EmptyScreen( stringRes = msg, modifier = Modifier.weight(1f), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.pager.PagerState import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PrimaryScrollableTabRow import androidx.compose.material3.Tab import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import eu.kanade.presentation.category.visualName import tachiyomi.domain.category.model.Category import tachiyomi.presentation.core.components.material.TabText @Composable internal fun LibraryTabs( categories: List, pagerState: PagerState, getItemCountForCategory: (Category) -> Int?, onTabItemClick: (Int) -> Unit, ) { val currentPageIndex = pagerState.currentPage.coerceAtMost(categories.lastIndex) Column(modifier = Modifier.zIndex(2f)) { PrimaryScrollableTabRow( selectedTabIndex = currentPageIndex, edgePadding = 0.dp, // TODO: use default when width is fixed upstream // https://issuetracker.google.com/issues/242879624 divider = {}, ) { categories.forEachIndexed { index, category -> Tab( selected = currentPageIndex == index, onClick = { onTabItemClick(index) }, text = { TabText( text = category.visualName, badgeCount = getItemCountForCategory(category), ) }, unselectedContentColor = MaterialTheme.colorScheme.onSurface, ) } } HorizontalDivider() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt ================================================ package eu.kanade.presentation.library.components import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Row import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.FlipToBack import androidx.compose.material.icons.outlined.SelectAll import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.sp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.SearchToolbar import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Pill import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable fun LibraryToolbar( hasActiveFilters: Boolean, selectedCount: Int, title: LibraryToolbarTitle, onClickUnselectAll: () -> Unit, onClickSelectAll: () -> Unit, onClickInvertSelection: () -> Unit, onClickFilter: () -> Unit, onClickRefresh: () -> Unit, onClickGlobalUpdate: () -> Unit, onClickOpenRandomManga: () -> Unit, searchQuery: String?, onSearchQueryChange: (String?) -> Unit, scrollBehavior: TopAppBarScrollBehavior?, ) = when { selectedCount > 0 -> LibrarySelectionToolbar( selectedCount = selectedCount, onClickUnselectAll = onClickUnselectAll, onClickSelectAll = onClickSelectAll, onClickInvertSelection = onClickInvertSelection, ) else -> LibraryRegularToolbar( title = title, hasFilters = hasActiveFilters, searchQuery = searchQuery, onSearchQueryChange = onSearchQueryChange, onClickFilter = onClickFilter, onClickRefresh = onClickRefresh, onClickGlobalUpdate = onClickGlobalUpdate, onClickOpenRandomManga = onClickOpenRandomManga, scrollBehavior = scrollBehavior, ) } @Composable private fun LibraryRegularToolbar( title: LibraryToolbarTitle, hasFilters: Boolean, searchQuery: String?, onSearchQueryChange: (String?) -> Unit, onClickFilter: () -> Unit, onClickRefresh: () -> Unit, onClickGlobalUpdate: () -> Unit, onClickOpenRandomManga: () -> Unit, scrollBehavior: TopAppBarScrollBehavior?, ) { val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f SearchToolbar( titleContent = { Row(verticalAlignment = Alignment.CenterVertically) { Text( text = title.text, maxLines = 1, modifier = Modifier.weight(1f, false), overflow = TextOverflow.Ellipsis, ) if (title.numberOfManga != null) { Pill( text = "${title.numberOfManga}", color = MaterialTheme.colorScheme.onBackground.copy(alpha = pillAlpha), fontSize = 14.sp, ) } } }, searchQuery = searchQuery, onChangeSearchQuery = onSearchQueryChange, actions = { val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = filterTint, onClick = onClickFilter, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_update_library), onClick = onClickGlobalUpdate, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_update_category), onClick = onClickRefresh, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_open_random_manga), onClick = onClickOpenRandomManga, ), ), ) }, scrollBehavior = scrollBehavior, ) } @Composable private fun LibrarySelectionToolbar( selectedCount: Int, onClickUnselectAll: () -> Unit, onClickSelectAll: () -> Unit, onClickInvertSelection: () -> Unit, ) { AppBar( titleContent = { Text(text = "$selectedCount") }, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onClickSelectAll, ), AppBar.Action( title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onClickInvertSelection, ), ), ) }, isActionMode = true, onCancelActionMode = onClickUnselectAll, ) } @Immutable data class LibraryToolbarTitle( val text: String, val numberOfManga: Int? = null, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/ChapterSettingsDialog.kt ================================================ package eu.kanade.presentation.manga import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.PeopleAlt import androidx.compose.material3.AlertDialog import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.manga.model.downloadedFilter import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.common.preference.TriState import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.RadioItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @Composable fun ChapterSettingsDialog( onDismissRequest: () -> Unit, manga: Manga? = null, onDownloadFilterChanged: (TriState) -> Unit, onUnreadFilterChanged: (TriState) -> Unit, onBookmarkedFilterChanged: (TriState) -> Unit, scanlatorFilterActive: Boolean, onScanlatorFilterClicked: (() -> Unit), onSortModeChanged: (Long) -> Unit, onDisplayModeChanged: (Long) -> Unit, onSetAsDefault: (applyToExistingManga: Boolean) -> Unit, onResetToDefault: () -> Unit, ) { var showSetAsDefaultDialog by rememberSaveable { mutableStateOf(false) } if (showSetAsDefaultDialog) { SetAsDefaultDialog( onDismissRequest = { showSetAsDefaultDialog = false }, onConfirmed = onSetAsDefault, ) } val downloadedOnly = remember { Injekt.get().downloadedOnly.get() } TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( stringResource(MR.strings.action_filter), stringResource(MR.strings.action_sort), stringResource(MR.strings.action_display), ), tabOverflowMenuContent = { closeMenu -> DropdownMenuItem( text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) }, onClick = { showSetAsDefaultDialog = true closeMenu() }, ) DropdownMenuItem( text = { Text(stringResource(MR.strings.action_reset)) }, onClick = { onResetToDefault() closeMenu() }, ) }, ) { page -> Column( modifier = Modifier .padding(vertical = TabbedDialogPaddings.Vertical) .verticalScroll(rememberScrollState()), ) { when (page) { 0 -> { FilterPage( downloadFilter = manga?.downloadedFilter ?: TriState.DISABLED, onDownloadFilterChanged = onDownloadFilterChanged .takeUnless { downloadedOnly }, unreadFilter = manga?.unreadFilter ?: TriState.DISABLED, onUnreadFilterChanged = onUnreadFilterChanged, bookmarkedFilter = manga?.bookmarkedFilter ?: TriState.DISABLED, onBookmarkedFilterChanged = onBookmarkedFilterChanged, scanlatorFilterActive = scanlatorFilterActive, onScanlatorFilterClicked = onScanlatorFilterClicked, ) } 1 -> { SortPage( sortingMode = manga?.sorting ?: 0, sortDescending = manga?.sortDescending() ?: false, onItemSelected = onSortModeChanged, ) } 2 -> { DisplayPage( displayMode = manga?.displayMode ?: 0, onItemSelected = onDisplayModeChanged, ) } } } } } @Composable private fun ColumnScope.FilterPage( downloadFilter: TriState, onDownloadFilterChanged: ((TriState) -> Unit)?, unreadFilter: TriState, onUnreadFilterChanged: (TriState) -> Unit, bookmarkedFilter: TriState, onBookmarkedFilterChanged: (TriState) -> Unit, scanlatorFilterActive: Boolean, onScanlatorFilterClicked: (() -> Unit), ) { TriStateItem( label = stringResource(MR.strings.label_downloaded), state = downloadFilter, onClick = onDownloadFilterChanged, ) TriStateItem( label = stringResource(MR.strings.action_filter_unread), state = unreadFilter, onClick = onUnreadFilterChanged, ) TriStateItem( label = stringResource(MR.strings.action_filter_bookmarked), state = bookmarkedFilter, onClick = onBookmarkedFilterChanged, ) ScanlatorFilterItem( active = scanlatorFilterActive, onClick = onScanlatorFilterClicked, ) } @Composable fun ScanlatorFilterItem( active: Boolean, onClick: () -> Unit, ) { Row( modifier = Modifier .clickable(onClick = onClick) .fillMaxWidth() .padding(horizontal = TabbedDialogPaddings.Horizontal, vertical = 12.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(24.dp), ) { Icon( imageVector = Icons.Outlined.PeopleAlt, contentDescription = null, tint = if (active) { MaterialTheme.colorScheme.active } else { LocalContentColor.current }, ) Text( text = stringResource(MR.strings.scanlator), style = MaterialTheme.typography.bodyMedium, ) } } @Composable private fun ColumnScope.SortPage( sortingMode: Long, sortDescending: Boolean, onItemSelected: (Long) -> Unit, ) { listOf( MR.strings.sort_by_source to Manga.CHAPTER_SORTING_SOURCE, MR.strings.sort_by_number to Manga.CHAPTER_SORTING_NUMBER, MR.strings.sort_by_upload_date to Manga.CHAPTER_SORTING_UPLOAD_DATE, MR.strings.action_sort_alpha to Manga.CHAPTER_SORTING_ALPHABET, ).map { (titleRes, mode) -> SortItem( label = stringResource(titleRes), sortDescending = sortDescending.takeIf { sortingMode == mode }, onClick = { onItemSelected(mode) }, ) } } @Composable private fun ColumnScope.DisplayPage( displayMode: Long, onItemSelected: (Long) -> Unit, ) { listOf( MR.strings.show_title to Manga.CHAPTER_DISPLAY_NAME, MR.strings.show_chapter_number to Manga.CHAPTER_DISPLAY_NUMBER, ).map { (titleRes, mode) -> RadioItem( label = stringResource(titleRes), selected = displayMode == mode, onClick = { onItemSelected(mode) }, ) } } @Composable private fun SetAsDefaultDialog( onDismissRequest: () -> Unit, onConfirmed: (optionalChecked: Boolean) -> Unit, ) { var optionalChecked by rememberSaveable { mutableStateOf(false) } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = stringResource(MR.strings.chapter_settings)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(12.dp), ) { Text(text = stringResource(MR.strings.confirm_set_chapter_settings)) LabeledCheckbox( label = stringResource(MR.strings.also_set_chapter_settings_for_library), checked = optionalChecked, onCheckedChange = { optionalChecked = it }, ) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton( onClick = { onConfirmed(optionalChecked) onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt ================================================ package eu.kanade.presentation.manga import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Brush import androidx.compose.material.icons.filled.PersonOutline import androidx.compose.material.icons.filled.Warning import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.AttachMoney import androidx.compose.material.icons.outlined.Block import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.Done import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.Pause import androidx.compose.material.icons.outlined.Schedule import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.material3.Typography import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextMeasurer import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastMaxOfOrNull import coil3.request.ImageRequest import coil3.request.crossfade import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.more.settings.LocalPreferenceMinHeight import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaWithChapterCount import tachiyomi.domain.source.model.StubSource import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Badge import tachiyomi.presentation.core.components.BadgeGroup import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @Composable fun DuplicateMangaDialog( duplicates: List, onDismissRequest: () -> Unit, onConfirm: () -> Unit, onOpenManga: (manga: Manga) -> Unit, onMigrate: (manga: Manga) -> Unit, modifier: Modifier = Modifier, ) { val sourceManager = remember { Injekt.get() } val minHeight = LocalPreferenceMinHeight.current val horizontalPadding = PaddingValues(horizontal = TabbedDialogPaddings.Horizontal) val horizontalPaddingModifier = Modifier.padding(horizontalPadding) AdaptiveSheet( modifier = modifier, onDismissRequest = onDismissRequest, ) { Column( modifier = Modifier .padding(vertical = TabbedDialogPaddings.Vertical) .verticalScroll(rememberScrollState()) .fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium), ) { Text( text = stringResource(MR.strings.possible_duplicates_title), style = MaterialTheme.typography.headlineMedium, modifier = Modifier .then(horizontalPaddingModifier) .padding(top = MaterialTheme.padding.small), ) Text( text = stringResource(MR.strings.possible_duplicates_summary), style = MaterialTheme.typography.bodyMedium, modifier = Modifier.then(horizontalPaddingModifier), ) LazyRow( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), modifier = Modifier.height(getMaximumMangaCardHeight(duplicates)), contentPadding = horizontalPadding, ) { items( items = duplicates, key = { it.manga.id }, ) { DuplicateMangaListItem( duplicate = it, getSource = { sourceManager.getOrStub(it.manga.source) }, onMigrate = { onMigrate(it.manga) }, onDismissRequest = onDismissRequest, onOpenManga = { onOpenManga(it.manga) }, ) } } Column(modifier = horizontalPaddingModifier) { HorizontalDivider() TextPreferenceWidget( title = stringResource(MR.strings.action_add_anyway), icon = Icons.Outlined.Add, onPreferenceClick = { onDismissRequest() onConfirm() }, modifier = Modifier.clip(CircleShape), ) } OutlinedButton( onClick = onDismissRequest, modifier = Modifier .then(horizontalPaddingModifier) .padding(bottom = MaterialTheme.padding.medium) .heightIn(min = minHeight) .fillMaxWidth(), ) { Text( modifier = Modifier.padding(vertical = MaterialTheme.padding.extraSmall), text = stringResource(MR.strings.action_cancel), color = MaterialTheme.colorScheme.primary, style = MaterialTheme.typography.bodyLarge, ) } } } } @Composable private fun DuplicateMangaListItem( duplicate: MangaWithChapterCount, getSource: () -> Source, onDismissRequest: () -> Unit, onOpenManga: () -> Unit, onMigrate: () -> Unit, ) { val source = getSource() val manga = duplicate.manga Column( modifier = Modifier .width(MangaCardWidth) .clip(MaterialTheme.shapes.medium) .background(MaterialTheme.colorScheme.surface) .combinedClickable( onLongClick = { onOpenManga() }, onClick = { onDismissRequest() onMigrate() }, ) .padding(MaterialTheme.padding.small), ) { Box { MangaCover.Book( data = ImageRequest.Builder(LocalContext.current) .data(manga) .crossfade(true) .build(), modifier = Modifier.fillMaxWidth(), ) BadgeGroup( modifier = Modifier .padding(4.dp) .align(Alignment.TopStart), ) { Badge( color = MaterialTheme.colorScheme.secondary, textColor = MaterialTheme.colorScheme.onSecondary, text = pluralStringResource( MR.plurals.manga_num_chapters, duplicate.chapterCount.toInt(), duplicate.chapterCount, ), ) } } Spacer(modifier = Modifier.height(MaterialTheme.padding.extraSmall)) Text( text = manga.title, style = MaterialTheme.typography.titleSmall, overflow = TextOverflow.Ellipsis, maxLines = 2, ) if (!manga.author.isNullOrBlank()) { MangaDetailRow( text = manga.author!!, iconImageVector = Icons.Filled.PersonOutline, maxLines = 2, ) } if (!manga.artist.isNullOrBlank() && manga.author != manga.artist) { MangaDetailRow( text = manga.artist!!, iconImageVector = Icons.Filled.Brush, maxLines = 2, ) } MangaDetailRow( text = when (manga.status) { SManga.ONGOING.toLong() -> stringResource(MR.strings.ongoing) SManga.COMPLETED.toLong() -> stringResource(MR.strings.completed) SManga.LICENSED.toLong() -> stringResource(MR.strings.licensed) SManga.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished) SManga.CANCELLED.toLong() -> stringResource(MR.strings.cancelled) SManga.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus) else -> stringResource(MR.strings.unknown) }, iconImageVector = when (manga.status) { SManga.ONGOING.toLong() -> Icons.Outlined.Schedule SManga.COMPLETED.toLong() -> Icons.Outlined.DoneAll SManga.LICENSED.toLong() -> Icons.Outlined.AttachMoney SManga.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done SManga.CANCELLED.toLong() -> Icons.Outlined.Close SManga.ON_HIATUS.toLong() -> Icons.Outlined.Pause else -> Icons.Outlined.Block }, ) Spacer(modifier = Modifier.weight(1f)) Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center, ) { if (source is StubSource) { Icon( imageVector = Icons.Filled.Warning, contentDescription = null, modifier = Modifier.size(16.dp), tint = MaterialTheme.colorScheme.error, ) } Text( text = source.name, style = MaterialTheme.typography.labelSmall, overflow = TextOverflow.Ellipsis, maxLines = 1, ) } } } @Composable private fun MangaDetailRow( text: String, iconImageVector: ImageVector, maxLines: Int = 1, ) { Row( modifier = Modifier .secondaryItemAlpha() .padding(top = MaterialTheme.padding.extraSmall), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = iconImageVector, contentDescription = null, modifier = Modifier.size(MangaDetailsIconWidth), ) Text( text = text, style = MaterialTheme.typography.bodySmall, overflow = TextOverflow.Ellipsis, maxLines = maxLines, ) } } @Composable private fun getMaximumMangaCardHeight(duplicates: List): Dp { val density = LocalDensity.current val typography = MaterialTheme.typography val textMeasurer = rememberTextMeasurer() val smallPadding = with(density) { MaterialTheme.padding.small.roundToPx() } val extraSmallPadding = with(density) { MaterialTheme.padding.extraSmall.roundToPx() } val width = with(density) { MangaCardWidth.roundToPx() - (2 * smallPadding) } val iconWidth = with(density) { MangaDetailsIconWidth.roundToPx() } val coverHeight = width / MangaCover.Book.ratio val constraints = Constraints(maxWidth = width) val detailsConstraints = Constraints(maxWidth = width - iconWidth - extraSmallPadding) return remember( duplicates, density, typography, textMeasurer, smallPadding, extraSmallPadding, coverHeight, constraints, detailsConstraints, ) { duplicates.fastMaxOfOrNull { calculateMangaCardHeight( manga = it.manga, density = density, typography = typography, textMeasurer = textMeasurer, smallPadding = smallPadding, extraSmallPadding = extraSmallPadding, coverHeight = coverHeight, constraints = constraints, detailsConstraints = detailsConstraints, ) } ?: 0.dp } } private fun calculateMangaCardHeight( manga: Manga, density: Density, typography: Typography, textMeasurer: TextMeasurer, smallPadding: Int, extraSmallPadding: Int, coverHeight: Float, constraints: Constraints, detailsConstraints: Constraints, ): Dp { val titleHeight = textMeasurer.measureHeight(manga.title, typography.titleSmall, 2, constraints) val authorHeight = if (!manga.author.isNullOrBlank()) { textMeasurer.measureHeight(manga.author!!, typography.bodySmall, 2, detailsConstraints) } else { 0 } val artistHeight = if (!manga.artist.isNullOrBlank() && manga.author != manga.artist) { textMeasurer.measureHeight(manga.artist!!, typography.bodySmall, 2, detailsConstraints) } else { 0 } val statusHeight = textMeasurer.measureHeight("", typography.bodySmall, 2, detailsConstraints) val sourceHeight = textMeasurer.measureHeight("", typography.labelSmall, 1, constraints) val totalHeight = coverHeight + titleHeight + authorHeight + artistHeight + statusHeight + sourceHeight return with(density) { ((2 * smallPadding) + totalHeight + (5 * extraSmallPadding)).toDp() } } private fun TextMeasurer.measureHeight( text: String, style: TextStyle, maxLines: Int, constraints: Constraints, ): Int = measure( text = text, style = style, overflow = TextOverflow.Ellipsis, maxLines = maxLines, constraints = constraints, ) .size .height private val MangaCardWidth = 150.dp private val MangaDetailsIconWidth = 16.dp ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/MangaNotesScreen.kt ================================================ package eu.kanade.presentation.manga import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.manga.components.MangaNotesTextArea import eu.kanade.tachiyomi.ui.manga.notes.MangaNotesScreen import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource @Composable fun MangaNotesScreen( state: MangaNotesScreen.State, navigateUp: () -> Unit, onUpdate: (String) -> Unit, ) { Scaffold( topBar = { topBarScrollBehavior -> AppBar( titleContent = { AppBarTitle( title = stringResource(MR.strings.action_edit_notes), subtitle = state.manga.title, ) }, navigateUp = navigateUp, scrollBehavior = topBarScrollBehavior, ) }, ) { contentPadding -> MangaNotesTextArea( state = state, onUpdate = onUpdate, modifier = Modifier .padding(contentPadding) .consumeWindowInsets(contentPadding) .imePadding(), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt ================================================ package eu.kanade.presentation.manga import androidx.activity.compose.BackHandler import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.Icon import androidx.compose.material3.SmallExtendedFloatingActionButton import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.animateFloatingActionButton import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.util.fastAll import androidx.compose.ui.util.fastAny import androidx.compose.ui.util.fastMap import eu.kanade.presentation.components.relativeDateText import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.manga.components.ChapterHeader import eu.kanade.presentation.manga.components.ExpandableMangaDescription import eu.kanade.presentation.manga.components.MangaActionRow import eu.kanade.presentation.manga.components.MangaBottomActionMenu import eu.kanade.presentation.manga.components.MangaChapterListItem import eu.kanade.presentation.manga.components.MangaInfoBox import eu.kanade.presentation.manga.components.MangaToolbar import eu.kanade.presentation.manga.components.MissingChapterCountListItem import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.source.getNameForMangaInfo import eu.kanade.tachiyomi.ui.manga.ChapterList import eu.kanade.tachiyomi.ui.manga.MangaScreenModel import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.service.missingChaptersCount import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.model.StubSource import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.TwoPanelBox import tachiyomi.presentation.core.components.VerticalFastScroller import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.shouldExpandFAB import tachiyomi.source.local.isLocal import java.time.Instant @Composable fun MangaScreen( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, isTabletUi: Boolean, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, navigateUp: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onFilterButtonClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditFetchIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, onEditNotesClicked: () -> Unit, // For bottom action menu onMultiBookmarkClicked: (List, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List) -> Unit, // For chapter swipe onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) { val context = LocalContext.current val onCopyTagToClipboard: (tag: String) -> Unit = { if (it.isNotEmpty()) { context.copyToClipboard(it, it) } } if (!isTabletUi) { MangaScreenSmallImpl( state = state, snackbarHostState = snackbarHostState, nextUpdate = nextUpdate, chapterSwipeStartAction = chapterSwipeStartAction, chapterSwipeEndAction = chapterSwipeEndAction, navigateUp = navigateUp, onChapterClicked = onChapterClicked, onDownloadChapter = onDownloadChapter, onAddToLibraryClicked = onAddToLibraryClicked, onWebViewClicked = onWebViewClicked, onWebViewLongClicked = onWebViewLongClicked, onTrackingClicked = onTrackingClicked, onTagSearch = onTagSearch, onCopyTagToClipboard = onCopyTagToClipboard, onFilterClicked = onFilterButtonClicked, onRefresh = onRefresh, onContinueReading = onContinueReading, onSearch = onSearch, onCoverClicked = onCoverClicked, onShareClicked = onShareClicked, onDownloadActionClicked = onDownloadActionClicked, onEditCategoryClicked = onEditCategoryClicked, onEditIntervalClicked = onEditFetchIntervalClicked, onMigrateClicked = onMigrateClicked, onEditNotesClicked = onEditNotesClicked, onMultiBookmarkClicked = onMultiBookmarkClicked, onMultiMarkAsReadClicked = onMultiMarkAsReadClicked, onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked, onMultiDeleteClicked = onMultiDeleteClicked, onChapterSwipe = onChapterSwipe, onChapterSelected = onChapterSelected, onAllChapterSelected = onAllChapterSelected, onInvertSelection = onInvertSelection, ) } else { MangaScreenLargeImpl( state = state, snackbarHostState = snackbarHostState, chapterSwipeStartAction = chapterSwipeStartAction, chapterSwipeEndAction = chapterSwipeEndAction, nextUpdate = nextUpdate, navigateUp = navigateUp, onChapterClicked = onChapterClicked, onDownloadChapter = onDownloadChapter, onAddToLibraryClicked = onAddToLibraryClicked, onWebViewClicked = onWebViewClicked, onWebViewLongClicked = onWebViewLongClicked, onTrackingClicked = onTrackingClicked, onTagSearch = onTagSearch, onCopyTagToClipboard = onCopyTagToClipboard, onFilterButtonClicked = onFilterButtonClicked, onRefresh = onRefresh, onContinueReading = onContinueReading, onSearch = onSearch, onCoverClicked = onCoverClicked, onShareClicked = onShareClicked, onDownloadActionClicked = onDownloadActionClicked, onEditCategoryClicked = onEditCategoryClicked, onEditIntervalClicked = onEditFetchIntervalClicked, onMigrateClicked = onMigrateClicked, onEditNotesClicked = onEditNotesClicked, onMultiBookmarkClicked = onMultiBookmarkClicked, onMultiMarkAsReadClicked = onMultiMarkAsReadClicked, onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked, onMultiDeleteClicked = onMultiDeleteClicked, onChapterSwipe = onChapterSwipe, onChapterSelected = onChapterSelected, onAllChapterSelected = onAllChapterSelected, onInvertSelection = onInvertSelection, ) } } @Composable private fun MangaScreenSmallImpl( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, navigateUp: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onFilterClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, onEditNotesClicked: () -> Unit, // For bottom action menu onMultiBookmarkClicked: (List, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List) -> Unit, // For chapter swipe onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) { val chapterListState = rememberLazyListState() val (chapters, listItem, isAnySelected) = remember(state) { Triple( first = state.processedChapters, second = state.chapterListItems, third = state.isAnySelected, ) } BackHandler(enabled = isAnySelected) { onAllChapterSelected(false) } Scaffold( topBar = { val selectedChapterCount: Int = remember(chapters) { chapters.count { it.selected } } val isFirstItemVisible by remember { derivedStateOf { chapterListState.firstVisibleItemIndex == 0 } } val isFirstItemScrolled by remember { derivedStateOf { chapterListState.firstVisibleItemScrollOffset > 0 } } val titleAlpha by animateFloatAsState( if (!isFirstItemVisible) 1f else 0f, label = "Top Bar Title", ) val backgroundAlpha by animateFloatAsState( if (!isFirstItemVisible || isFirstItemScrolled) 1f else 0f, label = "Top Bar Background", ) MangaToolbar( title = state.manga.title, hasFilters = state.filterActive, navigateUp = navigateUp, onClickFilter = onFilterClicked, onClickShare = onShareClicked, onClickDownload = onDownloadActionClicked, onClickEditCategory = onEditCategoryClicked, onClickRefresh = onRefresh, onClickMigrate = onMigrateClicked, onClickEditNotes = onEditNotesClicked, actionModeCounter = selectedChapterCount, onCancelActionMode = { onAllChapterSelected(false) }, onSelectAll = { onAllChapterSelected(true) }, onInvertSelection = { onInvertSelection() }, titleAlphaProvider = { titleAlpha }, backgroundAlphaProvider = { backgroundAlpha }, ) }, bottomBar = { val selectedChapters = remember(chapters) { chapters.filter { it.selected } } SharedMangaBottomActionMenu( selected = selectedChapters, onMultiBookmarkClicked = onMultiBookmarkClicked, onMultiMarkAsReadClicked = onMultiMarkAsReadClicked, onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked, onDownloadChapter = onDownloadChapter, onMultiDeleteClicked = onMultiDeleteClicked, fillFraction = 1f, ) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { val isFABVisible = remember(chapters) { chapters.fastAny { !it.chapter.read } && !isAnySelected } SmallExtendedFloatingActionButton( text = { val isReading = remember(state.chapters) { state.chapters.fastAny { it.chapter.read } } Text( text = stringResource(if (isReading) MR.strings.action_resume else MR.strings.action_start), ) }, icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) }, onClick = onContinueReading, expanded = chapterListState.shouldExpandFAB(), modifier = Modifier.animateFloatingActionButton( visible = isFABVisible, alignment = Alignment.BottomEnd, ), ) }, ) { contentPadding -> val topPadding = contentPadding.calculateTopPadding() PullRefresh( refreshing = state.isRefreshingData, onRefresh = onRefresh, enabled = !isAnySelected, indicatorPadding = PaddingValues(top = topPadding), ) { val layoutDirection = LocalLayoutDirection.current VerticalFastScroller( listState = chapterListState, topContentPadding = topPadding, endContentPadding = contentPadding.calculateEndPadding(layoutDirection), ) { LazyColumn( modifier = Modifier.fillMaxHeight(), state = chapterListState, contentPadding = PaddingValues( start = contentPadding.calculateStartPadding(layoutDirection), end = contentPadding.calculateEndPadding(layoutDirection), bottom = contentPadding.calculateBottomPadding(), ), ) { item( key = MangaScreenItem.INFO_BOX, contentType = MangaScreenItem.INFO_BOX, ) { MangaInfoBox( isTabletUi = false, appBarPadding = topPadding, manga = state.manga, sourceName = remember { state.source.getNameForMangaInfo() }, isStubSource = remember { state.source is StubSource }, onCoverClick = onCoverClicked, doSearch = onSearch, ) } item( key = MangaScreenItem.ACTION_ROW, contentType = MangaScreenItem.ACTION_ROW, ) { MangaActionRow( favorite = state.manga.favorite, trackingCount = state.trackingCount, nextUpdate = nextUpdate, isUserIntervalMode = state.manga.fetchInterval < 0, onAddToLibraryClicked = onAddToLibraryClicked, onWebViewClicked = onWebViewClicked, onWebViewLongClicked = onWebViewLongClicked, onTrackingClicked = onTrackingClicked, onEditIntervalClicked = onEditIntervalClicked, onEditCategory = onEditCategoryClicked, ) } item( key = MangaScreenItem.DESCRIPTION_WITH_TAG, contentType = MangaScreenItem.DESCRIPTION_WITH_TAG, ) { ExpandableMangaDescription( defaultExpandState = state.isFromSource, description = state.manga.description, tagsProvider = { state.manga.genre }, notes = state.manga.notes, onTagSearch = onTagSearch, onCopyTagToClipboard = onCopyTagToClipboard, onEditNotes = onEditNotesClicked, ) } item( key = MangaScreenItem.CHAPTER_HEADER, contentType = MangaScreenItem.CHAPTER_HEADER, ) { val missingChapterCount = remember(chapters) { chapters.map { it.chapter.chapterNumber }.missingChaptersCount() } ChapterHeader( enabled = !isAnySelected, chapterCount = chapters.size, missingChapterCount = missingChapterCount, onClick = onFilterClicked, ) } sharedChapterItems( manga = state.manga, chapters = listItem, isAnyChapterSelected = chapters.fastAny { it.selected }, chapterSwipeStartAction = chapterSwipeStartAction, chapterSwipeEndAction = chapterSwipeEndAction, onChapterClicked = onChapterClicked, onDownloadChapter = onDownloadChapter, onChapterSelected = onChapterSelected, onChapterSwipe = onChapterSwipe, ) } } } } } @Composable fun MangaScreenLargeImpl( state: MangaScreenModel.State.Success, snackbarHostState: SnackbarHostState, nextUpdate: Instant?, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, navigateUp: () -> Unit, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List, ChapterDownloadAction) -> Unit)?, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, // For tags menu onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onFilterButtonClicked: () -> Unit, onRefresh: () -> Unit, onContinueReading: () -> Unit, onSearch: (query: String, global: Boolean) -> Unit, // For cover dialog onCoverClicked: () -> Unit, // For top action menu onShareClicked: (() -> Unit)?, onDownloadActionClicked: ((DownloadAction) -> Unit)?, onEditCategoryClicked: (() -> Unit)?, onEditIntervalClicked: (() -> Unit)?, onMigrateClicked: (() -> Unit)?, onEditNotesClicked: () -> Unit, // For bottom action menu onMultiBookmarkClicked: (List, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onMultiDeleteClicked: (List) -> Unit, // For swipe actions onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, // Chapter selection onChapterSelected: (ChapterList.Item, Boolean, Boolean) -> Unit, onAllChapterSelected: (Boolean) -> Unit, onInvertSelection: () -> Unit, ) { val layoutDirection = LocalLayoutDirection.current val density = LocalDensity.current val (chapters, listItem, isAnySelected) = remember(state) { Triple( first = state.processedChapters, second = state.chapterListItems, third = state.isAnySelected, ) } val insetPadding = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal).asPaddingValues() var topBarHeight by remember { mutableIntStateOf(0) } val chapterListState = rememberLazyListState() BackHandler(enabled = isAnySelected) { onAllChapterSelected(false) } Scaffold( topBar = { val selectedChapterCount = remember(chapters) { chapters.count { it.selected } } MangaToolbar( modifier = Modifier.onSizeChanged { topBarHeight = it.height }, title = state.manga.title, hasFilters = state.filterActive, navigateUp = navigateUp, onClickFilter = onFilterButtonClicked, onClickShare = onShareClicked, onClickDownload = onDownloadActionClicked, onClickEditCategory = onEditCategoryClicked, onClickRefresh = onRefresh, onClickMigrate = onMigrateClicked, onClickEditNotes = onEditNotesClicked, onCancelActionMode = { onAllChapterSelected(false) }, actionModeCounter = selectedChapterCount, onSelectAll = { onAllChapterSelected(true) }, onInvertSelection = { onInvertSelection() }, titleAlphaProvider = { 1f }, backgroundAlphaProvider = { 1f }, ) }, bottomBar = { Box( modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.BottomEnd, ) { val selectedChapters = remember(chapters) { chapters.filter { it.selected } } SharedMangaBottomActionMenu( selected = selectedChapters, onMultiBookmarkClicked = onMultiBookmarkClicked, onMultiMarkAsReadClicked = onMultiMarkAsReadClicked, onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked, onDownloadChapter = onDownloadChapter, onMultiDeleteClicked = onMultiDeleteClicked, fillFraction = 0.5f, ) } }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { val isFABVisible = remember(chapters) { chapters.fastAny { !it.chapter.read } && !isAnySelected } SmallExtendedFloatingActionButton( text = { val isReading = remember(state.chapters) { state.chapters.fastAny { it.chapter.read } } Text( text = stringResource( if (isReading) MR.strings.action_resume else MR.strings.action_start, ), ) }, icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) }, onClick = onContinueReading, expanded = chapterListState.shouldExpandFAB(), modifier = Modifier.animateFloatingActionButton( visible = isFABVisible, alignment = Alignment.BottomEnd, ), ) }, ) { contentPadding -> PullRefresh( refreshing = state.isRefreshingData, onRefresh = onRefresh, enabled = !isAnySelected, indicatorPadding = PaddingValues( start = insetPadding.calculateStartPadding(layoutDirection), top = with(density) { topBarHeight.toDp() }, end = insetPadding.calculateEndPadding(layoutDirection), ), ) { TwoPanelBox( modifier = Modifier.padding( start = contentPadding.calculateStartPadding(layoutDirection), end = contentPadding.calculateEndPadding(layoutDirection), ), startContent = { Column( modifier = Modifier .verticalScroll(rememberScrollState()) .padding(bottom = contentPadding.calculateBottomPadding()), ) { MangaInfoBox( isTabletUi = true, appBarPadding = contentPadding.calculateTopPadding(), manga = state.manga, sourceName = remember { state.source.getNameForMangaInfo() }, isStubSource = remember { state.source is StubSource }, onCoverClick = onCoverClicked, doSearch = onSearch, ) MangaActionRow( favorite = state.manga.favorite, trackingCount = state.trackingCount, nextUpdate = nextUpdate, isUserIntervalMode = state.manga.fetchInterval < 0, onAddToLibraryClicked = onAddToLibraryClicked, onWebViewClicked = onWebViewClicked, onWebViewLongClicked = onWebViewLongClicked, onTrackingClicked = onTrackingClicked, onEditIntervalClicked = onEditIntervalClicked, onEditCategory = onEditCategoryClicked, ) ExpandableMangaDescription( defaultExpandState = true, description = state.manga.description, tagsProvider = { state.manga.genre }, notes = state.manga.notes, onTagSearch = onTagSearch, onCopyTagToClipboard = onCopyTagToClipboard, onEditNotes = onEditNotesClicked, ) } }, endContent = { VerticalFastScroller( listState = chapterListState, topContentPadding = contentPadding.calculateTopPadding(), ) { LazyColumn( modifier = Modifier.fillMaxHeight(), state = chapterListState, contentPadding = PaddingValues( top = contentPadding.calculateTopPadding(), bottom = contentPadding.calculateBottomPadding(), ), ) { item( key = MangaScreenItem.CHAPTER_HEADER, contentType = MangaScreenItem.CHAPTER_HEADER, ) { val missingChapterCount = remember(chapters) { chapters.map { it.chapter.chapterNumber }.missingChaptersCount() } ChapterHeader( enabled = !isAnySelected, chapterCount = chapters.size, missingChapterCount = missingChapterCount, onClick = onFilterButtonClicked, ) } sharedChapterItems( manga = state.manga, chapters = listItem, isAnyChapterSelected = chapters.fastAny { it.selected }, chapterSwipeStartAction = chapterSwipeStartAction, chapterSwipeEndAction = chapterSwipeEndAction, onChapterClicked = onChapterClicked, onDownloadChapter = onDownloadChapter, onChapterSelected = onChapterSelected, onChapterSwipe = onChapterSwipe, ) } } }, ) } } } @Composable private fun SharedMangaBottomActionMenu( selected: List, onMultiBookmarkClicked: (List, bookmarked: Boolean) -> Unit, onMultiMarkAsReadClicked: (List, markAsRead: Boolean) -> Unit, onMarkPreviousAsReadClicked: (Chapter) -> Unit, onDownloadChapter: ((List, ChapterDownloadAction) -> Unit)?, onMultiDeleteClicked: (List) -> Unit, fillFraction: Float, modifier: Modifier = Modifier, ) { MangaBottomActionMenu( visible = selected.isNotEmpty(), modifier = modifier.fillMaxWidth(fillFraction), onBookmarkClicked = { onMultiBookmarkClicked.invoke(selected.fastMap { it.chapter }, true) }.takeIf { selected.fastAny { !it.chapter.bookmark } }, onRemoveBookmarkClicked = { onMultiBookmarkClicked.invoke(selected.fastMap { it.chapter }, false) }.takeIf { selected.fastAll { it.chapter.bookmark } }, onMarkAsReadClicked = { onMultiMarkAsReadClicked(selected.fastMap { it.chapter }, true) }.takeIf { selected.fastAny { !it.chapter.read } }, onMarkAsUnreadClicked = { onMultiMarkAsReadClicked(selected.fastMap { it.chapter }, false) }.takeIf { selected.fastAny { it.chapter.read || it.chapter.lastPageRead > 0L } }, onMarkPreviousAsReadClicked = { onMarkPreviousAsReadClicked(selected[0].chapter) }.takeIf { selected.size == 1 }, onDownloadClicked = { onDownloadChapter!!(selected.toList(), ChapterDownloadAction.START) }.takeIf { onDownloadChapter != null && selected.fastAny { it.downloadState != Download.State.DOWNLOADED } }, onDeleteClicked = { onMultiDeleteClicked(selected.fastMap { it.chapter }) }.takeIf { selected.fastAny { it.downloadState == Download.State.DOWNLOADED } }, ) } private fun LazyListScope.sharedChapterItems( manga: Manga, chapters: List, isAnyChapterSelected: Boolean, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onChapterClicked: (Chapter) -> Unit, onDownloadChapter: ((List, ChapterDownloadAction) -> Unit)?, onChapterSelected: (ChapterList.Item, Boolean, Boolean) -> Unit, onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit, ) { items( items = chapters, key = { item -> when (item) { is ChapterList.MissingCount -> "missing-count-${item.id}" is ChapterList.Item -> "chapter-${item.id}" } }, contentType = { MangaScreenItem.CHAPTER }, ) { item -> val haptic = LocalHapticFeedback.current when (item) { is ChapterList.MissingCount -> { MissingChapterCountListItem(count = item.count) } is ChapterList.Item -> { MangaChapterListItem( title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) { stringResource( MR.strings.display_mode_chapter, formatChapterNumber(item.chapter.chapterNumber), ) } else { item.chapter.name }, date = relativeDateText(item.chapter.dateUpload), readProgress = item.chapter.lastPageRead .takeIf { !item.chapter.read && it > 0L } ?.let { stringResource( MR.strings.chapter_progress, it + 1, ) }, scanlator = item.chapter.scanlator.takeIf { !it.isNullOrBlank() }, read = item.chapter.read, bookmark = item.chapter.bookmark, selected = item.selected, downloadIndicatorEnabled = !isAnyChapterSelected && !manga.isLocal(), downloadStateProvider = { item.downloadState }, downloadProgressProvider = { item.downloadProgress }, chapterSwipeStartAction = chapterSwipeStartAction, chapterSwipeEndAction = chapterSwipeEndAction, onLongClick = { onChapterSelected(item, !item.selected, true) haptic.performHapticFeedback(HapticFeedbackType.LongPress) }, onClick = { onChapterItemClick( chapterItem = item, isAnyChapterSelected = isAnyChapterSelected, onToggleSelection = { onChapterSelected(item, !item.selected, false) }, onChapterClicked = onChapterClicked, ) }, onDownloadClick = if (onDownloadChapter != null) { { onDownloadChapter(listOf(item), it) } } else { null }, onChapterSwipe = { onChapterSwipe(item, it) }, ) } } } } private fun onChapterItemClick( chapterItem: ChapterList.Item, isAnyChapterSelected: Boolean, onToggleSelection: (Boolean) -> Unit, onChapterClicked: (Chapter) -> Unit, ) { when { chapterItem.selected -> onToggleSelection(false) isAnyChapterSelected -> onToggleSelection(true) else -> onChapterClicked(chapterItem.chapter) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/MangaScreenConstants.kt ================================================ package eu.kanade.presentation.manga enum class DownloadAction { NEXT_1_CHAPTER, NEXT_5_CHAPTERS, NEXT_10_CHAPTERS, NEXT_25_CHAPTERS, UNREAD_CHAPTERS, BOOKMARKED_CHAPTERS, } enum class EditCoverAction { EDIT, DELETE, } enum class MangaScreenItem { INFO_BOX, ACTION_ROW, DESCRIPTION_WITH_TAG, CHAPTER_HEADER, CHAPTER, } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/BaseMangaListItem.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.components.material.padding @Composable fun BaseMangaListItem( manga: Manga, modifier: Modifier = Modifier, onClickItem: () -> Unit = {}, onClickCover: () -> Unit = onClickItem, cover: @Composable RowScope.() -> Unit = { defaultCover(manga, onClickCover) }, actions: @Composable RowScope.() -> Unit = {}, content: @Composable RowScope.() -> Unit = { defaultContent(manga) }, ) { Row( modifier = modifier .clickable(onClick = onClickItem) .height(56.dp) .padding(horizontal = MaterialTheme.padding.medium), verticalAlignment = Alignment.CenterVertically, ) { cover() content() actions() } } private val defaultCover: @Composable RowScope.(Manga, () -> Unit) -> Unit = { manga, onClick -> MangaCover.Square( modifier = Modifier .padding(vertical = MaterialTheme.padding.small) .fillMaxHeight(), data = manga, onClick = onClick, ) } private val defaultContent: @Composable RowScope.(Manga) -> Unit = { Box(modifier = Modifier.weight(1f)) { Text( text = it.title, modifier = Modifier .padding(start = MaterialTheme.padding.medium), overflow = TextOverflow.Ellipsis, maxLines = 1, style = MaterialTheme.typography.bodyMedium, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/ChapterDownloadIndicator.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.outlined.ArrowDownward import androidx.compose.material.icons.outlined.ErrorOutline import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProgressIndicatorDefaults import androidx.compose.material3.Text import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.hapticfeedback.HapticFeedback import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.painterResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.DropdownMenu import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.IconButtonTokens import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha enum class ChapterDownloadAction { START, START_NOW, CANCEL, DELETE, } @Composable fun ChapterDownloadIndicator( enabled: Boolean, downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, onClick: (ChapterDownloadAction) -> Unit, modifier: Modifier = Modifier, ) { when (val downloadState = downloadStateProvider()) { Download.State.NOT_DOWNLOADED -> NotDownloadedIndicator( enabled = enabled, modifier = modifier, onClick = onClick, ) Download.State.QUEUE, Download.State.DOWNLOADING -> DownloadingIndicator( enabled = enabled, modifier = modifier, downloadState = downloadState, downloadProgressProvider = downloadProgressProvider, onClick = onClick, ) Download.State.DOWNLOADED -> DownloadedIndicator( enabled = enabled, modifier = modifier, onClick = onClick, ) Download.State.ERROR -> ErrorIndicator( enabled = enabled, modifier = modifier, onClick = onClick, ) } } @Composable private fun NotDownloadedIndicator( enabled: Boolean, modifier: Modifier = Modifier, onClick: (ChapterDownloadAction) -> Unit, ) { Box( modifier = modifier .size(IconButtonTokens.StateLayerSize) .commonClickable( enabled = enabled, hapticFeedback = LocalHapticFeedback.current, onLongClick = { onClick(ChapterDownloadAction.START_NOW) }, onClick = { onClick(ChapterDownloadAction.START) }, ) .secondaryItemAlpha(), contentAlignment = Alignment.Center, ) { Icon( painter = painterResource(R.drawable.ic_download_chapter_24dp), contentDescription = stringResource(MR.strings.manga_download), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } } @Composable private fun DownloadingIndicator( enabled: Boolean, downloadState: Download.State, downloadProgressProvider: () -> Int, onClick: (ChapterDownloadAction) -> Unit, modifier: Modifier = Modifier, ) { var isMenuExpanded by remember { mutableStateOf(false) } Box( modifier = modifier .size(IconButtonTokens.StateLayerSize) .commonClickable( enabled = enabled, hapticFeedback = LocalHapticFeedback.current, onLongClick = { onClick(ChapterDownloadAction.CANCEL) }, onClick = { isMenuExpanded = true }, ), contentAlignment = Alignment.Center, ) { val arrowColor: Color val strokeColor = MaterialTheme.colorScheme.onSurfaceVariant val downloadProgress = downloadProgressProvider() val indeterminate = downloadState == Download.State.QUEUE || (downloadState == Download.State.DOWNLOADING && downloadProgress == 0) if (indeterminate) { arrowColor = strokeColor CircularProgressIndicator( modifier = IndicatorModifier, color = strokeColor, strokeWidth = IndicatorStrokeWidth, trackColor = Color.Transparent, strokeCap = StrokeCap.Butt, ) } else { val animatedProgress by animateFloatAsState( targetValue = downloadProgress / 100f, animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec, label = "progress", ) arrowColor = if (animatedProgress < 0.5f) { strokeColor } else { MaterialTheme.colorScheme.background } CircularProgressIndicator( progress = { animatedProgress }, modifier = IndicatorModifier, color = strokeColor, strokeWidth = IndicatorSize / 2, trackColor = Color.Transparent, strokeCap = StrokeCap.Butt, gapSize = 0.dp, ) } DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) }, onClick = { onClick(ChapterDownloadAction.START_NOW) isMenuExpanded = false }, ) DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_cancel)) }, onClick = { onClick(ChapterDownloadAction.CANCEL) isMenuExpanded = false }, ) } Icon( imageVector = Icons.Outlined.ArrowDownward, contentDescription = null, modifier = ArrowModifier, tint = arrowColor, ) } } @Composable private fun DownloadedIndicator( enabled: Boolean, modifier: Modifier = Modifier, onClick: (ChapterDownloadAction) -> Unit, ) { var isMenuExpanded by remember { mutableStateOf(false) } Box( modifier = modifier .size(IconButtonTokens.StateLayerSize) .commonClickable( enabled = enabled, hapticFeedback = LocalHapticFeedback.current, onLongClick = { isMenuExpanded = true }, onClick = { isMenuExpanded = true }, ), contentAlignment = Alignment.Center, ) { Icon( imageVector = Icons.Filled.CheckCircle, contentDescription = null, modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onClick(ChapterDownloadAction.DELETE) isMenuExpanded = false }, ) } } } @Composable private fun ErrorIndicator( enabled: Boolean, modifier: Modifier = Modifier, onClick: (ChapterDownloadAction) -> Unit, ) { Box( modifier = modifier .size(IconButtonTokens.StateLayerSize) .commonClickable( enabled = enabled, hapticFeedback = LocalHapticFeedback.current, onLongClick = { onClick(ChapterDownloadAction.START) }, onClick = { onClick(ChapterDownloadAction.START) }, ), contentAlignment = Alignment.Center, ) { Icon( imageVector = Icons.Outlined.ErrorOutline, contentDescription = stringResource(MR.strings.chapter_error), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.error, ) } } private fun Modifier.commonClickable( enabled: Boolean, hapticFeedback: HapticFeedback, onLongClick: () -> Unit, onClick: () -> Unit, ) = this.combinedClickable( enabled = enabled, onLongClick = { onLongClick() hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) }, onClick = onClick, role = Role.Button, interactionSource = null, indication = ripple( bounded = false, radius = IconButtonTokens.StateLayerSize / 2, ), ) private val IndicatorSize = 26.dp private val IndicatorPadding = 2.dp // To match composable parameter name when used later private val IndicatorStrokeWidth = IndicatorPadding private val IndicatorModifier = Modifier .size(IndicatorSize) .padding(IndicatorPadding) private val ArrowModifier = Modifier .size(IndicatorSize - 7.dp) ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/ChapterHeader.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.SECONDARY_ALPHA import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource @Composable fun ChapterHeader( enabled: Boolean, chapterCount: Int?, missingChapterCount: Int, onClick: () -> Unit, modifier: Modifier = Modifier, ) { Column( modifier = modifier .fillMaxWidth() .clickable( enabled = enabled, onClick = onClick, ) .padding(horizontal = 16.dp, vertical = 4.dp), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { Text( text = if (chapterCount == null) { stringResource(MR.strings.chapters) } else { pluralStringResource(MR.plurals.manga_num_chapters, count = chapterCount, chapterCount) }, style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.onBackground, ) MissingChaptersWarning(missingChapterCount) } } @Composable private fun MissingChaptersWarning(count: Int) { if (count == 0) { return } Text( text = pluralStringResource(MR.plurals.missing_chapters, count = count, count), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.error.copy(alpha = SECONDARY_ALPHA), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/DotSeparatorText.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @Composable fun DotSeparatorText( modifier: Modifier = Modifier, ) { Text( text = " • ", modifier = modifier, ) } @Composable fun DotSeparatorNoSpaceText( modifier: Modifier = Modifier, ) { Text( text = "•", modifier = modifier, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaBottomActionMenu.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.shape.ZeroCornerSize import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Label import androidx.compose.material.icons.outlined.BookmarkAdd import androidx.compose.material.icons.outlined.BookmarkRemove import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material.icons.outlined.RemoveDone import androidx.compose.material.icons.outlined.SwapCalls import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.DownloadDropdownMenu import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.manga.DownloadAction import eu.kanade.tachiyomi.R import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import kotlin.time.Duration.Companion.seconds @Composable fun MangaBottomActionMenu( visible: Boolean, modifier: Modifier = Modifier, onBookmarkClicked: (() -> Unit)? = null, onRemoveBookmarkClicked: (() -> Unit)? = null, onMarkAsReadClicked: (() -> Unit)? = null, onMarkAsUnreadClicked: (() -> Unit)? = null, onMarkPreviousAsReadClicked: (() -> Unit)? = null, onDownloadClicked: (() -> Unit)? = null, onDeleteClicked: (() -> Unit)? = null, ) { AnimatedVisibility( visible = visible, enter = expandVertically(expandFrom = Alignment.Bottom), exit = shrinkVertically(shrinkTowards = Alignment.Bottom), ) { val scope = rememberCoroutineScope() Surface( modifier = modifier, shape = MaterialTheme.shapes.large.copy(bottomEnd = ZeroCornerSize, bottomStart = ZeroCornerSize), color = MaterialTheme.colorScheme.surfaceContainerHigh, ) { val haptic = LocalHapticFeedback.current val confirm = remember { mutableStateListOf(false, false, false, false, false, false, false) } var resetJob by remember { mutableStateOf(null) } val onLongClickItem: (Int) -> Unit = { toConfirmIndex -> haptic.performHapticFeedback(HapticFeedbackType.LongPress) confirm.indices.forEach { i -> confirm[i] = i == toConfirmIndex } resetJob?.cancel() resetJob = scope.launch { delay(1.seconds) if (isActive) confirm[toConfirmIndex] = false } } Row( modifier = Modifier .padding( WindowInsets.navigationBars .only(WindowInsetsSides.Bottom) .asPaddingValues(), ) .padding(horizontal = 8.dp, vertical = 12.dp), ) { if (onBookmarkClicked != null) { Button( title = stringResource(MR.strings.action_bookmark), icon = Icons.Outlined.BookmarkAdd, toConfirm = confirm[0], onLongClick = { onLongClickItem(0) }, onClick = onBookmarkClicked, ) } if (onRemoveBookmarkClicked != null) { Button( title = stringResource(MR.strings.action_remove_bookmark), icon = Icons.Outlined.BookmarkRemove, toConfirm = confirm[1], onLongClick = { onLongClickItem(1) }, onClick = onRemoveBookmarkClicked, ) } if (onMarkAsReadClicked != null) { Button( title = stringResource(MR.strings.action_mark_as_read), icon = Icons.Outlined.DoneAll, toConfirm = confirm[2], onLongClick = { onLongClickItem(2) }, onClick = onMarkAsReadClicked, ) } if (onMarkAsUnreadClicked != null) { Button( title = stringResource(MR.strings.action_mark_as_unread), icon = Icons.Outlined.RemoveDone, toConfirm = confirm[3], onLongClick = { onLongClickItem(3) }, onClick = onMarkAsUnreadClicked, ) } if (onMarkPreviousAsReadClicked != null) { Button( title = stringResource(MR.strings.action_mark_previous_as_read), icon = ImageVector.vectorResource(R.drawable.ic_done_prev_24dp), toConfirm = confirm[4], onLongClick = { onLongClickItem(4) }, onClick = onMarkPreviousAsReadClicked, ) } if (onDownloadClicked != null) { Button( title = stringResource(MR.strings.action_download), icon = Icons.Outlined.Download, toConfirm = confirm[5], onLongClick = { onLongClickItem(5) }, onClick = onDownloadClicked, ) } if (onDeleteClicked != null) { Button( title = stringResource(MR.strings.action_delete), icon = Icons.Outlined.Delete, toConfirm = confirm[6], onLongClick = { onLongClickItem(6) }, onClick = onDeleteClicked, ) } } } } } @Composable private fun RowScope.Button( title: String, icon: ImageVector, toConfirm: Boolean, onLongClick: () -> Unit, onClick: () -> Unit, content: (@Composable () -> Unit)? = null, ) { val animatedWeight by animateFloatAsState( targetValue = if (toConfirm) 2f else 1f, label = "weight", ) Box( modifier = Modifier .size(48.dp) .weight(animatedWeight) .combinedClickable( interactionSource = null, indication = ripple(bounded = false), onLongClick = onLongClick, onClick = onClick, ), contentAlignment = Alignment.Center, ) { Column( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { Icon( imageVector = icon, contentDescription = title, ) AnimatedVisibility( visible = toConfirm, enter = expandVertically(expandFrom = Alignment.Top) + fadeIn(), exit = shrinkVertically(shrinkTowards = Alignment.Top) + fadeOut(), ) { Text( text = title, overflow = TextOverflow.Visible, maxLines = 1, style = MaterialTheme.typography.labelSmall, ) } } content?.invoke() } } @Composable fun LibraryBottomActionMenu( visible: Boolean, onChangeCategoryClicked: () -> Unit, onMarkAsReadClicked: () -> Unit, onMarkAsUnreadClicked: () -> Unit, onDownloadClicked: ((DownloadAction) -> Unit)?, onDeleteClicked: () -> Unit, onMigrateClicked: () -> Unit, modifier: Modifier = Modifier, ) { AnimatedVisibility( visible = visible, enter = expandVertically(animationSpec = tween(delayMillis = 300)), exit = shrinkVertically(animationSpec = tween()), ) { val scope = rememberCoroutineScope() Surface( modifier = modifier, shape = MaterialTheme.shapes.large.copy(bottomEnd = ZeroCornerSize, bottomStart = ZeroCornerSize), color = MaterialTheme.colorScheme.surfaceContainerHigh, ) { val haptic = LocalHapticFeedback.current val confirm = remember { mutableStateListOf(false, false, false, false, false, false) } var resetJob by remember { mutableStateOf(null) } val onLongClickItem: (Int) -> Unit = { toConfirmIndex -> haptic.performHapticFeedback(HapticFeedbackType.LongPress) confirm.indices.forEach { i -> confirm[i] = i == toConfirmIndex } resetJob?.cancel() resetJob = scope.launch { delay(1.seconds) if (isActive) confirm[toConfirmIndex] = false } } val itemOverflow = onDownloadClicked != null Row( modifier = Modifier .windowInsetsPadding( WindowInsets.navigationBars .only(WindowInsetsSides.Bottom), ) .padding(horizontal = 8.dp, vertical = 12.dp), ) { Button( title = stringResource(MR.strings.action_move_category), icon = Icons.AutoMirrored.Outlined.Label, toConfirm = confirm[0], onLongClick = { onLongClickItem(0) }, onClick = onChangeCategoryClicked, ) Button( title = stringResource(MR.strings.action_mark_as_read), icon = Icons.Outlined.DoneAll, toConfirm = confirm[1], onLongClick = { onLongClickItem(1) }, onClick = onMarkAsReadClicked, ) Button( title = stringResource(MR.strings.action_mark_as_unread), icon = Icons.Outlined.RemoveDone, toConfirm = confirm[2], onLongClick = { onLongClickItem(2) }, onClick = onMarkAsUnreadClicked, ) if (onDownloadClicked != null) { var downloadExpanded by remember { mutableStateOf(false) } Button( title = stringResource(MR.strings.action_download), icon = Icons.Outlined.Download, toConfirm = confirm[3], onLongClick = { onLongClickItem(3) }, onClick = { downloadExpanded = !downloadExpanded }, ) { DownloadDropdownMenu( expanded = downloadExpanded, onDismissRequest = { downloadExpanded = false }, onDownloadClicked = onDownloadClicked, offset = BottomBarMenuDpOffset, ) } } if (!itemOverflow) { Button( title = stringResource(MR.strings.migrate), icon = Icons.Outlined.SwapCalls, toConfirm = confirm[4], onLongClick = { onLongClickItem(4) }, onClick = onMigrateClicked, ) Button( title = stringResource(MR.strings.action_delete), icon = Icons.Outlined.Delete, toConfirm = confirm[5], onLongClick = { onLongClickItem(5) }, onClick = onDeleteClicked, ) } else { var overflowMenuOpen by remember { mutableStateOf(false) } Button( title = stringResource(MR.strings.label_more), icon = Icons.Outlined.MoreVert, toConfirm = false, onLongClick = {}, onClick = { overflowMenuOpen = true }, ) { DropdownMenu( expanded = overflowMenuOpen, onDismissRequest = { overflowMenuOpen = false }, offset = BottomBarMenuDpOffset, ) { DropdownMenuItem( text = { Text(stringResource(MR.strings.migrate)) }, onClick = onMigrateClicked, ) DropdownMenuItem( text = { Text(stringResource(MR.strings.action_delete)) }, onClick = onDeleteClicked, ) } } } } } } } private val BottomBarMenuDpOffset = DpOffset(0.dp, 0.dp) ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaChapterListItem.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Bookmark import androidx.compose.material.icons.filled.Circle import androidx.compose.material.icons.outlined.BookmarkAdd import androidx.compose.material.icons.outlined.BookmarkRemove import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Done import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.FileDownloadOff import androidx.compose.material.icons.outlined.RemoveDone import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Text import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.data.download.model.Download import me.saket.swipe.SwipeableActionsBox import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.DISABLED_ALPHA import tachiyomi.presentation.core.components.material.SECONDARY_ALPHA import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground @Composable fun MangaChapterListItem( title: String, date: String?, readProgress: String?, scanlator: String?, read: Boolean, bookmark: Boolean, selected: Boolean, downloadIndicatorEnabled: Boolean, downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction, chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction, onLongClick: () -> Unit, onClick: () -> Unit, onDownloadClick: ((ChapterDownloadAction) -> Unit)?, onChapterSwipe: (LibraryPreferences.ChapterSwipeAction) -> Unit, modifier: Modifier = Modifier, ) { val start = getSwipeAction( action = chapterSwipeStartAction, read = read, bookmark = bookmark, downloadState = downloadStateProvider(), background = MaterialTheme.colorScheme.primaryContainer, onSwipe = { onChapterSwipe(chapterSwipeStartAction) }, ) val end = getSwipeAction( action = chapterSwipeEndAction, read = read, bookmark = bookmark, downloadState = downloadStateProvider(), background = MaterialTheme.colorScheme.primaryContainer, onSwipe = { onChapterSwipe(chapterSwipeEndAction) }, ) SwipeableActionsBox( modifier = Modifier.clipToBounds(), startActions = listOfNotNull(start), endActions = listOfNotNull(end), swipeThreshold = swipeActionThreshold, backgroundUntilSwipeThreshold = MaterialTheme.colorScheme.surfaceContainerLowest, ) { Row( modifier = modifier .selectedBackground(selected) .combinedClickable( onClick = onClick, onLongClick = onLongClick, ) .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp), ) { Column( modifier = Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(6.dp), ) { Row( horizontalArrangement = Arrangement.spacedBy(2.dp), verticalAlignment = Alignment.CenterVertically, ) { var textHeight by remember { mutableIntStateOf(0) } if (!read) { Icon( imageVector = Icons.Filled.Circle, contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), tint = MaterialTheme.colorScheme.primary, ) } if (bookmark) { Icon( imageVector = Icons.Filled.Bookmark, contentDescription = stringResource(MR.strings.action_filter_bookmarked), modifier = Modifier .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }), tint = MaterialTheme.colorScheme.primary, ) } Text( text = title, style = MaterialTheme.typography.bodyMedium, maxLines = 1, overflow = TextOverflow.Ellipsis, onTextLayout = { textHeight = it.size.height }, color = LocalContentColor.current.copy(alpha = if (read) DISABLED_ALPHA else 1f), ) } Row { val subtitleStyle = MaterialTheme.typography.bodySmall .merge( color = LocalContentColor.current .copy(alpha = if (read) DISABLED_ALPHA else SECONDARY_ALPHA), ) ProvideTextStyle(value = subtitleStyle) { if (date != null) { Text( text = date, maxLines = 1, overflow = TextOverflow.Ellipsis, ) if (readProgress != null || scanlator != null) DotSeparatorText() } if (readProgress != null) { Text( text = readProgress, maxLines = 1, overflow = TextOverflow.Ellipsis, color = LocalContentColor.current.copy(alpha = DISABLED_ALPHA), ) if (scanlator != null) DotSeparatorText() } if (scanlator != null) { Text( text = scanlator, maxLines = 1, overflow = TextOverflow.Ellipsis, ) } } } } ChapterDownloadIndicator( enabled = downloadIndicatorEnabled, modifier = Modifier.padding(start = 4.dp), downloadStateProvider = downloadStateProvider, downloadProgressProvider = downloadProgressProvider, onClick = { onDownloadClick?.invoke(it) }, ) } } } private fun getSwipeAction( action: LibraryPreferences.ChapterSwipeAction, read: Boolean, bookmark: Boolean, downloadState: Download.State, background: Color, onSwipe: () -> Unit, ): me.saket.swipe.SwipeAction? { return when (action) { LibraryPreferences.ChapterSwipeAction.ToggleRead -> swipeAction( icon = if (!read) Icons.Outlined.Done else Icons.Outlined.RemoveDone, background = background, isUndo = read, onSwipe = onSwipe, ) LibraryPreferences.ChapterSwipeAction.ToggleBookmark -> swipeAction( icon = if (!bookmark) Icons.Outlined.BookmarkAdd else Icons.Outlined.BookmarkRemove, background = background, isUndo = bookmark, onSwipe = onSwipe, ) LibraryPreferences.ChapterSwipeAction.Download -> swipeAction( icon = when (downloadState) { Download.State.NOT_DOWNLOADED, Download.State.ERROR -> Icons.Outlined.Download Download.State.QUEUE, Download.State.DOWNLOADING -> Icons.Outlined.FileDownloadOff Download.State.DOWNLOADED -> Icons.Outlined.Delete }, background = background, onSwipe = onSwipe, ) LibraryPreferences.ChapterSwipeAction.Disabled -> null } } private fun swipeAction( onSwipe: () -> Unit, icon: ImageVector, background: Color, isUndo: Boolean = false, ): me.saket.swipe.SwipeAction { return me.saket.swipe.SwipeAction( icon = { Icon( modifier = Modifier.padding(16.dp), imageVector = icon, tint = contentColorFor(background), contentDescription = null, ) }, background = background, onSwipe = onSwipe, isUndo = isUndo, ) } private val swipeActionThreshold = 56.dp ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaCover.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.aspectRatio import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.semantics.Role import coil3.compose.AsyncImage import eu.kanade.presentation.util.rememberResourceBitmapPainter import eu.kanade.tachiyomi.R enum class MangaCover(val ratio: Float) { Square(1f / 1f), Book(2f / 3f), ; @Composable operator fun invoke( data: Any?, modifier: Modifier = Modifier, contentDescription: String = "", shape: Shape = MaterialTheme.shapes.extraSmall, onClick: (() -> Unit)? = null, ) { AsyncImage( model = data, placeholder = ColorPainter(CoverPlaceholderColor), error = rememberResourceBitmapPainter(id = R.drawable.cover_error), contentDescription = contentDescription, modifier = modifier .aspectRatio(ratio) .clip(shape) .then( if (onClick != null) { Modifier.clickable( role = Role.Button, onClick = onClick, ) } else { Modifier }, ), contentScale = ContentScale.Crop, ) } } private val CoverPlaceholderColor = Color(0x1F888888) ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt ================================================ package eu.kanade.presentation.manga.components import android.graphics.Bitmap import android.graphics.drawable.BitmapDrawable import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.Edit import androidx.compose.material.icons.outlined.Save import androidx.compose.material.icons.outlined.Share import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.core.graphics.drawable.toDrawable import androidx.core.view.updatePadding import coil3.asDrawable import coil3.imageLoader import coil3.request.CachePolicy import coil3.request.ImageRequest import coil3.size.Size import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.manga.EditCoverAction import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication @Composable fun MangaCoverDialog( manga: Manga, isCustomCover: Boolean, snackbarHostState: SnackbarHostState, onShareClick: () -> Unit, onSaveClick: () -> Unit, onEditClick: ((EditCoverAction) -> Unit)?, onDismissRequest: () -> Unit, ) { Dialog( onDismissRequest = onDismissRequest, properties = DialogProperties( usePlatformDefaultWidth = false, decorFitsSystemWindows = false, // Doesn't work https://issuetracker.google.com/issues/246909281 ), ) { Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, containerColor = Color.Transparent, bottomBar = { Row( modifier = Modifier .fillMaxWidth() .padding(4.dp) .navigationBarsPadding(), ) { ActionsPill { IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, contentDescription = stringResource(MR.strings.action_close), ) } } Spacer(modifier = Modifier.weight(1f)) ActionsPill { AppBarActions( actions = persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = onShareClick, ), AppBar.Action( title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = onSaveClick, ), ), ) if (onEditClick != null) { Box { var expanded by remember { mutableStateOf(false) } IconButton( onClick = { if (isCustomCover) { expanded = true } else { onEditClick(EditCoverAction.EDIT) } }, ) { Icon( imageVector = Icons.Outlined.Edit, contentDescription = stringResource(MR.strings.action_edit_cover), ) } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, offset = DpOffset(8.dp, 0.dp), ) { DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_edit)) }, onClick = { onEditClick(EditCoverAction.EDIT) expanded = false }, ) DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onEditClick(EditCoverAction.DELETE) expanded = false }, ) } } } } } }, ) { contentPadding -> val statusBarPaddingPx = with(LocalDensity.current) { contentPadding.calculateTopPadding().roundToPx() } val bottomPaddingPx = with(LocalDensity.current) { contentPadding.calculateBottomPadding().roundToPx() } Box( modifier = Modifier .fillMaxSize() .clickableNoIndication(onClick = onDismissRequest), ) { AndroidView( factory = { ReaderPageImageView(it).apply { onViewClicked = onDismissRequest clipToPadding = false clipChildren = false } }, update = { view -> val request = ImageRequest.Builder(view.context) .data(manga) .size(Size.ORIGINAL) .memoryCachePolicy(CachePolicy.DISABLED) .target { image -> val drawable = image.asDrawable(view.context.resources) // Copy bitmap in case it came from memory cache // Because SSIV needs to thoroughly read the image val copy = (drawable as? BitmapDrawable) ?.bitmap ?.copy(Bitmap.Config.HARDWARE, false) ?.toDrawable(view.context.resources) ?: drawable view.setImage(copy, ReaderPageImageView.Config(zoomDuration = 500)) } .build() view.context.imageLoader.enqueue(request) view.updatePadding(top = statusBarPaddingPx, bottom = bottomPaddingPx) }, modifier = Modifier.fillMaxSize(), ) } } } } @Composable private fun ActionsPill(content: @Composable () -> Unit) { Row( modifier = Modifier .clip(MaterialTheme.shapes.extraLarge) .background(MaterialTheme.colorScheme.background.copy(alpha = 0.95f)), ) { content() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.material3.AlertDialog import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.util.system.isReleaseBuildType import kotlinx.collections.immutable.toImmutableList import tachiyomi.domain.manga.interactor.FetchInterval import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.WheelTextPicker import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import java.time.Instant import java.time.temporal.ChronoUnit import kotlin.math.absoluteValue @Composable fun DeleteChaptersDialog( onDismissRequest: () -> Unit, onConfirm: () -> Unit, ) { AlertDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton( onClick = { onDismissRequest() onConfirm() }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, title = { Text(text = stringResource(MR.strings.are_you_sure)) }, text = { Text(text = stringResource(MR.strings.confirm_delete_chapters)) }, ) } @Composable fun SetIntervalDialog( interval: Int, nextUpdate: Instant?, onDismissRequest: () -> Unit, onValueChanged: ((Int) -> Unit)? = null, ) { var selectedInterval by rememberSaveable { mutableIntStateOf(if (interval < 0) -interval else 0) } val nextUpdateDays = remember(nextUpdate) { return@remember if (nextUpdate != null) { val now = Instant.now() now.until(nextUpdate, ChronoUnit.DAYS).toInt().coerceAtLeast(0) } else { null } } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(stringResource(MR.strings.pref_library_update_smart_update)) }, text = { Column { if (nextUpdateDays != null && nextUpdateDays >= 0 && interval >= 0) { Text( stringResource( MR.strings.manga_interval_expected_update, pluralStringResource( MR.plurals.day, count = nextUpdateDays, nextUpdateDays, ), pluralStringResource( MR.plurals.day, count = interval.absoluteValue, interval.absoluteValue, ), ), ) } else { Text( stringResource(MR.strings.manga_interval_expected_update_null), ) } Spacer(Modifier.height(MaterialTheme.padding.small)) if (onValueChanged != null && (!isReleaseBuildType)) { Text(stringResource(MR.strings.manga_interval_custom_amount)) BoxWithConstraints( modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center, ) { val size = DpSize(width = maxWidth / 2, height = 128.dp) val items = (0..FetchInterval.MAX_INTERVAL) .map { if (it == 0) { stringResource(MR.strings.label_default) } else { it.toString() } } .toImmutableList() WheelTextPicker( items = items, size = size, startIndex = selectedInterval, onSelectionChanged = { selectedInterval = it }, ) } } } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton(onClick = { onValueChanged?.invoke(selectedInterval) onDismissRequest() }) { Text(text = stringResource(MR.strings.action_ok)) } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.spring import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.text.appendInlineContent import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Brush import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.HourglassEmpty import androidx.compose.material.icons.filled.PersonOutline import androidx.compose.material.icons.filled.Warning import androidx.compose.material.icons.outlined.AttachMoney import androidx.compose.material.icons.outlined.Block import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.Done import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.FavoriteBorder import androidx.compose.material.icons.outlined.Pause import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Schedule import androidx.compose.material.icons.outlined.Sync import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalMinimumInteractiveComponentSize import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.SuggestionChip import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.blur import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.Layout import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.withLink import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil3.compose.AsyncImage import coil3.request.ImageRequest import coil3.request.crossfade import com.mikepenz.markdown.model.markdownAnnotator import com.mikepenz.markdown.model.markdownAnnotatorConfig import com.mikepenz.markdown.utils.getUnescapedTextInNode import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.components.DropdownMenu import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.system.copyToClipboard import org.intellij.markdown.MarkdownElementTypes import org.intellij.markdown.MarkdownTokenTypes import org.intellij.markdown.ast.findChildOfType import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.DISABLED_ALPHA import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication import tachiyomi.presentation.core.util.secondaryItemAlpha import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.temporal.ChronoUnit import kotlin.math.roundToInt @Composable fun MangaInfoBox( isTabletUi: Boolean, appBarPadding: Dp, manga: Manga, sourceName: String, isStubSource: Boolean, onCoverClick: () -> Unit, doSearch: (query: String, global: Boolean) -> Unit, modifier: Modifier = Modifier, ) { Box(modifier = modifier) { // Backdrop val backdropGradientColors = listOf( Color.Transparent, MaterialTheme.colorScheme.background, ) AsyncImage( model = ImageRequest.Builder(LocalContext.current) .data(manga) .crossfade(true) .build(), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier .matchParentSize() .drawWithContent { drawContent() drawRect( brush = Brush.verticalGradient(colors = backdropGradientColors), ) } .blur(4.dp) .alpha(0.2f), ) // Manga & source info CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) { if (!isTabletUi) { MangaAndSourceTitlesSmall( appBarPadding = appBarPadding, manga = manga, sourceName = sourceName, isStubSource = isStubSource, onCoverClick = onCoverClick, doSearch = doSearch, ) } else { MangaAndSourceTitlesLarge( appBarPadding = appBarPadding, manga = manga, sourceName = sourceName, isStubSource = isStubSource, onCoverClick = onCoverClick, doSearch = doSearch, ) } } } } @Composable fun MangaActionRow( favorite: Boolean, trackingCount: Int, nextUpdate: Instant?, isUserIntervalMode: Boolean, onAddToLibraryClicked: () -> Unit, onWebViewClicked: (() -> Unit)?, onWebViewLongClicked: (() -> Unit)?, onTrackingClicked: () -> Unit, onEditIntervalClicked: (() -> Unit)?, onEditCategory: (() -> Unit)?, modifier: Modifier = Modifier, ) { val defaultActionButtonColor = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA) // TODO: show something better when using custom interval val nextUpdateDays = remember(nextUpdate) { return@remember if (nextUpdate != null) { val now = Instant.now() now.until(nextUpdate, ChronoUnit.DAYS).toInt().coerceAtLeast(0) } else { null } } Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) { MangaActionButton( title = if (favorite) { stringResource(MR.strings.in_library) } else { stringResource(MR.strings.add_to_library) }, icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder, color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor, onClick = onAddToLibraryClicked, onLongClick = onEditCategory, ) MangaActionButton( title = when (nextUpdateDays) { null -> stringResource(MR.strings.not_applicable) 0 -> stringResource(MR.strings.manga_interval_expected_update_soon) else -> pluralStringResource( MR.plurals.day, count = nextUpdateDays, nextUpdateDays, ) }, icon = Icons.Default.HourglassEmpty, color = if (isUserIntervalMode) MaterialTheme.colorScheme.primary else defaultActionButtonColor, onClick = { onEditIntervalClicked?.invoke() }, ) MangaActionButton( title = if (trackingCount == 0) { stringResource(MR.strings.manga_tracking_tab) } else { pluralStringResource(MR.plurals.num_trackers, count = trackingCount, trackingCount) }, icon = if (trackingCount == 0) Icons.Outlined.Sync else Icons.Outlined.Done, color = if (trackingCount == 0) defaultActionButtonColor else MaterialTheme.colorScheme.primary, onClick = onTrackingClicked, ) if (onWebViewClicked != null) { MangaActionButton( title = stringResource(MR.strings.action_web_view), icon = Icons.Outlined.Public, color = defaultActionButtonColor, onClick = onWebViewClicked, onLongClick = onWebViewLongClicked, ) } } } @Composable fun ExpandableMangaDescription( defaultExpandState: Boolean, description: String?, tagsProvider: () -> List?, notes: String, onTagSearch: (String) -> Unit, onCopyTagToClipboard: (tag: String) -> Unit, onEditNotes: () -> Unit, modifier: Modifier = Modifier, ) { Column(modifier = modifier) { val (expanded, onExpanded) = rememberSaveable { mutableStateOf(defaultExpandState) } val desc = description.takeIf { !it.isNullOrBlank() } ?: stringResource(MR.strings.description_placeholder) MangaSummary( description = desc, expanded = expanded, notes = notes, onEditNotesClicked = onEditNotes, modifier = Modifier .padding(top = 8.dp) .padding(horizontal = 16.dp) .clickableNoIndication { onExpanded(!expanded) }, ) val tags = tagsProvider() if (!tags.isNullOrEmpty()) { Box( modifier = Modifier .padding(top = 8.dp) .padding(vertical = 12.dp) .animateContentSize(animationSpec = spring()) .fillMaxWidth(), ) { var showMenu by remember { mutableStateOf(false) } var tagSelected by remember { mutableStateOf("") } DropdownMenu( expanded = showMenu, onDismissRequest = { showMenu = false }, ) { DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_search)) }, onClick = { onTagSearch(tagSelected) showMenu = false }, ) DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) }, onClick = { onCopyTagToClipboard(tagSelected) showMenu = false }, ) } if (expanded) { FlowRow( modifier = Modifier.padding(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { tags.forEach { TagsChip( modifier = DefaultTagChipModifier, text = it, onClick = { tagSelected = it showMenu = true }, ) } } } else { LazyRow( contentPadding = PaddingValues(horizontal = MaterialTheme.padding.medium), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { items(items = tags) { TagsChip( modifier = DefaultTagChipModifier, text = it, onClick = { tagSelected = it showMenu = true }, ) } } } } } } } @Composable private fun MangaAndSourceTitlesLarge( appBarPadding: Dp, manga: Manga, sourceName: String, isStubSource: Boolean, onCoverClick: () -> Unit, doSearch: (query: String, global: Boolean) -> Unit, ) { Column( modifier = Modifier .fillMaxWidth() .padding(start = 16.dp, top = appBarPadding + 16.dp, end = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { MangaCover.Book( modifier = Modifier.fillMaxWidth(0.65f), data = ImageRequest.Builder(LocalContext.current) .data(manga) .crossfade(true) .build(), contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Spacer(modifier = Modifier.height(16.dp)) MangaContentInfo( title = manga.title, author = manga.author, artist = manga.artist, status = manga.status, sourceName = sourceName, isStubSource = isStubSource, doSearch = doSearch, textAlign = TextAlign.Center, ) } } @Composable private fun MangaAndSourceTitlesSmall( appBarPadding: Dp, manga: Manga, sourceName: String, isStubSource: Boolean, onCoverClick: () -> Unit, doSearch: (query: String, global: Boolean) -> Unit, ) { Row( modifier = Modifier .fillMaxWidth() .padding(start = 16.dp, top = appBarPadding + 16.dp, end = 16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically, ) { MangaCover.Book( modifier = Modifier .sizeIn(maxWidth = 100.dp) .align(Alignment.Top), data = ImageRequest.Builder(LocalContext.current) .data(manga) .crossfade(true) .build(), contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Column( verticalArrangement = Arrangement.spacedBy(2.dp), ) { MangaContentInfo( title = manga.title, author = manga.author, artist = manga.artist, status = manga.status, sourceName = sourceName, isStubSource = isStubSource, doSearch = doSearch, ) } } } @Composable private fun ColumnScope.MangaContentInfo( title: String, author: String?, artist: String?, status: Long, sourceName: String, isStubSource: Boolean, doSearch: (query: String, global: Boolean) -> Unit, textAlign: TextAlign? = LocalTextStyle.current.textAlign, ) { val context = LocalContext.current Text( text = title.ifBlank { stringResource(MR.strings.unknown_title) }, style = MaterialTheme.typography.titleLarge, modifier = Modifier.clickableNoIndication( onLongClick = { if (title.isNotBlank()) { context.copyToClipboard( title, title, ) } }, onClick = { if (title.isNotBlank()) doSearch(title, true) }, ), textAlign = textAlign, ) Spacer(modifier = Modifier.height(2.dp)) Row( modifier = Modifier.secondaryItemAlpha(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Filled.PersonOutline, contentDescription = null, modifier = Modifier.size(16.dp), ) Text( text = author?.takeIf { it.isNotBlank() } ?: stringResource(MR.strings.unknown_author), style = MaterialTheme.typography.titleSmall, modifier = Modifier .clickableNoIndication( onLongClick = { if (!author.isNullOrBlank()) { context.copyToClipboard( author, author, ) } }, onClick = { if (!author.isNullOrBlank()) doSearch(author, true) }, ), textAlign = textAlign, ) } if (!artist.isNullOrBlank() && author != artist) { Row( modifier = Modifier.secondaryItemAlpha(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Filled.Brush, contentDescription = null, modifier = Modifier.size(16.dp), ) Text( text = artist, style = MaterialTheme.typography.titleSmall, modifier = Modifier .clickableNoIndication( onLongClick = { context.copyToClipboard(artist, artist) }, onClick = { doSearch(artist, true) }, ), textAlign = textAlign, ) } } Spacer(modifier = Modifier.height(2.dp)) Row( modifier = Modifier.secondaryItemAlpha(), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = when (status) { SManga.ONGOING.toLong() -> Icons.Outlined.Schedule SManga.COMPLETED.toLong() -> Icons.Outlined.DoneAll SManga.LICENSED.toLong() -> Icons.Outlined.AttachMoney SManga.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done SManga.CANCELLED.toLong() -> Icons.Outlined.Close SManga.ON_HIATUS.toLong() -> Icons.Outlined.Pause else -> Icons.Outlined.Block }, contentDescription = null, modifier = Modifier .padding(end = 4.dp) .size(16.dp), ) ProvideTextStyle(MaterialTheme.typography.bodyMedium) { Text( text = when (status) { SManga.ONGOING.toLong() -> stringResource(MR.strings.ongoing) SManga.COMPLETED.toLong() -> stringResource(MR.strings.completed) SManga.LICENSED.toLong() -> stringResource(MR.strings.licensed) SManga.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished) SManga.CANCELLED.toLong() -> stringResource(MR.strings.cancelled) SManga.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus) else -> stringResource(MR.strings.unknown) }, overflow = TextOverflow.Ellipsis, maxLines = 1, ) DotSeparatorText() if (isStubSource) { Icon( imageVector = Icons.Filled.Warning, contentDescription = null, modifier = Modifier .padding(end = 4.dp) .size(16.dp), tint = MaterialTheme.colorScheme.error, ) } Text( text = sourceName, modifier = Modifier.clickableNoIndication { doSearch( sourceName, false, ) }, overflow = TextOverflow.Ellipsis, maxLines = 1, ) } } } @Composable private fun descriptionAnnotator(loadImages: Boolean, linkStyle: SpanStyle) = remember(loadImages, linkStyle) { markdownAnnotator( annotate = { content, child -> if (!loadImages && child.type == MarkdownElementTypes.IMAGE) { val inlineLink = child.findChildOfType(MarkdownElementTypes.INLINE_LINK) val url = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_DESTINATION) ?.getUnescapedTextInNode(content) ?: inlineLink?.findChildOfType(MarkdownElementTypes.AUTOLINK) ?.findChildOfType(MarkdownTokenTypes.AUTOLINK) ?.getUnescapedTextInNode(content) ?: return@markdownAnnotator false val textNode = inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TITLE) ?: inlineLink?.findChildOfType(MarkdownElementTypes.LINK_TEXT) val altText = textNode?.findChildOfType(MarkdownTokenTypes.TEXT) ?.getUnescapedTextInNode(content).orEmpty() withLink(LinkAnnotation.Url(url = url)) { pushStyle(linkStyle) appendInlineContent(MARKDOWN_INLINE_IMAGE_TAG) append(altText) pop() } return@markdownAnnotator true } if (child.type in DISALLOWED_MARKDOWN_TYPES) { append(content.substring(child.startOffset, child.endOffset)) return@markdownAnnotator true } false }, config = markdownAnnotatorConfig( eolAsNewLine = true, ), ) } @Composable private fun MangaSummary( description: String, notes: String, expanded: Boolean, onEditNotesClicked: () -> Unit, modifier: Modifier = Modifier, ) { val preferences = remember { Injekt.get() } val loadImages = remember { preferences.imagesInDescription.get() } val animProgress by animateFloatAsState( targetValue = if (expanded) 1f else 0f, label = "summary", ) var infoHeight by remember { mutableIntStateOf(0) } Layout( modifier = modifier.clipToBounds(), contents = listOf( { Text( // Shows at least 3 lines if no notes // when there are notes show 6 text = if (notes.isBlank()) "\n\n" else "\n\n\n\n\n", style = MaterialTheme.typography.bodyMedium, ) }, { Column( modifier = Modifier.onSizeChanged { size -> infoHeight = size.height }, ) { MangaNotesSection( content = notes, expanded = expanded, onEditNotes = onEditNotesClicked, ) SelectionContainer { MarkdownRender( content = description, modifier = Modifier.secondaryItemAlpha(), annotator = descriptionAnnotator( loadImages = loadImages, linkStyle = getMarkdownLinkStyle().toSpanStyle(), ), loadImages = loadImages, ) } } }, { val colors = listOf(Color.Transparent, MaterialTheme.colorScheme.background) Box( modifier = Modifier.background(Brush.verticalGradient(colors = colors)), contentAlignment = Alignment.Center, ) { val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down) Icon( painter = rememberAnimatedVectorPainter(image, !expanded), contentDescription = stringResource( if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand, ), tint = MaterialTheme.colorScheme.onBackground, modifier = Modifier.background(Brush.radialGradient(colors = colors.asReversed())), ) } }, ), ) { (shrunk, actual, scrim), constraints -> val shrunkHeight = shrunk.single() .measure(constraints) .height val heightDelta = infoHeight - shrunkHeight val scrimHeight = 24.dp.roundToPx() val actualPlaceable = actual.single() .measure(constraints) val scrimPlaceable = scrim.single() .measure(Constraints.fixed(width = constraints.maxWidth, height = scrimHeight)) val currentHeight = shrunkHeight + ((heightDelta + scrimHeight) * animProgress).roundToInt() layout(constraints.maxWidth, currentHeight) { actualPlaceable.place(0, 0) val scrimY = currentHeight - scrimHeight scrimPlaceable.place(0, scrimY) } } } private val DefaultTagChipModifier = Modifier.padding(vertical = 4.dp) @Composable private fun TagsChip( text: String, modifier: Modifier = Modifier, onClick: () -> Unit, ) { CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides 0.dp) { SuggestionChip( modifier = modifier, onClick = onClick, label = { Text(text = text, style = MaterialTheme.typography.bodySmall) }, ) } } @Composable private fun RowScope.MangaActionButton( title: String, icon: ImageVector, color: Color, onClick: () -> Unit, onLongClick: (() -> Unit)? = null, ) { TextButton( onClick = onClick, modifier = Modifier.weight(1f), onLongClick = onLongClick, ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Icon( imageVector = icon, contentDescription = null, tint = color, modifier = Modifier.size(20.dp), ) Spacer(Modifier.height(4.dp)) Text( text = title, color = color, fontSize = 12.sp, textAlign = TextAlign.Center, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaNotesDisplay.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.tween import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import com.mohamedrejeb.richeditor.model.rememberRichTextState import com.mohamedrejeb.richeditor.ui.material3.RichText private val FADE_TIME = tween(500) @Composable fun MangaNotesDisplay( content: String, modifier: Modifier, ) { val alpha = remember { Animatable(1f) } var contentUpdatedOnce by remember { mutableStateOf(false) } val richTextState = rememberRichTextState() val primaryColor = MaterialTheme.colorScheme.primary LaunchedEffect(content) { richTextState.setMarkdown(content) if (!contentUpdatedOnce) { contentUpdatedOnce = true return@LaunchedEffect } alpha.snapTo(targetValue = 0f) alpha.animateTo(targetValue = 1f, animationSpec = FADE_TIME) } LaunchedEffect(Unit) { richTextState.config.unorderedListIndent = 4 richTextState.config.orderedListIndent = 20 } LaunchedEffect(primaryColor) { richTextState.config.linkColor = primaryColor } SelectionContainer { RichText( modifier = modifier // Only animate size if the notes changes .then(if (contentUpdatedOnce) Modifier.animateContentSize() else Modifier) .alpha(alpha.value), style = MaterialTheme.typography.bodyMedium, state = richTextState, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaNotesSection.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.EditNote import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Button import tachiyomi.presentation.core.components.material.ButtonDefaults import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun MangaNotesSection( content: String, expanded: Boolean, onEditNotes: () -> Unit, modifier: Modifier = Modifier, ) { if (content.isBlank()) return Column( modifier = modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { MangaNotesDisplay( content = content, modifier = modifier.fillMaxWidth(), ) if (expanded) { Button( onClick = onEditNotes, colors = ButtonDefaults.buttonColors( containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.primary, ), shape = RoundedCornerShape(8.dp), modifier = Modifier .padding(horizontal = 16.dp, vertical = 4.dp), ) { Row( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Filled.EditNote, contentDescription = null, modifier = Modifier .size(16.dp), ) Text( stringResource(MR.strings.action_edit_notes), ) } } } HorizontalDivider( modifier = Modifier .padding( top = if (expanded) 0.dp else 12.dp, bottom = if (expanded) 16.dp else 12.dp, ), ) } } @PreviewLightDark @Composable private fun MangaNotesSectionPreview() { MangaNotesSection( onEditNotes = {}, expanded = true, content = "# Hello world\ntest1234 hi there!", ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaNotesTextArea.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyRow import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.FormatListBulleted import androidx.compose.material.icons.outlined.FormatBold import androidx.compose.material.icons.outlined.FormatItalic import androidx.compose.material.icons.outlined.FormatListNumbered import androidx.compose.material.icons.outlined.FormatUnderlined import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import com.mohamedrejeb.richeditor.model.rememberRichTextState import com.mohamedrejeb.richeditor.ui.material3.RichTextEditor import com.mohamedrejeb.richeditor.ui.material3.RichTextEditorDefaults.richTextEditorColors import eu.kanade.tachiyomi.ui.manga.notes.MangaNotesScreen import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import kotlin.time.Duration.Companion.seconds private const val MAX_LENGTH = 250 private const val MAX_LENGTH_WARN = MAX_LENGTH * 0.9 @Composable fun MangaNotesTextArea( state: MangaNotesScreen.State, onUpdate: (String) -> Unit, modifier: Modifier = Modifier, ) { val scope = rememberCoroutineScope() val richTextState = rememberRichTextState() val primaryColor = MaterialTheme.colorScheme.primary DisposableEffect(scope, richTextState) { snapshotFlow { richTextState.annotatedString } .debounce(0.25.seconds) .distinctUntilChanged() .map { richTextState.toMarkdown() } .onEach { onUpdate(it) } .launchIn(scope) onDispose { onUpdate(richTextState.toMarkdown()) } } LaunchedEffect(Unit) { richTextState.setMarkdown(state.notes) richTextState.config.unorderedListIndent = 4 richTextState.config.orderedListIndent = 20 } LaunchedEffect(primaryColor) { richTextState.config.linkColor = primaryColor } val focusRequester = remember { FocusRequester() } LaunchedEffect(focusRequester) { focusRequester.requestFocus() } val textLength = remember(richTextState.annotatedString) { richTextState.toText().length } Column( modifier = modifier .padding(horizontal = MaterialTheme.padding.small) .fillMaxSize(), ) { RichTextEditor( state = richTextState, textStyle = MaterialTheme.typography.bodyLarge, maxLength = MAX_LENGTH, placeholder = { Text(text = stringResource(MR.strings.notes_placeholder)) }, colors = richTextEditorColors( containerColor = Color.Transparent, focusedIndicatorColor = Color.Transparent, unfocusedIndicatorColor = Color.Transparent, ), contentPadding = PaddingValues( horizontal = MaterialTheme.padding.medium, ), modifier = Modifier .weight(1f) .fillMaxWidth() .focusRequester(focusRequester), ) Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier .padding(vertical = MaterialTheme.padding.small) .fillMaxWidth(), ) { LazyRow( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(2.dp), ) { item { MangaNotesTextAreaButton( onClick = { richTextState.toggleSpanStyle(SpanStyle(fontWeight = FontWeight.Bold)) }, isSelected = richTextState.currentSpanStyle.fontWeight == FontWeight.Bold, icon = Icons.Outlined.FormatBold, ) } item { MangaNotesTextAreaButton( onClick = { richTextState.toggleSpanStyle(SpanStyle(fontStyle = FontStyle.Italic)) }, isSelected = richTextState.currentSpanStyle.fontStyle == FontStyle.Italic, icon = Icons.Outlined.FormatItalic, ) } item { MangaNotesTextAreaButton( onClick = { richTextState.toggleSpanStyle(SpanStyle(textDecoration = TextDecoration.Underline)) }, isSelected = richTextState.currentSpanStyle.textDecoration ?.contains(TextDecoration.Underline) ?: false, icon = Icons.Outlined.FormatUnderlined, ) } item { VerticalDivider( modifier = Modifier .padding(horizontal = MaterialTheme.padding.extraSmall) .height(MaterialTheme.padding.large), ) } item { MangaNotesTextAreaButton( onClick = { richTextState.toggleUnorderedList() }, isSelected = richTextState.isUnorderedList, icon = Icons.AutoMirrored.Outlined.FormatListBulleted, ) } item { MangaNotesTextAreaButton( onClick = { richTextState.toggleOrderedList() }, isSelected = richTextState.isOrderedList, icon = Icons.Outlined.FormatListNumbered, ) } } Box( contentAlignment = Alignment.Center, ) { Text( text = (MAX_LENGTH - textLength).toString(), color = if (textLength > MAX_LENGTH_WARN) { MaterialTheme.colorScheme.error } else { Color.Unspecified }, modifier = Modifier.padding(MaterialTheme.padding.extraSmall), ) } } } } @Composable fun MangaNotesTextAreaButton( onClick: () -> Unit, icon: ImageVector, isSelected: Boolean, modifier: Modifier = Modifier, ) { Box( modifier = modifier .clip(MaterialTheme.shapes.small) .clickable( onClick = onClick, enabled = true, role = Role.Button, ), contentAlignment = Alignment.Center, ) { Icon( imageVector = icon, contentDescription = icon.name, tint = if (isSelected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.primary, modifier = Modifier .background(color = if (isSelected) MaterialTheme.colorScheme.onBackground else Color.Transparent) .padding(MaterialTheme.padding.extraSmall), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.FlipToBack import androidx.compose.material.icons.outlined.SelectAll import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.DownloadDropdownMenu import eu.kanade.presentation.manga.DownloadAction import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable fun MangaToolbar( title: String, hasFilters: Boolean, navigateUp: () -> Unit, onClickFilter: () -> Unit, onClickShare: (() -> Unit)?, onClickDownload: ((DownloadAction) -> Unit)?, onClickEditCategory: (() -> Unit)?, onClickRefresh: () -> Unit, onClickMigrate: (() -> Unit)?, onClickEditNotes: () -> Unit, // For action mode actionModeCounter: Int, onCancelActionMode: () -> Unit, onSelectAll: () -> Unit, onInvertSelection: () -> Unit, titleAlphaProvider: () -> Float, backgroundAlphaProvider: () -> Float, modifier: Modifier = Modifier, ) { val isActionMode = actionModeCounter > 0 AppBar( titleContent = { if (isActionMode) { AppBarTitle(actionModeCounter.toString()) } else { AppBarTitle(title, modifier = Modifier.alpha(titleAlphaProvider())) } }, modifier = modifier, backgroundColor = MaterialTheme.colorScheme .surfaceColorAtElevation(3.dp) .copy(alpha = if (isActionMode) 1f else backgroundAlphaProvider()), navigateUp = navigateUp, actions = { var downloadExpanded by remember { mutableStateOf(false) } if (onClickDownload != null) { val onDismissRequest = { downloadExpanded = false } DownloadDropdownMenu( expanded = downloadExpanded, onDismissRequest = onDismissRequest, onDownloadClicked = onClickDownload, ) } val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current AppBarActions( actions = persistentListOf().builder().apply { if (isActionMode) { add( AppBar.Action( title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onSelectAll, ), ) add( AppBar.Action( title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onInvertSelection, ), ) return@apply } if (onClickDownload != null) { add( AppBar.Action( title = stringResource(MR.strings.manga_download), icon = Icons.Outlined.Download, onClick = { downloadExpanded = !downloadExpanded }, ), ) } add( AppBar.Action( title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = filterTint, onClick = onClickFilter, ), ) add( AppBar.OverflowAction( title = stringResource(MR.strings.action_webview_refresh), onClick = onClickRefresh, ), ) if (onClickEditCategory != null) { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_edit_categories), onClick = onClickEditCategory, ), ) } if (onClickMigrate != null) { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_migrate), onClick = onClickMigrate, ), ) } if (onClickShare != null) { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_share), onClick = onClickShare, ), ) } add( AppBar.OverflowAction( title = stringResource(MR.strings.action_notes), onClick = onClickEditNotes, ), ) } .build(), ) }, isActionMode = isActionMode, onCancelActionMode = onCancelActionMode, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MarkdownRender.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.InlineTextContent import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Image import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.FirstBaseline import androidx.compose.ui.text.Placeholder import androidx.compose.ui.text.PlaceholderVerticalAlign import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextLinkStyles import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.mikepenz.markdown.coil3.Coil3ImageTransformerImpl import com.mikepenz.markdown.compose.LocalBulletListHandler import com.mikepenz.markdown.compose.Markdown import com.mikepenz.markdown.compose.components.markdownComponents import com.mikepenz.markdown.compose.elements.MarkdownBulletList import com.mikepenz.markdown.compose.elements.MarkdownDivider import com.mikepenz.markdown.compose.elements.MarkdownOrderedList import com.mikepenz.markdown.compose.elements.MarkdownTable import com.mikepenz.markdown.compose.elements.MarkdownTableHeader import com.mikepenz.markdown.compose.elements.MarkdownTableRow import com.mikepenz.markdown.compose.elements.MarkdownText import com.mikepenz.markdown.compose.elements.listDepth import com.mikepenz.markdown.model.DefaultMarkdownColors import com.mikepenz.markdown.model.DefaultMarkdownInlineContent import com.mikepenz.markdown.model.DefaultMarkdownTypography import com.mikepenz.markdown.model.MarkdownAnnotator import com.mikepenz.markdown.model.MarkdownColors import com.mikepenz.markdown.model.MarkdownPadding import com.mikepenz.markdown.model.MarkdownTypography import com.mikepenz.markdown.model.NoOpImageTransformerImpl import com.mikepenz.markdown.model.markdownAnnotator import com.mikepenz.markdown.model.rememberMarkdownState import org.intellij.markdown.MarkdownTokenTypes.Companion.HTML_TAG import org.intellij.markdown.flavours.MarkdownFlavourDescriptor import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor import org.intellij.markdown.flavours.commonmark.CommonMarkMarkerProcessor import org.intellij.markdown.flavours.gfm.table.GitHubTableMarkerProvider import org.intellij.markdown.parser.MarkerProcessor import org.intellij.markdown.parser.MarkerProcessorFactory import org.intellij.markdown.parser.ProductionHolder import org.intellij.markdown.parser.constraints.CommonMarkdownConstraints import org.intellij.markdown.parser.constraints.MarkdownConstraints import org.intellij.markdown.parser.markerblocks.MarkerBlockProvider import org.intellij.markdown.parser.markerblocks.providers.AtxHeaderProvider import org.intellij.markdown.parser.markerblocks.providers.BlockQuoteProvider import org.intellij.markdown.parser.markerblocks.providers.CodeBlockProvider import org.intellij.markdown.parser.markerblocks.providers.CodeFenceProvider import org.intellij.markdown.parser.markerblocks.providers.HorizontalRuleProvider import org.intellij.markdown.parser.markerblocks.providers.ListMarkerProvider import org.intellij.markdown.parser.markerblocks.providers.SetextHeaderProvider import tachiyomi.presentation.core.components.material.padding const val MARKDOWN_INLINE_IMAGE_TAG = "MARKDOWN_INLINE_IMAGE" @Composable fun MarkdownRender( content: String, modifier: Modifier = Modifier, flavour: MarkdownFlavourDescriptor = SimpleMarkdownFlavourDescriptor, annotator: MarkdownAnnotator = remember { markdownAnnotator() }, loadImages: Boolean = true, ) { Markdown( markdownState = rememberMarkdownState( content = content, flavour = flavour, immediate = true, ), annotator = annotator, colors = getMarkdownColors(), typography = getMarkdownTypography(), padding = markdownPadding, components = markdownComponents, imageTransformer = remember(loadImages) { if (loadImages) Coil3ImageTransformerImpl else NoOpImageTransformerImpl() }, inlineContent = getMarkdownInlineContent(), modifier = modifier, ) } @Composable @ReadOnlyComposable private fun getMarkdownColors(): MarkdownColors { val codeBackground = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.1f) return DefaultMarkdownColors( text = MaterialTheme.colorScheme.onSurface, codeBackground = codeBackground, inlineCodeBackground = codeBackground, dividerColor = MaterialTheme.colorScheme.outlineVariant, tableBackground = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.05f), ) } @Composable @ReadOnlyComposable fun getMarkdownLinkStyle() = MaterialTheme.typography.bodyMedium.copy( color = MaterialTheme.colorScheme.primary, fontWeight = FontWeight.Bold, ) @Composable @ReadOnlyComposable private fun getMarkdownTypography(): MarkdownTypography { val link = getMarkdownLinkStyle() return DefaultMarkdownTypography( h1 = MaterialTheme.typography.headlineMedium, h2 = MaterialTheme.typography.headlineSmall, h3 = MaterialTheme.typography.titleLarge, h4 = MaterialTheme.typography.titleMedium, h5 = MaterialTheme.typography.titleSmall, h6 = MaterialTheme.typography.bodyLarge, text = MaterialTheme.typography.bodyMedium, code = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), inlineCode = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), quote = MaterialTheme.typography.bodyMedium.plus(SpanStyle(fontStyle = FontStyle.Italic)), paragraph = MaterialTheme.typography.bodyMedium, ordered = MaterialTheme.typography.bodyMedium, bullet = MaterialTheme.typography.bodyMedium, list = MaterialTheme.typography.bodyMedium, textLink = TextLinkStyles(style = link.toSpanStyle()), table = MaterialTheme.typography.bodyMedium, ) } private val markdownPadding = object : MarkdownPadding { override val block: Dp = 2.dp override val blockQuote: PaddingValues = PaddingValues(horizontal = 16.dp, vertical = 0.dp) override val blockQuoteBar: PaddingValues.Absolute = PaddingValues.Absolute( left = 4.dp, top = 2.dp, right = 4.dp, bottom = 2.dp, ) override val blockQuoteText: PaddingValues = PaddingValues(vertical = 4.dp) override val codeBlock: PaddingValues = PaddingValues(8.dp) override val list: Dp = 0.dp override val listIndent: Dp = 8.dp override val listItemBottom: Dp = 0.dp override val listItemTop: Dp = 0.dp } private val markdownComponents = markdownComponents( horizontalRule = { MarkdownDivider( modifier = Modifier .padding(vertical = MaterialTheme.padding.extraSmall) .fillMaxWidth(), ) }, orderedList = { ol -> Column(modifier = Modifier.padding(start = MaterialTheme.padding.small)) { MarkdownOrderedList( content = ol.content, node = ol.node, style = ol.typography.ordered, depth = ol.listDepth, markerModifier = { Modifier.alignBy(FirstBaseline) }, listModifier = { Modifier.alignBy(FirstBaseline) }, ) } }, unorderedList = { ul -> val markers = listOf("•", "◦", "▸", "▹") CompositionLocalProvider( LocalBulletListHandler provides { _, _, _, _, _ -> "${markers[ul.listDepth % markers.size]} " }, ) { Column(modifier = Modifier.padding(start = MaterialTheme.padding.small)) { MarkdownBulletList( content = ul.content, node = ul.node, style = ul.typography.bullet, markerModifier = { Modifier.alignBy(FirstBaseline) }, listModifier = { Modifier.alignBy(FirstBaseline) }, ) } } }, table = { t -> MarkdownTable( content = t.content, node = t.node, style = t.typography.text, headerBlock = { content, header, tableWidth, style -> MarkdownTableHeader( content = content, header = header, tableWidth = tableWidth, style = style, maxLines = Int.MAX_VALUE, ) }, rowBlock = { content, header, tableWidth, style -> MarkdownTableRow( content = content, header = header, tableWidth = tableWidth, style = style, maxLines = Int.MAX_VALUE, ) }, ) }, custom = { type, model -> if (type in DISALLOWED_MARKDOWN_TYPES) { MarkdownText( content = model.content.substring(model.node.startOffset, model.node.endOffset), style = model.typography.text, ) } }, ) @Composable @ReadOnlyComposable private fun getMarkdownInlineContent() = DefaultMarkdownInlineContent( inlineContent = mapOf( MARKDOWN_INLINE_IMAGE_TAG to InlineTextContent( placeholder = Placeholder( width = MaterialTheme.typography.bodyMedium.fontSize * 1.25, height = MaterialTheme.typography.bodyMedium.fontSize * 1.25, placeholderVerticalAlign = PlaceholderVerticalAlign.TextCenter, ), children = { Icon( imageVector = Icons.Outlined.Image, contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) }, ), ), ) private object SimpleMarkdownFlavourDescriptor : CommonMarkFlavourDescriptor() { override val markerProcessorFactory: MarkerProcessorFactory = SimpleMarkdownProcessFactory } private object SimpleMarkdownProcessFactory : MarkerProcessorFactory { override fun createMarkerProcessor(productionHolder: ProductionHolder): MarkerProcessor<*> { return SimpleMarkdownMarkerProcessor(productionHolder, CommonMarkdownConstraints.BASE) } } /** * Like `CommonMarkFlavour`, but with html blocks and reference links removed and * table support added */ private class SimpleMarkdownMarkerProcessor( productionHolder: ProductionHolder, constraints: MarkdownConstraints, ) : CommonMarkMarkerProcessor(productionHolder, constraints) { private val markerBlockProviders = listOf( CodeBlockProvider(), HorizontalRuleProvider(), CodeFenceProvider(), SetextHeaderProvider(), BlockQuoteProvider(), ListMarkerProvider(), AtxHeaderProvider(), GitHubTableMarkerProvider(), ) override fun getMarkerBlockProviders(): List> { return markerBlockProviders } } val DISALLOWED_MARKDOWN_TYPES = arrayOf(HTML_TAG) ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun MissingChapterCountListItem( count: Int, modifier: Modifier = Modifier, ) { Row( modifier = modifier .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ) .secondaryItemAlpha(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium), ) { HorizontalDivider(modifier = Modifier.weight(1f)) Text( text = pluralStringResource(MR.plurals.missing_chapters, count = count, count), style = MaterialTheme.typography.labelMedium, ) HorizontalDivider(modifier = Modifier.weight(1f)) } } @PreviewLightDark @Composable private fun Preview() { TachiyomiPreviewTheme { Surface { MissingChapterCountListItem(count = 42) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/manga/components/ScanlatorFilterDialog.kt ================================================ package eu.kanade.presentation.manga.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.CheckBoxOutlineBlank import androidx.compose.material.icons.rounded.DisabledByDefault import androidx.compose.material3.AlertDialog import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun ScanlatorFilterDialog( availableScanlators: Set, excludedScanlators: Set, onDismissRequest: () -> Unit, onConfirm: (Set) -> Unit, ) { val sortedAvailableScanlators = remember(availableScanlators) { availableScanlators.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it }) } val mutableExcludedScanlators = remember(excludedScanlators) { excludedScanlators.toMutableStateList() } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = stringResource(MR.strings.exclude_scanlators)) }, text = textFunc@{ if (sortedAvailableScanlators.isEmpty()) { Text(text = stringResource(MR.strings.no_scanlators_found)) return@textFunc } Box { val state = rememberLazyListState() LazyColumn(state = state) { sortedAvailableScanlators.forEach { scanlator -> item { val isExcluded = mutableExcludedScanlators.contains(scanlator) Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .clickable { if (isExcluded) { mutableExcludedScanlators.remove(scanlator) } else { mutableExcludedScanlators.add(scanlator) } } .minimumInteractiveComponentSize() .clip(MaterialTheme.shapes.small) .fillMaxWidth() .padding(horizontal = MaterialTheme.padding.small), ) { Icon( imageVector = if (isExcluded) { Icons.Rounded.DisabledByDefault } else { Icons.Rounded.CheckBoxOutlineBlank }, tint = if (isExcluded) { MaterialTheme.colorScheme.primary } else { LocalContentColor.current }, contentDescription = null, ) Text( text = scanlator, style = MaterialTheme.typography.bodyMedium, modifier = Modifier.padding(start = 24.dp), ) } } } } if (state.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter)) if (state.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter)) } }, properties = DialogProperties( usePlatformDefaultWidth = true, ), confirmButton = { if (sortedAvailableScanlators.isEmpty()) { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } } else { FlowRow { if (mutableExcludedScanlators.isEmpty()) { TextButton(onClick = { mutableExcludedScanlators.addAll(availableScanlators) }) { Text(text = stringResource(MR.strings.action_select_all)) } } else { TextButton(onClick = mutableExcludedScanlators::clear) { Text(text = stringResource(MR.strings.action_reset)) } } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { onConfirm(mutableExcludedScanlators.toSet()) onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_ok)) } } } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/LogoHeader.kt ================================================ package eu.kanade.presentation.more import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.R @Composable fun LogoHeader() { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { Icon( painter = painterResource(R.drawable.ic_mihon), contentDescription = null, tint = MaterialTheme.colorScheme.onSurface, modifier = Modifier .padding(vertical = 56.dp) .size(64.dp), ) HorizontalDivider() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt ================================================ package eu.kanade.presentation.more import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material.icons.automirrored.outlined.Label import androidx.compose.material.icons.outlined.AttachMoney import androidx.compose.material.icons.outlined.CloudOff import androidx.compose.material.icons.outlined.GetApp import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.QueryStats import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.Storage import androidx.compose.material3.HorizontalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.vectorResource import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.more.DownloadQueueState import tachiyomi.core.common.Constants import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource @Composable fun MoreScreen( downloadQueueStateProvider: () -> DownloadQueueState, downloadedOnly: Boolean, onDownloadedOnlyChange: (Boolean) -> Unit, incognitoMode: Boolean, onIncognitoModeChange: (Boolean) -> Unit, onClickDownloadQueue: () -> Unit, onClickCategories: () -> Unit, onClickStats: () -> Unit, onClickDataAndStorage: () -> Unit, onClickSettings: () -> Unit, onClickAbout: () -> Unit, ) { val uriHandler = LocalUriHandler.current Scaffold { contentPadding -> ScrollbarLazyColumn( modifier = Modifier.padding(contentPadding), ) { item { LogoHeader() } item { SwitchPreferenceWidget( title = stringResource(MR.strings.label_downloaded_only), subtitle = stringResource(MR.strings.downloaded_only_summary), icon = Icons.Outlined.CloudOff, checked = downloadedOnly, onCheckedChanged = onDownloadedOnlyChange, ) } item { SwitchPreferenceWidget( title = stringResource(MR.strings.pref_incognito_mode), subtitle = stringResource(MR.strings.pref_incognito_mode_summary), icon = ImageVector.vectorResource(R.drawable.ic_glasses_24dp), checked = incognitoMode, onCheckedChanged = onIncognitoModeChange, ) } item { HorizontalDivider() } item { val downloadQueueState = downloadQueueStateProvider() TextPreferenceWidget( title = stringResource(MR.strings.label_download_queue), subtitle = when (downloadQueueState) { DownloadQueueState.Stopped -> null is DownloadQueueState.Paused -> { val pending = downloadQueueState.pending if (pending == 0) { stringResource(MR.strings.paused) } else { "${stringResource(MR.strings.paused)} • ${ pluralStringResource( MR.plurals.download_queue_summary, count = pending, pending, ) }" } } is DownloadQueueState.Downloading -> { val pending = downloadQueueState.pending pluralStringResource(MR.plurals.download_queue_summary, count = pending, pending) } }, icon = Icons.Outlined.GetApp, onPreferenceClick = onClickDownloadQueue, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.categories), icon = Icons.AutoMirrored.Outlined.Label, onPreferenceClick = onClickCategories, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.label_stats), icon = Icons.Outlined.QueryStats, onPreferenceClick = onClickStats, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.label_data_storage), icon = Icons.Outlined.Storage, onPreferenceClick = onClickDataAndStorage, ) } item { HorizontalDivider() } item { TextPreferenceWidget( title = stringResource(MR.strings.label_settings), icon = Icons.Outlined.Settings, onPreferenceClick = onClickSettings, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.pref_category_about), icon = Icons.Outlined.Info, onPreferenceClick = onClickAbout, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.label_help), icon = Icons.AutoMirrored.Outlined.HelpOutline, onPreferenceClick = { uriHandler.openUri(Constants.URL_HELP) }, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.label_donate), icon = Icons.Outlined.AttachMoney, onPreferenceClick = { uriHandler.openUri(Constants.URL_DONATE) }, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt ================================================ package eu.kanade.presentation.more import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.OpenInNew import androidx.compose.material.icons.outlined.NewReleases import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.manga.components.MarkdownRender import eu.kanade.presentation.theme.TachiyomiPreviewTheme import org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable fun NewUpdateScreen( versionName: String, changelogInfo: String, onOpenInBrowser: () -> Unit, onRejectUpdate: () -> Unit, onAcceptUpdate: () -> Unit, ) { InfoScreen( icon = Icons.Outlined.NewReleases, headingText = stringResource(MR.strings.update_check_notification_update_available), subtitleText = versionName, acceptText = stringResource(MR.strings.update_check_confirm), onAcceptClick = onAcceptUpdate, rejectText = stringResource(MR.strings.action_not_now), onRejectClick = onRejectUpdate, ) { Column( modifier = Modifier .fillMaxWidth() .padding(vertical = MaterialTheme.padding.large), ) { MarkdownRender( content = changelogInfo, flavour = GFMFlavourDescriptor(), ) TextButton( onClick = onOpenInBrowser, modifier = Modifier.padding(top = MaterialTheme.padding.small), ) { Text(text = stringResource(MR.strings.update_check_open)) Spacer(modifier = Modifier.width(MaterialTheme.padding.extraSmall)) Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) } } } } @PreviewLightDark @Composable private fun NewUpdateScreenPreview() { TachiyomiPreviewTheme { NewUpdateScreen( versionName = "v0.99.9", changelogInfo = """ ## Yay Foobar ### More info - Hello - World """.trimIndent(), onOpenInBrowser = {}, onRejectUpdate = {}, onAcceptUpdate = {}, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/onboarding/GuidesStep.kt ================================================ package eu.kanade.presentation.more.onboarding import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource internal class GuidesStep( private val onRestoreBackup: () -> Unit, ) : OnboardingStep { override val isComplete: Boolean = true @Composable override fun Content() { val handler = LocalUriHandler.current Column( modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Text(stringResource(MR.strings.onboarding_guides_new_user, stringResource(MR.strings.app_name))) Button( modifier = Modifier.fillMaxWidth(), onClick = { handler.openUri(GETTING_STARTED_URL) }, ) { Text(stringResource(MR.strings.getting_started_guide)) } HorizontalDivider( modifier = Modifier.padding(vertical = 8.dp), color = MaterialTheme.colorScheme.onPrimaryContainer, ) Text(stringResource(MR.strings.onboarding_guides_returning_user, stringResource(MR.strings.app_name))) Button( modifier = Modifier.fillMaxWidth(), onClick = onRestoreBackup, ) { Text(stringResource(MR.strings.pref_restore_backup)) } } } } const val GETTING_STARTED_URL = "https://mihon.app/docs/guides/getting-started" @PreviewLightDark @Composable private fun GuidesStepPreview() { TachiyomiPreviewTheme { GuidesStep( onRestoreBackup = {}, ).Content() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/onboarding/OnboardingScreen.kt ================================================ package eu.kanade.presentation.more.onboarding import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedContent import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.RocketLaunch import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import soup.compose.material.motion.animation.materialSharedAxisX import soup.compose.material.motion.animation.rememberSlideDistance import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable fun OnboardingScreen( onComplete: () -> Unit, onRestoreBackup: () -> Unit, ) { val slideDistance = rememberSlideDistance() var currentStep by rememberSaveable { mutableIntStateOf(0) } val steps = remember { listOf( ThemeStep(), StorageStep(), PermissionStep(), GuidesStep(onRestoreBackup = onRestoreBackup), ) } val isLastStep = currentStep == steps.lastIndex BackHandler(enabled = currentStep != 0) { currentStep-- } InfoScreen( icon = Icons.Outlined.RocketLaunch, headingText = stringResource(MR.strings.onboarding_heading), subtitleText = stringResource(MR.strings.onboarding_description), acceptText = stringResource( if (isLastStep) { MR.strings.onboarding_action_finish } else { MR.strings.onboarding_action_next }, ), canAccept = steps[currentStep].isComplete, onAcceptClick = { if (isLastStep) { onComplete() } else { currentStep++ } }, ) { Box( modifier = Modifier .padding(vertical = MaterialTheme.padding.small) .clip(MaterialTheme.shapes.small) .fillMaxSize() .background(MaterialTheme.colorScheme.surfaceVariant), ) { AnimatedContent( targetState = currentStep, transitionSpec = { materialSharedAxisX( forward = targetState > initialState, slideDistance = slideDistance, ) }, label = "stepContent", ) { steps[it].Content() } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/onboarding/OnboardingStep.kt ================================================ package eu.kanade.presentation.more.onboarding import androidx.compose.runtime.Composable internal interface OnboardingStep { val isComplete: Boolean @Composable fun Content() } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/onboarding/PermissionStep.kt ================================================ package eu.kanade.presentation.more.onboarding import android.Manifest import android.annotation.SuppressLint import android.content.Intent import android.content.pm.PackageManager import android.os.Build import android.os.PowerManager import android.provider.Settings import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Check import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.ListItem import androidx.compose.material3.ListItemDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.core.content.getSystemService import androidx.core.net.toUri import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.compose.LocalLifecycleOwner import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState import eu.kanade.tachiyomi.core.security.PrivacyPreferences import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission import eu.kanade.tachiyomi.util.system.telemetryIncluded import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import tachiyomi.presentation.core.util.secondaryItemAlpha import uy.kohesive.injekt.injectLazy internal class PermissionStep : OnboardingStep { private val privacyPreferences: PrivacyPreferences by injectLazy() private var notificationGranted by mutableStateOf(false) private var batteryGranted by mutableStateOf(false) override val isComplete: Boolean = true @Composable override fun Content() { val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current val installGranted = rememberRequestPackageInstallsPermissionState() DisposableEffect(lifecycleOwner.lifecycle) { val observer = object : DefaultLifecycleObserver { override fun onResume(owner: LifecycleOwner) { notificationGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { context.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED } else { true } batteryGranted = context.getSystemService()!! .isIgnoringBatteryOptimizations(context.packageName) } } lifecycleOwner.lifecycle.addObserver(observer) onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } } Column { PermissionCheckbox( title = stringResource(MR.strings.onboarding_permission_install_apps), subtitle = stringResource(MR.strings.onboarding_permission_install_apps_description), granted = installGranted, onButtonClick = { context.launchRequestPackageInstallsPermission() }, ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { val permissionRequester = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission(), onResult = { // no-op. resulting checks is being done on resume }, ) PermissionCheckbox( title = stringResource(MR.strings.onboarding_permission_notifications), subtitle = stringResource(MR.strings.onboarding_permission_notifications_description), granted = notificationGranted, onButtonClick = { permissionRequester.launch(Manifest.permission.POST_NOTIFICATIONS) }, ) } PermissionCheckbox( title = stringResource(MR.strings.onboarding_permission_ignore_battery_opts), subtitle = stringResource(MR.strings.onboarding_permission_ignore_battery_opts_description), granted = batteryGranted, onButtonClick = { @SuppressLint("BatteryLife") val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { data = "package:${context.packageName}".toUri() } context.startActivity(intent) }, ) if (!telemetryIncluded) return@Column HorizontalDivider( modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp), color = MaterialTheme.colorScheme.onPrimaryContainer, ) val crashlyticsPref = privacyPreferences.crashlytics val crashlytics by crashlyticsPref.collectAsState() PermissionSwitch( title = stringResource(MR.strings.onboarding_permission_crashlytics), subtitle = stringResource(MR.strings.onboarding_permission_crashlytics_description), granted = crashlytics, onToggleChange = crashlyticsPref::set, ) val analyticsPref = privacyPreferences.analytics val analytics by analyticsPref.collectAsState() PermissionSwitch( title = stringResource(MR.strings.onboarding_permission_analytics), subtitle = stringResource(MR.strings.onboarding_permission_analytics_description), granted = analytics, onToggleChange = analyticsPref::set, ) } } @Composable private fun SectionHeader( text: String, modifier: Modifier = Modifier, ) { Text( text = text, style = MaterialTheme.typography.titleLarge, modifier = modifier .padding(horizontal = 16.dp) .secondaryItemAlpha(), ) } @Composable private fun PermissionCheckbox( title: String, subtitle: String, granted: Boolean, modifier: Modifier = Modifier, onButtonClick: () -> Unit, ) { ListItem( modifier = modifier, headlineContent = { Text(text = title) }, supportingContent = { Text(text = subtitle) }, trailingContent = { OutlinedButton( enabled = !granted, onClick = onButtonClick, ) { if (granted) { Icon( imageVector = Icons.Default.Check, contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) } else { Text(stringResource(MR.strings.onboarding_permission_action_grant)) } } }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), ) } @Composable private fun PermissionSwitch( title: String, subtitle: String, granted: Boolean, modifier: Modifier = Modifier, onToggleChange: (Boolean) -> Unit, ) { ListItem( modifier = modifier, headlineContent = { Text(text = title) }, supportingContent = { Text(text = subtitle) }, trailingContent = { Switch( checked = granted, onCheckedChange = onToggleChange, ) }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/onboarding/StorageStep.kt ================================================ package eu.kanade.presentation.more.onboarding import android.content.ActivityNotFoundException import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.dp import eu.kanade.presentation.more.settings.screen.SettingsDataScreen import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest import tachiyomi.domain.storage.service.StoragePreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Button import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get internal class StorageStep : OnboardingStep { private val storagePref = Injekt.get().baseStorageDirectory private var _isComplete by mutableStateOf(false) override val isComplete: Boolean get() = _isComplete @Composable override fun Content() { val context = LocalContext.current val handler = LocalUriHandler.current val pickStorageLocation = SettingsDataScreen.storageLocationPicker(storagePref) Column( modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Text( stringResource( MR.strings.onboarding_storage_info, stringResource(MR.strings.app_name), SettingsDataScreen.storageLocationText(storagePref), ), ) Button( modifier = Modifier.fillMaxWidth(), onClick = { try { pickStorageLocation.launch(null) } catch (e: ActivityNotFoundException) { context.toast(MR.strings.file_picker_error) } }, ) { Text(stringResource(MR.strings.onboarding_storage_action_select)) } HorizontalDivider( modifier = Modifier.padding(vertical = 8.dp), color = MaterialTheme.colorScheme.onPrimaryContainer, ) Text(stringResource(MR.strings.onboarding_storage_help_info, stringResource(MR.strings.app_name))) Button( modifier = Modifier.fillMaxWidth(), onClick = { handler.openUri(SettingsDataScreen.HELP_URL) }, ) { Text(stringResource(MR.strings.onboarding_storage_help_action)) } } LaunchedEffect(Unit) { storagePref.changes() .collectLatest { _isComplete = storagePref.isSet() } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/onboarding/ThemeStep.kt ================================================ package eu.kanade.presentation.more.onboarding import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode import eu.kanade.presentation.more.settings.widget.AppThemeModePreferenceWidget import eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get internal class ThemeStep : OnboardingStep { override val isComplete: Boolean = true private val uiPreferences: UiPreferences = Injekt.get() @Composable override fun Content() { val themeModePref = uiPreferences.themeMode val themeMode by themeModePref.collectAsState() val appThemePref = uiPreferences.appTheme val appTheme by appThemePref.collectAsState() val amoledPref = uiPreferences.themeDarkAmoled val amoled by amoledPref.collectAsState() Column { AppThemeModePreferenceWidget( value = themeMode, onItemClick = { themeModePref.set(it) setAppCompatDelegateThemeMode(it) }, ) AppThemePreferenceWidget( value = appTheme, amoled = amoled, onItemClick = { appThemePref.set(it) }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt ================================================ package eu.kanade.presentation.more.settings import androidx.annotation.IntRange import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.graphics.vector.ImageVector import eu.kanade.tachiyomi.data.track.Tracker import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableMap import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.core.common.preference.Preference as PreferenceData sealed class Preference { abstract val title: String abstract val enabled: Boolean sealed class PreferenceItem : Preference() { abstract val subtitle: String? abstract val icon: ImageVector? abstract val onValueChanged: suspend (value: T) -> R /** * A basic [PreferenceItem] that only displays texts. */ data class TextPreference( override val title: String, override val subtitle: String? = null, override val enabled: Boolean = true, val widget: @Composable (() -> Unit)? = null, val onClick: (() -> Unit)? = null, ) : PreferenceItem() { override val icon: ImageVector? = null override val onValueChanged: suspend (value: String) -> Unit = {} } /** * A [PreferenceItem] that provides a two-state toggleable option. */ data class SwitchPreference( val preference: PreferenceData, override val title: String, override val subtitle: String? = null, override val enabled: Boolean = true, override val onValueChanged: suspend (value: Boolean) -> Boolean = { true }, ) : PreferenceItem() { override val icon: ImageVector? = null } /** * A [PreferenceItem] that provides a slider to select an integer number. */ data class SliderPreference( val value: Int, override val title: String, override val subtitle: String? = null, val valueString: String? = null, val valueRange: IntProgression = 0..1, @IntRange(from = 0) val steps: Int = with(valueRange) { (last - first) - 1 }, override val enabled: Boolean = true, override val onValueChanged: suspend (value: Int) -> Unit = {}, ) : PreferenceItem() { override val icon: ImageVector? = null } /** * A [PreferenceItem] that displays a list of entries as a dialog. */ @Suppress("UNCHECKED_CAST") data class ListPreference( val preference: PreferenceData, val entries: ImmutableMap, override val title: String, override val subtitle: String? = "%s", val subtitleProvider: @Composable (value: T, entries: ImmutableMap) -> String? = { v, e -> subtitle?.format(e[v]) }, override val icon: ImageVector? = null, override val enabled: Boolean = true, override val onValueChanged: suspend (value: T) -> Boolean = { true }, ) : PreferenceItem() { internal fun internalSet(value: Any) = preference.set(value as T) internal suspend fun internalOnValueChanged(value: Any) = onValueChanged(value as T) @Composable internal fun internalSubtitleProvider(value: Any?, entries: ImmutableMap) = subtitleProvider(value as T, entries as ImmutableMap) } /** * [ListPreference] but with no connection to a [PreferenceData] */ data class BasicListPreference( val value: String, val entries: ImmutableMap, override val title: String, override val subtitle: String? = "%s", val subtitleProvider: @Composable (value: String, entries: ImmutableMap) -> String? = { v, e -> subtitle?.format(e[v]) }, override val icon: ImageVector? = null, override val enabled: Boolean = true, override val onValueChanged: suspend (value: String) -> Unit = {}, ) : PreferenceItem() /** * A [PreferenceItem] that displays a list of entries as a dialog. * Multiple entries can be selected at the same time. */ data class MultiSelectListPreference( val preference: PreferenceData>, val entries: ImmutableMap, override val title: String, override val subtitle: String? = "%s", val subtitleProvider: @Composable (value: Set, entries: ImmutableMap) -> String? = { v, e -> val combined = remember(v, e) { v.mapNotNull { e[it] } .joinToString() .takeUnless { it.isBlank() } } ?: stringResource(MR.strings.none) subtitle?.format(combined) }, override val icon: ImageVector? = null, override val enabled: Boolean = true, override val onValueChanged: suspend (value: Set) -> Boolean = { true }, ) : PreferenceItem, Boolean>() /** * A [PreferenceItem] that shows a EditText in the dialog. */ data class EditTextPreference( val preference: PreferenceData, override val title: String, override val subtitle: String? = "%s", override val enabled: Boolean = true, override val onValueChanged: suspend (value: String) -> Boolean = { true }, ) : PreferenceItem() { override val icon: ImageVector? = null } /** * A [PreferenceItem] for individual tracker. */ data class TrackerPreference( val tracker: Tracker, val login: () -> Unit, val logout: () -> Unit, ) : PreferenceItem() { override val title: String = "" override val enabled: Boolean = true override val subtitle: String? = null override val icon: ImageVector? = null override val onValueChanged: suspend (value: String) -> Unit = {} } data class InfoPreference( override val title: String, ) : PreferenceItem() { override val enabled: Boolean = true override val subtitle: String? = null override val icon: ImageVector? = null override val onValueChanged: suspend (value: String) -> Unit = {} } data class CustomPreference( override val title: String, val content: @Composable () -> Unit, ) : PreferenceItem() { override val enabled: Boolean = true override val subtitle: String? = null override val icon: ImageVector? = null override val onValueChanged: suspend (value: Unit) -> Unit = {} } } data class PreferenceGroup( override val title: String, override val enabled: Boolean = true, val preferenceItems: ImmutableList>, ) : Preference() } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt ================================================ package eu.kanade.presentation.more.settings import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.collectAsState import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.structuralEqualityPolicy import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import eu.kanade.presentation.more.settings.widget.EditTextPreferenceWidget import eu.kanade.presentation.more.settings.widget.InfoWidget import eu.kanade.presentation.more.settings.widget.ListPreferenceWidget import eu.kanade.presentation.more.settings.widget.MultiSelectListPreferenceWidget import eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding import eu.kanade.presentation.more.settings.widget.PrefsVerticalPadding import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.more.settings.widget.TitleFontSize import eu.kanade.presentation.more.settings.widget.TrackingPreferenceWidget import kotlinx.coroutines.launch import tachiyomi.presentation.core.components.BaseSliderItem import tachiyomi.presentation.core.util.collectAsState val LocalPreferenceHighlighted = compositionLocalOf(structuralEqualityPolicy()) { false } val LocalPreferenceMinHeight = compositionLocalOf(structuralEqualityPolicy()) { 56.dp } @Composable fun StatusWrapper( item: Preference.PreferenceItem<*, *>, highlightKey: String?, content: @Composable () -> Unit, ) { val enabled = item.enabled val highlighted = item.title == highlightKey AnimatedVisibility( visible = enabled, enter = expandVertically() + fadeIn(), exit = shrinkVertically() + fadeOut(), content = { CompositionLocalProvider( LocalPreferenceHighlighted provides highlighted, content = content, ) }, ) } @Composable internal fun PreferenceItem( item: Preference.PreferenceItem<*, *>, highlightKey: String?, ) { val scope = rememberCoroutineScope() StatusWrapper( item = item, highlightKey = highlightKey, ) { when (item) { is Preference.PreferenceItem.SwitchPreference -> { val value by item.preference.collectAsState() SwitchPreferenceWidget( title = item.title, subtitle = item.subtitle, icon = item.icon, checked = value, onCheckedChanged = { newValue -> scope.launch { if (item.onValueChanged(newValue)) { item.preference.set(newValue) } } }, ) } is Preference.PreferenceItem.SliderPreference -> { BaseSliderItem( value = item.value, valueRange = item.valueRange, steps = item.steps, title = item.title, subtitle = item.subtitle, valueString = item.valueString.takeUnless { it.isNullOrEmpty() } ?: item.value.toString(), onChange = { scope.launch { item.onValueChanged(it) } }, titleStyle = MaterialTheme.typography.titleLarge.copy(fontSize = TitleFontSize), modifier = Modifier.padding( horizontal = PrefsHorizontalPadding, vertical = PrefsVerticalPadding, ), ) } is Preference.PreferenceItem.ListPreference<*> -> { val value by item.preference.collectAsState() ListPreferenceWidget( value = value, title = item.title, subtitle = item.internalSubtitleProvider(value, item.entries), icon = item.icon, entries = item.entries, onValueChange = { newValue -> scope.launch { if (item.internalOnValueChanged(newValue!!)) { item.internalSet(newValue) } } }, ) } is Preference.PreferenceItem.BasicListPreference -> { ListPreferenceWidget( value = item.value, title = item.title, subtitle = item.subtitleProvider(item.value, item.entries), icon = item.icon, entries = item.entries, onValueChange = { scope.launch { item.onValueChanged(it) } }, ) } is Preference.PreferenceItem.MultiSelectListPreference -> { val values by item.preference.collectAsState() MultiSelectListPreferenceWidget( preference = item, values = values, onValuesChange = { newValues -> scope.launch { if (item.onValueChanged(newValues)) { item.preference.set(newValues.toMutableSet()) } } }, ) } is Preference.PreferenceItem.TextPreference -> { TextPreferenceWidget( title = item.title, subtitle = item.subtitle, icon = item.icon, widget = item.widget, onPreferenceClick = item.onClick, ) } is Preference.PreferenceItem.EditTextPreference -> { val values by item.preference.collectAsState() EditTextPreferenceWidget( title = item.title, subtitle = item.subtitle, icon = item.icon, value = values, onConfirm = { val accepted = item.onValueChanged(it) if (accepted) item.preference.set(it) accepted }, ) } is Preference.PreferenceItem.TrackerPreference -> { val isLoggedIn by item.tracker.let { tracker -> tracker.isLoggedInFlow.collectAsState(tracker.isLoggedIn) } TrackingPreferenceWidget( tracker = item.tracker, checked = isLoggedIn, onClick = { if (isLoggedIn) item.logout() else item.login() }, ) } is Preference.PreferenceItem.InfoPreference -> { InfoWidget(text = item.title) } is Preference.PreferenceItem.CustomPreference -> { item.content() } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt ================================================ package eu.kanade.presentation.more.settings import androidx.compose.foundation.layout.RowScope import androidx.compose.runtime.Composable import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.AppBar import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource @Composable fun PreferenceScaffold( titleRes: StringResource, actions: @Composable RowScope.() -> Unit = {}, onBackPressed: (() -> Unit)? = null, itemsProvider: @Composable () -> List, ) { Scaffold( topBar = { AppBar( title = stringResource(titleRes), navigateUp = onBackPressed, actions = actions, scrollBehavior = it, ) }, content = { contentPadding -> PreferenceScreen( items = itemsProvider(), contentPadding = contentPadding, ) }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScreen.kt ================================================ package eu.kanade.presentation.more.settings import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEachIndexed import eu.kanade.presentation.more.settings.screen.SearchableSettings import eu.kanade.presentation.more.settings.widget.PreferenceGroupHeader import kotlinx.coroutines.delay import tachiyomi.presentation.core.components.ScrollbarLazyColumn import kotlin.time.Duration.Companion.seconds /** * Preference Screen composable which contains a list of [Preference] items * @param items [Preference] items which should be displayed on the preference screen. An item can be a single [PreferenceItem] or a group ([Preference.PreferenceGroup]) * @param modifier [Modifier] to be applied to the preferenceScreen layout */ @Composable fun PreferenceScreen( items: List, modifier: Modifier = Modifier, contentPadding: PaddingValues = PaddingValues(0.dp), ) { val state = rememberLazyListState() val highlightKey = SearchableSettings.highlightKey if (highlightKey != null) { LaunchedEffect(Unit) { val i = items.findHighlightedIndex(highlightKey) if (i >= 0) { delay(0.5.seconds) state.animateScrollToItem(i) } SearchableSettings.highlightKey = null } } ScrollbarLazyColumn( modifier = modifier, state = state, contentPadding = contentPadding, ) { items.fastForEachIndexed { i, preference -> when (preference) { // Create Preference Group is Preference.PreferenceGroup -> { if (!preference.enabled) return@fastForEachIndexed item { Column { PreferenceGroupHeader(title = preference.title) } } items(preference.preferenceItems) { item -> PreferenceItem( item = item, highlightKey = highlightKey, ) } item { if (i < items.lastIndex) { Spacer(modifier = Modifier.height(12.dp)) } } } // Create Preference Item is Preference.PreferenceItem<*, *> -> item { PreferenceItem( item = preference, highlightKey = highlightKey, ) } } } } } private fun List.findHighlightedIndex(highlightKey: String): Int { return flatMap { if (it is Preference.PreferenceGroup) { buildList { add(null) // Header addAll(it.preferenceItems.map { groupItem -> groupItem.title }) add(null) // Spacer } } else { listOf(it.title) } }.indexOfFirst { it == highlightKey } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.category.visualName import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource /** * Returns a string of categories name for settings subtitle */ @ReadOnlyComposable @Composable fun getCategoriesLabel( allCategories: List, included: Set, excluded: Set, ): String { val context = LocalContext.current val includedCategories = included .mapNotNull { id -> allCategories.find { it.id == id.toLong() } } .sortedBy { it.order } val excludedCategories = excluded .mapNotNull { id -> allCategories.find { it.id == id.toLong() } } .sortedBy { it.order } val allExcluded = excludedCategories.size == allCategories.size val includedItemsText = when { // Some selected, but not all includedCategories.isNotEmpty() && includedCategories.size != allCategories.size -> includedCategories.joinToString { it.visualName(context) } // All explicitly selected includedCategories.size == allCategories.size -> stringResource(MR.strings.all) allExcluded -> stringResource(MR.strings.none) else -> stringResource(MR.strings.all) } val excludedItemsText = when { excludedCategories.isEmpty() -> stringResource(MR.strings.none) allExcluded -> stringResource(MR.strings.all) else -> excludedCategories.joinToString { it.visualName(context) } } return stringResource(MR.strings.include, includedItemsText) + "\n" + stringResource(MR.strings.exclude, excludedItemsText) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SearchableSettings.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.foundation.layout.RowScope import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import cafe.adriel.voyager.core.screen.Screen import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.PreferenceScaffold import eu.kanade.presentation.util.LocalBackPress interface SearchableSettings : Screen { @Composable @ReadOnlyComposable fun getTitleRes(): StringResource @Composable fun getPreferences(): List @Composable fun RowScope.AppBarAction() { } @Composable override fun Content() { val handleBack = LocalBackPress.current PreferenceScaffold( titleRes = getTitleRes(), onBackPressed = if (handleBack != null) handleBack::invoke else null, actions = { AppBarAction() }, itemsProvider = { getPreferences() }, ) } companion object { // HACK: for the background blipping thingy. // The title of the target PreferenceItem // Set before showing the destination screen and reset after // See BasePreferenceWidget.highlightBackground var highlightKey: String? = null } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import android.annotation.SuppressLint import android.content.ActivityNotFoundException import android.content.Intent import android.provider.Settings import android.webkit.WebStorage import android.webkit.WebView import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.core.net.toUri import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.extension.interactor.TrustExtension import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.screen.advanced.ClearDatabaseScreen import eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.library.MetadataUpdateJob import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.NetworkPreferences import eu.kanade.tachiyomi.network.PREF_DOH_360 import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD import eu.kanade.tachiyomi.network.PREF_DOH_ALIDNS import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE import eu.kanade.tachiyomi.network.PREF_DOH_CONTROLD import eu.kanade.tachiyomi.network.PREF_DOH_DNSPOD import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE import eu.kanade.tachiyomi.network.PREF_DOH_MULLVAD import eu.kanade.tachiyomi.network.PREF_DOH_NJALLA import eu.kanade.tachiyomi.network.PREF_DOH_QUAD101 import eu.kanade.tachiyomi.network.PREF_DOH_QUAD9 import eu.kanade.tachiyomi.network.PREF_DOH_SHECAN import eu.kanade.tachiyomi.ui.more.OnboardingScreen import eu.kanade.tachiyomi.util.CrashLogUtil import eu.kanade.tachiyomi.util.system.GLUtil import eu.kanade.tachiyomi.util.system.isReleaseBuildType import eu.kanade.tachiyomi.util.system.isShizukuInstalled import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.setDefaultSettings import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.launch import logcat.LogPriority import okhttp3.Headers import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.ResetViewerFlags import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File object SettingsAdvancedScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.pref_category_advanced @Composable override fun getPreferences(): List { val scope = rememberCoroutineScope() val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val basePreferences = remember { Injekt.get() } val networkPreferences = remember { Injekt.get() } val libraryPreferences = remember { Injekt.get() } return listOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_dump_crash_logs), subtitle = stringResource(MR.strings.pref_dump_crash_logs_summary), onClick = { scope.launch { CrashLogUtil(context).dumpLogs() } }, ), Preference.PreferenceItem.SwitchPreference( preference = networkPreferences.verboseLogging, title = stringResource(MR.strings.pref_verbose_logging), subtitle = stringResource(MR.strings.pref_verbose_logging_summary), onValueChanged = { context.toast(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_debug_info), onClick = { navigator.push(DebugInfoScreen()) }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_onboarding_guide), onClick = { navigator.push(OnboardingScreen()) }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_manage_notifications), onClick = { val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) } context.startActivity(intent) }, ), getBackgroundActivityGroup(), getDataGroup(), getNetworkGroup(networkPreferences = networkPreferences), getLibraryGroup(libraryPreferences = libraryPreferences), getReaderGroup(basePreferences = basePreferences), getExtensionsGroup(basePreferences = basePreferences), ) } @Composable private fun getBackgroundActivityGroup(): Preference.PreferenceGroup { val context = LocalContext.current val uriHandler = LocalUriHandler.current return Preference.PreferenceGroup( title = stringResource(MR.strings.label_background_activity), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_disable_battery_optimization), subtitle = stringResource(MR.strings.pref_disable_battery_optimization_summary), onClick = { val packageName: String = context.packageName if (!context.powerManager.isIgnoringBatteryOptimizations(packageName)) { try { @SuppressLint("BatteryLife") val intent = Intent().apply { action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS data = "package:$packageName".toUri() addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } context.startActivity(intent) } catch (e: ActivityNotFoundException) { context.toast(MR.strings.battery_optimization_setting_activity_not_found) } } else { context.toast(MR.strings.battery_optimization_disabled) } }, ), Preference.PreferenceItem.TextPreference( title = "Don't kill my app!", subtitle = stringResource(MR.strings.about_dont_kill_my_app), onClick = { uriHandler.openUri("https://dontkillmyapp.com/") }, ), ), ) } @Composable private fun getDataGroup(): Preference.PreferenceGroup { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceGroup( title = stringResource(MR.strings.label_data), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_invalidate_download_cache), subtitle = stringResource(MR.strings.pref_invalidate_download_cache_summary), onClick = { Injekt.get().invalidateCache() context.toast(MR.strings.download_cache_invalidated) }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_clear_database), subtitle = stringResource(MR.strings.pref_clear_database_summary), onClick = { navigator.push(ClearDatabaseScreen()) }, ), ), ) } @Composable private fun getNetworkGroup( networkPreferences: NetworkPreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val networkHelper = remember { Injekt.get() } val userAgentPref = networkPreferences.defaultUserAgent val userAgent by userAgentPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.label_network), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_clear_cookies), onClick = { networkHelper.cookieJar.removeAll() context.toast(MR.strings.cookies_cleared) }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_clear_webview_data), onClick = { try { WebView(context).run { setDefaultSettings() clearCache(true) clearFormData() clearHistory() clearSslPreferences() } WebStorage.getInstance().deleteAllData() context.applicationInfo?.dataDir?.let { File("$it/app_webview/").deleteRecursively() } context.toast(MR.strings.webview_data_deleted) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) context.toast(MR.strings.cache_delete_error) } }, ), Preference.PreferenceItem.ListPreference( preference = networkPreferences.dohProvider, entries = persistentMapOf( -1 to stringResource(MR.strings.disabled), PREF_DOH_CLOUDFLARE to "Cloudflare", PREF_DOH_GOOGLE to "Google", PREF_DOH_ADGUARD to "AdGuard", PREF_DOH_QUAD9 to "Quad9", PREF_DOH_ALIDNS to "AliDNS", PREF_DOH_DNSPOD to "DNSPod", PREF_DOH_360 to "360", PREF_DOH_QUAD101 to "Quad 101", PREF_DOH_MULLVAD to "Mullvad", PREF_DOH_CONTROLD to "Control D", PREF_DOH_NJALLA to "Njalla", PREF_DOH_SHECAN to "Shecan", ), title = stringResource(MR.strings.pref_dns_over_https), onValueChanged = { context.toast(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.EditTextPreference( preference = userAgentPref, title = stringResource(MR.strings.pref_user_agent_string), onValueChanged = { try { // OkHttp checks for valid values internally Headers.Builder().add("User-Agent", it) context.toast(MR.strings.requires_app_restart) } catch (_: IllegalArgumentException) { context.toast(MR.strings.error_user_agent_string_invalid) return@EditTextPreference false } true }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_reset_user_agent_string), enabled = remember(userAgent) { userAgent != userAgentPref.defaultValue() }, onClick = { userAgentPref.delete() context.toast(MR.strings.requires_app_restart) }, ), ), ) } @Composable private fun getLibraryGroup( libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup { val scope = rememberCoroutineScope() val context = LocalContext.current return Preference.PreferenceGroup( title = stringResource(MR.strings.label_library), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_refresh_library_covers), onClick = { MetadataUpdateJob.startNow(context) }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_reset_viewer_flags), subtitle = stringResource(MR.strings.pref_reset_viewer_flags_summary), onClick = { scope.launchNonCancellable { val success = Injekt.get().await() withUIContext { val message = if (success) { MR.strings.pref_reset_viewer_flags_success } else { MR.strings.pref_reset_viewer_flags_error } context.toast(message) } } }, ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.updateMangaTitles, title = stringResource(MR.strings.pref_update_library_manga_titles), subtitle = stringResource(MR.strings.pref_update_library_manga_titles_summary), ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.disallowNonAsciiFilenames, title = stringResource(MR.strings.pref_disallow_non_ascii_filenames), subtitle = stringResource(MR.strings.pref_disallow_non_ascii_filenames_details), ), ), ) } @Composable private fun getReaderGroup( basePreferences: BasePreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val chooseColorProfile = rememberLauncherForActivityResult( contract = ActivityResultContracts.OpenDocument(), ) { uri -> uri?.let { val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION context.contentResolver.takePersistableUriPermission(uri, flags) basePreferences.displayProfile.set(uri.toString()) } } return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_reader), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = basePreferences.hardwareBitmapThreshold, entries = GLUtil.CUSTOM_TEXTURE_LIMIT_OPTIONS .mapIndexed { index, option -> val display = if (index == 0) { stringResource(MR.strings.pref_hardware_bitmap_threshold_default, option) } else { option.toString() } option to display } .toMap() .toImmutableMap(), title = stringResource(MR.strings.pref_hardware_bitmap_threshold), subtitleProvider = { value, options -> stringResource(MR.strings.pref_hardware_bitmap_threshold_summary, options[value].orEmpty()) }, enabled = !ImageUtil.HARDWARE_BITMAP_UNSUPPORTED && GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT, ), Preference.PreferenceItem.SwitchPreference( preference = basePreferences.alwaysDecodeLongStripWithSSIV, title = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv_2), subtitle = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv_summary), ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_display_profile), subtitle = basePreferences.displayProfile.get(), onClick = { chooseColorProfile.launch(arrayOf("*/*")) }, ), ), ) } @Composable private fun getExtensionsGroup( basePreferences: BasePreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val uriHandler = LocalUriHandler.current val extensionInstallerPref = basePreferences.extensionInstaller var shizukuMissing by rememberSaveable { mutableStateOf(false) } val trustExtension = remember { Injekt.get() } if (shizukuMissing) { val dismiss = { shizukuMissing = false } AlertDialog( onDismissRequest = dismiss, title = { Text(text = stringResource(MR.strings.ext_installer_shizuku)) }, text = { Text(text = stringResource(MR.strings.ext_installer_shizuku_unavailable_dialog)) }, dismissButton = { TextButton(onClick = dismiss) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton( onClick = { dismiss() uriHandler.openUri("https://shizuku.rikka.app/download") }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, ) } return Preference.PreferenceGroup( title = stringResource(MR.strings.label_extensions), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = extensionInstallerPref, entries = extensionInstallerPref.entries .filter { // TODO: allow private option in stable versions once URL handling is more fleshed out if (isReleaseBuildType) { it != BasePreferences.ExtensionInstaller.PRIVATE } else { true } } .associateWith { stringResource(it.titleRes) } .toImmutableMap(), title = stringResource(MR.strings.ext_installer_pref), onValueChanged = { if (it == BasePreferences.ExtensionInstaller.SHIZUKU && !context.isShizukuInstalled ) { shizukuMissing = true false } else { true } }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.ext_revoke_trust), onClick = { trustExtension.revokeAll() context.toast(MR.strings.requires_app_restart) }, ), ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import android.app.Activity import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.core.app.ActivityCompat import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.TabletUiMode import eu.kanade.domain.ui.model.ThemeMode import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.screen.appearance.AppLanguageScreen import eu.kanade.presentation.more.settings.widget.AppThemeModePreferenceWidget import eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableMap import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.LocalDate object SettingsAppearanceScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.pref_category_appearance @Composable override fun getPreferences(): List { val uiPreferences = remember { Injekt.get() } return listOf( getThemeGroup(uiPreferences = uiPreferences), getDisplayGroup(uiPreferences = uiPreferences), ) } @Composable private fun getThemeGroup( uiPreferences: UiPreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val themeModePref = uiPreferences.themeMode val themeMode by themeModePref.collectAsState() val appThemePref = uiPreferences.appTheme val appTheme by appThemePref.collectAsState() val amoledPref = uiPreferences.themeDarkAmoled val amoled by amoledPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_theme), preferenceItems = persistentListOf( Preference.PreferenceItem.CustomPreference( title = stringResource(MR.strings.pref_app_theme), ) { Column { AppThemeModePreferenceWidget( value = themeMode, onItemClick = { themeModePref.set(it) setAppCompatDelegateThemeMode(it) }, ) AppThemePreferenceWidget( value = appTheme, amoled = amoled, onItemClick = { appThemePref.set(it) }, ) } }, Preference.PreferenceItem.SwitchPreference( preference = amoledPref, title = stringResource(MR.strings.pref_dark_theme_pure_black), enabled = themeMode != ThemeMode.LIGHT, onValueChanged = { (context as? Activity)?.let { ActivityCompat.recreate(it) } true }, ), ), ) } @Composable private fun getDisplayGroup( uiPreferences: UiPreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val now = remember { LocalDate.now() } val dateFormat by uiPreferences.dateFormat.collectAsState() val formattedNow = remember(dateFormat) { UiPreferences.dateFormat(dateFormat).format(now) } return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_display), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_app_language), onClick = { navigator.push(AppLanguageScreen()) }, ), Preference.PreferenceItem.ListPreference( preference = uiPreferences.tabletUiMode, entries = TabletUiMode.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), title = stringResource(MR.strings.pref_tablet_ui_mode), onValueChanged = { context.toast(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.ListPreference( preference = uiPreferences.dateFormat, entries = DateFormats .associateWith { val formattedDate = UiPreferences.dateFormat(it).format(now) "${it.ifEmpty { stringResource(MR.strings.label_default) }} ($formattedDate)" } .toImmutableMap(), title = stringResource(MR.strings.pref_date_format), ), Preference.PreferenceItem.SwitchPreference( preference = uiPreferences.relativeTime, title = stringResource(MR.strings.pref_relative_format), subtitle = stringResource( MR.strings.pref_relative_format_summary, stringResource(MR.strings.relative_time_today), formattedNow, ), ), Preference.PreferenceItem.SwitchPreference( preference = uiPreferences.imagesInDescription, title = stringResource(MR.strings.pref_display_images_description), ), ), ) } } private val DateFormats = listOf( "", // Default "MM/dd/yy", "dd/MM/yy", "yyyy-MM-dd", "dd MMM yyyy", "MMM dd, yyyy", ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.fragment.app.FragmentActivity import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate import kotlinx.collections.immutable.persistentListOf import mihon.domain.extensionrepo.interactor.GetExtensionRepoCount import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object SettingsBrowseScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.browse @Composable override fun getPreferences(): List { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val sourcePreferences = remember { Injekt.get() } val getExtensionRepoCount = remember { Injekt.get() } val reposCount by getExtensionRepoCount.subscribe().collectAsState(0) return listOf( Preference.PreferenceGroup( title = stringResource(MR.strings.label_sources), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = sourcePreferences.hideInLibraryItems, title = stringResource(MR.strings.pref_hide_in_library_items), ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.label_extension_repos), subtitle = pluralStringResource(MR.plurals.num_repos, reposCount, reposCount), onClick = { navigator.push(ExtensionReposScreen()) }, ), ), ), Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_nsfw_content), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = sourcePreferences.showNsfwSource, title = stringResource(MR.strings.pref_show_nsfw_source), subtitle = stringResource(MR.strings.requires_app_restart), onValueChanged = { (context as FragmentActivity).authenticate( title = context.stringResource(MR.strings.pref_category_nsfw_content), ) }, ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.parental_controls_info)), ), ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.net.Uri import androidx.activity.compose.ManagedActivityResultLauncher import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material3.AlertDialog import androidx.compose.material3.Checkbox import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MultiChoiceSegmentedButtonRow import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.core.net.toUri import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.hippo.unifile.UniFile import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.screen.data.CreateBackupScreen import eu.kanade.presentation.more.settings.screen.data.RestoreBackupScreen import eu.kanade.presentation.more.settings.screen.data.StorageInfo import eu.kanade.presentation.more.settings.widget.BasePreferenceWidget import eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding import eu.kanade.presentation.util.relativeTimeSpanString import eu.kanade.tachiyomi.data.backup.create.BackupCreateJob import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.export.LibraryExporter import eu.kanade.tachiyomi.data.export.LibraryExporter.ExportOptions import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.displayablePath import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.storage.service.StoragePreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object SettingsDataScreen : SearchableSettings { val restorePreferenceKeyString = MR.strings.label_backup const val HELP_URL = "https://mihon.app/docs/faq/storage" @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.label_data_storage @Composable override fun RowScope.AppBarAction() { val uriHandler = LocalUriHandler.current IconButton(onClick = { uriHandler.openUri(HELP_URL) }) { Icon( imageVector = Icons.AutoMirrored.Outlined.HelpOutline, contentDescription = stringResource(MR.strings.tracking_guide), ) } } @Composable override fun getPreferences(): List { val backupPreferences = Injekt.get() val storagePreferences = Injekt.get() return persistentListOf( getStorageLocationPref(storagePreferences = storagePreferences), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.pref_storage_location_info)), getBackupAndRestoreGroup(backupPreferences = backupPreferences), getDataGroup(), getExportGroup(), ) } @Composable fun storageLocationPicker( storageDirPref: tachiyomi.core.common.preference.Preference, ): ManagedActivityResultLauncher { val context = LocalContext.current return rememberLauncherForActivityResult( contract = ActivityResultContracts.OpenDocumentTree(), ) { uri -> if (uri != null) { val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION // For some reason InkBook devices do not implement the SAF properly. Persistable URI grants do not // work. However, simply retrieving the URI and using it works fine for these devices. Access is not // revoked after the app is closed or the device is restarted. // This also holds for some Samsung devices. Thus, we simply execute inside of a try-catch block and // ignore the exception if it is thrown. try { context.contentResolver.takePersistableUriPermission(uri, flags) } catch (e: SecurityException) { logcat(LogPriority.ERROR, e) context.toast(MR.strings.file_picker_uri_permission_unsupported) } UniFile.fromUri(context, uri)?.let { storageDirPref.set(it.uri.toString()) } } } } @Composable fun storageLocationText( storageDirPref: tachiyomi.core.common.preference.Preference, ): String { val context = LocalContext.current val storageDir by storageDirPref.collectAsState() if (storageDir == storageDirPref.defaultValue()) { return stringResource(MR.strings.no_location_set) } return remember(storageDir) { val file = UniFile.fromUri(context, storageDir.toUri()) file?.displayablePath } ?: stringResource(MR.strings.invalid_location, storageDir) } @Composable private fun getStorageLocationPref( storagePreferences: StoragePreferences, ): Preference.PreferenceItem.TextPreference { val context = LocalContext.current val pickStorageLocation = storageLocationPicker(storagePreferences.baseStorageDirectory) return Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_storage_location), subtitle = storageLocationText(storagePreferences.baseStorageDirectory), onClick = { try { pickStorageLocation.launch(null) } catch (e: ActivityNotFoundException) { context.toast(MR.strings.file_picker_error) } }, ) } @Composable private fun getBackupAndRestoreGroup(backupPreferences: BackupPreferences): Preference.PreferenceGroup { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp.collectAsState() val chooseBackup = rememberLauncherForActivityResult( object : ActivityResultContracts.GetContent() { override fun createIntent(context: Context, input: String): Intent { val intent = super.createIntent(context, input) return Intent.createChooser(intent, context.stringResource(MR.strings.file_select_backup)) } }, ) { if (it == null) { context.toast(MR.strings.file_null_uri_error) return@rememberLauncherForActivityResult } navigator.push(RestoreBackupScreen(it.toString())) } return Preference.PreferenceGroup( title = stringResource(MR.strings.label_backup), preferenceItems = persistentListOf( // Manual actions Preference.PreferenceItem.CustomPreference( title = stringResource(restorePreferenceKeyString), ) { BasePreferenceWidget( subcomponent = { MultiChoiceSegmentedButtonRow( modifier = Modifier .fillMaxWidth() .height(intrinsicSize = IntrinsicSize.Min) .padding(horizontal = PrefsHorizontalPadding), ) { SegmentedButton( modifier = Modifier.fillMaxHeight(), checked = false, onCheckedChange = { navigator.push(CreateBackupScreen()) }, shape = SegmentedButtonDefaults.itemShape(0, 2), ) { Text(stringResource(MR.strings.pref_create_backup)) } SegmentedButton( modifier = Modifier.fillMaxHeight(), checked = false, onCheckedChange = { if (!BackupRestoreJob.isRunning(context)) { if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) { context.toast(MR.strings.restore_miui_warning) } // no need to catch because it's wrapped with a chooser chooseBackup.launch("*/*") } else { context.toast(MR.strings.restore_in_progress) } }, shape = SegmentedButtonDefaults.itemShape(1, 2), ) { Text(stringResource(MR.strings.pref_restore_backup)) } } }, ) }, // Automatic backups Preference.PreferenceItem.ListPreference( preference = backupPreferences.backupInterval, entries = persistentMapOf( 0 to stringResource(MR.strings.off), 6 to stringResource(MR.strings.update_6hour), 12 to stringResource(MR.strings.update_12hour), 24 to stringResource(MR.strings.update_24hour), 48 to stringResource(MR.strings.update_48hour), 168 to stringResource(MR.strings.update_weekly), ), title = stringResource(MR.strings.pref_backup_interval), onValueChanged = { BackupCreateJob.setupTask(context, it) true }, ), Preference.PreferenceItem.InfoPreference( stringResource(MR.strings.backup_info) + "\n\n" + stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)), ), ), ) } @Composable private fun getDataGroup(): Preference.PreferenceGroup { val context = LocalContext.current val scope = rememberCoroutineScope() val libraryPreferences = remember { Injekt.get() } val chapterCache = remember { Injekt.get() } var cacheReadableSizeSema by remember { mutableIntStateOf(0) } val cacheReadableSize = remember(cacheReadableSizeSema) { chapterCache.readableSize } return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_storage_usage), preferenceItems = persistentListOf( Preference.PreferenceItem.CustomPreference( title = stringResource(MR.strings.pref_storage_usage), ) { BasePreferenceWidget( subcomponent = { StorageInfo( modifier = Modifier.padding(horizontal = PrefsHorizontalPadding), ) }, ) }, Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_clear_chapter_cache), subtitle = stringResource(MR.strings.used_cache, cacheReadableSize), onClick = { scope.launchNonCancellable { try { val deletedFiles = chapterCache.clear() withUIContext { context.toast(context.stringResource(MR.strings.cache_deleted, deletedFiles)) cacheReadableSizeSema++ } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) withUIContext { context.toast(MR.strings.cache_delete_error) } } } }, ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.autoClearChapterCache, title = stringResource(MR.strings.pref_auto_clear_chapter_cache), ), ), ) } @Composable private fun getExportGroup(): Preference.PreferenceGroup { var showDialog by remember { mutableStateOf(false) } var exportOptions by remember { mutableStateOf( ExportOptions( includeTitle = true, includeAuthor = true, includeArtist = true, ), ) } val context = LocalContext.current val scope = rememberCoroutineScope() val getFavorites = remember { Injekt.get() } var favorites by remember { mutableStateOf>(emptyList()) } LaunchedEffect(Unit) { favorites = getFavorites.await() } val saveFileLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.CreateDocument("text/csv"), ) { uri -> uri?.let { scope.launch { LibraryExporter.exportToCsv( context = context, uri = it, favorites = favorites, options = exportOptions, onExportComplete = { scope.launch(Dispatchers.Main) { context.toast(MR.strings.library_exported) } }, ) } } } if (showDialog) { ColumnSelectionDialog( options = exportOptions, onConfirm = { options -> exportOptions = options saveFileLauncher.launch("mihon_library.csv") }, onDismissRequest = { showDialog = false }, ) } return Preference.PreferenceGroup( title = stringResource(MR.strings.export), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.library_list), onClick = { showDialog = true }, ), ), ) } @Composable private fun ColumnSelectionDialog( options: ExportOptions, onConfirm: (ExportOptions) -> Unit, onDismissRequest: () -> Unit, ) { var titleSelected by remember { mutableStateOf(options.includeTitle) } var authorSelected by remember { mutableStateOf(options.includeAuthor) } var artistSelected by remember { mutableStateOf(options.includeArtist) } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = stringResource(MR.strings.migration_dialog_what_to_include)) }, text = { Column { Row(verticalAlignment = Alignment.CenterVertically) { Checkbox( checked = titleSelected, onCheckedChange = { checked -> titleSelected = checked if (!checked) { authorSelected = false artistSelected = false } }, ) Text(text = stringResource(MR.strings.title)) } Row(verticalAlignment = Alignment.CenterVertically) { Checkbox( checked = authorSelected, onCheckedChange = { authorSelected = it }, enabled = titleSelected, ) Text(text = stringResource(MR.strings.author)) } Row(verticalAlignment = Alignment.CenterVertically) { Checkbox( checked = artistSelected, onCheckedChange = { artistSelected = it }, enabled = titleSelected, ) Text(text = stringResource(MR.strings.artist)) } } }, confirmButton = { TextButton( onClick = { onConfirm( ExportOptions( includeTitle = titleSelected, includeAuthor = authorSelected, includeArtist = artistSelected, ), ) onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_save)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.util.fastMap import eu.kanade.presentation.category.visualName import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.widget.TriStateListDialog import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableMap import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object SettingsDownloadScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.pref_category_downloads @Composable override fun getPreferences(): List { val getCategories = remember { Injekt.get() } val allCategories by getCategories.subscribe().collectAsState(initial = emptyList()) val downloadPreferences = remember { Injekt.get() } val parallelSourceLimit by downloadPreferences.parallelSourceLimit.collectAsState() val parallelPageLimit by downloadPreferences.parallelPageLimit.collectAsState() return listOf( Preference.PreferenceItem.SwitchPreference( preference = downloadPreferences.downloadOnlyOverWifi, title = stringResource(MR.strings.connected_to_wifi), ), Preference.PreferenceItem.SwitchPreference( preference = downloadPreferences.saveChaptersAsCBZ, title = stringResource(MR.strings.save_chapter_as_cbz), ), Preference.PreferenceItem.SwitchPreference( preference = downloadPreferences.splitTallImages, title = stringResource(MR.strings.split_tall_images), subtitle = stringResource(MR.strings.split_tall_images_summary), ), Preference.PreferenceItem.SliderPreference( value = parallelSourceLimit, valueRange = 1..10, title = stringResource(MR.strings.pref_download_concurrent_sources), onValueChanged = { downloadPreferences.parallelSourceLimit.set(it) }, ), Preference.PreferenceItem.SliderPreference( value = parallelPageLimit, valueRange = 1..15, title = stringResource(MR.strings.pref_download_concurrent_pages), subtitle = stringResource(MR.strings.pref_download_concurrent_pages_summary), onValueChanged = { downloadPreferences.parallelPageLimit.set(it) }, ), getDeleteChaptersGroup( downloadPreferences = downloadPreferences, categories = allCategories, ), getAutoDownloadGroup( downloadPreferences = downloadPreferences, allCategories = allCategories, ), getDownloadAheadGroup(downloadPreferences = downloadPreferences), ) } @Composable private fun getDeleteChaptersGroup( downloadPreferences: DownloadPreferences, categories: List, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_delete_chapters), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = downloadPreferences.removeAfterMarkedAsRead, title = stringResource(MR.strings.pref_remove_after_marked_as_read), ), Preference.PreferenceItem.ListPreference( preference = downloadPreferences.removeAfterReadSlots, entries = persistentMapOf( -1 to stringResource(MR.strings.disabled), 0 to stringResource(MR.strings.last_read_chapter), 1 to stringResource(MR.strings.second_to_last), 2 to stringResource(MR.strings.third_to_last), 3 to stringResource(MR.strings.fourth_to_last), 4 to stringResource(MR.strings.fifth_to_last), ), title = stringResource(MR.strings.pref_remove_after_read), ), Preference.PreferenceItem.SwitchPreference( preference = downloadPreferences.removeBookmarkedChapters, title = stringResource(MR.strings.pref_remove_bookmarked_chapters), ), getExcludedCategoriesPreference( downloadPreferences = downloadPreferences, categories = { categories }, ), ), ) } @Composable private fun getExcludedCategoriesPreference( downloadPreferences: DownloadPreferences, categories: () -> List, ): Preference.PreferenceItem.MultiSelectListPreference { return Preference.PreferenceItem.MultiSelectListPreference( preference = downloadPreferences.removeExcludeCategories, entries = categories() .associate { it.id.toString() to it.visualName } .toImmutableMap(), title = stringResource(MR.strings.pref_remove_exclude_categories), ) } @Composable private fun getAutoDownloadGroup( downloadPreferences: DownloadPreferences, allCategories: List, ): Preference.PreferenceGroup { val downloadNewChaptersPref = downloadPreferences.downloadNewChapters val downloadNewUnreadChaptersOnlyPref = downloadPreferences.downloadNewUnreadChaptersOnly val downloadNewChapterCategoriesPref = downloadPreferences.downloadNewChapterCategories val downloadNewChapterCategoriesExcludePref = downloadPreferences.downloadNewChapterCategoriesExclude val downloadNewChapters by downloadNewChaptersPref.collectAsState() val included by downloadNewChapterCategoriesPref.collectAsState() val excluded by downloadNewChapterCategoriesExcludePref.collectAsState() var showDialog by rememberSaveable { mutableStateOf(false) } if (showDialog) { TriStateListDialog( title = stringResource(MR.strings.categories), message = stringResource(MR.strings.pref_download_new_categories_details), items = allCategories, initialChecked = included.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, initialInversed = excluded.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, itemLabel = { it.visualName }, onDismissRequest = { showDialog = false }, onValueChanged = { newIncluded, newExcluded -> downloadNewChapterCategoriesPref.set(newIncluded.fastMap { it.id.toString() }.toSet()) downloadNewChapterCategoriesExcludePref.set(newExcluded.fastMap { it.id.toString() }.toSet()) showDialog = false }, ) } return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_auto_download), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = downloadNewChaptersPref, title = stringResource(MR.strings.pref_download_new), ), Preference.PreferenceItem.SwitchPreference( preference = downloadNewUnreadChaptersOnlyPref, title = stringResource(MR.strings.pref_download_new_unread_chapters_only), enabled = downloadNewChapters, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.categories), subtitle = getCategoriesLabel( allCategories = allCategories, included = included, excluded = excluded, ), enabled = downloadNewChapters, onClick = { showDialog = true }, ), ), ) } @Composable private fun getDownloadAheadGroup( downloadPreferences: DownloadPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( title = stringResource(MR.strings.download_ahead), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = downloadPreferences.autoDownloadWhileReading, entries = listOf(0, 2, 3, 5, 10) .associateWith { if (it == 0) { stringResource(MR.strings.disabled) } else { pluralStringResource(MR.plurals.next_unread_chapters, count = it, it) } } .toImmutableMap(), title = stringResource(MR.strings.auto_download_while_reading), ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_ahead_info)), ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.util.fastMap import androidx.core.content.ContextCompat import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.category.visualName import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.widget.TriStateListDialog import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.ui.category.CategoryScreen import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.launch import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.ResetCategoryFlags import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_HAS_UNREAD import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_READ import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_OUTSIDE_RELEASE_PERIOD import tachiyomi.domain.library.service.LibraryPreferences.Companion.MARK_DUPLICATE_CHAPTER_READ_EXISTING import tachiyomi.domain.library.service.LibraryPreferences.Companion.MARK_DUPLICATE_CHAPTER_READ_NEW import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object SettingsLibraryScreen : SearchableSettings { @Composable @ReadOnlyComposable override fun getTitleRes() = MR.strings.pref_category_library @Composable override fun getPreferences(): List { val getCategories = remember { Injekt.get() } val libraryPreferences = remember { Injekt.get() } val allCategories by getCategories.subscribe().collectAsState(initial = emptyList()) return listOf( getCategoriesGroup(LocalNavigator.currentOrThrow, allCategories, libraryPreferences), getGlobalUpdateGroup(allCategories, libraryPreferences), getBehaviorGroup(libraryPreferences), ) } @Composable private fun getCategoriesGroup( navigator: Navigator, allCategories: List, libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup { val scope = rememberCoroutineScope() val userCategoriesCount = allCategories.filterNot(Category::isSystemCategory).size // For default category val ids = listOf(libraryPreferences.defaultCategory.defaultValue()) + allCategories.fastMap { it.id.toInt() } val labels = listOf(stringResource(MR.strings.default_category_summary)) + allCategories.fastMap { it.visualName } return Preference.PreferenceGroup( title = stringResource(MR.strings.categories), preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.action_edit_categories), subtitle = pluralStringResource( MR.plurals.num_categories, count = userCategoriesCount, userCategoriesCount, ), onClick = { navigator.push(CategoryScreen()) }, ), Preference.PreferenceItem.ListPreference( preference = libraryPreferences.defaultCategory, entries = ids.zip(labels).toMap().toImmutableMap(), title = stringResource(MR.strings.default_category), ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.categorizedDisplaySettings, title = stringResource(MR.strings.categorized_display_settings), onValueChanged = { if (!it) { scope.launch { Injekt.get().await() } } true }, ), ), ) } @Composable private fun getGlobalUpdateGroup( allCategories: List, libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val autoUpdateIntervalPref = libraryPreferences.autoUpdateInterval val autoUpdateCategoriesPref = libraryPreferences.updateCategories val autoUpdateCategoriesExcludePref = libraryPreferences.updateCategoriesExclude val autoUpdateInterval by autoUpdateIntervalPref.collectAsState() val included by autoUpdateCategoriesPref.collectAsState() val excluded by autoUpdateCategoriesExcludePref.collectAsState() var showCategoriesDialog by rememberSaveable { mutableStateOf(false) } if (showCategoriesDialog) { TriStateListDialog( title = stringResource(MR.strings.categories), message = stringResource(MR.strings.pref_library_update_categories_details), items = allCategories, initialChecked = included.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, initialInversed = excluded.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, itemLabel = { it.visualName }, onDismissRequest = { showCategoriesDialog = false }, onValueChanged = { newIncluded, newExcluded -> autoUpdateCategoriesPref.set(newIncluded.map { it.id.toString() }.toSet()) autoUpdateCategoriesExcludePref.set(newExcluded.map { it.id.toString() }.toSet()) showCategoriesDialog = false }, ) } return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_library_update), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = autoUpdateIntervalPref, entries = persistentMapOf( 0 to stringResource(MR.strings.update_never), 12 to stringResource(MR.strings.update_12hour), 24 to stringResource(MR.strings.update_24hour), 48 to stringResource(MR.strings.update_48hour), 72 to stringResource(MR.strings.update_72hour), 168 to stringResource(MR.strings.update_weekly), ), title = stringResource(MR.strings.pref_library_update_interval), onValueChanged = { LibraryUpdateJob.setupTask(context, it) true }, ), Preference.PreferenceItem.MultiSelectListPreference( preference = libraryPreferences.autoUpdateDeviceRestrictions, entries = persistentMapOf( DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi), DEVICE_NETWORK_NOT_METERED to stringResource(MR.strings.network_not_metered), DEVICE_CHARGING to stringResource(MR.strings.charging), ), title = stringResource(MR.strings.pref_library_update_restriction), subtitle = stringResource(MR.strings.restrictions), enabled = autoUpdateInterval > 0, onValueChanged = { // Post to event looper to allow the preference to be updated. ContextCompat.getMainExecutor(context).execute { LibraryUpdateJob.setupTask(context) } true }, ), Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.categories), subtitle = getCategoriesLabel( allCategories = allCategories, included = included, excluded = excluded, ), onClick = { showCategoriesDialog = true }, ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.autoUpdateMetadata, title = stringResource(MR.strings.pref_library_update_refresh_metadata), subtitle = stringResource(MR.strings.pref_library_update_refresh_metadata_summary), ), Preference.PreferenceItem.MultiSelectListPreference( preference = libraryPreferences.autoUpdateMangaRestrictions, entries = persistentMapOf( MANGA_HAS_UNREAD to stringResource(MR.strings.pref_update_only_completely_read), MANGA_NON_READ to stringResource(MR.strings.pref_update_only_started), MANGA_NON_COMPLETED to stringResource(MR.strings.pref_update_only_non_completed), MANGA_OUTSIDE_RELEASE_PERIOD to stringResource(MR.strings.pref_update_only_in_release_period), ), title = stringResource(MR.strings.pref_library_update_smart_update), ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.newShowUpdatesCount, title = stringResource(MR.strings.pref_library_update_show_tab_badge), ), ), ) } @Composable private fun getBehaviorGroup( libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_behavior), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = libraryPreferences.swipeToStartAction, entries = persistentMapOf( LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled), LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource(MR.strings.action_bookmark), LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource(MR.strings.action_mark_as_read), LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download), ), title = stringResource(MR.strings.pref_chapter_swipe_start), ), Preference.PreferenceItem.ListPreference( preference = libraryPreferences.swipeToEndAction, entries = persistentMapOf( LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled), LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource(MR.strings.action_bookmark), LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource(MR.strings.action_mark_as_read), LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download), ), title = stringResource(MR.strings.pref_chapter_swipe_end), ), Preference.PreferenceItem.MultiSelectListPreference( preference = libraryPreferences.markDuplicateReadChapterAsRead, entries = persistentMapOf( MARK_DUPLICATE_CHAPTER_READ_EXISTING to stringResource(MR.strings.pref_mark_duplicate_read_chapter_read_existing), MARK_DUPLICATE_CHAPTER_READ_NEW to stringResource(MR.strings.pref_mark_duplicate_read_chapter_read_new), ), title = stringResource(MR.strings.pref_mark_duplicate_read_chapter_read), ), Preference.PreferenceItem.SwitchPreference( preference = libraryPreferences.hideMissingChapters, title = stringResource(MR.strings.pref_hide_missing_chapter_indicators), ), ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ChromeReaderMode import androidx.compose.material.icons.outlined.Code import androidx.compose.material.icons.outlined.CollectionsBookmark import androidx.compose.material.icons.outlined.Explore import androidx.compose.material.icons.outlined.GetApp import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Palette import androidx.compose.material.icons.outlined.Search import androidx.compose.material.icons.outlined.Security import androidx.compose.material.icons.outlined.Storage import androidx.compose.material.icons.outlined.Sync import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp import androidx.core.graphics.ColorUtils import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.more.settings.screen.about.AboutScreen import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.util.LocalBackPress import eu.kanade.presentation.util.Screen import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen object SettingsMainScreen : Screen() { @Composable override fun Content() { Content(twoPane = false) } @Composable private fun getPalerSurface(): Color { val surface = MaterialTheme.colorScheme.surface val dark = isSystemInDarkTheme() return remember(surface, dark) { val arr = FloatArray(3) ColorUtils.colorToHSL(surface.toArgb(), arr) arr[2] = if (dark) { arr[2] - 0.05f } else { arr[2] + 0.02f }.coerceIn(0f, 1f) Color.hsl(arr[0], arr[1], arr[2]) } } @Composable fun Content(twoPane: Boolean) { val navigator = LocalNavigator.currentOrThrow val backPress = LocalBackPress.currentOrThrow val containerColor = if (twoPane) getPalerSurface() else MaterialTheme.colorScheme.surface val topBarState = rememberTopAppBarState() Scaffold( topBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topBarState), topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.label_settings), navigateUp = backPress::invoke, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_search), icon = Icons.Outlined.Search, onClick = { navigator.navigate(SettingsSearchScreen(), twoPane) }, ), ), ) }, scrollBehavior = scrollBehavior, ) }, containerColor = containerColor, content = { contentPadding -> val state = rememberLazyListState() val indexSelected = if (twoPane) { items.indexOfFirst { it.screen::class == navigator.items.first()::class } .also { LaunchedEffect(Unit) { state.animateScrollToItem(it) if (it > 0) { // Lift scroll topBarState.contentOffset = topBarState.heightOffsetLimit } } } } else { null } LazyColumn( state = state, contentPadding = contentPadding, ) { itemsIndexed( items = items, key = { _, item -> item.hashCode() }, ) { index, item -> val selected = indexSelected == index var modifier: Modifier = Modifier var contentColor = LocalContentColor.current if (twoPane) { modifier = Modifier .padding(horizontal = 8.dp) .clip(RoundedCornerShape(24.dp)) .then( if (selected) { Modifier.background(MaterialTheme.colorScheme.surfaceVariant) } else { Modifier }, ) if (selected) { contentColor = MaterialTheme.colorScheme.onSurfaceVariant } } CompositionLocalProvider(LocalContentColor provides contentColor) { TextPreferenceWidget( modifier = modifier, title = stringResource(item.titleRes), subtitle = item.formatSubtitle(), icon = item.icon, onPreferenceClick = { navigator.navigate(item.screen, twoPane) }, ) } } } }, ) } private fun Navigator.navigate(screen: VoyagerScreen, twoPane: Boolean) { if (twoPane) replaceAll(screen) else push(screen) } private data class Item( val titleRes: StringResource, val subtitleRes: StringResource? = null, val formatSubtitle: @Composable () -> String? = { subtitleRes?.let { stringResource(it) } }, val icon: ImageVector, val screen: VoyagerScreen, ) private val items = listOf( Item( titleRes = MR.strings.pref_category_appearance, subtitleRes = MR.strings.pref_appearance_summary, icon = Icons.Outlined.Palette, screen = SettingsAppearanceScreen, ), Item( titleRes = MR.strings.pref_category_library, subtitleRes = MR.strings.pref_library_summary, icon = Icons.Outlined.CollectionsBookmark, screen = SettingsLibraryScreen, ), Item( titleRes = MR.strings.pref_category_reader, subtitleRes = MR.strings.pref_reader_summary, icon = Icons.AutoMirrored.Outlined.ChromeReaderMode, screen = SettingsReaderScreen, ), Item( titleRes = MR.strings.pref_category_downloads, subtitleRes = MR.strings.pref_downloads_summary, icon = Icons.Outlined.GetApp, screen = SettingsDownloadScreen, ), Item( titleRes = MR.strings.pref_category_tracking, subtitleRes = MR.strings.pref_tracking_summary, icon = Icons.Outlined.Sync, screen = SettingsTrackingScreen, ), Item( titleRes = MR.strings.browse, subtitleRes = MR.strings.pref_browse_summary, icon = Icons.Outlined.Explore, screen = SettingsBrowseScreen, ), Item( titleRes = MR.strings.label_data_storage, subtitleRes = MR.strings.pref_backup_summary, icon = Icons.Outlined.Storage, screen = SettingsDataScreen, ), Item( titleRes = MR.strings.pref_category_security, subtitleRes = MR.strings.pref_security_summary, icon = Icons.Outlined.Security, screen = SettingsSecurityScreen, ), Item( titleRes = MR.strings.pref_category_advanced, subtitleRes = MR.strings.pref_advanced_summary, icon = Icons.Outlined.Code, screen = SettingsAdvancedScreen, ), Item( titleRes = MR.strings.pref_category_about, formatSubtitle = { "${stringResource(MR.strings.app_name)} ${AboutScreen.getVersionName(withBuildDate = false)}" }, icon = Icons.Outlined.Info, screen = AboutScreen, ), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalView import eu.kanade.presentation.more.settings.Preference import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.util.system.hasDisplayCutout import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableMap import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.text.NumberFormat object SettingsReaderScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.pref_category_reader @Composable override fun getPreferences(): List { val readerPref = remember { Injekt.get() } return listOf( Preference.PreferenceItem.ListPreference( preference = readerPref.defaultReadingMode, entries = ReadingMode.entries.drop(1) .associate { it.flagValue to stringResource(it.stringRes) } .toImmutableMap(), title = stringResource(MR.strings.pref_viewer_type), ), Preference.PreferenceItem.ListPreference( preference = readerPref.doubleTapAnimSpeed, entries = persistentMapOf( 1 to stringResource(MR.strings.double_tap_anim_speed_0), 500 to stringResource(MR.strings.double_tap_anim_speed_normal), 250 to stringResource(MR.strings.double_tap_anim_speed_fast), ), title = stringResource(MR.strings.pref_double_tap_anim_speed), ), Preference.PreferenceItem.SwitchPreference( preference = readerPref.showReadingMode, title = stringResource(MR.strings.pref_show_reading_mode), subtitle = stringResource(MR.strings.pref_show_reading_mode_summary), ), Preference.PreferenceItem.SwitchPreference( preference = readerPref.showNavigationOverlayOnStart, title = stringResource(MR.strings.pref_show_navigation_mode), subtitle = stringResource(MR.strings.pref_show_navigation_mode_summary), ), Preference.PreferenceItem.SwitchPreference( preference = readerPref.pageTransitions, title = stringResource(MR.strings.pref_page_transitions), ), getDisplayGroup(readerPreferences = readerPref), getEInkGroup(readerPreferences = readerPref), getReadingGroup(readerPreferences = readerPref), getPagedGroup(readerPreferences = readerPref), getWebtoonGroup(readerPreferences = readerPref), getNavigationGroup(readerPreferences = readerPref), getActionsGroup(readerPreferences = readerPref), ) } @Composable private fun getDisplayGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { val fullscreenPref = readerPreferences.fullscreen val fullscreen by fullscreenPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_display), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = readerPreferences.defaultOrientationType, entries = ReaderOrientation.entries.drop(1) .associate { it.flagValue to stringResource(it.stringRes) } .toImmutableMap(), title = stringResource(MR.strings.pref_rotation_type), ), Preference.PreferenceItem.ListPreference( preference = readerPreferences.readerTheme, entries = persistentMapOf( 1 to stringResource(MR.strings.black_background), 2 to stringResource(MR.strings.gray_background), 0 to stringResource(MR.strings.white_background), 3 to stringResource(MR.strings.automatic_background), ), title = stringResource(MR.strings.pref_reader_theme), ), Preference.PreferenceItem.SwitchPreference( preference = fullscreenPref, title = stringResource(MR.strings.pref_fullscreen), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.drawUnderCutout, title = stringResource(MR.strings.pref_cutout_short), enabled = LocalView.current.hasDisplayCutout() && fullscreen, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.keepScreenOn, title = stringResource(MR.strings.pref_keep_screen_on), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.showPageNumber, title = stringResource(MR.strings.pref_show_page_number), ), ), ) } @Composable private fun getEInkGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { val flashPageState by readerPreferences.flashOnPageChange.collectAsState() val flashMillisPref = readerPreferences.flashDurationMillis val flashMillis by flashMillisPref.collectAsState() val flashIntervalPref = readerPreferences.flashPageInterval val flashInterval by flashIntervalPref.collectAsState() val flashColorPref = readerPreferences.flashColor return Preference.PreferenceGroup( title = "E-Ink", preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.flashOnPageChange, title = stringResource(MR.strings.pref_flash_page), subtitle = stringResource(MR.strings.pref_flash_page_summ), ), Preference.PreferenceItem.SliderPreference( value = flashMillis / ReaderPreferences.MILLI_CONVERSION, valueRange = 1..15, title = stringResource(MR.strings.pref_flash_duration), valueString = stringResource(MR.strings.pref_flash_duration_summary, flashMillis), enabled = flashPageState, onValueChanged = { flashMillisPref.set(it * ReaderPreferences.MILLI_CONVERSION) }, ), Preference.PreferenceItem.SliderPreference( value = flashInterval, valueRange = 1..10, title = stringResource(MR.strings.pref_flash_page_interval), valueString = pluralStringResource(MR.plurals.pref_pages, flashInterval, flashInterval), enabled = flashPageState, onValueChanged = { flashIntervalPref.set(it) }, ), Preference.PreferenceItem.ListPreference( preference = flashColorPref, entries = persistentMapOf( ReaderPreferences.FlashColor.BLACK to stringResource(MR.strings.pref_flash_style_black), ReaderPreferences.FlashColor.WHITE to stringResource(MR.strings.pref_flash_style_white), ReaderPreferences.FlashColor.WHITE_BLACK to stringResource(MR.strings.pref_flash_style_white_black), ), title = stringResource(MR.strings.pref_flash_with), enabled = flashPageState, ), ), ) } @Composable private fun getReadingGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_category_reading), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.skipRead, title = stringResource(MR.strings.pref_skip_read_chapters), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.skipFiltered, title = stringResource(MR.strings.pref_skip_filtered_chapters), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.skipDupe, title = stringResource(MR.strings.pref_skip_dupe_chapters), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.alwaysShowChapterTransition, title = stringResource(MR.strings.pref_always_show_chapter_transition), ), ), ) } @Composable private fun getPagedGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { val navModePref = readerPreferences.navigationModePager val imageScaleTypePref = readerPreferences.imageScaleType val dualPageSplitPref = readerPreferences.dualPageSplitPaged val rotateToFitPref = readerPreferences.dualPageRotateToFit val navMode by navModePref.collectAsState() val imageScaleType by imageScaleTypePref.collectAsState() val dualPageSplit by dualPageSplitPref.collectAsState() val rotateToFit by rotateToFitPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.pager_viewer), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = navModePref, entries = ReaderPreferences.TapZones .mapIndexed { index, it -> index to stringResource(it) } .toMap() .toImmutableMap(), title = stringResource(MR.strings.pref_viewer_nav), ), Preference.PreferenceItem.ListPreference( preference = readerPreferences.pagerNavInverted, entries = persistentListOf( ReaderPreferences.TappingInvertMode.NONE, ReaderPreferences.TappingInvertMode.HORIZONTAL, ReaderPreferences.TappingInvertMode.VERTICAL, ReaderPreferences.TappingInvertMode.BOTH, ) .associateWith { stringResource(it.titleRes) } .toImmutableMap(), title = stringResource(MR.strings.pref_read_with_tapping_inverted), enabled = navMode != 5, ), Preference.PreferenceItem.ListPreference( preference = imageScaleTypePref, entries = ReaderPreferences.ImageScaleType .mapIndexed { index, it -> index + 1 to stringResource(it) } .toMap() .toImmutableMap(), title = stringResource(MR.strings.pref_image_scale_type), ), Preference.PreferenceItem.ListPreference( preference = readerPreferences.zoomStart, entries = ReaderPreferences.ZoomStart .mapIndexed { index, it -> index + 1 to stringResource(it) } .toMap() .toImmutableMap(), title = stringResource(MR.strings.pref_zoom_start), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.cropBorders, title = stringResource(MR.strings.pref_crop_borders), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.landscapeZoom, title = stringResource(MR.strings.pref_landscape_zoom), enabled = imageScaleType == 1, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.navigateToPan, title = stringResource(MR.strings.pref_navigate_pan), enabled = navMode != 5, ), Preference.PreferenceItem.SwitchPreference( preference = dualPageSplitPref, title = stringResource(MR.strings.pref_dual_page_split), onValueChanged = { rotateToFitPref.set(false) true }, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.dualPageInvertPaged, title = stringResource(MR.strings.pref_dual_page_invert), subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), enabled = dualPageSplit, ), Preference.PreferenceItem.SwitchPreference( preference = rotateToFitPref, title = stringResource(MR.strings.pref_page_rotate), onValueChanged = { dualPageSplitPref.set(false) true }, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.dualPageRotateToFitInvert, title = stringResource(MR.strings.pref_page_rotate_invert), enabled = rotateToFit, ), ), ) } @Composable private fun getWebtoonGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { val numberFormat = remember { NumberFormat.getPercentInstance() } val navModePref = readerPreferences.navigationModeWebtoon val dualPageSplitPref = readerPreferences.dualPageSplitWebtoon val rotateToFitPref = readerPreferences.dualPageRotateToFitWebtoon val webtoonSidePaddingPref = readerPreferences.webtoonSidePadding val navMode by navModePref.collectAsState() val dualPageSplit by dualPageSplitPref.collectAsState() val rotateToFit by rotateToFitPref.collectAsState() val webtoonSidePadding by webtoonSidePaddingPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.webtoon_viewer), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( preference = navModePref, entries = ReaderPreferences.TapZones .mapIndexed { index, it -> index to stringResource(it) } .toMap() .toImmutableMap(), title = stringResource(MR.strings.pref_viewer_nav), ), Preference.PreferenceItem.ListPreference( preference = readerPreferences.webtoonNavInverted, entries = persistentListOf( ReaderPreferences.TappingInvertMode.NONE, ReaderPreferences.TappingInvertMode.HORIZONTAL, ReaderPreferences.TappingInvertMode.VERTICAL, ReaderPreferences.TappingInvertMode.BOTH, ) .associateWith { stringResource(it.titleRes) } .toImmutableMap(), title = stringResource(MR.strings.pref_read_with_tapping_inverted), enabled = navMode != 5, ), Preference.PreferenceItem.SliderPreference( value = webtoonSidePadding, valueRange = ReaderPreferences.let { it.WEBTOON_PADDING_MIN..it.WEBTOON_PADDING_MAX }, title = stringResource(MR.strings.pref_webtoon_side_padding), valueString = numberFormat.format(webtoonSidePadding / 100f), onValueChanged = { webtoonSidePaddingPref.set(it) }, ), Preference.PreferenceItem.ListPreference( preference = readerPreferences.readerHideThreshold, entries = persistentMapOf( ReaderPreferences.ReaderHideThreshold.HIGHEST to stringResource(MR.strings.pref_highest), ReaderPreferences.ReaderHideThreshold.HIGH to stringResource(MR.strings.pref_high), ReaderPreferences.ReaderHideThreshold.LOW to stringResource(MR.strings.pref_low), ReaderPreferences.ReaderHideThreshold.LOWEST to stringResource(MR.strings.pref_lowest), ), title = stringResource(MR.strings.pref_hide_threshold), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.cropBordersWebtoon, title = stringResource(MR.strings.pref_crop_borders), ), Preference.PreferenceItem.SwitchPreference( preference = dualPageSplitPref, title = stringResource(MR.strings.pref_dual_page_split), onValueChanged = { rotateToFitPref.set(false) true }, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.dualPageInvertWebtoon, title = stringResource(MR.strings.pref_dual_page_invert), subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), enabled = dualPageSplit, ), Preference.PreferenceItem.SwitchPreference( preference = rotateToFitPref, title = stringResource(MR.strings.pref_page_rotate), onValueChanged = { dualPageSplitPref.set(false) true }, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.dualPageRotateToFitInvertWebtoon, title = stringResource(MR.strings.pref_page_rotate_invert), enabled = rotateToFit, ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.webtoonDoubleTapZoomEnabled, title = stringResource(MR.strings.pref_double_tap_zoom), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.webtoonDisableZoomOut, title = stringResource(MR.strings.pref_webtoon_disable_zoom_out), ), ), ) } @Composable private fun getNavigationGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { val readWithVolumeKeysPref = readerPreferences.readWithVolumeKeys val readWithVolumeKeys by readWithVolumeKeysPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_reader_navigation), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = readWithVolumeKeysPref, title = stringResource(MR.strings.pref_read_with_volume_keys), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.readWithVolumeKeysInverted, title = stringResource(MR.strings.pref_read_with_volume_keys_inverted), enabled = readWithVolumeKeys, ), ), ) } @Composable private fun getActionsGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_reader_actions), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.readWithLongTap, title = stringResource(MR.strings.pref_read_with_long_tap), ), Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.folderPerManga, title = stringResource(MR.strings.pref_create_folder_per_manga), subtitle = stringResource(MR.strings.pref_create_folder_per_manga_summary), ), ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.animation.Crossfade import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.paddingFromBaseline import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.input.TextFieldLineLimits import androidx.compose.foundation.text.input.clearText import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Close import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.NonRestartableComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.UpIcon import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.util.Screen import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.runOnEnterKeyPressed import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen class SettingsSearchScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val softKeyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current val focusRequester = remember { FocusRequester() } val listState = rememberLazyListState() // Hide keyboard on change screen DisposableEffect(Unit) { onDispose { softKeyboardController?.hide() } } // Hide keyboard on outside text field is touched LaunchedEffect(listState.isScrollInProgress) { if (listState.isScrollInProgress) { focusManager.clearFocus() } } // Request text field focus on launch LaunchedEffect(focusRequester) { focusRequester.requestFocus() } val textFieldState = rememberTextFieldState() Scaffold( topBar = { Column { TopAppBar( navigationIcon = { val canPop = remember { navigator.canPop } if (canPop) { IconButton(onClick = navigator::pop) { UpIcon() } } }, title = { BasicTextField( state = textFieldState, modifier = Modifier .fillMaxWidth() .focusRequester(focusRequester) .runOnEnterKeyPressed(action = focusManager::clearFocus), textStyle = MaterialTheme.typography.bodyLarge .copy(color = MaterialTheme.colorScheme.onSurface), lineLimits = TextFieldLineLimits.SingleLine, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), onKeyboardAction = { focusManager.clearFocus() }, cursorBrush = SolidColor(MaterialTheme.colorScheme.primary), decorator = { if (textFieldState.text.isEmpty()) { Text( text = stringResource(MR.strings.action_search_settings), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) } it() }, ) }, actions = { if (textFieldState.text.isNotEmpty()) { IconButton(onClick = { textFieldState.clearText() }) { Icon( imageVector = Icons.Outlined.Close, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } } }, ) HorizontalDivider() } }, ) { contentPadding -> SearchResult( searchKey = textFieldState.text.toString(), listState = listState, contentPadding = contentPadding, ) { result -> SearchableSettings.highlightKey = result.highlightKey navigator.replace(result.route) } } } } @Composable private fun SearchResult( searchKey: String, modifier: Modifier = Modifier, listState: LazyListState = rememberLazyListState(), contentPadding: PaddingValues = PaddingValues(), onItemClick: (SearchResultItem) -> Unit, ) { if (searchKey.isEmpty()) return val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr val index = getIndex() val result by produceState?>(initialValue = null, searchKey) { value = index.asSequence() .flatMap { settingsData -> settingsData.contents.asSequence() // Only search from enabled prefs and one with valid title .filter { it.enabled && it.title.isNotBlank() } // Flatten items contained inside *enabled* PreferenceGroup .flatMap { p -> when (p) { is Preference.PreferenceGroup -> { if (p.enabled) { p.preferenceItems.asSequence() .filter { it.enabled && it.title.isNotBlank() } .map { p.title to it } } else { emptySequence() } } is Preference.PreferenceItem<*, *> -> sequenceOf(null to p) } } // Don't show info preference .filterNot { it.second is Preference.PreferenceItem.InfoPreference } // Filter by search query .filter { (_, p) -> val inTitle = p.title.contains(searchKey, true) val inSummary = p.subtitle?.contains(searchKey, true) ?: false inTitle || inSummary } // Map result data .map { (categoryTitle, p) -> SearchResultItem( route = settingsData.route, title = p.title, breadcrumbs = getLocalizedBreadcrumb( path = settingsData.title, node = categoryTitle, isLtr = isLtr, ), highlightKey = p.title, ) } } .take(10) // Just take top 10 result for quicker result .toList() } Crossfade( targetState = result, label = "results", ) { when { it == null -> {} it.isEmpty() -> { EmptyScreen(stringResource(MR.strings.no_results_found)) } else -> { LazyColumn( modifier = modifier.fillMaxSize(), state = listState, contentPadding = contentPadding, horizontalAlignment = Alignment.CenterHorizontally, ) { items( items = it, key = { i -> i.hashCode() }, ) { item -> Column( modifier = Modifier .fillMaxWidth() .clickable { onItemClick(item) } .padding(horizontal = 24.dp, vertical = 14.dp), ) { Text( text = item.title, overflow = TextOverflow.Ellipsis, maxLines = 1, fontWeight = FontWeight.Normal, style = MaterialTheme.typography.titleMedium, ) Text( text = item.breadcrumbs, modifier = Modifier.paddingFromBaseline(top = 16.dp), maxLines = 1, color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodySmall, ) } } } } } } } @Composable @NonRestartableComposable private fun getIndex() = settingScreens .map { screen -> SettingsData( title = stringResource(screen.getTitleRes()), route = screen, contents = screen.getPreferences(), ) } private fun getLocalizedBreadcrumb(path: String, node: String?, isLtr: Boolean): String { return if (node == null) { path } else { if (isLtr) { // This locale reads left to right. "$path > $node" } else { // This locale reads right to left. "$node < $path" } } } private val settingScreens = listOf( SettingsAppearanceScreen, SettingsLibraryScreen, SettingsReaderScreen, SettingsDownloadScreen, SettingsTrackingScreen, SettingsBrowseScreen, SettingsDataScreen, SettingsSecurityScreen, SettingsAdvancedScreen, ) private data class SettingsData( val title: String, val route: VoyagerScreen, val contents: List, ) private data class SearchResultItem( val route: VoyagerScreen, val title: String, val breadcrumbs: String, val highlightKey: String, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.fragment.app.FragmentActivity import eu.kanade.presentation.more.settings.Preference import eu.kanade.tachiyomi.core.security.PrivacyPreferences import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported import eu.kanade.tachiyomi.util.system.telemetryIncluded import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableMap import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object SettingsSecurityScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.pref_category_security @Composable override fun getPreferences(): List { val securityPreferences = remember { Injekt.get() } val privacyPreferences = remember { Injekt.get() } return buildList(2) { add(getSecurityGroup(securityPreferences)) if (!telemetryIncluded) return@buildList add(getFirebaseGroup(privacyPreferences)) } } @Composable private fun getSecurityGroup( securityPreferences: SecurityPreferences, ): Preference.PreferenceGroup { val context = LocalContext.current val authSupported = remember { context.isAuthenticationSupported() } val useAuthPref = securityPreferences.useAuthenticator val useAuth by useAuthPref.collectAsState() return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_security), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = useAuthPref, title = stringResource(MR.strings.lock_with_biometrics), enabled = authSupported, onValueChanged = { (context as FragmentActivity).authenticate( title = context.stringResource(MR.strings.lock_with_biometrics), ) }, ), Preference.PreferenceItem.ListPreference( preference = securityPreferences.lockAppAfter, entries = LockAfterValues .associateWith { when (it) { -1 -> stringResource(MR.strings.lock_never) 0 -> stringResource(MR.strings.lock_always) else -> pluralStringResource(MR.plurals.lock_after_mins, count = it, it) } } .toImmutableMap(), title = stringResource(MR.strings.lock_when_idle), enabled = authSupported && useAuth, onValueChanged = { (context as FragmentActivity).authenticate( title = context.stringResource(MR.strings.lock_when_idle), ) }, ), Preference.PreferenceItem.SwitchPreference( preference = securityPreferences.hideNotificationContent, title = stringResource(MR.strings.hide_notification_content), ), Preference.PreferenceItem.ListPreference( preference = securityPreferences.secureScreen, entries = SecurityPreferences.SecureScreenMode.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), title = stringResource(MR.strings.secure_screen), ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.secure_screen_summary)), ), ) } @Composable private fun getFirebaseGroup( privacyPreferences: PrivacyPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_firebase), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( preference = privacyPreferences.crashlytics, title = stringResource(MR.strings.onboarding_permission_crashlytics), subtitle = stringResource(MR.strings.onboarding_permission_crashlytics_description), ), Preference.PreferenceItem.SwitchPreference( preference = privacyPreferences.analytics, title = stringResource(MR.strings.onboarding_permission_analytics), subtitle = stringResource(MR.strings.onboarding_permission_analytics_description), ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.firebase_summary)), ), ) } } private val LockAfterValues = persistentListOf( 0, // Always 1, 2, 5, 10, -1, // Never ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen import android.content.Context import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material.icons.outlined.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.autofill.ContentType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.semantics.contentType import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.model.AutoTrackState import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.presentation.more.settings.Preference import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.anilist.AnilistApi import eu.kanade.tachiyomi.data.track.bangumi.BangumiApi import eu.kanade.tachiyomi.data.track.myanimelist.MyAnimeListApi import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toPersistentMap import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object SettingsTrackingScreen : SearchableSettings { @ReadOnlyComposable @Composable override fun getTitleRes() = MR.strings.pref_category_tracking @Composable override fun RowScope.AppBarAction() { val uriHandler = LocalUriHandler.current IconButton(onClick = { uriHandler.openUri("https://mihon.app/docs/guides/tracking") }) { Icon( imageVector = Icons.AutoMirrored.Outlined.HelpOutline, contentDescription = stringResource(MR.strings.tracking_guide), ) } } @Composable override fun getPreferences(): List { val context = LocalContext.current val trackPreferences = remember { Injekt.get() } val trackerManager = remember { Injekt.get() } val sourceManager = remember { Injekt.get() } val autoTrackStatePref = trackPreferences.autoUpdateTrackOnMarkRead var dialog by remember { mutableStateOf(null) } dialog?.run { when (this) { is LoginDialog -> { TrackingLoginDialog( tracker = tracker, uNameStringRes = uNameStringRes, onDismissRequest = { dialog = null }, ) } is LogoutDialog -> { TrackingLogoutDialog( tracker = tracker, onDismissRequest = { dialog = null }, ) } } } val enhancedTrackers = trackerManager.trackers .filter { it is EnhancedTracker } .partition { service -> val acceptedSources = (service as EnhancedTracker).getAcceptedSources() sourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedSources } } var enhancedTrackerInfo = stringResource(MR.strings.enhanced_tracking_info) if (enhancedTrackers.second.isNotEmpty()) { val missingSourcesInfo = stringResource( MR.strings.enhanced_services_not_installed, enhancedTrackers.second.joinToString { it.name }, ) enhancedTrackerInfo += "\n\n$missingSourcesInfo" } return listOf( Preference.PreferenceItem.SwitchPreference( preference = trackPreferences.autoUpdateTrack, title = stringResource(MR.strings.pref_auto_update_manga_sync), ), Preference.PreferenceItem.ListPreference( preference = trackPreferences.autoUpdateTrackOnMarkRead, entries = AutoTrackState.entries .associateWith { stringResource(it.titleRes) } .toPersistentMap(), title = stringResource(MR.strings.pref_auto_update_manga_on_mark_read), ), Preference.PreferenceGroup( title = stringResource(MR.strings.services), preferenceItems = persistentListOf( Preference.PreferenceItem.TrackerPreference( tracker = trackerManager.myAnimeList, login = { context.openInBrowser(MyAnimeListApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.myAnimeList) }, ), Preference.PreferenceItem.TrackerPreference( tracker = trackerManager.aniList, login = { context.openInBrowser(AnilistApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.aniList) }, ), Preference.PreferenceItem.TrackerPreference( tracker = trackerManager.kitsu, login = { dialog = LoginDialog(trackerManager.kitsu, MR.strings.email) }, logout = { dialog = LogoutDialog(trackerManager.kitsu) }, ), Preference.PreferenceItem.TrackerPreference( tracker = trackerManager.mangaUpdates, login = { dialog = LoginDialog(trackerManager.mangaUpdates, MR.strings.username) }, logout = { dialog = LogoutDialog(trackerManager.mangaUpdates) }, ), Preference.PreferenceItem.TrackerPreference( tracker = trackerManager.shikimori, login = { context.openInBrowser(ShikimoriApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.shikimori) }, ), Preference.PreferenceItem.TrackerPreference( tracker = trackerManager.bangumi, login = { context.openInBrowser(BangumiApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.bangumi) }, ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.tracking_info)), ), ), Preference.PreferenceGroup( title = stringResource(MR.strings.enhanced_services), preferenceItems = ( enhancedTrackers.first .map { service -> Preference.PreferenceItem.TrackerPreference( tracker = service, login = { (service as EnhancedTracker).loginNoop() }, logout = service::logout, ) } + listOf(Preference.PreferenceItem.InfoPreference(enhancedTrackerInfo)) ).toImmutableList(), ), ) } @Composable private fun TrackingLoginDialog( tracker: Tracker, uNameStringRes: StringResource, onDismissRequest: () -> Unit, ) { val context = LocalContext.current val scope = rememberCoroutineScope() var username by remember { mutableStateOf(TextFieldValue(tracker.getUsername())) } var password by remember { mutableStateOf(TextFieldValue(tracker.getPassword())) } var processing by remember { mutableStateOf(false) } var inputError by remember { mutableStateOf(false) } AlertDialog( onDismissRequest = onDismissRequest, title = { Row(verticalAlignment = Alignment.CenterVertically) { Text( text = stringResource(MR.strings.login_title, tracker.name), modifier = Modifier.weight(1f), ) IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, contentDescription = stringResource(MR.strings.action_close), ) } } }, text = { Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { OutlinedTextField( modifier = Modifier .fillMaxWidth() .semantics { contentType = ContentType.Username + ContentType.EmailAddress }, value = username, onValueChange = { username = it }, label = { Text(text = stringResource(uNameStringRes)) }, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), singleLine = true, isError = inputError && !processing, ) var hidePassword by remember { mutableStateOf(true) } OutlinedTextField( modifier = Modifier .fillMaxWidth() .semantics { contentType = ContentType.Password }, value = password, onValueChange = { password = it }, label = { Text(text = stringResource(MR.strings.password)) }, trailingIcon = { IconButton(onClick = { hidePassword = !hidePassword }) { Icon( imageVector = if (hidePassword) { Icons.Filled.Visibility } else { Icons.Filled.VisibilityOff }, contentDescription = null, ) } }, visualTransformation = if (hidePassword) { PasswordVisualTransformation() } else { VisualTransformation.None }, keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Password, imeAction = ImeAction.Done, ), singleLine = true, isError = inputError && !processing, ) } }, confirmButton = { Button( modifier = Modifier.fillMaxWidth(), enabled = !processing && username.text.isNotBlank() && password.text.isNotBlank(), onClick = { scope.launchIO { processing = true val result = checkLogin( context = context, tracker = tracker, username = username.text, password = password.text, ) inputError = !result if (result) onDismissRequest() processing = false } }, ) { val id = if (processing) MR.strings.logging_in else MR.strings.login Text(text = stringResource(id)) } }, ) } private suspend fun checkLogin( context: Context, tracker: Tracker, username: String, password: String, ): Boolean { return try { tracker.login(username, password) withUIContext { context.toast(MR.strings.login_success) } true } catch (e: Throwable) { tracker.logout() withUIContext { context.toast(e.message.toString()) } false } } @Composable private fun TrackingLogoutDialog( tracker: Tracker, onDismissRequest: () -> Unit, ) { val context = LocalContext.current AlertDialog( onDismissRequest = onDismissRequest, title = { Text( text = stringResource(MR.strings.logout_title, tracker.name), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth(), ) }, confirmButton = { Row(horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall)) { OutlinedButton( modifier = Modifier.weight(1f), onClick = onDismissRequest, ) { Text(text = stringResource(MR.strings.action_cancel)) } Button( modifier = Modifier.weight(1f), onClick = { tracker.logout() onDismissRequest() context.toast(MR.strings.logout_success) }, colors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.error, contentColor = MaterialTheme.colorScheme.onError, ), ) { Text(text = stringResource(MR.strings.logout)) } } }, ) } } private data class LoginDialog( val tracker: Tracker, val uNameStringRes: StringResource, ) private data class LogoutDialog( val tracker: Tracker, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.about import android.content.Context import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Public import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.dp import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.LogoHeader import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.util.LocalBackPress import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.updater.AppUpdateChecker import eu.kanade.tachiyomi.data.updater.RELEASE_URL import eu.kanade.tachiyomi.ui.more.NewUpdateScreen import eu.kanade.tachiyomi.util.CrashLogUtil import eu.kanade.tachiyomi.util.lang.toDateTimestampString import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.isPreviewBuildType import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.updaterEnabled import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.release.interactor.GetApplicationRelease import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LinkIcon import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.icons.CustomIcons import tachiyomi.presentation.core.icons.Discord import tachiyomi.presentation.core.icons.Facebook import tachiyomi.presentation.core.icons.Github import tachiyomi.presentation.core.icons.Reddit import tachiyomi.presentation.core.icons.X import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.LocalDateTime import java.time.ZoneId object AboutScreen : Screen() { @Composable override fun Content() { val scope = rememberCoroutineScope() val context = LocalContext.current val uriHandler = LocalUriHandler.current val handleBack = LocalBackPress.current val navigator = LocalNavigator.currentOrThrow var isCheckingUpdates by remember { mutableStateOf(false) } Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.pref_category_about), navigateUp = if (handleBack != null) handleBack::invoke else null, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> ScrollbarLazyColumn( contentPadding = contentPadding, ) { item { LogoHeader() } item { TextPreferenceWidget( title = stringResource(MR.strings.version), subtitle = getVersionName(withBuildDate = true), onPreferenceClick = { val deviceInfo = CrashLogUtil(context).getDebugInfo() context.copyToClipboard("Debug information", deviceInfo) }, ) } if (updaterEnabled) { item { TextPreferenceWidget( title = stringResource(MR.strings.check_for_updates), widget = { AnimatedVisibility(visible = isCheckingUpdates) { CircularProgressIndicator( modifier = Modifier.size(28.dp), strokeWidth = 3.dp, ) } }, onPreferenceClick = { if (!isCheckingUpdates) { scope.launch { isCheckingUpdates = true checkVersion( context = context, onAvailableUpdate = { result -> val updateScreen = NewUpdateScreen( versionName = result.release.version, changelogInfo = result.release.info, releaseLink = result.release.releaseLink, downloadLink = result.release.downloadLink, ) navigator.push(updateScreen) }, onFinish = { isCheckingUpdates = false }, ) } } }, ) } } if (!BuildConfig.DEBUG) { item { TextPreferenceWidget( title = stringResource(MR.strings.whats_new), onPreferenceClick = { uriHandler.openUri(RELEASE_URL) }, ) } } item { TextPreferenceWidget( title = stringResource(MR.strings.licenses), onPreferenceClick = { navigator.push(OpenSourceLicensesScreen()) }, ) } item { TextPreferenceWidget( title = stringResource(MR.strings.privacy_policy), onPreferenceClick = { uriHandler.openUri("https://mihon.app/privacy/") }, ) } item { Row( modifier = Modifier .fillMaxWidth() .padding(vertical = 8.dp), horizontalArrangement = Arrangement.Center, ) { LinkIcon( label = stringResource(MR.strings.website), icon = Icons.Outlined.Public, url = "https://mihon.app", ) LinkIcon( label = "Discord", icon = CustomIcons.Discord, url = "https://discord.gg/mihon", ) LinkIcon( label = "X", icon = CustomIcons.X, url = "https://x.com/mihonapp", ) LinkIcon( label = "Facebook", icon = CustomIcons.Facebook, url = "https://facebook.com/mihonapp", ) LinkIcon( label = "Reddit", icon = CustomIcons.Reddit, url = "https://www.reddit.com/r/mihonapp", ) LinkIcon( label = "GitHub", icon = CustomIcons.Github, url = "https://github.com/mihonapp", ) } } } } } /** * Checks version and shows a user prompt if an update is available. */ private suspend fun checkVersion( context: Context, onAvailableUpdate: (GetApplicationRelease.Result.NewUpdate) -> Unit, onFinish: () -> Unit, ) { val updateChecker = AppUpdateChecker() withUIContext { try { when (val result = withIOContext { updateChecker.checkForUpdate(context, forceCheck = true) }) { is GetApplicationRelease.Result.NewUpdate -> { onAvailableUpdate(result) } is GetApplicationRelease.Result.NoNewUpdate -> { context.toast(MR.strings.update_check_no_new_updates) } is GetApplicationRelease.Result.OsTooOld -> { context.toast(MR.strings.update_check_eol) } } } catch (e: Exception) { context.toast(e.message) logcat(LogPriority.ERROR, e) } finally { onFinish() } } } fun getVersionName(withBuildDate: Boolean): String { return when { BuildConfig.DEBUG -> { "Debug ${BuildConfig.COMMIT_SHA}".let { if (withBuildDate) { "$it (${getFormattedBuildTime()})" } else { it } } } isPreviewBuildType -> { "Beta r${BuildConfig.COMMIT_COUNT}".let { if (withBuildDate) { "$it (${BuildConfig.COMMIT_SHA}, ${getFormattedBuildTime()})" } else { "$it (${BuildConfig.COMMIT_SHA})" } } } else -> { "Stable ${BuildConfig.VERSION_NAME}".let { if (withBuildDate) { "$it (${getFormattedBuildTime()})" } else { it } } } } } internal fun getFormattedBuildTime(): String { return try { LocalDateTime.ofInstant( Instant.parse(BuildConfig.BUILD_TIME), ZoneId.systemDefault(), ) .toDateTimestampString( UiPreferences.dateFormat( Injekt.get().dateFormat.get(), ), ) } catch (e: Exception) { BuildConfig.BUILD_TIME } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.about import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Public import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.text.HtmlCompat import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.google.android.material.textview.MaterialTextView import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource class OpenSourceLibraryLicenseScreen( private val name: String, private val website: String?, private val license: String, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val uriHandler = LocalUriHandler.current Scaffold( topBar = { AppBar( title = name, navigateUp = navigator::pop, actions = { if (!website.isNullOrEmpty()) { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.website), icon = Icons.Default.Public, onClick = { uriHandler.openUri(website) }, ), ), ) } }, scrollBehavior = it, ) }, ) { contentPadding -> Column( modifier = Modifier .verticalScroll(rememberScrollState()) .padding(contentPadding) .padding(16.dp), ) { HtmlLicenseText(html = license) } } } @Composable private fun HtmlLicenseText(html: String) { AndroidView( factory = { MaterialTextView(it) }, update = { it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT) }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.about import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.mikepenz.aboutlibraries.ui.compose.android.produceLibraries import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer import com.mikepenz.aboutlibraries.ui.compose.util.htmlReadyLicenseContent import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.R import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource class OpenSourceLicensesScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.licenses), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> val libraries by produceLibraries(R.raw.aboutlibraries) LibrariesContainer( libraries = libraries, modifier = Modifier .fillMaxSize(), contentPadding = contentPadding, onLibraryClick = { navigator.push( OpenSourceLibraryLicenseScreen( name = it.name, website = it.website, license = it.licenses.firstOrNull()?.htmlReadyLicenseContent.orEmpty(), ), ) }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.advanced import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.FlipToBack import androidx.compose.material.icons.outlined.SelectAll import androidx.compose.material3.AlertDialog import androidx.compose.material3.Checkbox import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastMap import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.components.SourceIcon import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.update import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchUI import tachiyomi.core.common.util.lang.toLong import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.data.Database import tachiyomi.domain.source.interactor.GetSourcesWithNonLibraryManga import tachiyomi.domain.source.model.Source import tachiyomi.domain.source.model.SourceWithCount import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LazyColumnWithAction import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.selectedBackground import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ClearDatabaseScreen : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val model = rememberScreenModel { ClearDatabaseScreenModel() } val state by model.state.collectAsState() val scope = rememberCoroutineScope() when (val s = state) { is ClearDatabaseScreenModel.State.Loading -> LoadingScreen() is ClearDatabaseScreenModel.State.Ready -> { if (s.showConfirmation) { var keepReadManga by remember { mutableStateOf(true) } AlertDialog( title = { Text(text = stringResource(MR.strings.are_you_sure)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Text(text = stringResource(MR.strings.clear_database_text)) Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), verticalAlignment = Alignment.CenterVertically, ) { Text( text = stringResource(MR.strings.clear_db_exclude_read), modifier = Modifier.weight(1f), ) Switch( checked = keepReadManga, onCheckedChange = { keepReadManga = it }, ) } if (!keepReadManga) { Text( text = stringResource(MR.strings.clear_database_history_warning), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.error, ) } } }, onDismissRequest = model::hideConfirmation, confirmButton = { TextButton( onClick = { scope.launchUI { model.removeMangaBySourceId(keepReadManga) model.clearSelection() model.hideConfirmation() context.toast(MR.strings.clear_database_completed) } }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = model::hideConfirmation) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.pref_clear_database), navigateUp = navigator::pop, actions = { if (s.items.isNotEmpty()) { AppBarActions( actions = persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = model::selectAll, ), AppBar.Action( title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = model::invertSelection, ), ), ) } }, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> if (s.items.isEmpty()) { EmptyScreen( message = stringResource(MR.strings.database_clean), modifier = Modifier.padding(contentPadding), ) } else { LazyColumnWithAction( contentPadding = contentPadding, actionLabel = stringResource(MR.strings.action_delete), actionEnabled = s.selection.isNotEmpty(), onClickAction = model::showConfirmation, ) { items(s.items) { sourceWithCount -> ClearDatabaseItem( source = sourceWithCount.source, count = sourceWithCount.count, isSelected = s.selection.contains(sourceWithCount.id), onClickSelect = { model.toggleSelection(sourceWithCount.source) }, ) } } } } } } } @Composable private fun ClearDatabaseItem( source: Source, count: Long, isSelected: Boolean, onClickSelect: () -> Unit, ) { Row( modifier = Modifier .selectedBackground(isSelected) .clickable(onClick = onClickSelect) .padding(horizontal = 8.dp) .height(56.dp), verticalAlignment = Alignment.CenterVertically, ) { SourceIcon(source = source) Column( modifier = Modifier .padding(start = 8.dp) .weight(1f), ) { Text( text = source.visualName, style = MaterialTheme.typography.bodyMedium, ) Text(text = stringResource(MR.strings.clear_database_source_item_count, count)) } Checkbox( checked = isSelected, onCheckedChange = { onClickSelect() }, ) } } } private class ClearDatabaseScreenModel : StateScreenModel(State.Loading) { private val getSourcesWithNonLibraryManga: GetSourcesWithNonLibraryManga = Injekt.get() private val database: Database = Injekt.get() init { screenModelScope.launchIO { getSourcesWithNonLibraryManga.subscribe() .collectLatest { list -> mutableState.update { old -> val items = list.sortedBy { it.name } when (old) { State.Loading -> State.Ready(items) is State.Ready -> old.copy(items = items) } } } } } suspend fun removeMangaBySourceId(keepReadManga: Boolean) = withNonCancellableContext { val state = state.value as? State.Ready ?: return@withNonCancellableContext database.mangasQueries.deleteNonLibraryManga(state.selection, keepReadManga.toLong()) database.historyQueries.removeResettedHistory() } fun toggleSelection(source: Source) = mutableState.update { state -> if (state !is State.Ready) return@update state val mutableList = state.selection.toMutableList() if (mutableList.contains(source.id)) { mutableList.remove(source.id) } else { mutableList.add(source.id) } state.copy(selection = mutableList) } fun clearSelection() = mutableState.update { state -> if (state !is State.Ready) return@update state state.copy(selection = emptyList()) } fun selectAll() = mutableState.update { state -> if (state !is State.Ready) return@update state state.copy(selection = state.items.fastMap { it.id }) } fun invertSelection() = mutableState.update { state -> if (state !is State.Ready) return@update state state.copy( selection = state.items .fastMap { it.id } .filterNot { it in state.selection }, ) } fun showConfirmation() = mutableState.update { state -> if (state !is State.Ready) return@update state state.copy(showConfirmation = true) } fun hideConfirmation() = mutableState.update { state -> if (state !is State.Ready) return@update state state.copy(showConfirmation = false) } sealed interface State { @Immutable data object Loading : State @Immutable data class Ready( val items: List, val selection: List = emptyList(), val showConfirmation: Boolean = false, ) : State } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/appearance/AppLanguageScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.appearance import android.content.Context import androidx.appcompat.app.AppCompatDelegate import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Check import androidx.compose.material3.Icon import androidx.compose.material3.ListItem import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.core.os.LocaleListCompat import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import org.xmlpull.v1.XmlPullParser import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource class AppLanguageScreen : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val langs = remember { getLangs(context) } var currentLanguage by remember { mutableStateOf(AppCompatDelegate.getApplicationLocales().get(0)?.toLanguageTag() ?: "") } LaunchedEffect(currentLanguage) { val locale = if (currentLanguage.isEmpty()) { LocaleListCompat.getEmptyLocaleList() } else { LocaleListCompat.forLanguageTags(currentLanguage) } AppCompatDelegate.setApplicationLocales(locale) } Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.pref_app_language), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> LazyColumn( modifier = Modifier.padding(contentPadding), ) { items(langs) { ListItem( modifier = Modifier.clickable { currentLanguage = it.langTag }, headlineContent = { Text(it.displayName) }, supportingContent = { it.localizedDisplayName?.let { Text(it) } }, trailingContent = { if (currentLanguage == it.langTag) { Icon( imageVector = Icons.Default.Check, contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) } }, ) } } } } private fun getLangs(context: Context): ImmutableList { val langs = mutableListOf() val parser = context.resources.getXml(R.xml.locales_config) var eventType = parser.eventType while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG && parser.name == "locale") { for (i in 0.. {} is RepoDialog.Create -> { ExtensionRepoCreateDialog( onDismissRequest = screenModel::dismissDialog, onCreate = { screenModel.createRepo(it) }, repoUrls = successState.repos.map { it.baseUrl }.toImmutableSet(), ) } is RepoDialog.Delete -> { ExtensionRepoDeleteDialog( onDismissRequest = screenModel::dismissDialog, onDelete = { screenModel.deleteRepo(dialog.repo) }, repo = dialog.repo, ) } is RepoDialog.Conflict -> { ExtensionRepoConflictDialog( onDismissRequest = screenModel::dismissDialog, onMigrate = { screenModel.replaceRepo(dialog.newRepo) }, oldRepo = dialog.oldRepo, newRepo = dialog.newRepo, ) } is RepoDialog.Confirm -> { ExtensionRepoConfirmDialog( onDismissRequest = screenModel::dismissDialog, onCreate = { screenModel.createRepo(dialog.url) }, repo = dialog.url, ) } } LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> if (event is RepoEvent.LocalizedMessage) { context.toast(event.stringRes) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/ExtensionReposScreenModel.kt ================================================ package eu.kanade.presentation.more.settings.screen.browse import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.extension.ExtensionManager import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import mihon.domain.extensionrepo.interactor.CreateExtensionRepo import mihon.domain.extensionrepo.interactor.DeleteExtensionRepo import mihon.domain.extensionrepo.interactor.GetExtensionRepo import mihon.domain.extensionrepo.interactor.ReplaceExtensionRepo import mihon.domain.extensionrepo.interactor.UpdateExtensionRepo import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.core.common.util.lang.launchIO import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionReposScreenModel( private val getExtensionRepo: GetExtensionRepo = Injekt.get(), private val createExtensionRepo: CreateExtensionRepo = Injekt.get(), private val deleteExtensionRepo: DeleteExtensionRepo = Injekt.get(), private val replaceExtensionRepo: ReplaceExtensionRepo = Injekt.get(), private val updateExtensionRepo: UpdateExtensionRepo = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), ) : StateScreenModel(RepoScreenState.Loading) { private val _events: Channel = Channel(Int.MAX_VALUE) val events = _events.receiveAsFlow() init { screenModelScope.launchIO { getExtensionRepo.subscribeAll() .collectLatest { repos -> mutableState.update { RepoScreenState.Success( repos = repos.toImmutableSet(), ) } } } } /** * Creates and adds a new repo to the database. * * @param baseUrl The baseUrl of the repo to create. */ fun createRepo(baseUrl: String) { screenModelScope.launchIO { when (val result = createExtensionRepo.await(baseUrl)) { CreateExtensionRepo.Result.Success -> extensionManager.findAvailableExtensions() CreateExtensionRepo.Result.InvalidUrl -> _events.send(RepoEvent.InvalidUrl) CreateExtensionRepo.Result.RepoAlreadyExists -> _events.send(RepoEvent.RepoAlreadyExists) is CreateExtensionRepo.Result.DuplicateFingerprint -> { showDialog(RepoDialog.Conflict(result.oldRepo, result.newRepo)) } else -> {} } } } /** * Inserts a repo to the database, replace a matching repo with the same signing key fingerprint if found. * * @param newRepo The repo to insert */ fun replaceRepo(newRepo: ExtensionRepo) { screenModelScope.launchIO { replaceExtensionRepo.await(newRepo) } } /** * Refreshes information for each repository. */ fun refreshRepos() { val status = state.value if (status is RepoScreenState.Success) { screenModelScope.launchIO { updateExtensionRepo.awaitAll() } } } /** * Deletes the given repo from the database */ fun deleteRepo(baseUrl: String) { screenModelScope.launchIO { deleteExtensionRepo.await(baseUrl) extensionManager.findAvailableExtensions() } } fun showDialog(dialog: RepoDialog) { mutableState.update { when (it) { RepoScreenState.Loading -> it is RepoScreenState.Success -> it.copy(dialog = dialog) } } } fun dismissDialog() { mutableState.update { when (it) { RepoScreenState.Loading -> it is RepoScreenState.Success -> it.copy(dialog = null) } } } } sealed class RepoEvent { sealed class LocalizedMessage(val stringRes: StringResource) : RepoEvent() data object InvalidUrl : LocalizedMessage(MR.strings.invalid_repo_name) data object RepoAlreadyExists : LocalizedMessage(MR.strings.error_repo_exists) } sealed class RepoDialog { data object Create : RepoDialog() data class Delete(val repo: String) : RepoDialog() data class Conflict(val oldRepo: ExtensionRepo, val newRepo: ExtensionRepo) : RepoDialog() data class Confirm(val url: String) : RepoDialog() } sealed class RepoScreenState { @Immutable data object Loading : RepoScreenState() @Immutable data class Success( val repos: ImmutableSet, val oldRepos: ImmutableSet? = null, val dialog: RepoDialog? = null, ) : RepoScreenState() { val isEmpty: Boolean get() = repos.isEmpty() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt ================================================ package eu.kanade.presentation.more.settings.screen.browse.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Label import androidx.compose.material.icons.automirrored.outlined.OpenInNew import androidx.compose.material.icons.outlined.ContentCopy import androidx.compose.material.icons.outlined.Delete import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.ImmutableSet import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun ExtensionReposContent( repos: ImmutableSet, lazyListState: LazyListState, paddingValues: PaddingValues, onOpenWebsite: (ExtensionRepo) -> Unit, onClickDelete: (String) -> Unit, modifier: Modifier = Modifier, ) { LazyColumn( state = lazyListState, contentPadding = paddingValues, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), modifier = modifier, ) { repos.forEach { item { ExtensionRepoListItem( modifier = Modifier.animateItem(), repo = it, onOpenWebsite = { onOpenWebsite(it) }, onDelete = { onClickDelete(it.baseUrl) }, ) } } } } @Composable private fun ExtensionRepoListItem( repo: ExtensionRepo, onOpenWebsite: () -> Unit, onDelete: () -> Unit, modifier: Modifier = Modifier, ) { val context = LocalContext.current ElevatedCard( modifier = modifier, ) { Row( modifier = Modifier .fillMaxWidth() .padding( start = MaterialTheme.padding.medium, top = MaterialTheme.padding.medium, end = MaterialTheme.padding.medium, ), verticalAlignment = Alignment.CenterVertically, ) { Icon(imageVector = Icons.AutoMirrored.Outlined.Label, contentDescription = null) Text( text = repo.name, modifier = Modifier.padding(start = MaterialTheme.padding.medium), style = MaterialTheme.typography.titleMedium, ) } Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.End, ) { IconButton(onClick = onOpenWebsite) { Icon( imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = stringResource(MR.strings.action_open_in_browser), ) } IconButton( onClick = { val url = "${repo.baseUrl}/index.min.json" context.copyToClipboard(url, url) }, ) { Icon( imageVector = Icons.Outlined.ContentCopy, contentDescription = stringResource(MR.strings.action_copy_to_clipboard), ) } IconButton(onClick = onDelete) { Icon( imageVector = Icons.Outlined.Delete, contentDescription = stringResource(MR.strings.action_delete), ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposDialogs.kt ================================================ package eu.kanade.presentation.more.settings.screen.browse.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.AlertDialog import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.text.input.KeyboardType import kotlinx.collections.immutable.ImmutableSet import kotlinx.coroutines.delay import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import kotlin.time.Duration.Companion.seconds @Composable fun ExtensionRepoCreateDialog( onDismissRequest: () -> Unit, onCreate: (String) -> Unit, repoUrls: ImmutableSet, ) { var name by remember { mutableStateOf("") } val focusRequester = remember { FocusRequester() } val nameAlreadyExists = remember(name) { repoUrls.contains(name) } AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton( enabled = name.isNotEmpty() && !nameAlreadyExists, onClick = { onCreate(name) onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_add)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, title = { Text(text = stringResource(MR.strings.action_add_repo)) }, text = { Column { Text(text = stringResource(MR.strings.action_add_repo_message, stringResource(MR.strings.app_name))) OutlinedTextField( modifier = Modifier .fillMaxWidth() .focusRequester(focusRequester), value = name, onValueChange = { name = it }, label = { Text(text = stringResource(MR.strings.label_add_repo_input)) }, supportingText = { val msgRes = if (name.isNotEmpty() && nameAlreadyExists) { MR.strings.error_repo_exists } else { MR.strings.information_required_plain } Text(text = stringResource(msgRes)) }, isError = name.isNotEmpty() && nameAlreadyExists, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Uri), singleLine = true, ) } }, ) LaunchedEffect(focusRequester) { // TODO: https://issuetracker.google.com/issues/204502668 delay(0.1.seconds) focusRequester.requestFocus() } } @Composable fun ExtensionRepoDeleteDialog( onDismissRequest: () -> Unit, onDelete: () -> Unit, repo: String, ) { AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton(onClick = { onDelete() onDismissRequest() }) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, title = { Text(text = stringResource(MR.strings.action_delete_repo)) }, text = { Text(text = stringResource(MR.strings.delete_repo_confirmation, repo)) }, ) } @Composable fun ExtensionRepoConflictDialog( oldRepo: ExtensionRepo, newRepo: ExtensionRepo, onDismissRequest: () -> Unit, onMigrate: () -> Unit, ) { AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { TextButton( onClick = { onMigrate() onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_replace_repo)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, title = { Text(text = stringResource(MR.strings.action_replace_repo_title)) }, text = { Text(text = stringResource(MR.strings.action_replace_repo_message, newRepo.name, oldRepo.name)) }, ) } @Composable fun ExtensionRepoConfirmDialog( onDismissRequest: () -> Unit, onCreate: () -> Unit, repo: String, ) { AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = stringResource(MR.strings.action_add_repo)) }, text = { Text(text = stringResource(MR.strings.add_repo_confirmation, repo)) }, confirmButton = { TextButton( onClick = { onCreate() onDismissRequest() }, ) { Text(text = stringResource(MR.strings.action_add)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposScreen.kt ================================================ @file:JvmName("ExtensionReposScreenKt") package eu.kanade.presentation.more.settings.screen.browse.components import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.category.components.CategoryFloatingActionButton import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.screen.browse.RepoScreenState import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.plus @Composable fun ExtensionReposScreen( state: RepoScreenState.Success, onClickCreate: () -> Unit, onOpenWebsite: (ExtensionRepo) -> Unit, onClickDelete: (String) -> Unit, onClickRefresh: () -> Unit, navigateUp: () -> Unit, ) { val lazyListState = rememberLazyListState() Scaffold( topBar = { scrollBehavior -> AppBar( navigateUp = navigateUp, title = stringResource(MR.strings.label_extension_repos), scrollBehavior = scrollBehavior, actions = { IconButton(onClick = onClickRefresh) { Icon( imageVector = Icons.Outlined.Refresh, contentDescription = stringResource(resource = MR.strings.action_webview_refresh), ) } }, ) }, floatingActionButton = { CategoryFloatingActionButton( lazyListState = lazyListState, onCreate = onClickCreate, ) }, ) { paddingValues -> if (state.isEmpty) { EmptyScreen( MR.strings.information_empty_repos, modifier = Modifier.padding(paddingValues), ) return@Scaffold } ExtensionReposContent( repos = state.repos, lazyListState = lazyListState, paddingValues = paddingValues + topSmallPaddingValues + PaddingValues(horizontal = MaterialTheme.padding.medium), onOpenWebsite = onOpenWebsite, onClickDelete = onClickDelete, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.data import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.data.backup.create.BackupCreateJob import eu.kanade.tachiyomi.data.backup.create.BackupCreator import eu.kanade.tachiyomi.data.backup.create.BackupOptions import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.flow.update import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.LazyColumnWithAction import tachiyomi.presentation.core.components.SectionCard import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource class CreateBackupScreen : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val model = rememberScreenModel { CreateBackupScreenModel() } val state by model.state.collectAsState() val chooseBackupDir = rememberLauncherForActivityResult( contract = ActivityResultContracts.CreateDocument("application/*"), ) { if (it != null) { context.contentResolver.takePersistableUriPermission( it, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION, ) model.createBackup(context, it) navigator.pop() } } Scaffold( topBar = { AppBar( title = stringResource(MR.strings.pref_create_backup), navigateUp = navigator::pop, scrollBehavior = it, ) }, ) { contentPadding -> LazyColumnWithAction( contentPadding = contentPadding, actionLabel = stringResource(MR.strings.action_create), actionEnabled = state.options.canCreate(), onClickAction = { if (!BackupCreateJob.isManualJobRunning(context)) { try { chooseBackupDir.launch(BackupCreator.getFilename()) } catch (e: ActivityNotFoundException) { context.toast(MR.strings.file_picker_error) } } else { context.toast(MR.strings.backup_in_progress) } }, ) { if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) { item { WarningBanner(MR.strings.restore_miui_warning) } } item { SectionCard(MR.strings.label_library) { Options(BackupOptions.libraryOptions, state, model) } } item { SectionCard(MR.strings.label_settings) { Options(BackupOptions.settingsOptions, state, model) } } } } } @Composable private fun Options( options: ImmutableList, state: CreateBackupScreenModel.State, model: CreateBackupScreenModel, ) { options.forEach { option -> LabeledCheckbox( label = stringResource(option.label), checked = option.getter(state.options), onCheckedChange = { model.toggle(option.setter, it) }, enabled = option.enabled(state.options), ) } } } private class CreateBackupScreenModel : StateScreenModel(State()) { fun toggle(setter: (BackupOptions, Boolean) -> BackupOptions, enabled: Boolean) { mutableState.update { it.copy( options = setter(it.options, enabled), ) } } fun createBackup(context: Context, uri: Uri) { BackupCreateJob.startNow(context, uri, state.value.options) } @Immutable data class State( val options: BackupOptions = BackupOptions(), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/data/RestoreBackupScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.data import android.content.Context import android.net.Uri import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.withStyle import androidx.core.net.toUri import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.data.backup.BackupFileValidator import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob import eu.kanade.tachiyomi.data.backup.restore.RestoreOptions import eu.kanade.tachiyomi.util.system.DeviceUtil import kotlinx.coroutines.flow.update import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.LazyColumnWithAction import tachiyomi.presentation.core.components.SectionCard import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource class RestoreBackupScreen( private val uri: String, ) : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val model = rememberScreenModel { RestoreBackupScreenModel(context, uri) } val state by model.state.collectAsState() Scaffold( topBar = { AppBar( title = stringResource(MR.strings.pref_restore_backup), navigateUp = navigator::pop, scrollBehavior = it, ) }, ) { contentPadding -> LazyColumnWithAction( contentPadding = contentPadding, actionLabel = stringResource(MR.strings.action_restore), actionEnabled = state.canRestore && state.options.canRestore(), onClickAction = { model.startRestore() navigator.pop() }, ) { if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) { item { WarningBanner(MR.strings.restore_miui_warning) } } if (state.canRestore) { item { SectionCard { RestoreOptions.options.forEach { option -> LabeledCheckbox( label = stringResource(option.label), checked = option.getter(state.options), onCheckedChange = { model.toggle(option.setter, it) }, ) } } } } if (state.error != null) { errorMessageItem(state.error) } } } } private fun LazyListScope.errorMessageItem( error: Any?, ) { item { SectionCard { Column( modifier = Modifier.padding(horizontal = MaterialTheme.padding.medium), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { val msg = buildAnnotatedString { when (error) { is MissingRestoreComponents -> { appendLine(stringResource(MR.strings.backup_restore_content_full)) if (error.sources.isNotEmpty()) { appendLine() withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { appendLine(stringResource(MR.strings.backup_restore_missing_sources)) } error.sources.joinTo( this, separator = "\n- ", prefix = "- ", ) } if (error.trackers.isNotEmpty()) { appendLine() withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { appendLine(stringResource(MR.strings.backup_restore_missing_trackers)) } error.trackers.joinTo( this, separator = "\n- ", prefix = "- ", ) } } is InvalidRestore -> { withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { appendLine(stringResource(MR.strings.invalid_backup_file)) } appendLine(error.uri.toString()) appendLine() withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { appendLine(stringResource(MR.strings.invalid_backup_file_error)) } appendLine(error.message) } else -> { appendLine(error.toString()) } } } SelectionContainer { Text(text = msg) } } } } } } private class RestoreBackupScreenModel( private val context: Context, private val uri: String, ) : StateScreenModel(State()) { init { validate(uri.toUri()) } fun toggle(setter: (RestoreOptions, Boolean) -> RestoreOptions, enabled: Boolean) { mutableState.update { it.copy( options = setter(it.options, enabled), ) } } fun startRestore() { BackupRestoreJob.start( context = context, uri = uri.toUri(), options = state.value.options, ) } private fun validate(uri: Uri) { val results = try { BackupFileValidator(context).validate(uri) } catch (e: Exception) { setError( error = InvalidRestore(uri, e.message.toString()), canRestore = false, ) return } if (results.missingSources.isNotEmpty() || results.missingTrackers.isNotEmpty()) { setError( error = MissingRestoreComponents(uri, results.missingSources, results.missingTrackers), canRestore = true, ) return } setError(error = null, canRestore = true) } private fun setError(error: Any?, canRestore: Boolean) { mutableState.update { it.copy( error = error, canRestore = canRestore, ) } } @Immutable data class State( val error: Any? = null, val canRestore: Boolean = false, val options: RestoreOptions = RestoreOptions(), ) } private data class MissingRestoreComponents( val uri: Uri, val sources: List, val trackers: List, ) private data class InvalidRestore( val uri: Uri? = null, val message: String, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/data/StorageInfo.kt ================================================ package eu.kanade.presentation.more.settings.screen.data import android.text.format.Formatter import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.util.storage.DiskUtil import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.secondaryItemAlpha import java.io.File @Composable fun StorageInfo( modifier: Modifier = Modifier, ) { val context = LocalContext.current val storages = remember { DiskUtil.getExternalStorages(context) } Column( modifier = modifier, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { storages.forEach { StorageInfo(it) } } } @Composable private fun StorageInfo( file: File, ) { val context = LocalContext.current val available = remember(file) { DiskUtil.getAvailableStorageSpace(file) } val availableText = remember(available) { Formatter.formatFileSize(context, available) } val total = remember(file) { DiskUtil.getTotalStorageSpace(file) } val totalText = remember(total) { Formatter.formatFileSize(context, total) } Column( verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { Text( text = file.absolutePath, style = MaterialTheme.typography.header, ) LinearProgressIndicator( modifier = Modifier .clip(MaterialTheme.shapes.small) .fillMaxWidth() .height(12.dp), progress = { (1 - (available / total.toFloat())) }, ) Text( text = stringResource(MR.strings.available_disk_space_info, availableText, totalText), modifier = Modifier.secondaryItemAlpha(), style = MaterialTheme.typography.bodySmall, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/BackupSchemaScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.debug import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.data.backup.models.Backup import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.persistentListOf import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource class BackupSchemaScreen : Screen() { companion object { const val TITLE = "Backup file schema" } @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val schema = remember { ProtoBufSchemaGenerator.generateSchemaText(Backup.serializer().descriptor) } Scaffold( topBar = { AppBar( title = TITLE, navigateUp = navigator::pop, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_copy_to_clipboard), icon = Icons.Default.ContentCopy, onClick = { context.copyToClipboard(TITLE, schema) }, ), ), ) }, scrollBehavior = it, ) }, ) { contentPadding -> Text( text = schema, modifier = Modifier .verticalScroll(rememberScrollState()) .padding(contentPadding) .padding(16.dp), fontFamily = FontFamily.Monospace, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.debug import android.os.Build import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Autorenew import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import androidx.profileinstaller.ProfileVerifier import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.PreferenceScaffold import eu.kanade.presentation.more.settings.screen.about.AboutScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.mutate import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.guava.await import kotlinx.coroutines.launch import mihon.core.common.FeatureFlags import tachiyomi.i18n.MR import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class DebugInfoScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow PreferenceScaffold( titleRes = MR.strings.pref_debug_info, onBackPressed = navigator::pop, itemsProvider = { listOf( Preference.PreferenceItem.TextPreference( title = WorkerInfoScreen.TITLE, onClick = { navigator.push(WorkerInfoScreen()) }, ), Preference.PreferenceItem.TextPreference( title = BackupSchemaScreen.TITLE, onClick = { navigator.push(BackupSchemaScreen()) }, ), getAppInfoGroup(), getDeviceInfoGroup(), ) }, ) } @Composable private fun getAppInfoGroup(): Preference.PreferenceGroup { val context = LocalContext.current val scope = rememberCoroutineScope() val installationIdPref = remember { Injekt.get().installationId } val installationId by installationIdPref.collectAsState() return Preference.PreferenceGroup( title = "App info", preferenceItems = persistentListOf( Preference.PreferenceItem.TextPreference( title = "Version", subtitle = AboutScreen.getVersionName(false), ), Preference.PreferenceItem.TextPreference( title = "Build time", subtitle = AboutScreen.getFormattedBuildTime(), ), Preference.PreferenceItem.TextPreference( title = "Installation ID", subtitle = installationId, widget = { IconButton( onClick = { scope.launch { installationIdPref.set(FeatureFlags.newInstallationId()) } }, ) { Icon( imageVector = Icons.Outlined.Autorenew, tint = MaterialTheme.colorScheme.primary, contentDescription = null, ) } }, onClick = { context.copyToClipboard(installationId, installationId) }, ), getProfileVerifierPreference(), Preference.PreferenceItem.TextPreference( title = "WebView version", subtitle = getWebViewVersion(), ), ), ) } @Composable @ReadOnlyComposable private fun getWebViewVersion(): String { return WebViewUtil.getVersion(LocalContext.current) } @Composable private fun getProfileVerifierPreference(): Preference.PreferenceItem.TextPreference { val status by produceState(initialValue = "-") { val result = ProfileVerifier.getCompilationStatusAsync().await().profileInstallResultCode value = when (result) { ProfileVerifier.CompilationStatus.RESULT_CODE_NO_PROFILE_INSTALLED -> "No profile installed" ProfileVerifier.CompilationStatus.RESULT_CODE_COMPILED_WITH_PROFILE -> "Compiled" ProfileVerifier.CompilationStatus.RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING -> "Compiled non-matching" ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ, ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE, ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST, -> "Error $result" ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION -> "Not supported" ProfileVerifier.CompilationStatus.RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION -> "Pending compilation" ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_NO_PROFILE_EMBEDDED -> "No profile embedded" else -> "Unknown code $result" } } return Preference.PreferenceItem.TextPreference( title = "Profile compilation status", subtitle = status, ) } private fun getDeviceInfoGroup(): Preference.PreferenceGroup { val items = persistentListOf>().mutate { it.add( Preference.PreferenceItem.TextPreference( title = "Model", subtitle = "${Build.MANUFACTURER} ${Build.MODEL} (${Build.DEVICE})", ), ) if (DeviceUtil.oneUiVersion != null) { it.add( Preference.PreferenceItem.TextPreference( title = "OneUI version", subtitle = "${DeviceUtil.oneUiVersion}", ), ) } else if (DeviceUtil.miuiMajorVersion != null) { it.add( Preference.PreferenceItem.TextPreference( title = "MIUI version", subtitle = "${DeviceUtil.miuiMajorVersion}", ), ) } val androidVersion = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { Build.VERSION.RELEASE_OR_PREVIEW_DISPLAY } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { Build.VERSION.RELEASE_OR_CODENAME } else { Build.VERSION.RELEASE } it.add( Preference.PreferenceItem.TextPreference( title = "Android version", subtitle = "$androidVersion (${Build.DISPLAY})", ), ) } return Preference.PreferenceGroup( title = "Device info", preferenceItems = items, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt ================================================ package eu.kanade.presentation.more.settings.screen.debug import android.content.Context import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.rememberScrollState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEach import androidx.work.WorkInfo import androidx.work.WorkQuery import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.ioCoroutineScope import eu.kanade.tachiyomi.util.lang.toDateTimestampString import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.workManager import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.plus import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.LocalDateTime import java.time.ZoneId class WorkerInfoScreen : Screen() { companion object { const val TITLE = "Worker info" } @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model(context) } val enqueued by screenModel.enqueued.collectAsState() val finished by screenModel.finished.collectAsState() val running by screenModel.running.collectAsState() Scaffold( topBar = { AppBar( title = TITLE, navigateUp = navigator::pop, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_copy_to_clipboard), icon = Icons.Default.ContentCopy, onClick = { context.copyToClipboard(TITLE, enqueued + finished + running) }, ), ), ) }, scrollBehavior = it, ) }, ) { contentPadding -> LazyColumn( contentPadding = contentPadding + PaddingValues(horizontal = 16.dp), modifier = Modifier.horizontalScroll(rememberScrollState()), ) { item { SectionTitle(title = "Enqueued") } item { SectionText(text = enqueued) } item { SectionTitle(title = "Finished") } item { SectionText(text = finished) } item { SectionTitle(title = "Running") } item { SectionText(text = running) } } } } @Composable private fun SectionTitle(title: String) { Text( text = title, style = MaterialTheme.typography.titleMedium, modifier = Modifier.padding(vertical = 8.dp), ) } @Composable private fun SectionText(text: String) { Text( text = text, softWrap = false, fontFamily = FontFamily.Monospace, ) } private class Model(context: Context) : ScreenModel { private val workManager = context.workManager val finished = workManager .getWorkInfosFlow( WorkQuery.fromStates(WorkInfo.State.SUCCEEDED, WorkInfo.State.FAILED, WorkInfo.State.CANCELLED), ) .map(::constructString) .stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), "") val running = workManager .getWorkInfosFlow(WorkQuery.fromStates(WorkInfo.State.RUNNING)) .map(::constructString) .stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), "") val enqueued = workManager .getWorkInfosFlow(WorkQuery.fromStates(WorkInfo.State.ENQUEUED)) .map(::constructString) .stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), "") private fun constructString(list: List) = buildString { if (list.isEmpty()) { appendLine("-") } else { list.fastForEach { workInfo -> appendLine("Id: ${workInfo.id}") appendLine("Tags:") workInfo.tags.forEach { appendLine(" - $it") } appendLine("State: ${workInfo.state}") if (workInfo.state == WorkInfo.State.ENQUEUED) { val timestamp = LocalDateTime.ofInstant( Instant.ofEpochMilli(workInfo.nextScheduleTimeMillis), ZoneId.systemDefault(), ) .toDateTimestampString( UiPreferences.dateFormat( Injekt.get().dateFormat.get(), ), ) appendLine("Next scheduled run: $timestamp") appendLine("Attempt #${workInfo.runAttemptCount + 1}") } appendLine() } } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemeModePreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MultiChoiceSegmentedButtonRow import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.domain.ui.model.ThemeMode import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource private val options = mapOf( ThemeMode.SYSTEM to MR.strings.theme_system, ThemeMode.LIGHT to MR.strings.theme_light, ThemeMode.DARK to MR.strings.theme_dark, ) @Composable internal fun AppThemeModePreferenceWidget( value: ThemeMode, onItemClick: (ThemeMode) -> Unit, ) { BasePreferenceWidget( subcomponent = { MultiChoiceSegmentedButtonRow( modifier = Modifier .fillMaxWidth() .padding(horizontal = PrefsHorizontalPadding), ) { options.onEachIndexed { index, (mode, labelRes) -> SegmentedButton( checked = mode == value, onCheckedChange = { onItemClick(mode) }, shape = SegmentedButtonDefaults.itemShape( index, options.size, ), ) { Text(stringResource(labelRes)) } } } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import android.app.Activity import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material3.DividerDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.core.app.ActivityCompat import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.AppTheme import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable import tachiyomi.core.common.preference.InMemoryPreferenceStore import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.fullType @Composable internal fun AppThemePreferenceWidget( value: AppTheme, amoled: Boolean, onItemClick: (AppTheme) -> Unit, ) { BasePreferenceWidget( subcomponent = { AppThemesList( currentTheme = value, amoled = amoled, onItemClick = onItemClick, ) }, ) } @Composable private fun AppThemesList( currentTheme: AppTheme, amoled: Boolean, onItemClick: (AppTheme) -> Unit, ) { val context = LocalContext.current val appThemes = remember { AppTheme.entries .filterNot { it.titleRes == null || (it == AppTheme.MONET && !DeviceUtil.isDynamicColorAvailable) } } LazyRow( contentPadding = PaddingValues(horizontal = PrefsHorizontalPadding), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { items( items = appThemes, key = { it.name }, ) { appTheme -> Column( modifier = Modifier .width(114.dp) .padding(top = 8.dp), ) { TachiyomiTheme( appTheme = appTheme, amoled = amoled, ) { AppThemePreviewItem( selected = currentTheme == appTheme, onClick = { onItemClick(appTheme) (context as? Activity)?.let { ActivityCompat.recreate(it) } }, ) } Spacer(modifier = Modifier.height(8.dp)) Text( text = stringResource(appTheme.titleRes!!), modifier = Modifier .fillMaxWidth() .secondaryItemAlpha(), textAlign = TextAlign.Center, maxLines = 2, minLines = 2, style = MaterialTheme.typography.bodyMedium, ) } } } } @Composable fun AppThemePreviewItem( selected: Boolean, onClick: () -> Unit, ) { Column( modifier = Modifier .fillMaxWidth() .aspectRatio(9f / 16f) .border( width = 4.dp, color = if (selected) { MaterialTheme.colorScheme.primary } else { DividerDefaults.color }, shape = RoundedCornerShape(17.dp), ) .padding(4.dp) .clip(RoundedCornerShape(13.dp)) .background(MaterialTheme.colorScheme.background) .clickable(onClick = onClick), ) { // App Bar Row( modifier = Modifier .fillMaxWidth() .height(40.dp) .padding(8.dp), verticalAlignment = Alignment.CenterVertically, ) { Box( modifier = Modifier .fillMaxHeight(0.8f) .weight(0.7f) .padding(end = 4.dp) .background( color = MaterialTheme.colorScheme.onSurface, shape = MaterialTheme.shapes.small, ), ) Box( modifier = Modifier.weight(0.3f), contentAlignment = Alignment.CenterEnd, ) { if (selected) { Icon( imageVector = Icons.Filled.CheckCircle, contentDescription = stringResource(MR.strings.selected), tint = MaterialTheme.colorScheme.primary, ) } } } // Cover Box( modifier = Modifier .padding(start = 8.dp, top = 2.dp) .background( color = DividerDefaults.color, shape = MaterialTheme.shapes.small, ) .fillMaxWidth(0.5f) .aspectRatio(MangaCover.Book.ratio), ) { Row( modifier = Modifier .padding(4.dp) .size(width = 24.dp, height = 16.dp) .clip(RoundedCornerShape(5.dp)), ) { Box( modifier = Modifier .fillMaxHeight() .width(12.dp) .background(MaterialTheme.colorScheme.tertiary), ) Box( modifier = Modifier .fillMaxHeight() .width(12.dp) .background(MaterialTheme.colorScheme.secondary), ) } } // Bottom bar Box( modifier = Modifier .fillMaxWidth() .weight(1f), contentAlignment = Alignment.BottomCenter, ) { Surface( color = MaterialTheme.colorScheme.surfaceContainer, ) { Row( modifier = Modifier .height(32.dp) .fillMaxWidth() .padding(horizontal = 8.dp), verticalAlignment = Alignment.CenterVertically, ) { Box( modifier = Modifier .size(17.dp) .background( color = MaterialTheme.colorScheme.primary, shape = CircleShape, ), ) Box( modifier = Modifier .padding(start = 8.dp) .alpha(0.6f) .height(17.dp) .weight(1f) .background( color = MaterialTheme.colorScheme.onSurface, shape = MaterialTheme.shapes.small, ), ) } } } } } @PreviewLightDark @Composable private fun AppThemesListPreview() { var appTheme by remember { mutableStateOf(AppTheme.DEFAULT) } Injekt.addSingleton(fullType(), UiPreferences(InMemoryPreferenceStore())) TachiyomiTheme(appTheme = appTheme) { Surface { AppThemesList( currentTheme = appTheme, amoled = false, onItemClick = { appTheme = it }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/BasePreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.RepeatMode import androidx.compose.animation.core.StartOffset import androidx.compose.animation.core.StartOffsetType import androidx.compose.animation.core.repeatable import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted import eu.kanade.presentation.more.settings.LocalPreferenceMinHeight import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds @Composable internal fun BasePreferenceWidget( modifier: Modifier = Modifier, title: String? = null, subcomponent: @Composable (ColumnScope.() -> Unit)? = null, icon: @Composable (() -> Unit)? = null, onClick: (() -> Unit)? = null, widget: @Composable (() -> Unit)? = null, ) { val highlighted = LocalPreferenceHighlighted.current val minHeight = LocalPreferenceMinHeight.current Row( modifier = modifier .highlightBackground(highlighted) .sizeIn(minHeight = minHeight) .clickable(enabled = onClick != null, onClick = { onClick?.invoke() }) .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, ) { if (icon != null) { Box( modifier = Modifier.padding(start = PrefsHorizontalPadding, end = 8.dp), content = { icon() }, ) } Column( modifier = Modifier .weight(1f) .padding(vertical = PrefsVerticalPadding), ) { if (!title.isNullOrBlank()) { Text( modifier = Modifier.padding(horizontal = PrefsHorizontalPadding), text = title, overflow = TextOverflow.Ellipsis, maxLines = 2, style = MaterialTheme.typography.titleLarge, fontSize = TitleFontSize, ) } subcomponent?.invoke(this) } if (widget != null) { Box( modifier = Modifier.padding(end = PrefsHorizontalPadding), content = { widget() }, ) } } } @Composable internal fun Modifier.highlightBackground(highlighted: Boolean): Modifier { var highlightFlag by remember { mutableStateOf(false) } LaunchedEffect(Unit) { if (highlighted) { highlightFlag = true delay(3.seconds) highlightFlag = false } } val highlight by animateColorAsState( targetValue = if (highlightFlag) { MaterialTheme.colorScheme.surfaceTint.copy(alpha = .12f) } else { Color.Transparent }, animationSpec = if (highlightFlag) { repeatable( iterations = 5, animation = tween(durationMillis = 200), repeatMode = RepeatMode.Reverse, initialStartOffset = StartOffset( offsetMillis = 600, offsetType = StartOffsetType.Delay, ), ) } else { tween(200) }, label = "highlight", ) return this.background(color = highlight) } internal val TrailingWidgetBuffer = 16.dp internal val PrefsHorizontalPadding = 16.dp internal val PrefsVerticalPadding = 16.dp internal val TitleFontSize = 16.sp ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/EditTextPreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Cancel import androidx.compose.material.icons.filled.Error import androidx.compose.material3.AlertDialog import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.window.DialogProperties import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun EditTextPreferenceWidget( title: String, subtitle: String?, icon: ImageVector?, value: String, onConfirm: suspend (String) -> Boolean, ) { var isDialogShown by remember { mutableStateOf(false) } TextPreferenceWidget( title = title, subtitle = subtitle?.format(value), icon = icon, onPreferenceClick = { isDialogShown = true }, ) if (isDialogShown) { val scope = rememberCoroutineScope() val onDismissRequest = { isDialogShown = false } var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue(value)) } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = title) }, text = { OutlinedTextField( value = textFieldValue, onValueChange = { textFieldValue = it }, trailingIcon = { if (textFieldValue.text.isBlank()) { Icon(imageVector = Icons.Filled.Error, contentDescription = null) } else { IconButton(onClick = { textFieldValue = TextFieldValue("") }) { Icon(imageVector = Icons.Filled.Cancel, contentDescription = null) } } }, isError = textFieldValue.text.isBlank(), singleLine = true, modifier = Modifier.fillMaxWidth(), ) }, properties = DialogProperties( usePlatformDefaultWidth = true, ), confirmButton = { TextButton( enabled = textFieldValue.text != value && textFieldValue.text.isNotBlank(), onClick = { scope.launch { if (onConfirm(textFieldValue.text)) { onDismissRequest() } } }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Info import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable internal fun InfoWidget(text: String) { Column( modifier = Modifier .padding( horizontal = PrefsHorizontalPadding, vertical = MaterialTheme.padding.medium, ) .secondaryItemAlpha(), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium), ) { Icon( imageVector = Icons.Outlined.Info, contentDescription = null, ) Text( text = text, style = MaterialTheme.typography.bodySmall, ) } } @PreviewLightDark @Composable private fun InfoWidgetPreview() { TachiyomiPreviewTheme { Surface { InfoWidget(text = stringResource(MR.strings.download_ahead_info)) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/ListPreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.selection.selectable import androidx.compose.material3.AlertDialog import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.i18n.stringResource @Composable fun ListPreferenceWidget( value: T, title: String, subtitle: String?, icon: ImageVector?, entries: Map, onValueChange: (T) -> Unit, ) { var isDialogShown by remember { mutableStateOf(false) } TextPreferenceWidget( title = title, subtitle = subtitle, icon = icon, onPreferenceClick = { isDialogShown = true }, ) if (isDialogShown) { AlertDialog( onDismissRequest = { isDialogShown = false }, title = { Text(text = title) }, text = { Box { val state = rememberLazyListState() ScrollbarLazyColumn(state = state) { entries.forEach { current -> val isSelected = value == current.key item { DialogRow( label = current.value, isSelected = isSelected, onSelected = { onValueChange(current.key!!) isDialogShown = false }, ) } } } if (state.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter)) if (state.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter)) } }, confirmButton = { TextButton(onClick = { isDialogShown = false }) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } } @Composable private fun DialogRow( label: String, isSelected: Boolean, onSelected: () -> Unit, ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .clip(MaterialTheme.shapes.small) .selectable( selected = isSelected, onClick = { if (!isSelected) onSelected() }, ) .fillMaxWidth() .minimumInteractiveComponentSize(), ) { RadioButton( selected = isSelected, onClick = null, ) Text( text = label, style = MaterialTheme.typography.bodyLarge.merge(), modifier = Modifier.padding(start = 24.dp), ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.window.DialogProperties import eu.kanade.presentation.more.settings.Preference import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.i18n.stringResource @Composable fun MultiSelectListPreferenceWidget( preference: Preference.PreferenceItem.MultiSelectListPreference, values: Set, onValuesChange: (Set) -> Unit, ) { var isDialogShown by remember { mutableStateOf(false) } TextPreferenceWidget( title = preference.title, subtitle = preference.subtitleProvider(values, preference.entries), icon = preference.icon, onPreferenceClick = { isDialogShown = true }, ) if (isDialogShown) { val selected = remember { preference.entries.keys .filter { values.contains(it) } .toMutableStateList() } AlertDialog( onDismissRequest = { isDialogShown = false }, title = { Text(text = preference.title) }, text = { LazyColumn { preference.entries.forEach { current -> item { val isSelected = selected.contains(current.key) LabeledCheckbox( label = current.value, checked = isSelected, onCheckedChange = { if (it) { selected.add(current.key) } else { selected.remove(current.key) } }, ) } } } }, properties = DialogProperties( usePlatformDefaultWidth = true, ), confirmButton = { TextButton( onClick = { onValuesChange(selected.toMutableSet()) isDialogShown = false }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = { isDialogShown = false }) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/PreferenceGroupHeader.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @Composable fun PreferenceGroupHeader(title: String) { Box( contentAlignment = Alignment.CenterStart, modifier = Modifier .fillMaxWidth() .padding(bottom = 8.dp, top = 14.dp), ) { Text( text = title, color = MaterialTheme.colorScheme.secondary, modifier = Modifier.padding(horizontal = PrefsHorizontalPadding), style = MaterialTheme.typography.bodyMedium, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/SwitchPreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Preview import androidx.compose.material3.Surface import androidx.compose.material3.Switch import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme @Composable fun SwitchPreferenceWidget( modifier: Modifier = Modifier, title: String, subtitle: String? = null, icon: ImageVector? = null, checked: Boolean = false, onCheckedChanged: (Boolean) -> Unit, ) { TextPreferenceWidget( modifier = modifier, title = title, subtitle = subtitle, icon = icon, widget = { Switch( checked = checked, onCheckedChange = null, modifier = Modifier.padding(start = TrailingWidgetBuffer), ) }, onPreferenceClick = { onCheckedChanged(!checked) }, ) } @PreviewLightDark @Composable private fun SwitchPreferenceWidgetPreview() { TachiyomiPreviewTheme { Surface { Column { SwitchPreferenceWidget( title = "Text preference with icon", subtitle = "Text preference summary", icon = Icons.Filled.Preview, checked = true, onCheckedChanged = {}, ) SwitchPreferenceWidget( title = "Text preference", subtitle = "Text preference summary", checked = false, onCheckedChanged = {}, ) SwitchPreferenceWidget( title = "Text preference no summary", checked = false, onCheckedChanged = {}, ) SwitchPreferenceWidget( title = "Another text preference no summary", checked = false, onCheckedChanged = {}, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/TextPreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Preview import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun TextPreferenceWidget( modifier: Modifier = Modifier, title: String? = null, subtitle: String? = null, icon: ImageVector? = null, iconTint: Color = MaterialTheme.colorScheme.primary, widget: @Composable (() -> Unit)? = null, onPreferenceClick: (() -> Unit)? = null, ) { BasePreferenceWidget( modifier = modifier, title = title, subcomponent = if (!subtitle.isNullOrBlank()) { { Text( text = subtitle, modifier = Modifier .padding(horizontal = PrefsHorizontalPadding) .secondaryItemAlpha(), style = MaterialTheme.typography.bodySmall, maxLines = 10, ) } } else { null }, icon = if (icon != null) { { Icon( imageVector = icon, tint = iconTint, contentDescription = null, ) } } else { null }, onClick = onPreferenceClick, widget = widget, ) } @PreviewLightDark @Composable private fun TextPreferenceWidgetPreview() { TachiyomiPreviewTheme { Surface { Column { TextPreferenceWidget( title = "Text preference with icon", subtitle = "Text preference summary", icon = Icons.Filled.Preview, onPreferenceClick = {}, ) TextPreferenceWidget( title = "Text preference", subtitle = "Text preference summary", onPreferenceClick = {}, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Done import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted import eu.kanade.presentation.track.components.TrackLogoIcon import eu.kanade.tachiyomi.data.track.Tracker import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun TrackingPreferenceWidget( modifier: Modifier = Modifier, tracker: Tracker, checked: Boolean, onClick: (() -> Unit)? = null, ) { val highlighted = LocalPreferenceHighlighted.current Box(modifier = Modifier.highlightBackground(highlighted)) { Row( modifier = modifier .clickable(enabled = onClick != null, onClick = { onClick?.invoke() }) .fillMaxWidth() .padding(horizontal = PrefsHorizontalPadding, vertical = 8.dp), verticalAlignment = Alignment.CenterVertically, ) { TrackLogoIcon(tracker) Text( text = tracker.name, modifier = Modifier .weight(1f) .padding(horizontal = 16.dp), maxLines = 1, style = MaterialTheme.typography.titleLarge, fontSize = TitleFontSize, ) if (checked) { Icon( imageVector = Icons.Outlined.Done, modifier = Modifier .padding(4.dp) .size(32.dp), tint = Color(0xFF4CAF50), contentDescription = stringResource(MR.strings.login_success), ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt ================================================ package eu.kanade.presentation.more.settings.widget import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.CheckBox import androidx.compose.material.icons.rounded.CheckBoxOutlineBlank import androidx.compose.material.icons.rounded.DisabledByDefault import androidx.compose.material3.AlertDialog import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource private enum class State { CHECKED, INVERSED, UNCHECKED, } @Composable fun TriStateListDialog( title: String, message: String? = null, items: List, initialChecked: List, initialInversed: List, itemLabel: @Composable (T) -> String, onDismissRequest: () -> Unit, onValueChanged: (newIncluded: List, newExcluded: List) -> Unit, ) { val selected = remember { items .map { when (it) { in initialChecked -> State.CHECKED in initialInversed -> State.INVERSED else -> State.UNCHECKED } } .toMutableStateList() } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = title) }, text = { Column { if (message != null) { Text( text = message, modifier = Modifier.padding(bottom = 8.dp), ) } Box { val listState = rememberLazyListState() LazyColumn(state = listState) { itemsIndexed(items = items) { index, item -> val state = selected[index] Row( modifier = Modifier .clip(MaterialTheme.shapes.small) .clickable { selected[index] = when (state) { State.UNCHECKED -> State.CHECKED State.CHECKED -> State.INVERSED State.INVERSED -> State.UNCHECKED } } .defaultMinSize(minHeight = 48.dp) .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, ) { Icon( modifier = Modifier.padding(end = 20.dp), imageVector = when (state) { State.UNCHECKED -> Icons.Rounded.CheckBoxOutlineBlank State.CHECKED -> Icons.Rounded.CheckBox State.INVERSED -> Icons.Rounded.DisabledByDefault }, tint = if (state == State.UNCHECKED) { LocalContentColor.current } else { MaterialTheme.colorScheme.primary }, contentDescription = stringResource( when (state) { State.UNCHECKED -> MR.strings.not_selected State.CHECKED -> MR.strings.selected State.INVERSED -> MR.strings.disabled }, ), ) Text(text = itemLabel(item)) } } } if (listState.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter)) if (listState.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter)) } } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton( onClick = { val included = items.mapIndexedNotNull { index, category -> if (selected[index] == State.CHECKED) category else null } val excluded = items.mapIndexedNotNull { index, category -> if (selected[index] == State.INVERSED) category else null } onValueChanged(included, excluded) }, ) { Text(text = stringResource(MR.strings.action_ok)) } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenContent.kt ================================================ package eu.kanade.presentation.more.stats import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.height import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.CollectionsBookmark import androidx.compose.material.icons.outlined.LocalLibrary import androidx.compose.material.icons.outlined.Schedule import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.more.stats.components.StatsItem import eu.kanade.presentation.more.stats.components.StatsOverviewItem import eu.kanade.presentation.more.stats.data.StatsData import eu.kanade.presentation.util.toDurationString import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SectionCard import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import java.util.Locale import kotlin.time.DurationUnit import kotlin.time.toDuration @Composable fun StatsScreenContent( state: StatsScreenState.Success, paddingValues: PaddingValues, ) { LazyColumn( contentPadding = paddingValues, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { item { OverviewSection(state.overview) } item { TitlesStats(state.titles) } item { ChapterStats(state.chapters) } item { TrackerStats(state.trackers) } } } @Composable private fun LazyItemScope.OverviewSection( data: StatsData.Overview, ) { val none = stringResource(MR.strings.none) val context = LocalContext.current val readDurationString = remember(data.totalReadDuration) { data.totalReadDuration .toDuration(DurationUnit.MILLISECONDS) .toDurationString(context, fallback = none) } SectionCard(MR.strings.label_overview_section) { Row( modifier = Modifier.height(IntrinsicSize.Min), ) { StatsOverviewItem( title = data.libraryMangaCount.toString(), subtitle = stringResource(MR.strings.in_library), icon = Icons.Outlined.CollectionsBookmark, ) StatsOverviewItem( title = readDurationString, subtitle = stringResource(MR.strings.label_read_duration), icon = Icons.Outlined.Schedule, ) StatsOverviewItem( title = data.completedMangaCount.toString(), subtitle = stringResource(MR.strings.label_completed_titles), icon = Icons.Outlined.LocalLibrary, ) } } } @Composable private fun LazyItemScope.TitlesStats( data: StatsData.Titles, ) { SectionCard(MR.strings.label_titles_section) { Row { StatsItem( data.globalUpdateItemCount.toString(), stringResource(MR.strings.label_titles_in_global_update), ) StatsItem( data.startedMangaCount.toString(), stringResource(MR.strings.label_started), ) StatsItem( data.localMangaCount.toString(), stringResource(MR.strings.label_local), ) } } } @Composable private fun LazyItemScope.ChapterStats( data: StatsData.Chapters, ) { SectionCard(MR.strings.chapters) { Row { StatsItem( data.totalChapterCount.toString(), stringResource(MR.strings.label_total_chapters), ) StatsItem( data.readChapterCount.toString(), stringResource(MR.strings.label_read_chapters), ) StatsItem( data.downloadCount.toString(), stringResource(MR.strings.label_downloaded), ) } } } @Composable private fun LazyItemScope.TrackerStats( data: StatsData.Trackers, ) { val notApplicable = stringResource(MR.strings.not_applicable) val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) { if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) { // All other numbers are localized in English "%.2f ★".format(Locale.ENGLISH, data.meanScore) } else { notApplicable } } SectionCard(MR.strings.label_tracker_section) { Row { StatsItem( data.trackedTitleCount.toString(), stringResource(MR.strings.label_tracked_titles), ) StatsItem( meanScoreStr, stringResource(MR.strings.label_mean_score), ) StatsItem( data.trackerCount.toString(), stringResource(MR.strings.label_used), ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenState.kt ================================================ package eu.kanade.presentation.more.stats import androidx.compose.runtime.Immutable import eu.kanade.presentation.more.stats.data.StatsData sealed interface StatsScreenState { @Immutable data object Loading : StatsScreenState @Immutable data class Success( val overview: StatsData.Overview, val titles: StatsData.Titles, val chapters: StatsData.Chapters, val trackers: StatsData.Trackers, ) : StatsScreenState } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/stats/components/StatsItem.kt ================================================ package eu.kanade.presentation.more.stats.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import tachiyomi.presentation.core.components.material.SECONDARY_ALPHA import tachiyomi.presentation.core.components.material.padding @Composable fun RowScope.StatsOverviewItem( title: String, subtitle: String, icon: ImageVector, ) { BaseStatsItem( title = title, titleStyle = MaterialTheme.typography.titleLarge, subtitle = subtitle, subtitleStyle = MaterialTheme.typography.bodyMedium, icon = icon, ) } @Composable fun RowScope.StatsItem( title: String, subtitle: String, ) { BaseStatsItem( title = title, titleStyle = MaterialTheme.typography.bodyMedium, subtitle = subtitle, subtitleStyle = MaterialTheme.typography.labelSmall, ) } @Composable private fun RowScope.BaseStatsItem( title: String, titleStyle: TextStyle, subtitle: String, subtitleStyle: TextStyle, icon: ImageVector? = null, ) { Column( modifier = Modifier .weight(1f) .fillMaxHeight(), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), horizontalAlignment = Alignment.CenterHorizontally, ) { Text( text = title, style = titleStyle .copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Center, maxLines = 1, ) Text( text = subtitle, style = subtitleStyle .copy( color = MaterialTheme.colorScheme.onSurface .copy(alpha = SECONDARY_ALPHA), ), textAlign = TextAlign.Center, ) if (icon != null) { Spacer(modifier = Modifier.weight(1f)) Icon( imageVector = icon, contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/more/stats/data/StatsData.kt ================================================ package eu.kanade.presentation.more.stats.data sealed interface StatsData { data class Overview( val libraryMangaCount: Int, val completedMangaCount: Int, val totalReadDuration: Long, ) : StatsData data class Titles( val globalUpdateItemCount: Int, val startedMangaCount: Int, val localMangaCount: Int, ) : StatsData data class Chapters( val totalChapterCount: Int, val readChapterCount: Int, val downloadCount: Int, ) : StatsData data class Trackers( val trackedTitleCount: Int, val meanScore: Double, val trackerCount: Int, ) : StatsData } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt ================================================ package eu.kanade.presentation.reader import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Warning import androidx.compose.material3.CardColors import androidx.compose.material3.CardDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedCard import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.Placeholder import androidx.compose.ui.text.PlaceholderVerticalAlign import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import kotlinx.collections.immutable.persistentMapOf import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.service.calculateChapterGap import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun ChapterTransition( transition: ChapterTransition, currChapterDownloaded: Boolean, goingToChapterDownloaded: Boolean, ) { val currChapter = transition.from.chapter.toDomainChapter() val goingToChapter = transition.to?.chapter?.toDomainChapter() ProvideTextStyle(MaterialTheme.typography.bodyMedium) { when (transition) { is ChapterTransition.Prev -> { TransitionText( topLabel = stringResource(MR.strings.transition_previous), topChapter = goingToChapter, topChapterDownloaded = goingToChapterDownloaded, bottomLabel = stringResource(MR.strings.transition_current), bottomChapter = currChapter, bottomChapterDownloaded = currChapterDownloaded, fallbackLabel = stringResource(MR.strings.transition_no_previous), chapterGap = calculateChapterGap(currChapter, goingToChapter), ) } is ChapterTransition.Next -> { TransitionText( topLabel = stringResource(MR.strings.transition_finished), topChapter = currChapter, topChapterDownloaded = currChapterDownloaded, bottomLabel = stringResource(MR.strings.transition_next), bottomChapter = goingToChapter, bottomChapterDownloaded = goingToChapterDownloaded, fallbackLabel = stringResource(MR.strings.transition_no_next), chapterGap = calculateChapterGap(goingToChapter, currChapter), ) } } } } @Composable private fun TransitionText( topLabel: String, topChapter: Chapter?, topChapterDownloaded: Boolean, bottomLabel: String, bottomChapter: Chapter?, bottomChapterDownloaded: Boolean, fallbackLabel: String, chapterGap: Int, ) { Column( modifier = Modifier .widthIn(max = 460.dp) .fillMaxWidth(), ) { if (topChapter != null) { ChapterText( header = topLabel, name = topChapter.name, scanlator = topChapter.scanlator, downloaded = topChapterDownloaded, ) Spacer(Modifier.height(VerticalSpacerSize)) } else { NoChapterNotification( text = fallbackLabel, modifier = Modifier.align(Alignment.CenterHorizontally), ) } if (bottomChapter != null) { if (chapterGap > 0) { ChapterGapWarning( gapCount = chapterGap, modifier = Modifier.align(Alignment.CenterHorizontally), ) } Spacer(Modifier.height(VerticalSpacerSize)) ChapterText( header = bottomLabel, name = bottomChapter.name, scanlator = bottomChapter.scanlator, downloaded = bottomChapterDownloaded, ) } else { NoChapterNotification( text = fallbackLabel, modifier = Modifier.align(Alignment.CenterHorizontally), ) } } } @Composable private fun NoChapterNotification( text: String, modifier: Modifier = Modifier, ) { OutlinedCard( modifier = modifier, colors = CardColor, ) { Row( modifier = Modifier .padding(horizontal = 16.dp, vertical = 12.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Outlined.Info, tint = MaterialTheme.colorScheme.primary, contentDescription = null, ) Text( text = text, style = MaterialTheme.typography.bodyMedium, ) } } } @Composable private fun ChapterGapWarning( gapCount: Int, modifier: Modifier = Modifier, ) { OutlinedCard( modifier = modifier, colors = CardColor, ) { Row( modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Outlined.Warning, tint = MaterialTheme.colorScheme.error, contentDescription = null, ) Text( text = pluralStringResource(MR.plurals.missing_chapters_warning, count = gapCount, gapCount), style = MaterialTheme.typography.bodyMedium, ) } } } @Composable private fun ChapterHeaderText( text: String, modifier: Modifier = Modifier, ) { Text( text = text, modifier = modifier, style = MaterialTheme.typography.titleMedium, ) } @Composable private fun ChapterText( header: String, name: String, scanlator: String?, downloaded: Boolean, ) { Column { ChapterHeaderText( text = header, modifier = Modifier.padding(bottom = 4.dp), ) Text( text = buildAnnotatedString { if (downloaded) { appendInlineContent(DOWNLOADED_ICON_ID) append(' ') } append(name) }, fontSize = 20.sp, maxLines = 5, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.titleLarge, inlineContent = persistentMapOf( DOWNLOADED_ICON_ID to InlineTextContent( Placeholder( width = 22.sp, height = 22.sp, placeholderVerticalAlign = PlaceholderVerticalAlign.Center, ), ) { Icon( imageVector = Icons.Filled.CheckCircle, contentDescription = stringResource(MR.strings.label_downloaded), ) }, ), ) scanlator?.let { Text( text = it, modifier = Modifier .secondaryItemAlpha() .padding(top = 2.dp), maxLines = 2, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, ) } } } private val CardColor: CardColors @Composable get() = CardDefaults.outlinedCardColors( containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onSurface, ) private val VerticalSpacerSize = 24.dp private const val DOWNLOADED_ICON_ID = "downloaded" private fun previewChapter(name: String, scanlator: String, chapterNumber: Double) = Chapter.create().copy( id = 0L, mangaId = 0L, url = "", name = name, scanlator = scanlator, chapterNumber = chapterNumber, ) private val FakeChapter = previewChapter( name = "Vol.1, Ch.1 - Fake Chapter Title", scanlator = "Scanlator Name", chapterNumber = 1.0, ) private val FakeGapChapter = previewChapter( name = "Vol.5, Ch.44 - Fake Gap Chapter Title", scanlator = "Scanlator Name", chapterNumber = 44.0, ) private val FakeChapterLongTitle = previewChapter( name = "Vol.1, Ch.0 - The Mundane Musings of a Metafictional Manga: A Chapter About a Chapter, Featuring" + " an Absurdly Long Title and a Surprisingly Normal Day in the Lives of Our Heroes, as They Grapple with the " + "Daily Challenges of Existence, from Paying Rent to Finding Love, All While Navigating the Strange World of " + "Fictional Realities and Reality-Bending Fiction, Where the Fourth Wall is Always in Danger of Being Broken " + "and the Line Between Author and Character is Forever Blurred.", scanlator = "Long Long Funny Scanlator Sniper Group Name Reborn", chapterNumber = 1.0, ) @PreviewLightDark @Composable private fun TransitionTextPreview() { TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapter), ReaderChapter(FakeChapter)), currChapterDownloaded = false, goingToChapterDownloaded = true, ) } } } @PreviewLightDark @Composable private fun TransitionTextLongTitlePreview() { TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapterLongTitle), ReaderChapter(FakeChapter)), currChapterDownloaded = true, goingToChapterDownloaded = true, ) } } } @PreviewLightDark @Composable private fun TransitionTextWithGapPreview() { TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapter), ReaderChapter(FakeGapChapter)), currChapterDownloaded = true, goingToChapterDownloaded = false, ) } } } @PreviewLightDark @Composable private fun TransitionTextNoNextPreview() { TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapter), null), currChapterDownloaded = true, goingToChapterDownloaded = false, ) } } } @PreviewLightDark @Composable private fun TransitionTextNoPreviousPreview() { TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Prev(ReaderChapter(FakeChapter), null), currChapterDownloaded = true, goingToChapterDownloaded = false, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/DisplayRefreshHost.kt ================================================ package eu.kanade.presentation.reader import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import kotlinx.coroutines.delay import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.milliseconds @Stable class DisplayRefreshHost { internal var currentDisplayRefresh by mutableStateOf(false) private val readerPreferences = Injekt.get() internal val flashMillis = readerPreferences.flashDurationMillis internal val flashMode = readerPreferences.flashColor internal val flashIntervalPref = readerPreferences.flashPageInterval // Internal State for Flash private var flashInterval = flashIntervalPref.get() private var timesCalled = 0 fun flash() { if (timesCalled % flashInterval == 0) { currentDisplayRefresh = true } timesCalled += 1 } fun setInterval(interval: Int) { flashInterval = interval timesCalled = 0 } } @Composable fun DisplayRefreshHost( hostState: DisplayRefreshHost, modifier: Modifier = Modifier, ) { val currentDisplayRefresh = hostState.currentDisplayRefresh val refreshDuration by hostState.flashMillis.collectAsState() val flashMode by hostState.flashMode.collectAsState() val flashInterval by hostState.flashIntervalPref.collectAsState() var currentColor by remember { mutableStateOf(null) } LaunchedEffect(currentDisplayRefresh) { if (!currentDisplayRefresh) { currentColor = null return@LaunchedEffect } val refreshDurationHalf = refreshDuration.milliseconds / 2 currentColor = if (flashMode == ReaderPreferences.FlashColor.BLACK) { Color.Black } else { Color.White } delay(refreshDurationHalf) if (flashMode == ReaderPreferences.FlashColor.WHITE_BLACK) { currentColor = Color.Black } delay(refreshDurationHalf) hostState.currentDisplayRefresh = false } LaunchedEffect(flashInterval) { hostState.setInterval(flashInterval) } Canvas( modifier = modifier.fillMaxSize(), ) { currentColor?.let { drawRect(it) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt ================================================ package eu.kanade.presentation.reader import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.grid.items import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import dev.icerock.moko.resources.StringResource import eu.kanade.domain.manga.model.readerOrientation import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.reader.components.ModeSelectionDialog import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.material.IconToggleButton import tachiyomi.presentation.core.i18n.stringResource private val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - ReaderOrientation.DEFAULT @Composable fun OrientationSelectDialog( onDismissRequest: () -> Unit, screenModel: ReaderSettingsScreenModel, onChange: (StringResource) -> Unit, ) { val manga by screenModel.mangaFlow.collectAsState() val orientation = remember(manga) { ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt()) } AdaptiveSheet(onDismissRequest = onDismissRequest) { DialogContent( orientation = orientation, onChangeOrientation = { screenModel.onChangeOrientation(it) onChange(it.stringRes) onDismissRequest() }, ) } } @Composable private fun DialogContent( orientation: ReaderOrientation, onChangeOrientation: (ReaderOrientation) -> Unit, ) { var selected by remember { mutableStateOf(orientation) } ModeSelectionDialog( onUseDefault = { onChangeOrientation( ReaderOrientation.DEFAULT, ) }.takeIf { orientation != ReaderOrientation.DEFAULT }, onApply = { onChangeOrientation(selected) }, ) { SettingsIconGrid(MR.strings.rotation_type) { items(ReaderOrientationsWithoutDefault) { mode -> IconToggleButton( checked = mode == selected, onCheckedChange = { selected = mode }, modifier = Modifier.fillMaxWidth(), imageVector = mode.icon, title = stringResource(mode.stringRes), ) } } } } @PreviewLightDark @Composable private fun DialogContentPreview() { TachiyomiPreviewTheme { Surface { Column { DialogContent( orientation = ReaderOrientation.DEFAULT, onChangeOrientation = {}, ) DialogContent( orientation = ReaderOrientation.FREE, onChangeOrientation = {}, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt ================================================ package eu.kanade.presentation.reader import androidx.annotation.ColorInt import androidx.annotation.IntRange import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer import kotlin.math.abs @Composable fun ReaderContentOverlay( @IntRange(from = -100, to = 100) brightness: Int, @ColorInt color: Int?, colorBlendMode: BlendMode?, modifier: Modifier = Modifier, ) { if (brightness < 0) { val brightnessAlpha = remember(brightness) { abs(brightness) / 100f } Canvas( modifier = modifier .fillMaxSize() .graphicsLayer { alpha = brightnessAlpha }, ) { drawRect(Color.Black) } } if (color != null) { Canvas( modifier = modifier .fillMaxSize(), ) { drawRect( color = Color(color), blendMode = colorBlendMode ?: BlendMode.SrcOver, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt ================================================ package eu.kanade.presentation.reader import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ContentCopy import androidx.compose.material.icons.outlined.Photo import androidx.compose.material.icons.outlined.Save import androidx.compose.material.icons.outlined.Share import androidx.compose.material3.AlertDialog import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AdaptiveSheet import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ActionButton import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderPageActionsDialog( onDismissRequest: () -> Unit, onSetAsCover: () -> Unit, onShare: (Boolean) -> Unit, onSave: () -> Unit, ) { var showSetCoverDialog by remember { mutableStateOf(false) } AdaptiveSheet(onDismissRequest = onDismissRequest) { Row( modifier = Modifier.padding(vertical = 16.dp), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { ActionButton( modifier = Modifier.weight(1f), title = stringResource(MR.strings.set_as_cover), icon = Icons.Outlined.Photo, onClick = { showSetCoverDialog = true }, ) ActionButton( modifier = Modifier.weight(1f), title = stringResource(MR.strings.action_copy_to_clipboard), icon = Icons.Outlined.ContentCopy, onClick = { onShare(true) onDismissRequest() }, ) ActionButton( modifier = Modifier.weight(1f), title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = { onShare(false) onDismissRequest() }, ) ActionButton( modifier = Modifier.weight(1f), title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = { onSave() onDismissRequest() }, ) } } if (showSetCoverDialog) { SetCoverDialog( onConfirm = { onSetAsCover() showSetCoverDialog = false }, onDismiss = { showSetCoverDialog = false }, ) } } @Composable private fun SetCoverDialog( onConfirm: () -> Unit, onDismiss: () -> Unit, ) { AlertDialog( text = { Text(stringResource(MR.strings.confirm_set_image_as_cover)) }, confirmButton = { TextButton(onClick = onConfirm) { Text(stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismiss) { Text(stringResource(MR.strings.action_cancel)) } }, onDismissRequest = onDismiss, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/ReaderPageIndicator.kt ================================================ package eu.kanade.presentation.reader import androidx.compose.foundation.layout.Box import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.sp import eu.kanade.presentation.theme.TachiyomiPreviewTheme @Composable fun ReaderPageIndicator( currentPage: Int, totalPages: Int, modifier: Modifier = Modifier, ) { if (currentPage <= 0 || totalPages <= 0) return val text = "$currentPage / $totalPages" val style = TextStyle( color = Color(235, 235, 235), fontSize = MaterialTheme.typography.bodySmall.fontSize, fontWeight = FontWeight.Bold, letterSpacing = 1.sp, ) val strokeStyle = style.copy( color = Color(45, 45, 45), drawStyle = Stroke(width = 4f), ) Box( contentAlignment = Alignment.Center, modifier = modifier, ) { Text( text = text, style = strokeStyle, ) Text( text = text, style = style, ) } } @PreviewLightDark @Composable private fun ReaderPageIndicatorPreview() { TachiyomiPreviewTheme { Surface { ReaderPageIndicator(currentPage = 10, totalPages = 69) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt ================================================ package eu.kanade.presentation.reader import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.grid.items import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.PreviewLightDark import dev.icerock.moko.resources.StringResource import eu.kanade.domain.manga.model.readingMode import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.reader.components.ModeSelectionDialog import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.material.IconToggleButton import tachiyomi.presentation.core.i18n.stringResource private val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAULT @Composable fun ReadingModeSelectDialog( onDismissRequest: () -> Unit, screenModel: ReaderSettingsScreenModel, onChange: (StringResource) -> Unit, ) { val manga by screenModel.mangaFlow.collectAsState() val readingMode = remember(manga) { ReadingMode.fromPreference(manga?.readingMode?.toInt()) } AdaptiveSheet(onDismissRequest = onDismissRequest) { DialogContent( readingMode = readingMode, onChangeReadingMode = { screenModel.onChangeReadingMode(it) onChange(it.stringRes) onDismissRequest() }, ) } } @Composable private fun DialogContent( readingMode: ReadingMode, onChangeReadingMode: (ReadingMode) -> Unit, ) { var selected by remember { mutableStateOf(readingMode) } ModeSelectionDialog( onUseDefault = { onChangeReadingMode(ReadingMode.DEFAULT) }.takeIf { readingMode != ReadingMode.DEFAULT }, onApply = { onChangeReadingMode(selected) }, ) { SettingsIconGrid(MR.strings.pref_category_reading_mode) { items(ReadingModesWithoutDefault) { mode -> IconToggleButton( checked = mode == selected, onCheckedChange = { selected = mode }, modifier = Modifier.fillMaxWidth(), imageVector = ImageVector.vectorResource(mode.iconRes), title = stringResource(mode.stringRes), ) } } } } @PreviewLightDark @Composable private fun DialogContentPreview() { TachiyomiPreviewTheme { Surface { Column { DialogContent( readingMode = ReadingMode.DEFAULT, onChangeReadingMode = {}, ) DialogContent( readingMode = ReadingMode.LEFT_TO_RIGHT, onChangeReadingMode = {}, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt ================================================ package eu.kanade.presentation.reader.appbars import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import eu.kanade.presentation.reader.components.ChapterNavigator import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import tachiyomi.presentation.core.components.material.padding private val readerBarsSlideAnimationSpec = tween(200) private val readerBarsFadeAnimationSpec = tween(150) @Composable fun ReaderAppBars( visible: Boolean, mangaTitle: String?, chapterTitle: String?, navigateUp: () -> Unit, onClickTopAppBar: () -> Unit, bookmarked: Boolean, onToggleBookmarked: () -> Unit, onOpenInWebView: (() -> Unit)?, onOpenInBrowser: (() -> Unit)?, onShare: (() -> Unit)?, viewer: Viewer?, onNextChapter: () -> Unit, enabledNext: Boolean, onPreviousChapter: () -> Unit, enabledPrevious: Boolean, currentPage: Int, totalPages: Int, onPageIndexChange: (Int) -> Unit, readingMode: ReadingMode, onClickReadingMode: () -> Unit, orientation: ReaderOrientation, onClickOrientation: () -> Unit, cropEnabled: Boolean, onClickCropBorder: () -> Unit, onClickSettings: () -> Unit, ) { val isRtl = viewer is R2LPagerViewer val backgroundColor = MaterialTheme.colorScheme .surfaceColorAtElevation(3.dp) .copy(alpha = if (isSystemInDarkTheme()) 0.9f else 0.95f) Column(modifier = Modifier.fillMaxHeight()) { AnimatedVisibility( visible = visible, enter = slideInVertically(initialOffsetY = { -it }, animationSpec = readerBarsSlideAnimationSpec) + fadeIn(animationSpec = readerBarsFadeAnimationSpec), exit = slideOutVertically(targetOffsetY = { -it }, animationSpec = readerBarsSlideAnimationSpec) + fadeOut(animationSpec = readerBarsFadeAnimationSpec), ) { ReaderTopBar( modifier = Modifier .background(backgroundColor) .clickable(onClick = onClickTopAppBar), mangaTitle = mangaTitle, chapterTitle = chapterTitle, navigateUp = navigateUp, bookmarked = bookmarked, onToggleBookmarked = onToggleBookmarked, onOpenInWebView = onOpenInWebView, onOpenInBrowser = onOpenInBrowser, onShare = onShare, ) } Spacer(modifier = Modifier.weight(1f)) AnimatedVisibility( visible = visible, enter = slideInVertically(initialOffsetY = { it }, animationSpec = readerBarsSlideAnimationSpec) + fadeIn(animationSpec = readerBarsFadeAnimationSpec), exit = slideOutVertically(targetOffsetY = { it }, animationSpec = readerBarsSlideAnimationSpec) + fadeOut(animationSpec = readerBarsFadeAnimationSpec), ) { Column(verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small)) { ChapterNavigator( isRtl = isRtl, onNextChapter = onNextChapter, enabledNext = enabledNext, onPreviousChapter = onPreviousChapter, enabledPrevious = enabledPrevious, currentPage = currentPage, totalPages = totalPages, onPageIndexChange = onPageIndexChange, ) ReaderBottomBar( modifier = Modifier .fillMaxWidth() .background(backgroundColor) .padding(horizontal = MaterialTheme.padding.small) .windowInsetsPadding(WindowInsets.navigationBars), readingMode = readingMode, onClickReadingMode = onClickReadingMode, orientation = orientation, onClickOrientation = onClickOrientation, cropEnabled = cropEnabled, onClickCropBorder = onClickCropBorder, onClickSettings = onClickSettings, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderBottomBar.kt ================================================ package eu.kanade.presentation.reader.appbars import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.res.painterResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderBottomBar( readingMode: ReadingMode, onClickReadingMode: () -> Unit, orientation: ReaderOrientation, onClickOrientation: () -> Unit, cropEnabled: Boolean, onClickCropBorder: () -> Unit, onClickSettings: () -> Unit, modifier: Modifier = Modifier, ) { Row( modifier = modifier .pointerInput(Unit) {}, horizontalArrangement = Arrangement.SpaceEvenly, verticalAlignment = Alignment.CenterVertically, ) { IconButton(onClick = onClickReadingMode) { Icon( painter = painterResource(readingMode.iconRes), contentDescription = stringResource(MR.strings.viewer), ) } IconButton(onClick = onClickOrientation) { Icon( imageVector = orientation.icon, contentDescription = stringResource(MR.strings.rotation_type), ) } IconButton(onClick = onClickCropBorder) { Icon( painter = painterResource(if (cropEnabled) R.drawable.ic_crop_24dp else R.drawable.ic_crop_off_24dp), contentDescription = stringResource(MR.strings.pref_crop_borders), ) } IconButton(onClick = onClickSettings) { Icon( imageVector = Icons.Outlined.Settings, contentDescription = stringResource(MR.strings.action_settings), ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderTopBar.kt ================================================ package eu.kanade.presentation.reader.appbars import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Bookmark import androidx.compose.material.icons.outlined.BookmarkBorder import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderTopBar( mangaTitle: String?, chapterTitle: String?, navigateUp: () -> Unit, bookmarked: Boolean, onToggleBookmarked: () -> Unit, onOpenInWebView: (() -> Unit)?, onOpenInBrowser: (() -> Unit)?, onShare: (() -> Unit)?, modifier: Modifier = Modifier, ) { AppBar( modifier = modifier, backgroundColor = Color.Transparent, title = mangaTitle, subtitle = chapterTitle, navigateUp = navigateUp, actions = { AppBarActions( actions = persistentListOf().builder() .apply { add( AppBar.Action( title = stringResource( if (bookmarked) { MR.strings.action_remove_bookmark } else { MR.strings.action_bookmark }, ), icon = if (bookmarked) { Icons.Outlined.Bookmark } else { Icons.Outlined.BookmarkBorder }, onClick = onToggleBookmarked, ), ) onOpenInWebView?.let { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_open_in_web_view), onClick = it, ), ) } onOpenInBrowser?.let { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_open_in_browser), onClick = it, ), ) } onShare?.let { add( AppBar.OverflowAction( title = stringResource(MR.strings.action_share), onClick = it, ), ) } } .build(), ) }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt ================================================ package eu.kanade.presentation.reader.components import androidx.compose.foundation.background import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsDraggedAsState import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.SkipNext import androidx.compose.material.icons.outlined.SkipPrevious import androidx.compose.material3.FilledIconButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.presentation.util.isTabletUi import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Slider import tachiyomi.presentation.core.i18n.stringResource @Composable fun ChapterNavigator( isRtl: Boolean, onNextChapter: () -> Unit, enabledNext: Boolean, onPreviousChapter: () -> Unit, enabledPrevious: Boolean, currentPage: Int, totalPages: Int, onPageIndexChange: (Int) -> Unit, ) { val isTabletUi = isTabletUi() val horizontalPadding = if (isTabletUi) 24.dp else 8.dp val layoutDirection = if (isRtl) LayoutDirection.Rtl else LayoutDirection.Ltr val haptic = LocalHapticFeedback.current // Match with toolbar background color set in ReaderActivity val backgroundColor = MaterialTheme.colorScheme .surfaceColorAtElevation(3.dp) .copy(alpha = if (isSystemInDarkTheme()) 0.9f else 0.95f) val buttonColor = IconButtonDefaults.filledIconButtonColors( containerColor = backgroundColor, disabledContainerColor = backgroundColor, ) // We explicitly handle direction based on the reader viewer rather than the system direction CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) { Row( modifier = Modifier .fillMaxWidth() .padding(horizontal = horizontalPadding), verticalAlignment = Alignment.CenterVertically, ) { FilledIconButton( enabled = if (isRtl) enabledNext else enabledPrevious, onClick = if (isRtl) onNextChapter else onPreviousChapter, colors = buttonColor, ) { Icon( imageVector = Icons.Outlined.SkipPrevious, contentDescription = stringResource( if (isRtl) MR.strings.action_next_chapter else MR.strings.action_previous_chapter, ), ) } if (totalPages > 1) { CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) { Row( modifier = Modifier .weight(1f) .clip(RoundedCornerShape(24.dp)) .background(backgroundColor) .padding(horizontal = 16.dp), verticalAlignment = Alignment.CenterVertically, ) { Box(contentAlignment = Alignment.CenterEnd) { Text(text = currentPage.toString()) // Taking up full length so the slider doesn't shift when 'currentPage' length changes Text(text = totalPages.toString(), color = Color.Transparent) } val interactionSource = remember { MutableInteractionSource() } val sliderDragged by interactionSource.collectIsDraggedAsState() LaunchedEffect(currentPage) { if (sliderDragged) { haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove) } } Slider( modifier = Modifier .weight(1f) .padding(horizontal = 8.dp), value = currentPage, valueRange = 1..totalPages, onValueChange = f@{ if (it == currentPage) return@f onPageIndexChange(it - 1) }, interactionSource = interactionSource, ) Text(text = totalPages.toString()) } } } else { Spacer(Modifier.weight(1f)) } FilledIconButton( enabled = if (isRtl) enabledPrevious else enabledNext, onClick = if (isRtl) onPreviousChapter else onNextChapter, colors = buttonColor, ) { Icon( imageVector = Icons.Outlined.SkipNext, contentDescription = stringResource( if (isRtl) MR.strings.action_previous_chapter else MR.strings.action_next_chapter, ), ) } } } } @Preview @Composable private fun ChapterNavigatorPreview() { var currentPage by remember { mutableIntStateOf(1) } TachiyomiPreviewTheme { ChapterNavigator( isRtl = false, onNextChapter = {}, enabledNext = true, onPreviousChapter = {}, enabledPrevious = true, currentPage = currentPage, totalPages = 10, onPageIndexChange = { currentPage = (it + 1) }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt ================================================ package eu.kanade.presentation.reader.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Check import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsItemsPaddings import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun ModeSelectionDialog( onApply: () -> Unit, onUseDefault: (() -> Unit)? = null, content: @Composable () -> Unit, ) { Box(modifier = Modifier.padding(vertical = 16.dp)) { Column { content() Row( modifier = Modifier.padding( horizontal = SettingsItemsPaddings.Horizontal, ), ) { onUseDefault?.let { OutlinedButton(onClick = it) { Text(text = stringResource(MR.strings.action_revert_to_default)) } } Spacer(modifier = Modifier.weight(1f)) FilledTonalButton( onClick = onApply, ) { Row( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), verticalAlignment = Alignment.CenterVertically, ) { Icon( imageVector = Icons.Outlined.Check, contentDescription = null, ) Text(text = stringResource(MR.strings.action_apply)) } } } } } } @PreviewLightDark @Composable private fun Preview() { TachiyomiPreviewTheme { Surface { Column { ModeSelectionDialog( onApply = {}, onUseDefault = {}, ) { Text("Dummy content") } ModeSelectionDialog( onApply = {}, ) { Text("Dummy content without default") } } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt ================================================ package eu.kanade.presentation.reader.settings import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.core.graphics.alpha import androidx.core.graphics.blue import androidx.core.graphics.green import androidx.core.graphics.red import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences.Companion.ColorFilterMode import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import tachiyomi.core.common.preference.getAndSet import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) { val customBrightness by screenModel.preferences.customBrightness.collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_custom_brightness), pref = screenModel.preferences.customBrightness, ) /* * Sets the brightness of the screen. Range is [-75, 100]. * From -75 to -1 a semi-transparent black view is shown at the top with the minimum brightness. * From 1 to 100 it sets that value as brightness. * 0 sets system brightness and hides the overlay. */ if (customBrightness) { val customBrightnessValue by screenModel.preferences.customBrightnessValue.collectAsState() SliderItem( value = customBrightnessValue, valueRange = -75..100, steps = 0, label = stringResource(MR.strings.pref_custom_brightness), onChange = { screenModel.preferences.customBrightnessValue.set(it) }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) } val colorFilter by screenModel.preferences.colorFilter.collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_custom_color_filter), pref = screenModel.preferences.colorFilter, ) if (colorFilter) { val colorFilterValue by screenModel.preferences.colorFilterValue.collectAsState() SliderItem( value = colorFilterValue.red, valueRange = 0..255, steps = 0, label = stringResource(MR.strings.color_filter_r_value), onChange = { newRValue -> screenModel.preferences.colorFilterValue.getAndSet { getColorValue(it, newRValue, RED_MASK, 16) } }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) SliderItem( value = colorFilterValue.green, valueRange = 0..255, steps = 0, label = stringResource(MR.strings.color_filter_g_value), onChange = { newGValue -> screenModel.preferences.colorFilterValue.getAndSet { getColorValue(it, newGValue, GREEN_MASK, 8) } }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) SliderItem( value = colorFilterValue.blue, valueRange = 0..255, steps = 0, label = stringResource(MR.strings.color_filter_b_value), onChange = { newBValue -> screenModel.preferences.colorFilterValue.getAndSet { getColorValue(it, newBValue, BLUE_MASK, 0) } }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) SliderItem( value = colorFilterValue.alpha, valueRange = 0..255, steps = 0, label = stringResource(MR.strings.color_filter_a_value), onChange = { newAValue -> screenModel.preferences.colorFilterValue.getAndSet { getColorValue(it, newAValue, ALPHA_MASK, 24) } }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) val colorFilterMode by screenModel.preferences.colorFilterMode.collectAsState() SettingsChipRow(MR.strings.pref_color_filter_mode) { ColorFilterMode.mapIndexed { index, it -> FilterChip( selected = colorFilterMode == index, onClick = { screenModel.preferences.colorFilterMode.set(index) }, label = { Text(stringResource(it.first)) }, ) } } } CheckboxItem( label = stringResource(MR.strings.pref_grayscale), pref = screenModel.preferences.grayscale, ) CheckboxItem( label = stringResource(MR.strings.pref_inverted_colors), pref = screenModel.preferences.invertedColors, ) } private fun getColorValue(currentColor: Int, color: Int, mask: Long, bitShift: Int): Int { return (color shl bitShift) or (currentColor and mask.inv().toInt()) } private const val ALPHA_MASK: Long = 0xFF000000 private const val RED_MASK: Long = 0x00FF0000 private const val GREEN_MASK: Long = 0x0000FF00 private const val BLUE_MASK: Long = 0x000000FF ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt ================================================ package eu.kanade.presentation.reader.settings import androidx.activity.compose.LocalActivity import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.util.system.hasDisplayCutout import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState private val themes = listOf( MR.strings.black_background to 1, MR.strings.gray_background to 2, MR.strings.white_background to 0, MR.strings.automatic_background to 3, ) private val flashColors = listOf( MR.strings.pref_flash_style_black to ReaderPreferences.FlashColor.BLACK, MR.strings.pref_flash_style_white to ReaderPreferences.FlashColor.WHITE, MR.strings.pref_flash_style_white_black to ReaderPreferences.FlashColor.WHITE_BLACK, ) @Composable internal fun ColumnScope.GeneralPage(screenModel: ReaderSettingsScreenModel) { val readerTheme by screenModel.preferences.readerTheme.collectAsState() val flashPageState by screenModel.preferences.flashOnPageChange.collectAsState() val flashMillisPref = screenModel.preferences.flashDurationMillis val flashMillis by flashMillisPref.collectAsState() val flashIntervalPref = screenModel.preferences.flashPageInterval val flashInterval by flashIntervalPref.collectAsState() val flashColorPref = screenModel.preferences.flashColor val flashColor by flashColorPref.collectAsState() SettingsChipRow(MR.strings.pref_reader_theme) { themes.map { (labelRes, value) -> FilterChip( selected = readerTheme == value, onClick = { screenModel.preferences.readerTheme.set(value) }, label = { Text(stringResource(labelRes)) }, ) } } CheckboxItem( label = stringResource(MR.strings.pref_show_page_number), pref = screenModel.preferences.showPageNumber, ) CheckboxItem( label = stringResource(MR.strings.pref_fullscreen), pref = screenModel.preferences.fullscreen, ) val isFullscreen by screenModel.preferences.fullscreen.collectAsState() if (LocalActivity.current?.hasDisplayCutout() == true && isFullscreen) { CheckboxItem( label = stringResource(MR.strings.pref_cutout_short), pref = screenModel.preferences.drawUnderCutout, ) } CheckboxItem( label = stringResource(MR.strings.pref_keep_screen_on), pref = screenModel.preferences.keepScreenOn, ) CheckboxItem( label = stringResource(MR.strings.pref_read_with_long_tap), pref = screenModel.preferences.readWithLongTap, ) CheckboxItem( label = stringResource(MR.strings.pref_always_show_chapter_transition), pref = screenModel.preferences.alwaysShowChapterTransition, ) CheckboxItem( label = stringResource(MR.strings.pref_page_transitions), pref = screenModel.preferences.pageTransitions, ) CheckboxItem( label = stringResource(MR.strings.pref_flash_page), pref = screenModel.preferences.flashOnPageChange, ) if (flashPageState) { SliderItem( value = flashMillis / ReaderPreferences.MILLI_CONVERSION, valueRange = 1..15, label = stringResource(MR.strings.pref_flash_duration), valueString = stringResource(MR.strings.pref_flash_duration_summary, flashMillis), onChange = { flashMillisPref.set(it * ReaderPreferences.MILLI_CONVERSION) }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) SliderItem( value = flashInterval, valueRange = 1..10, label = stringResource(MR.strings.pref_flash_page_interval), valueString = pluralStringResource(MR.plurals.pref_pages, flashInterval, flashInterval), onChange = { flashIntervalPref.set(it) }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) SettingsChipRow(MR.strings.pref_flash_with) { flashColors.map { (labelRes, value) -> FilterChip( selected = flashColor == value, onClick = { flashColorPref.set(value) }, label = { Text(stringResource(labelRes)) }, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt ================================================ package eu.kanade.presentation.reader.settings import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalView import androidx.compose.ui.window.DialogWindowProvider import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderSettingsDialog( onDismissRequest: () -> Unit, onShowMenus: () -> Unit, onHideMenus: () -> Unit, screenModel: ReaderSettingsScreenModel, ) { val tabTitles = persistentListOf( stringResource(MR.strings.pref_category_reading_mode), stringResource(MR.strings.pref_category_general), stringResource(MR.strings.custom_filter), ) val pagerState = rememberPagerState { tabTitles.size } BoxWithConstraints { TabbedDialog( modifier = Modifier.heightIn(max = maxHeight * 0.75f), onDismissRequest = { onDismissRequest() onShowMenus() }, tabTitles = tabTitles, pagerState = pagerState, ) { page -> val window = (LocalView.current.parent as? DialogWindowProvider)?.window LaunchedEffect(pagerState.currentPage) { if (pagerState.currentPage == 2) { window?.setDimAmount(0f) onHideMenus() } else { window?.setDimAmount(0.5f) onShowMenus() } } Column( modifier = Modifier .padding(vertical = TabbedDialogPaddings.Vertical) .verticalScroll(rememberScrollState()), ) { when (page) { 0 -> ReadingModePage(screenModel) 1 -> GeneralPage(screenModel) 2 -> ColorFilterPage(screenModel) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt ================================================ package eu.kanade.presentation.reader.settings import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import eu.kanade.domain.manga.model.readerOrientation import eu.kanade.domain.manga.model.readingMode import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import java.text.NumberFormat @Composable internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) { HeadingItem(MR.strings.pref_category_for_this_series) val manga by screenModel.mangaFlow.collectAsState() val readingMode = remember(manga) { ReadingMode.fromPreference(manga?.readingMode?.toInt()) } SettingsChipRow(MR.strings.pref_category_reading_mode) { ReadingMode.entries.map { FilterChip( selected = it == readingMode, onClick = { screenModel.onChangeReadingMode(it) }, label = { Text(stringResource(it.stringRes)) }, ) } } val orientation = remember(manga) { ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt()) } SettingsChipRow(MR.strings.rotation_type) { ReaderOrientation.entries.map { FilterChip( selected = it == orientation, onClick = { screenModel.onChangeOrientation(it) }, label = { Text(stringResource(it.stringRes)) }, ) } } val viewer by screenModel.viewerFlow.collectAsState() if (viewer is WebtoonViewer) { WebtoonViewerSettings(screenModel) } else { PagerViewerSettings(screenModel) } } @Composable private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenModel) { HeadingItem(MR.strings.pager_viewer) val navigationModePager by screenModel.preferences.navigationModePager.collectAsState() val pagerNavInverted by screenModel.preferences.pagerNavInverted.collectAsState() TapZonesItems( selected = navigationModePager, onSelect = screenModel.preferences.navigationModePager::set, invertMode = pagerNavInverted, onSelectInvertMode = screenModel.preferences.pagerNavInverted::set, ) val imageScaleType by screenModel.preferences.imageScaleType.collectAsState() SettingsChipRow(MR.strings.pref_image_scale_type) { ReaderPreferences.ImageScaleType.mapIndexed { index, it -> FilterChip( selected = imageScaleType == index + 1, onClick = { screenModel.preferences.imageScaleType.set(index + 1) }, label = { Text(stringResource(it)) }, ) } } val zoomStart by screenModel.preferences.zoomStart.collectAsState() SettingsChipRow(MR.strings.pref_zoom_start) { ReaderPreferences.ZoomStart.mapIndexed { index, it -> FilterChip( selected = zoomStart == index + 1, onClick = { screenModel.preferences.zoomStart.set(index + 1) }, label = { Text(stringResource(it)) }, ) } } CheckboxItem( label = stringResource(MR.strings.pref_crop_borders), pref = screenModel.preferences.cropBorders, ) CheckboxItem( label = stringResource(MR.strings.pref_landscape_zoom), pref = screenModel.preferences.landscapeZoom, ) CheckboxItem( label = stringResource(MR.strings.pref_navigate_pan), pref = screenModel.preferences.navigateToPan, ) val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged.collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_dual_page_split), pref = screenModel.preferences.dualPageSplitPaged, ) if (dualPageSplitPaged) { CheckboxItem( label = stringResource(MR.strings.pref_dual_page_invert), pref = screenModel.preferences.dualPageInvertPaged, ) } val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit.collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_page_rotate), pref = screenModel.preferences.dualPageRotateToFit, ) if (dualPageRotateToFit) { CheckboxItem( label = stringResource(MR.strings.pref_page_rotate_invert), pref = screenModel.preferences.dualPageRotateToFitInvert, ) } } @Composable private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenModel) { val numberFormat = remember { NumberFormat.getPercentInstance() } HeadingItem(MR.strings.webtoon_viewer) val navigationModeWebtoon by screenModel.preferences.navigationModeWebtoon.collectAsState() val webtoonNavInverted by screenModel.preferences.webtoonNavInverted.collectAsState() TapZonesItems( selected = navigationModeWebtoon, onSelect = screenModel.preferences.navigationModeWebtoon::set, invertMode = webtoonNavInverted, onSelectInvertMode = screenModel.preferences.webtoonNavInverted::set, ) val webtoonSidePadding by screenModel.preferences.webtoonSidePadding.collectAsState() SliderItem( value = webtoonSidePadding, valueRange = ReaderPreferences.let { it.WEBTOON_PADDING_MIN..it.WEBTOON_PADDING_MAX }, label = stringResource(MR.strings.pref_webtoon_side_padding), valueString = numberFormat.format(webtoonSidePadding / 100f), onChange = { screenModel.preferences.webtoonSidePadding.set(it) }, pillColor = MaterialTheme.colorScheme.surfaceContainerHighest, ) CheckboxItem( label = stringResource(MR.strings.pref_crop_borders), pref = screenModel.preferences.cropBordersWebtoon, ) val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon.collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_dual_page_split), pref = screenModel.preferences.dualPageSplitWebtoon, ) if (dualPageSplitWebtoon) { CheckboxItem( label = stringResource(MR.strings.pref_dual_page_invert), pref = screenModel.preferences.dualPageInvertWebtoon, ) } val dualPageRotateToFitWebtoon by screenModel.preferences.dualPageRotateToFitWebtoon.collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_page_rotate), pref = screenModel.preferences.dualPageRotateToFitWebtoon, ) if (dualPageRotateToFitWebtoon) { CheckboxItem( label = stringResource(MR.strings.pref_page_rotate_invert), pref = screenModel.preferences.dualPageRotateToFitInvertWebtoon, ) } CheckboxItem( label = stringResource(MR.strings.pref_double_tap_zoom), pref = screenModel.preferences.webtoonDoubleTapZoomEnabled, ) CheckboxItem( label = stringResource(MR.strings.pref_webtoon_disable_zoom_out), pref = screenModel.preferences.webtoonDisableZoomOut, ) } @Composable private fun ColumnScope.TapZonesItems( selected: Int, onSelect: (Int) -> Unit, invertMode: ReaderPreferences.TappingInvertMode, onSelectInvertMode: (ReaderPreferences.TappingInvertMode) -> Unit, ) { SettingsChipRow(MR.strings.pref_viewer_nav) { ReaderPreferences.TapZones.mapIndexed { index, it -> FilterChip( selected = selected == index, onClick = { onSelect(index) }, label = { Text(stringResource(it)) }, ) } } if (selected != 5) { SettingsChipRow(MR.strings.pref_read_with_tapping_inverted) { ReaderPreferences.TappingInvertMode.entries.map { FilterChip( selected = it == invertMode, onClick = { onSelectInvertMode(it) }, label = { Text(stringResource(it.titleRes)) }, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt ================================================ package eu.kanade.presentation.theme import android.content.Context import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialExpressiveTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.AppTheme import eu.kanade.presentation.theme.colorscheme.BaseColorScheme import eu.kanade.presentation.theme.colorscheme.CatppuccinColorScheme import eu.kanade.presentation.theme.colorscheme.GreenAppleColorScheme import eu.kanade.presentation.theme.colorscheme.LavenderColorScheme import eu.kanade.presentation.theme.colorscheme.MidnightDuskColorScheme import eu.kanade.presentation.theme.colorscheme.MonetColorScheme import eu.kanade.presentation.theme.colorscheme.MonochromeColorScheme import eu.kanade.presentation.theme.colorscheme.NordColorScheme import eu.kanade.presentation.theme.colorscheme.StrawberryColorScheme import eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme import eu.kanade.presentation.theme.colorscheme.TakoColorScheme import eu.kanade.presentation.theme.colorscheme.TealTurqoiseColorScheme import eu.kanade.presentation.theme.colorscheme.TidalWaveColorScheme import eu.kanade.presentation.theme.colorscheme.YinYangColorScheme import eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @Composable fun TachiyomiTheme( appTheme: AppTheme? = null, amoled: Boolean? = null, content: @Composable () -> Unit, ) { val uiPreferences = Injekt.get() BaseTachiyomiTheme( appTheme = appTheme ?: uiPreferences.appTheme.get(), isAmoled = amoled ?: uiPreferences.themeDarkAmoled.get(), content = content, ) } @Composable fun TachiyomiPreviewTheme( appTheme: AppTheme = AppTheme.DEFAULT, isAmoled: Boolean = false, content: @Composable () -> Unit, ) = BaseTachiyomiTheme(appTheme, isAmoled, content) @Composable private fun BaseTachiyomiTheme( appTheme: AppTheme, isAmoled: Boolean, content: @Composable () -> Unit, ) { val context = LocalContext.current val isDark = isSystemInDarkTheme() MaterialExpressiveTheme( colorScheme = remember(appTheme, isDark, isAmoled) { getThemeColorScheme( context = context, appTheme = appTheme, isDark = isDark, isAmoled = isAmoled, ) }, content = content, ) } private fun getThemeColorScheme( context: Context, appTheme: AppTheme, isDark: Boolean, isAmoled: Boolean, ): ColorScheme { val colorScheme = if (appTheme == AppTheme.MONET) { MonetColorScheme(context) } else { colorSchemes.getOrDefault(appTheme, TachiyomiColorScheme) } return colorScheme.getColorScheme( isDark = isDark, isAmoled = isAmoled, overrideDarkSurfaceContainers = appTheme != AppTheme.MONET, ) } private val colorSchemes: Map = mapOf( AppTheme.DEFAULT to TachiyomiColorScheme, AppTheme.CATPPUCCIN to CatppuccinColorScheme, AppTheme.GREEN_APPLE to GreenAppleColorScheme, AppTheme.LAVENDER to LavenderColorScheme, AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme, AppTheme.MONOCHROME to MonochromeColorScheme, AppTheme.NORD to NordColorScheme, AppTheme.STRAWBERRY_DAIQUIRI to StrawberryColorScheme, AppTheme.TAKO to TakoColorScheme, AppTheme.TEALTURQUOISE to TealTurqoiseColorScheme, AppTheme.TIDAL_WAVE to TidalWaveColorScheme, AppTheme.YINYANG to YinYangColorScheme, AppTheme.YOTSUBA to YotsubaColorScheme, ) ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/BaseColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.ColorScheme import androidx.compose.ui.graphics.Color internal abstract class BaseColorScheme { abstract val darkScheme: ColorScheme abstract val lightScheme: ColorScheme // Cannot be pure black as there's content scrolling behind it // https://m3.material.io/components/navigation-bar/guidelines#90615a71-607e-485e-9e09-778bfc080563 private val surfaceContainer = Color(0xFF0C0C0C) private val surfaceContainerHigh = Color(0xFF131313) private val surfaceContainerHighest = Color(0xFF1B1B1B) fun getColorScheme( isDark: Boolean, isAmoled: Boolean, overrideDarkSurfaceContainers: Boolean, ): ColorScheme { if (!isDark) return lightScheme if (!isAmoled) return darkScheme val amoledScheme = darkScheme.copy( background = Color.Black, onBackground = Color.White, surface = Color.Black, onSurface = Color.White, ) if (!overrideDarkSurfaceContainers) return amoledScheme return amoledScheme.copy( surfaceVariant = surfaceContainer, // Navigation bar background (ThemePrefWidget) surfaceContainerLowest = surfaceContainer, surfaceContainerLow = surfaceContainer, surfaceContainer = surfaceContainer, // Navigation bar background surfaceContainerHigh = surfaceContainerHigh, surfaceContainerHighest = surfaceContainerHighest, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/CatppuccinColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Catppuccin theme * MIT License * Copyright (c) 2021 Catppuccin * https://catppuccin.com * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors (dark): * Primary #CBA6F4 * Secondary #CBA6F4 * Tertiary #CBA6F4 * Neutral #181825 * Key colors (light): * Primary #8839EF * Secondary #8839EF * Tertiary #8839EF * Neutral #E6E9EF */ internal object CatppuccinColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFCBA6F7), onPrimary = Color(0xFF11111B), primaryContainer = Color(0xFFCBA6F7), onPrimaryContainer = Color(0xFF11111B), secondary = Color(0xFFCBA6F7), // Unread badge onSecondary = Color(0xFF11111B), // Unread badge text secondaryContainer = Color(0xFF313244), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFCBA6F7), // Navigation bar selector icon tertiary = Color(0xFFCBA6F7), // Volume and brightness bars, Downloaded badge onTertiary = Color(0xFF11111B), // Downloaded badge text tertiaryContainer = Color(0xFF1E1E2E), onTertiaryContainer = Color(0xFFCDD6F4), error = Color(0xFFF38BA8), onError = Color(0xFF11111B), errorContainer = Color(0xFFFF0558), onErrorContainer = Color(0xFFEF9FB4), background = Color(0xFF181825), onBackground = Color(0xFFCDD6F4), surface = Color(0xFF181825), onSurface = Color(0xFFCDD6F4), surfaceVariant = Color(0xFF1E1E2E), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFCDD6F4), // Button (unselected) outline = Color(0xFFCBA6F7), outlineVariant = Color(0xFF585B70), // Outlines for buttons scrim = Color(0xFF11111B), inverseSurface = Color(0xFFEFF1F5), // Snackbar or whatever they called inverseOnSurface = Color(0xFF4C4F69), // Snackbar text inversePrimary = Color(0xFF8839EF), // Snackbar accent surfaceDim = Color(0xFF181825), surfaceBright = Color(0xFF313244), surfaceContainerLowest = Color(0xFF181825), surfaceContainerLow = Color(0xFF1E1E2E), // Repo cards surfaceContainer = Color(0xFF1E1E2E), surfaceContainerHigh = Color(0xFF1E1E2E), // Filter menu surfaceContainerHighest = Color(0xFF313244), // Untoggleg button bg ) override val lightScheme = lightColorScheme( primary = Color(0xFF8839EF), onPrimary = Color(0xFFDCE0E8), primaryContainer = Color(0xFF8839EF), onPrimaryContainer = Color(0xFFDCE0E8), secondary = Color(0xFF8839EF), // Unread badge onSecondary = Color(0xFFDCE0E8), // Unread badge text secondaryContainer = Color(0xFFCDD0DA), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF8839EF), // Navigation bar selector icon tertiary = Color(0xFF8839EF), // Volume and brightness bars, Downloaded badge onTertiary = Color(0xFFDCE0E8), // Downloaded badge text tertiaryContainer = Color(0xFFEFF1F5), onTertiaryContainer = Color(0xFF4C4F69), error = Color(0xFFD20F39), onError = Color(0xFFDCE0E8), errorContainer = Color(0xFF68001C), onErrorContainer = Color(0xFFD61C41), background = Color(0xFFE6E9EF), onBackground = Color(0xFF4C4F69), surface = Color(0xFFE6E9EF), onSurface = Color(0xFF4C4F69), surfaceVariant = Color(0xFFEFF1F5), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF4C4F69), // Button (unselected) outline = Color(0xFF8839EF), outlineVariant = Color(0xFFACB0BE), // Outlines for buttons scrim = Color(0xFFDCE0E8), inverseSurface = Color(0xFF1E1E2E), // Snackbar inverseOnSurface = Color(0xFFCDD6F4), // Snackbar text inversePrimary = Color(0xFFCBA6F7), // Snackbar accent surfaceDim = Color(0xFFE6E9EF), surfaceBright = Color(0xFFCDD0DA), surfaceContainerLowest = Color(0xFFE6E9EF), surfaceContainerLow = Color(0xFFEFF1F5), // Repo cards surfaceContainer = Color(0xFFEFF1F5), // Navigation bar background surfaceContainerHigh = Color(0xFFEFF1F5), // Filter menu surfaceContainerHighest = Color(0xFFCDD0DA), // Untoggleg bg ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/GreenAppleColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Green Apple theme * Original color scheme by CarlosEsco, Jays2Kings and CrepeTF * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors: * Primary #188140 * Secondary #188140 * Tertiary #D33131 * Neutral #5D5F5B */ internal object GreenAppleColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFF7ADB8F), onPrimary = Color(0xFF003917), primaryContainer = Color(0xFF017737), onPrimaryContainer = Color(0xFFFFFFFF), secondary = Color(0xFF7ADB8F), // Unread badge onSecondary = Color(0xFF003917), // Unread badge text secondaryContainer = Color(0xFF017737), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFFFFFFF), // Navigation bar selected icon tertiary = Color(0xFFFFB3AC), // Downloaded badge onTertiary = Color(0xFF680008), // Downloaded badge text tertiaryContainer = Color(0xFFC7282A), onTertiaryContainer = Color(0xFFFFFFFF), error = Color(0xFFFFB4AB), onError = Color(0xFF690005), errorContainer = Color(0xFF93000A), onErrorContainer = Color(0xFFFFDAD6), background = Color(0xFF0F1510), onBackground = Color(0xFFDFE4DB), surface = Color(0xFF0F1510), onSurface = Color(0xFFDFE4DB), surfaceVariant = Color(0xFF3F493F), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFBECABC), outline = Color(0xFF889487), outlineVariant = Color(0xFF3F493F), scrim = Color(0xFF000000), inverseSurface = Color(0xFFDFE4DB), inverseOnSurface = Color(0xFF2C322C), inversePrimary = Color(0xFF006D32), surfaceDim = Color(0xFF0F1510), surfaceBright = Color(0xFF353B35), surfaceContainerLowest = Color(0xFF0A0F0B), surfaceContainerLow = Color(0xFF181D18), surfaceContainer = Color(0xFF1C211C), // Navigation bar background surfaceContainerHigh = Color(0xFF262B26), surfaceContainerHighest = Color(0xFF313630), ) override val lightScheme = lightColorScheme( primary = Color(0xFF005927), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFF188140), onPrimaryContainer = Color(0xFFFFFFFF), secondary = Color(0xFF005927), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFF97f7a9), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF000000), // Navigation bar selected icon tertiary = Color(0xFF9D0012), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFFD33131), onTertiaryContainer = Color(0xFFFFFFFF), error = Color(0xFFBA1A1A), onError = Color(0xFFFFFFFF), errorContainer = Color(0xFFFFDAD6), onErrorContainer = Color(0xFF410002), background = Color(0xFFF6FBF2), onBackground = Color(0xFF181D18), surface = Color(0xFFF6FBF2), onSurface = Color(0xFF181D18), surfaceVariant = Color(0xFFDAE6D7), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF3F493F), outline = Color(0xFF6F7A6E), outlineVariant = Color(0xFFBECABC), scrim = Color(0xFF000000), inverseSurface = Color(0xFF2C322C), inverseOnSurface = Color(0xFFEDF2E9), inversePrimary = Color(0xFF7ADB8F), surfaceDim = Color(0xFFD6DCD3), surfaceBright = Color(0xFFF6FBF2), surfaceContainerLowest = Color(0xFFFFFFFF), surfaceContainerLow = Color(0xFFF0F5EC), surfaceContainer = Color(0xFFEAEFE6), // Navigation bar background surfaceContainerHigh = Color(0xFFE4EAE1), surfaceContainerHighest = Color(0xFFDFE4DB), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/LavenderColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Lavender theme * Color scheme by Osyx * * Key colors: * Primary #A177FF * Secondary #A177FF * Tertiary #5E25E1 * Neutral #111129 */ internal object LavenderColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFA177FF), onPrimary = Color(0xFF3D0090), primaryContainer = Color(0xFFA177FF), onPrimaryContainer = Color(0xFFFFFFFF), secondary = Color(0xFFA177FF), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFF423271), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFA177FF), // Navigation bar selected icon tertiary = Color(0xFFCDBDFF), // Downloaded badge onTertiary = Color(0xFF360096), // Downloaded badge text tertiaryContainer = Color(0xFF5512D8), onTertiaryContainer = Color(0xFFEFE6FF), error = Color(0xFFFFB4AB), onError = Color(0xFF690005), errorContainer = Color(0xFF93000A), onErrorContainer = Color(0xFFFFDAD6), background = Color(0xFF111129), onBackground = Color(0xFFE7E0EC), surface = Color(0xFF111129), onSurface = Color(0xFFE7E0EC), surfaceVariant = Color(0xFF3D2F6B), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFCBC3D6), outline = Color(0xFF958E9F), outlineVariant = Color(0xFF4A4453), scrim = Color(0xFF000000), inverseSurface = Color(0xFFE7E0EC), inverseOnSurface = Color(0xFF322F38), inversePrimary = Color(0xFF6D41C8), surfaceDim = Color(0xFF111129), surfaceBright = Color(0xFF3B3841), surfaceContainerLowest = Color(0xFF15132d), surfaceContainerLow = Color(0xFF171531), surfaceContainer = Color(0xFF1D193B), // Navigation bar background surfaceContainerHigh = Color(0xFF241f41), surfaceContainerHighest = Color(0xFF282446), ) override val lightScheme = lightColorScheme( primary = Color(0xFF6D41C8), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFF7B46AF), onPrimaryContainer = Color(0xFF130038), secondary = Color(0xFF7B46AF), // Unread badge onSecondary = Color(0xFFEDE2FF), // Unread badge text secondaryContainer = Color(0xFFC9B0E6), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF7B46AF), // Navigation bar selector icon tertiary = Color(0xFFEDE2FF), // Downloaded badge onTertiary = Color(0xFF7B46AF), // Downloaded badge text tertiaryContainer = Color(0xFF6D3BF0), onTertiaryContainer = Color(0xFFFFFFFF), error = Color(0xFFBA1A1A), onError = Color(0xFFFFFFFF), errorContainer = Color(0xFFFFDAD6), onErrorContainer = Color(0xFF410002), background = Color(0xFFEDE2FF), onBackground = Color(0xFF1D1A22), surface = Color(0xFFEDE2FF), onSurface = Color(0xFF1D1A22), surfaceVariant = Color(0xFFE4D5F8), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF4A4453), outline = Color(0xFF7B7485), outlineVariant = Color(0xFFCBC3D6), scrim = Color(0xFF000000), inverseSurface = Color(0xFF322F38), inverseOnSurface = Color(0xFFF5EEFA), inversePrimary = Color(0xFFA177FF), surfaceDim = Color(0xFFDED7E3), surfaceBright = Color(0xFFEDE2FF), surfaceContainerLowest = Color(0xFFDACCEC), surfaceContainerLow = Color(0xFFDED0F1), surfaceContainer = Color(0xFFE4D5F8), // Navigation bar background surfaceContainerHigh = Color(0xFFEADCFD), surfaceContainerHighest = Color(0xFFEEE2FF), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/MidnightDuskColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Midnight Dusk theme * Original color scheme by CrepeTF * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors: * Primary #F02475 * Secondary #F02475 * Tertiary #7A5733 * Neutral #16151D */ internal object MidnightDuskColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFF02475), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFBD1C5C), onPrimaryContainer = Color(0xFFFFFFFF), inversePrimary = Color(0xFFF02475), secondary = Color(0xFFF02475), // Unread badge onSecondary = Color(0xFF16151D), // Unread badge text secondaryContainer = Color(0xFF66183C), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFF02475), // Navigation bar selector icon tertiary = Color(0xFF55971C), // Downloaded badge onTertiary = Color(0xFF16151D), // Downloaded badge text tertiaryContainer = Color(0xFF386412), onTertiaryContainer = Color(0xFFE5E1E5), background = Color(0xFF16151D), onBackground = Color(0xFFE5E1E5), surface = Color(0xFF16151D), onSurface = Color(0xFFE5E1E5), surfaceVariant = Color(0xFF281624), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFD6C1C4), surfaceTint = Color(0xFFF02475), inverseSurface = Color(0xFF333043), inverseOnSurface = Color(0xFFFFFFFF), outline = Color(0xFF9F8C8F), surfaceContainerLowest = Color(0xFF221320), surfaceContainerLow = Color(0xFF251522), surfaceContainer = Color(0xFF281624), // Navigation bar background surfaceContainerHigh = Color(0xFF2D1C2A), surfaceContainerHighest = Color(0xFF2F1F2C), ) override val lightScheme = lightColorScheme( primary = Color(0xFFBB0054), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFFFD9E1), onPrimaryContainer = Color(0xFF3F0017), inversePrimary = Color(0xFFFFB1C4), secondary = Color(0xFFBB0054), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFFEFBAD4), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFD1377C), // Navigation bar selector icon tertiary = Color(0xFF006638), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFF00894b), onTertiaryContainer = Color(0xFF2D1600), background = Color(0xFFFFFBFF), onBackground = Color(0xFF1C1B1F), surface = Color(0xFFFFFBFF), onSurface = Color(0xFF1C1B1F), surfaceVariant = Color(0xFFF9E6F1), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF524346), surfaceTint = Color(0xFFBB0054), inverseSurface = Color(0xFF313033), inverseOnSurface = Color(0xFFF4F0F4), outline = Color(0xFF847376), surfaceContainerLowest = Color(0xFFDAC0CD), surfaceContainerLow = Color(0xFFE8D1DD), surfaceContainer = Color(0xFFF9E6F1), // Navigation bar background surfaceContainerHigh = Color(0xFFFCF3F8), surfaceContainerHighest = Color(0xFFFEF9FC), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonetColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import android.app.WallpaperManager import android.content.Context import android.os.Build import androidx.annotation.RequiresApi import androidx.compose.material3.ColorScheme import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.ui.graphics.Color import com.materialkolor.PaletteStyle import com.materialkolor.dynamiccolor.ColorSpec import com.materialkolor.ktx.DynamicScheme import com.materialkolor.toColorScheme internal class MonetColorScheme(context: Context) : BaseColorScheme() { private val monet = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { MonetSystemColorScheme(context) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { val seed = WallpaperManager.getInstance(context) .getWallpaperColors(WallpaperManager.FLAG_SYSTEM) ?.primaryColor ?.toArgb() if (seed != null) { MonetCompatColorScheme(Color(seed)) } else { TachiyomiColorScheme } } else { TachiyomiColorScheme } override val darkScheme get() = monet.darkScheme override val lightScheme get() = monet.lightScheme } @RequiresApi(Build.VERSION_CODES.S) private class MonetSystemColorScheme(context: Context) : BaseColorScheme() { override val lightScheme = dynamicLightColorScheme(context) override val darkScheme = dynamicDarkColorScheme(context) } internal class MonetCompatColorScheme(seed: Color) : BaseColorScheme() { override val lightScheme = generateColorSchemeFromSeed(seed = seed, dark = false) override val darkScheme = generateColorSchemeFromSeed(seed = seed, dark = true) companion object { fun generateColorSchemeFromSeed(seed: Color, dark: Boolean): ColorScheme { return DynamicScheme( seedColor = seed, isDark = dark, specVersion = ColorSpec.SpecVersion.SPEC_2025, style = PaletteStyle.Expressive, ) .toColorScheme(isAmoled = false) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonochromeColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color internal object MonochromeColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFFFFFFF), onPrimary = Color(0xFF000000), primaryContainer = Color(0xFFFFFFFF), onPrimaryContainer = Color(0xFF000000), secondary = Color(0xFFFFFFFF), onSecondary = Color(0xFF000000), secondaryContainer = Color(0xFF777777), onSecondaryContainer = Color(0xFF000000), tertiary = Color(0xFF777777), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFFFFFFFF), onTertiaryContainer = Color(0xFF000000), error = Color(0xFFFFFFFF), onError = Color(0xFF000000), errorContainer = Color(0xFFFFFFFF), onErrorContainer = Color(0xFF000000), background = Color(0xFF000000), onBackground = Color(0xFFFFFFFF), surface = Color(0xFF000000), onSurface = Color(0xFFFFFFFF), surfaceVariant = Color(0xFF000000), onSurfaceVariant = Color(0xFFFFFFFF), outline = Color(0xFFFFFFFF), outlineVariant = Color(0xFFFFFFFF), scrim = Color(0xFF000000), inverseSurface = Color(0xFFFFFFFF), inverseOnSurface = Color(0xFF000000), inversePrimary = Color(0xFF000000), surfaceDim = Color(0xFF000000), surfaceBright = Color(0xFFFFFFFF), surfaceContainerLowest = Color(0xFF000000), surfaceContainerLow = Color(0xFF000000), surfaceContainer = Color(0xFF000000), surfaceContainerHigh = Color(0xFF000000), surfaceContainerHighest = Color(0xFF000000), ) override val lightScheme = lightColorScheme( primary = Color(0xFF000000), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFF000000), onPrimaryContainer = Color(0xFFFFFFFF), secondary = Color(0xFF000000), onSecondary = Color(0xFFFFFFFF), secondaryContainer = Color(0xFF888888), onSecondaryContainer = Color(0xFFFFFFFF), tertiary = Color(0xFF888888), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFF000000), onTertiaryContainer = Color(0xFFFFFFFF), error = Color(0xFF000000), onError = Color(0xFFFFFFFF), errorContainer = Color(0xFF000000), onErrorContainer = Color(0xFFFFFFFF), background = Color(0xFFFFFFFF), onBackground = Color(0xFF000000), surface = Color(0xFFFFFFFF), onSurface = Color(0xFF000000), surfaceVariant = Color(0xFFFFFFFF), onSurfaceVariant = Color(0xFF000000), outline = Color(0xFF000000), outlineVariant = Color(0xFF000000), scrim = Color(0xFF000000), inverseSurface = Color(0xFF000000), inverseOnSurface = Color(0xFFFFFFFF), inversePrimary = Color(0xFFFFFFFF), surfaceDim = Color(0xFFFFFFFF), surfaceBright = Color(0xFFFFFFFF), surfaceContainerLowest = Color(0xFFFFFFFF), surfaceContainerLow = Color(0xFFFFFFFF), surfaceContainer = Color(0xFFFFFFFF), surfaceContainerHigh = Color(0xFFFFFFFF), surfaceContainerHighest = Color(0xFFFFFFFF), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/NordColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Nord theme * https://www.nordtheme.com/docs/colors-and-palettes * for the light theme, the primary color is switched with the tertiary for better contrast in some case */ internal object NordColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFF88C0D0), onPrimary = Color(0xFF2E3440), primaryContainer = Color(0xFF88C0D0), onPrimaryContainer = Color(0xFF2E3440), inversePrimary = Color(0xFF397E91), secondary = Color(0xFF81A1C1), // Unread badge onSecondary = Color(0xFF2E3440), // Unread badge text secondaryContainer = Color(0xFF506275), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF88C0D0), // Navigation bar selector icon tertiary = Color(0xFF5E81AC), // Downloaded badge onTertiary = Color(0xFF000000), // Downloaded badge text tertiaryContainer = Color(0xFF5E81AC), onTertiaryContainer = Color(0xFF000000), background = Color(0xFF2E3440), onBackground = Color(0xFFECEFF4), surface = Color(0xFF2E3440), onSurface = Color(0xFFECEFF4), surfaceVariant = Color(0xFF414C5C), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFECEFF4), surfaceTint = Color(0xFF88C0D0), inverseSurface = Color(0xFFD8DEE9), inverseOnSurface = Color(0xFF2E3440), outline = Color(0xFF6d717b), outlineVariant = Color(0xFF90939a), onError = Color(0xFF2E3440), errorContainer = Color(0xFFBF616A), onErrorContainer = Color(0xFF000000), surfaceContainerLowest = Color(0xFF373F4D), surfaceContainerLow = Color(0xFF3E4756), surfaceContainer = Color(0xFF414C5C), surfaceContainerHigh = Color(0xFF4E5766), surfaceContainerHighest = Color(0xFF505968), // Navigation bar background ) override val lightScheme = lightColorScheme( primary = Color(0xFF5E81AC), onPrimary = Color(0xFF000000), primaryContainer = Color(0xFF5E81AC), onPrimaryContainer = Color(0xFF000000), inversePrimary = Color(0xFF8CA8CD), secondary = Color(0xFF81A1C1), // Unread badge onSecondary = Color(0xFF2E3440), // Unread badge text secondaryContainer = Color(0xFF91B4D7), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF2E3440), // Navigation bar selector icon tertiary = Color(0xFF88C0D0), // Downloaded badge onTertiary = Color(0xFF2E3440), // Downloaded badge text tertiaryContainer = Color(0xFF88C0D0), onTertiaryContainer = Color(0xFF2E3440), background = Color(0xFFECEFF4), onBackground = Color(0xFF2E3440), surface = Color(0xFFE5E9F0), onSurface = Color(0xFF2E3440), surfaceVariant = Color(0xFFDAE0EA), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF2E3440), surfaceTint = Color(0xFF5E81AC), inverseSurface = Color(0xFF3B4252), inverseOnSurface = Color(0xFFECEFF4), outline = Color(0xFF2E3440), onError = Color(0xFFECEFF4), errorContainer = Color(0xFFBF616A), onErrorContainer = Color(0xFF000000), surfaceContainerLowest = Color(0xFFD1D7E0), surfaceContainerLow = Color(0xFFD6DCE6), surfaceContainer = Color(0xFFDAE0EA), // Navigation bar background surfaceContainerHigh = Color(0xFFE9EDF3), surfaceContainerHighest = Color(0xFFF2F4F8), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/StrawberryColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Strawberry Daiquiri theme * Original color scheme by Soitora * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors: * Primary #ED4A65 * Secondary #ED4A65 * Tertiary #775930 * Neutral #655C5C */ internal object StrawberryColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFFFB2B8), onPrimary = Color(0xFF67001D), primaryContainer = Color(0xFFD53855), onPrimaryContainer = Color(0xFFFFFFFF), secondary = Color(0xFFED4A65), // Unread badge onSecondary = Color(0xFF201A1A), // Unread badge text secondaryContainer = Color(0xFF91002A), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFFFFFFF), // Navigation bar selector icon tertiary = Color(0xFFE8C08E), // Downloaded badge onTertiary = Color(0xFF201A1A), // Downloaded badge text tertiaryContainer = Color(0xFF775930), onTertiaryContainer = Color(0xFFFFF7F1), error = Color(0xFFFFB4AB), onError = Color(0xFF690005), errorContainer = Color(0xFF93000A), onErrorContainer = Color(0xFFFFDAD6), background = Color(0xFF201A1A), onBackground = Color(0xFFF7DCDD), surface = Color(0xFF201A1A), onSurface = Color(0xFFF7DCDD), surfaceVariant = Color(0xFF322727), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFE1BEC0), outline = Color(0xFFA9898B), outlineVariant = Color(0xFF594042), scrim = Color(0xFF000000), inverseSurface = Color(0xFFF7DCDD), inverseOnSurface = Color(0xFF3D2C2D), inversePrimary = Color(0xFFB61F40), surfaceDim = Color(0xFF1D1011), surfaceBright = Color(0xFF463536), surfaceContainerLowest = Color(0xFF2C2222), surfaceContainerLow = Color(0xFF302525), surfaceContainer = Color(0xFF322727), // Navigation bar background surfaceContainerHigh = Color(0xFF3C2F2F), surfaceContainerHighest = Color(0xFF463737), ) override val lightScheme = lightColorScheme( primary = Color(0xFFA10833), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFD53855), onPrimaryContainer = Color(0xFFFFFFFF), secondary = Color(0xFFA10833), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFFD53855), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFF6EAED), // Navigation bar selector icon tertiary = Color(0xFF5F441D), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFF87683D), onTertiaryContainer = Color(0xFFFFFFFF), error = Color(0xFFBA1A1A), onError = Color(0xFFFFFFFF), errorContainer = Color(0xFFFFDAD6), onErrorContainer = Color(0xFF410002), background = Color(0xFFFAFAFA), onBackground = Color(0xFF261819), surface = Color(0xFFFAFAFA), onSurface = Color(0xFF261819), surfaceVariant = Color(0xFFF6EAED), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF594042), outline = Color(0xFF8D7071), outlineVariant = Color(0xFFE1BEC0), scrim = Color(0xFF000000), inverseSurface = Color(0xFF3D2C2D), inverseOnSurface = Color(0xFFFFECED), inversePrimary = Color(0xFFFFB2B8), surfaceDim = Color(0xFFEED4D5), surfaceBright = Color(0xFFFFF8F7), surfaceContainerLowest = Color(0xFFF7DCDD), surfaceContainerLow = Color(0xFFFDE2E3), surfaceContainer = Color(0xFFF6EAED), // Navigation bar background surfaceContainerHigh = Color(0xFFFFF0F0), surfaceContainerHighest = Color(0xFFFFFFFF), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/TachiyomiColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Default theme * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors: * Primary #2979FF * Secondary #2979FF * Tertiary #47A84A * Neutral #919094 */ internal object TachiyomiColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFB0C6FF), onPrimary = Color(0xFF002D6E), primaryContainer = Color(0xFF00429B), onPrimaryContainer = Color(0xFFD9E2FF), inversePrimary = Color(0xFF0058CA), secondary = Color(0xFFB0C6FF), // Unread badge onSecondary = Color(0xFF002D6E), // Unread badge text secondaryContainer = Color(0xFF00429B), // Navigation bar selector pill & pro onSecondaryContainer = Color(0xFFD9E2FF), // Navigation bar selector icon tertiary = Color(0xFF7ADC77), // Downloaded badge onTertiary = Color(0xFF003909), // Downloaded badge text tertiaryContainer = Color(0xFF005312), onTertiaryContainer = Color(0xFF95F990), background = Color(0xFF1B1B1F), onBackground = Color(0xFFE3E2E6), surface = Color(0xFF1B1B1F), onSurface = Color(0xFFE3E2E6), surfaceVariant = Color(0xFF211F26), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFC5C6D0), surfaceTint = Color(0xFFB0C6FF), inverseSurface = Color(0xFFE3E2E6), inverseOnSurface = Color(0xFF1B1B1F), error = Color(0xFFFFB4AB), onError = Color(0xFF690005), errorContainer = Color(0xFF93000A), onErrorContainer = Color(0xFFFFDAD6), outline = Color(0xFF8F9099), outlineVariant = Color(0xFF44464F), surfaceContainerLowest = Color(0xFF1A181D), surfaceContainerLow = Color(0xFF1E1C22), surfaceContainer = Color(0xFF211F26), // Navigation bar background surfaceContainerHigh = Color(0xFF292730), surfaceContainerHighest = Color(0xFF302E38), ) override val lightScheme = lightColorScheme( primary = Color(0xFF0058CA), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFD9E2FF), onPrimaryContainer = Color(0xFF001945), inversePrimary = Color(0xFFB0C6FF), secondary = Color(0xFF0058CA), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFFD9E2FF), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF001945), // Navigation bar selector icon tertiary = Color(0xFF006E1B), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFF95F990), onTertiaryContainer = Color(0xFF002203), background = Color(0xFFFEFBFF), onBackground = Color(0xFF1B1B1F), surface = Color(0xFFFEFBFF), onSurface = Color(0xFF1B1B1F), surfaceVariant = Color(0xFFF3EDF7), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF44464F), surfaceTint = Color(0xFF0058CA), inverseSurface = Color(0xFF303034), inverseOnSurface = Color(0xFFF2F0F4), error = Color(0xFFBA1A1A), onError = Color(0xFFFFFFFF), errorContainer = Color(0xFFFFDAD6), onErrorContainer = Color(0xFF410002), outline = Color(0xFF757780), outlineVariant = Color(0xFFC5C6D0), surfaceContainerLowest = Color(0xFFF5F1F8), surfaceContainerLow = Color(0xFFF7F2FA), surfaceContainer = Color(0xFFF3EDF7), // Navigation bar background surfaceContainerHigh = Color(0xFFFCF7FF), surfaceContainerHighest = Color(0xFFFCF7FF), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/TakoColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Tako theme * Original color scheme by ghostbear * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors: * Primary #F3B375 * Secondary #F3B375 * Tertiary #66577E * Neutral #21212E */ internal object TakoColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFF3B375), onPrimary = Color(0xFF38294E), primaryContainer = Color(0xFFF3B375), onPrimaryContainer = Color(0xFF38294E), inversePrimary = Color(0xFF84531E), secondary = Color(0xFFF3B375), // Unread badge onSecondary = Color(0xFF38294E), // Unread badge text secondaryContainer = Color(0xFF5C4D4B), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFF3B375), // Navigation bar selector icon tertiary = Color(0xFF66577E), // Downloaded badge onTertiary = Color(0xFFF3B375), // Downloaded badge text tertiaryContainer = Color(0xFF4E4065), onTertiaryContainer = Color(0xFFEDDCFF), background = Color(0xFF21212E), onBackground = Color(0xFFE3E0F2), surface = Color(0xFF21212E), onSurface = Color(0xFFE3E0F2), surfaceVariant = Color(0xFF2A2A3C), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFCBC4CE), surfaceTint = Color(0xFF66577E), inverseSurface = Color(0xFFE5E1E6), inverseOnSurface = Color(0xFF1B1B1E), outline = Color(0xFF958F99), surfaceContainerLowest = Color(0xFF20202E), surfaceContainerLow = Color(0xFF262636), surfaceContainer = Color(0xFF2A2A3C), // Navigation bar background surfaceContainerHigh = Color(0xFF303044), surfaceContainerHighest = Color(0xFF36364D), ) override val lightScheme = lightColorScheme( primary = Color(0xFF66577E), onPrimary = Color(0xFFF3B375), primaryContainer = Color(0xFF66577E), onPrimaryContainer = Color(0xFFF3B375), inversePrimary = Color(0xFFD6BAFF), secondary = Color(0xFF66577E), // Unread badge onSecondary = Color(0xFFF3B375), // Unread badge text secondaryContainer = Color(0xFFC8BED0), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF66577E), // Navigation bar selector icon tertiary = Color(0xFFF3B375), // Downloaded badge onTertiary = Color(0xFF574360), // Downloaded badge text tertiaryContainer = Color(0xFFFDD6B0), onTertiaryContainer = Color(0xFF221437), background = Color(0xFFF7F5FF), onBackground = Color(0xFF1B1B22), surface = Color(0xFFF7F5FF), onSurface = Color(0xFF1B1B22), surfaceVariant = Color(0xFFE8E0EB), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF49454E), surfaceTint = Color(0xFF66577E), inverseSurface = Color(0xFF313033), inverseOnSurface = Color(0xFFF3EFF4), outline = Color(0xFF7A757E), surfaceContainerLowest = Color(0xFFD7D0DA), surfaceContainerLow = Color(0xFFDFD8E2), surfaceContainer = Color(0xFFE8E0EB), // Navigation bar background surfaceContainerHigh = Color(0xFFEEE6F1), surfaceContainerHighest = Color(0xFFF7EEFA), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/TealTurqoiseColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Teal Turqoise theme */ internal object TealTurqoiseColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFF40E0D0), onPrimary = Color(0xFF000000), primaryContainer = Color(0xFF40E0D0), onPrimaryContainer = Color(0xFF000000), inversePrimary = Color(0xFF008080), secondary = Color(0xFF40E0D0), // Unread badge onSecondary = Color(0xFF000000), // Unread badge text secondaryContainer = Color(0xFF18544E), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF40E0D0), // Navigation bar selector icon tertiary = Color(0xFFBF1F2F), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFF200508), onTertiaryContainer = Color(0xFFBF1F2F), background = Color(0xFF202125), onBackground = Color(0xFFDFDEDA), surface = Color(0xFF202125), onSurface = Color(0xFFDFDEDA), surfaceVariant = Color(0xFF233133), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFDFDEDA), surfaceTint = Color(0xFF40E0D0), inverseSurface = Color(0xFFDFDEDA), inverseOnSurface = Color(0xFF202125), outline = Color(0xFF899391), surfaceContainerLowest = Color(0xFF202C2E), surfaceContainerLow = Color(0xFF222F31), surfaceContainer = Color(0xFF233133), // Navigation bar background surfaceContainerHigh = Color(0xFF28383A), surfaceContainerHighest = Color(0xFF2F4244), ) override val lightScheme = lightColorScheme( primary = Color(0xFF008080), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFF008080), onPrimaryContainer = Color(0xFFFFFFFF), inversePrimary = Color(0xFF40E0D0), secondary = Color(0xFF008080), // Unread badge text onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFFCFE5E4), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF008080), // Navigation bar selector icon tertiary = Color(0xFFFF7F7F), // Downloaded badge onTertiary = Color(0xFF000000), // Downloaded badge text tertiaryContainer = Color(0xFF2A1616), onTertiaryContainer = Color(0xFFFF7F7F), background = Color(0xFFFAFAFA), onBackground = Color(0xFF050505), surface = Color(0xFFFAFAFA), onSurface = Color(0xFF050505), surfaceVariant = Color(0xFFEBF3F1), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF050505), surfaceTint = Color(0xFFBFDFDF), inverseSurface = Color(0xFF050505), inverseOnSurface = Color(0xFFFAFAFA), outline = Color(0xFF6F7977), surfaceContainerLowest = Color(0xFFE1E9E7), surfaceContainerLow = Color(0xFFE6EEEC), surfaceContainer = Color(0xFFEBF3F1), // Navigation bar background surfaceContainerHigh = Color(0xFFF0F8F6), surfaceContainerHighest = Color(0xFFF7FFFD), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/TidalWaveColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Tidal Wave theme * Original color scheme by NahutabDevelop * * Key colors: * Primary #004152 * Secondary #5ed4fc * Tertiary #92f7bc * Neutral #16151D */ internal object TidalWaveColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFF5ed4fc), onPrimary = Color(0xFF003544), primaryContainer = Color(0xFF004d61), onPrimaryContainer = Color(0xFFb8eaff), inversePrimary = Color(0xFFa12b03), secondary = Color(0xFF5ed4fc), // Unread badge onSecondary = Color(0xFF003544), // Unread badge text secondaryContainer = Color(0xFF004d61), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFb8eaff), // Navigation bar selector icon tertiary = Color(0xFF92f7bc), // Downloaded badge onTertiary = Color(0xFF001c3b), // Downloaded badge text tertiaryContainer = Color(0xFFc3fada), onTertiaryContainer = Color(0xFF78ffd6), background = Color(0xFF001c3b), onBackground = Color(0xFFd5e3ff), surface = Color(0xFF001c3b), onSurface = Color(0xFFd5e3ff), surfaceVariant = Color(0xFF082b4b), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFbfc8cc), surfaceTint = Color(0xFF5ed4fc), inverseSurface = Color(0xFFffe3c4), inverseOnSurface = Color(0xFF001c3b), outline = Color(0xFF8a9296), surfaceContainerLowest = Color(0xFF072642), surfaceContainerLow = Color(0xFF072947), surfaceContainer = Color(0xFF082b4b), // Navigation bar background surfaceContainerHigh = Color(0xFF093257), surfaceContainerHighest = Color(0xFF0A3861), ) override val lightScheme = lightColorScheme( primary = Color(0xFF006780), onPrimary = Color(0xFFffffff), primaryContainer = Color(0xFFB4D4DF), onPrimaryContainer = Color(0xFF001f28), inversePrimary = Color(0xFFff987f), secondary = Color(0xFF006780), // Unread badge onSecondary = Color(0xFFffffff), // Unread badge text secondaryContainer = Color(0xFF9AE1FF), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF001f28), // Navigation bar selector icon tertiary = Color(0xFF92f7bc), // Downloaded badge onTertiary = Color(0xFF001c3b), // Downloaded badge text tertiaryContainer = Color(0xFFc3fada), onTertiaryContainer = Color(0xFF78ffd6), background = Color(0xFFfdfbff), onBackground = Color(0xFF001c3b), surface = Color(0xFFfdfbff), onSurface = Color(0xFF001c3b), surfaceVariant = Color(0xFFe8eff5), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF40484c), surfaceTint = Color(0xFF006780), inverseSurface = Color(0xFF020400), inverseOnSurface = Color(0xFFffe3c4), outline = Color(0xFF70787c), surfaceContainerLowest = Color(0xFFe2e8ec), surfaceContainerLow = Color(0xFFe5ecf1), surfaceContainer = Color(0xFFe8eff5), // Navigation bar background surfaceContainerHigh = Color(0xFFedf4fA), surfaceContainerHighest = Color(0xFFf5faff), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/YinYangColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Yin & Yang theme * Original color scheme by Riztard * M3 colors generated by yours truly + tweaked manually */ internal object YinYangColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFFFFFFF), onPrimary = Color(0xFF5A5A5A), primaryContainer = Color(0xFFFFFFFF), onPrimaryContainer = Color(0xFF000000), inversePrimary = Color(0xFFCECECE), secondary = Color(0xFFFFFFFF), // Unread badge onSecondary = Color(0xFF5A5A5A), // Unread badge text secondaryContainer = Color(0xFF717171), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFE4E4E4), // Navigation bar selector icon tertiary = Color(0xFF000000), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFF00419E), onTertiaryContainer = Color(0xFFD8E2FF), background = Color(0xFF1E1E1E), onBackground = Color(0xFFE6E6E6), surface = Color(0xFF1E1E1E), onSurface = Color(0xFFE6E6E6), surfaceVariant = Color(0xFF313131), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFD1D1D1), surfaceTint = Color(0xFFFFFFFF), inverseSurface = Color(0xFFE6E6E6), inverseOnSurface = Color(0xFF1E1E1E), outline = Color(0xFF999999), surfaceContainerLowest = Color(0xFF2A2A2A), surfaceContainerLow = Color(0xFF2D2D2D), surfaceContainer = Color(0xFF313131), // Navigation bar background surfaceContainerHigh = Color(0xFF383838), surfaceContainerHighest = Color(0xFF3F3F3F), ) override val lightScheme = lightColorScheme( primary = Color(0xFF000000), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFF000000), onPrimaryContainer = Color(0xFFFFFFFF), inversePrimary = Color(0xFFA6A6A6), secondary = Color(0xFF000000), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFFDDDDDD), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF0C0C0C), // Navigation bar selector icon tertiary = Color(0xFFFFFFFF), // Downloaded badge onTertiary = Color(0xFF000000), // Downloaded badge text tertiaryContainer = Color(0xFFD8E2FF), onTertiaryContainer = Color(0xFF001947), background = Color(0xFFFDFDFD), onBackground = Color(0xFF222222), surface = Color(0xFFFDFDFD), onSurface = Color(0xFF222222), surfaceVariant = Color(0xFFE8E8E8), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF515151), surfaceTint = Color(0xFF000000), inverseSurface = Color(0xFF333333), inverseOnSurface = Color(0xFFF4F4F4), outline = Color(0xFF838383), surfaceContainerLowest = Color(0xFFCFCFCF), surfaceContainerLow = Color(0xFFDADADA), surfaceContainer = Color(0xFFE8E8E8), // Navigation bar background surfaceContainerHigh = Color(0xFFECECEC), surfaceContainerHighest = Color(0xFFEFEFEF), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/theme/colorscheme/YotsubaColorScheme.kt ================================================ package eu.kanade.presentation.theme.colorscheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color /** * Colors for Yotsuba theme * Original color scheme by ztimms73 * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web) * * Key colors: * Primary 0xFFAE3200 * Secondary 0xFFAE3200 * Tertiary 0xFF6B5E2F * Neutral 0xFF655C5A */ internal object YotsubaColorScheme : BaseColorScheme() { override val darkScheme = darkColorScheme( primary = Color(0xFFFFB59D), onPrimary = Color(0xFF5F1600), primaryContainer = Color(0xFF862200), onPrimaryContainer = Color(0xFFFFDBCF), inversePrimary = Color(0xFFAE3200), secondary = Color(0xFFFFB59D), // Unread badge onSecondary = Color(0xFF5F1600), // Unread badge text secondaryContainer = Color(0xFF862200), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFFFFDBCF), // Navigation bar selector icon tertiary = Color(0xFFD7C68D), // Downloaded badge onTertiary = Color(0xFF3A2F05), // Downloaded badge text tertiaryContainer = Color(0xFF524619), onTertiaryContainer = Color(0xFFF5E2A7), background = Color(0xFF211A18), onBackground = Color(0xFFEDE0DD), surface = Color(0xFF211A18), onSurface = Color(0xFFEDE0DD), surfaceVariant = Color(0xFF332723), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFFD8C2BC), surfaceTint = Color(0xFFFFB59D), inverseSurface = Color(0xFFEDE0DD), inverseOnSurface = Color(0xFF211A18), outline = Color(0xFFA08C87), surfaceContainerLowest = Color(0xFF2E221F), surfaceContainerLow = Color(0xFF312521), surfaceContainer = Color(0xFF332723), // Navigation bar background surfaceContainerHigh = Color(0xFF413531), surfaceContainerHighest = Color(0xFF4C403D), ) override val lightScheme = lightColorScheme( primary = Color(0xFFAE3200), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFFFDBCF), onPrimaryContainer = Color(0xFF3B0A00), inversePrimary = Color(0xFFFFB59D), secondary = Color(0xFFAE3200), // Unread badge onSecondary = Color(0xFFFFFFFF), // Unread badge text secondaryContainer = Color(0xFFEBCDC2), // Navigation bar selector pill & progress indicator (remaining) onSecondaryContainer = Color(0xFF3B0A00), // Navigation bar selector icon tertiary = Color(0xFF6B5E2F), // Downloaded badge onTertiary = Color(0xFFFFFFFF), // Downloaded badge text tertiaryContainer = Color(0xFFF5E2A7), onTertiaryContainer = Color(0xFF231B00), background = Color(0xFFFCFCFC), onBackground = Color(0xFF211A18), surface = Color(0xFFFCFCFC), onSurface = Color(0xFF211A18), surfaceVariant = Color(0xFFF6EBE7), // Navigation bar background (ThemePrefWidget) onSurfaceVariant = Color(0xFF53433F), surfaceTint = Color(0xFFAE3200), inverseSurface = Color(0xFF362F2D), inverseOnSurface = Color(0xFFFBEEEB), outline = Color(0xFF85736E), surfaceContainerLowest = Color(0xFFECE3E0), surfaceContainerLow = Color(0xFFF1E7E4), surfaceContainer = Color(0xFFF6EBE7), // Navigation bar background surfaceContainerHigh = Color(0xFFFAF4F2), surfaceContainerHighest = Color(0xFFFBF6F4), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt ================================================ package eu.kanade.presentation.track import androidx.compose.animation.animateContentSize import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.absoluteOffset import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material3.Badge import androidx.compose.material3.BadgedBox import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.presentation.track.components.TrackLogoIcon import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.tachiyomi.util.lang.toLocalDate import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import java.time.format.DateTimeFormatter @Composable fun TrackInfoDialogHome( trackItems: List, dateFormat: DateTimeFormatter, onStatusClick: (TrackItem) -> Unit, onChapterClick: (TrackItem) -> Unit, onScoreClick: (TrackItem) -> Unit, onStartDateEdit: (TrackItem) -> Unit, onEndDateEdit: (TrackItem) -> Unit, onNewSearch: (TrackItem) -> Unit, onOpenInBrowser: (TrackItem) -> Unit, onRemoved: (TrackItem) -> Unit, onCopyLink: (TrackItem) -> Unit, onTogglePrivate: (TrackItem) -> Unit, ) { Column( modifier = Modifier .animateContentSize() .fillMaxWidth() .verticalScroll(rememberScrollState()) .padding(16.dp) .windowInsetsPadding(WindowInsets.systemBars), verticalArrangement = Arrangement.spacedBy(24.dp), ) { trackItems.forEach { item -> if (item.track != null) { val supportsScoring = item.tracker.getScoreList().isNotEmpty() val supportsReadingDates = item.tracker.supportsReadingDates val supportsPrivate = item.tracker.supportsPrivateTracking TrackInfoItem( title = item.track.title, tracker = item.tracker, status = item.tracker.getStatus(item.track.status), onStatusClick = { onStatusClick(item) }, chapters = "${item.track.lastChapterRead.toInt()}".let { val totalChapters = item.track.totalChapters if (totalChapters > 0) { // Add known total chapter count "$it / $totalChapters" } else { it } }, onChaptersClick = { onChapterClick(item) }, score = item.tracker.displayScore(item.track) .takeIf { supportsScoring && item.track.score != 0.0 }, onScoreClick = { onScoreClick(item) } .takeIf { supportsScoring }, startDate = remember(item.track.startDate) { dateFormat.format(item.track.startDate.toLocalDate()) } .takeIf { supportsReadingDates && item.track.startDate != 0L }, onStartDateClick = { onStartDateEdit(item) } // TODO .takeIf { supportsReadingDates }, endDate = dateFormat.format(item.track.finishDate.toLocalDate()) .takeIf { supportsReadingDates && item.track.finishDate != 0L }, onEndDateClick = { onEndDateEdit(item) } .takeIf { supportsReadingDates }, onNewSearch = { onNewSearch(item) }, onOpenInBrowser = { onOpenInBrowser(item) }, onRemoved = { onRemoved(item) }, onCopyLink = { onCopyLink(item) }, private = item.track.private, onTogglePrivate = { onTogglePrivate(item) } .takeIf { supportsPrivate }, ) } else { TrackInfoItemEmpty( tracker = item.tracker, onNewSearch = { onNewSearch(item) }, ) } } } } @Composable private fun TrackInfoItem( title: String, tracker: Tracker, status: StringResource?, onStatusClick: () -> Unit, chapters: String, onChaptersClick: () -> Unit, score: String?, onScoreClick: (() -> Unit)?, startDate: String?, onStartDateClick: (() -> Unit)?, endDate: String?, onEndDateClick: (() -> Unit)?, onNewSearch: () -> Unit, onOpenInBrowser: () -> Unit, onRemoved: () -> Unit, onCopyLink: () -> Unit, private: Boolean, onTogglePrivate: (() -> Unit)?, ) { val context = LocalContext.current Column { Row( verticalAlignment = Alignment.CenterVertically, ) { BadgedBox( badge = { if (private) { Badge( containerColor = MaterialTheme.colorScheme.primary, contentColor = MaterialTheme.colorScheme.onPrimary, modifier = Modifier.absoluteOffset(x = (-5).dp), ) { Icon( imageVector = Icons.Filled.VisibilityOff, contentDescription = stringResource(MR.strings.tracked_privately), modifier = Modifier.size(14.dp), ) } } }, ) { TrackLogoIcon( tracker = tracker, onClick = onOpenInBrowser, onLongClick = onCopyLink, ) } Box( modifier = Modifier .height(48.dp) .weight(1f) .combinedClickable( onClick = onNewSearch, onLongClick = { context.copyToClipboard(title, title) }, ) .padding(start = 16.dp), contentAlignment = Alignment.CenterStart, ) { Text( text = title, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.onSurface, ) } VerticalDivider() TrackInfoItemMenu( onOpenInBrowser = onOpenInBrowser, onRemoved = onRemoved, onCopyLink = onCopyLink, private = private, onTogglePrivate = onTogglePrivate, ) } Box( modifier = Modifier .padding(top = 12.dp) .clip(MaterialTheme.shapes.medium) .background(MaterialTheme.colorScheme.surfaceContainerHighest) .padding(8.dp) .clip(RoundedCornerShape(6.dp)), ) { Column { Row(modifier = Modifier.height(IntrinsicSize.Min)) { TrackDetailsItem( modifier = Modifier.weight(1f), text = status?.let { stringResource(it) } ?: "", onClick = onStatusClick, ) VerticalDivider() TrackDetailsItem( modifier = Modifier.weight(1f), text = chapters, onClick = onChaptersClick, ) if (onScoreClick != null) { VerticalDivider() TrackDetailsItem( modifier = Modifier.weight(1f), text = score, placeholder = stringResource(MR.strings.score), onClick = onScoreClick, ) } } if (onStartDateClick != null && onEndDateClick != null) { HorizontalDivider() Row(modifier = Modifier.height(IntrinsicSize.Min)) { TrackDetailsItem( modifier = Modifier.weight(1F), text = startDate, placeholder = stringResource(MR.strings.track_started_reading_date), onClick = onStartDateClick, ) VerticalDivider() TrackDetailsItem( modifier = Modifier.weight(1F), text = endDate, placeholder = stringResource(MR.strings.track_finished_reading_date), onClick = onEndDateClick, ) } } } } } } private const val UNSET_TEXT_ALPHA = 0.5F @Composable private fun TrackDetailsItem( text: String?, onClick: () -> Unit, modifier: Modifier = Modifier, placeholder: String = "", ) { Box( modifier = modifier .clickable(onClick = onClick) .fillMaxHeight() .padding(12.dp), contentAlignment = Alignment.Center, ) { Text( text = text ?: placeholder, maxLines = 2, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.onSurface.copy(alpha = if (text == null) UNSET_TEXT_ALPHA else 1f), ) } } @Composable private fun TrackInfoItemEmpty( tracker: Tracker, onNewSearch: () -> Unit, ) { Row( verticalAlignment = Alignment.CenterVertically, ) { TrackLogoIcon(tracker) TextButton( onClick = onNewSearch, modifier = Modifier .padding(start = 16.dp) .weight(1f), ) { Text(text = stringResource(MR.strings.add_tracking)) } } } @Composable private fun TrackInfoItemMenu( onOpenInBrowser: () -> Unit, onRemoved: () -> Unit, onCopyLink: () -> Unit, private: Boolean, onTogglePrivate: (() -> Unit)?, ) { var expanded by remember { mutableStateOf(false) } Box(modifier = Modifier.wrapContentSize(Alignment.TopStart)) { IconButton(onClick = { expanded = true }) { Icon( imageVector = Icons.Default.MoreVert, contentDescription = stringResource(MR.strings.label_more), ) } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, ) { DropdownMenuItem( text = { Text(stringResource(MR.strings.action_open_in_browser)) }, onClick = { onOpenInBrowser() expanded = false }, ) DropdownMenuItem( text = { Text(stringResource(MR.strings.action_copy_link)) }, onClick = { onCopyLink() expanded = false }, ) if (onTogglePrivate != null) { DropdownMenuItem( text = { Text( stringResource( if (private) { MR.strings.action_toggle_private_off } else { MR.strings.action_toggle_private_on }, ), ) }, onClick = { onTogglePrivate() expanded = false }, ) } DropdownMenuItem( text = { Text(stringResource(MR.strings.action_remove)) }, onClick = { onRemoved() expanded = false }, ) } } } @PreviewLightDark @Composable private fun TrackInfoDialogHomePreviews( @PreviewParameter(TrackInfoDialogHomePreviewProvider::class) content: @Composable () -> Unit, ) { TachiyomiPreviewTheme { Surface { content() } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHomePreviewProvider.kt ================================================ package eu.kanade.presentation.track import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewParameterProvider import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.test.DummyTracker import tachiyomi.domain.track.model.Track import java.time.format.DateTimeFormatter import java.time.format.FormatStyle internal class TrackInfoDialogHomePreviewProvider : PreviewParameterProvider<@Composable () -> Unit> { private val aTrack = Track( id = 1L, mangaId = 2L, trackerId = 3L, remoteId = 4L, libraryId = null, title = "Manage Name On Tracker Site", lastChapterRead = 2.0, totalChapters = 12L, status = 1L, score = 2.0, remoteUrl = "https://example.com", startDate = 0L, finishDate = 0L, private = false, ) private val privateTrack = aTrack.copy(private = true) private val trackItemWithoutTrack = TrackItem( track = null, tracker = DummyTracker( id = 1L, name = "Example Tracker", ), ) private val trackItemWithTrack = TrackItem( track = aTrack, tracker = DummyTracker( id = 2L, name = "Example Tracker 2", ), ) private val trackItemWithPrivateTrack = TrackItem( track = privateTrack, tracker = DummyTracker( id = 2L, name = "Example Tracker 2", ), ) private val trackersWithAndWithoutTrack = @Composable { TrackInfoDialogHome( trackItems = listOf( trackItemWithoutTrack, trackItemWithTrack, ), dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM), onStatusClick = {}, onChapterClick = {}, onScoreClick = {}, onStartDateEdit = {}, onEndDateEdit = {}, onNewSearch = {}, onOpenInBrowser = {}, onRemoved = {}, onCopyLink = {}, onTogglePrivate = {}, ) } private val noTrackers = @Composable { TrackInfoDialogHome( trackItems = listOf(), dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM), onStatusClick = {}, onChapterClick = {}, onScoreClick = {}, onStartDateEdit = {}, onEndDateEdit = {}, onNewSearch = {}, onOpenInBrowser = {}, onRemoved = {}, onCopyLink = {}, onTogglePrivate = {}, ) } private val trackerWithPrivateTracking = @Composable { TrackInfoDialogHome( trackItems = listOf(trackItemWithPrivateTrack), dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM), onStatusClick = {}, onChapterClick = {}, onScoreClick = {}, onStartDateEdit = {}, onEndDateEdit = {}, onNewSearch = {}, onOpenInBrowser = {}, onRemoved = {}, onCopyLink = {}, onTogglePrivate = {}, ) } override val values: Sequence<@Composable () -> Unit> get() = sequenceOf( trackersWithAndWithoutTrack, noTrackers, trackerWithPrivateTracking, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt ================================================ package eu.kanade.presentation.track import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.DatePicker import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton import androidx.compose.material3.SelectableDates import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.theme.TachiyomiPreviewTheme import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.WheelNumberPicker import tachiyomi.presentation.core.components.WheelTextPicker import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun TrackStatusSelector( selection: Long, onSelectionChange: (Long) -> Unit, selections: Map, onConfirm: () -> Unit, onDismissRequest: () -> Unit, ) { BaseSelector( title = stringResource(MR.strings.status), content = { val state = rememberLazyListState() ScrollbarLazyColumn(state = state) { selections.forEach { (key, value) -> val isSelected = selection == key item { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .clip(RoundedCornerShape(8.dp)) .selectable( selected = isSelected, onClick = { onSelectionChange(key) }, ) .fillMaxWidth() .minimumInteractiveComponentSize(), ) { RadioButton( selected = isSelected, onClick = null, ) Text( text = value?.let { stringResource(it) } ?: "", style = MaterialTheme.typography.bodyLarge.merge(), modifier = Modifier.padding(start = 24.dp), ) } } } } if (state.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter)) if (state.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter)) }, onConfirm = onConfirm, onDismissRequest = onDismissRequest, ) } @Composable fun TrackChapterSelector( selection: Int, onSelectionChange: (Int) -> Unit, range: Iterable, onConfirm: () -> Unit, onDismissRequest: () -> Unit, ) { BaseSelector( title = stringResource(MR.strings.chapters), content = { WheelNumberPicker( items = range.toImmutableList(), modifier = Modifier.align(Alignment.Center), startIndex = selection, onSelectionChanged = { onSelectionChange(it) }, ) }, onConfirm = onConfirm, onDismissRequest = onDismissRequest, ) } @Composable fun TrackScoreSelector( selection: String, onSelectionChange: (String) -> Unit, selections: ImmutableList, onConfirm: () -> Unit, onDismissRequest: () -> Unit, ) { BaseSelector( title = stringResource(MR.strings.score), content = { WheelTextPicker( items = selections, modifier = Modifier.align(Alignment.Center), startIndex = selections.indexOf(selection).takeIf { it > 0 } ?: (selections.size / 2), onSelectionChanged = { onSelectionChange(selections[it]) }, ) }, onConfirm = onConfirm, onDismissRequest = onDismissRequest, ) } @Composable fun TrackDateSelector( title: String, initialSelectedDateMillis: Long, selectableDates: SelectableDates, onConfirm: (Long) -> Unit, onRemove: (() -> Unit)?, onDismissRequest: () -> Unit, ) { val pickerState = rememberDatePickerState( initialSelectedDateMillis = initialSelectedDateMillis, selectableDates = selectableDates, ) AlertDialogContent( modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars), title = { Text(text = title) }, content = { Column { DatePicker( state = pickerState, title = null, headline = null, showModeToggle = false, ) Row( modifier = Modifier .fillMaxWidth() .padding(start = 12.dp, top = 8.dp, end = 12.dp, bottom = 24.dp), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small, Alignment.End), ) { if (onRemove != null) { TextButton(onClick = onRemove) { Text(text = stringResource(MR.strings.action_remove)) } Spacer(modifier = Modifier.weight(1f)) } TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } TextButton(onClick = { onConfirm(pickerState.selectedDateMillis!!) }) { Text(text = stringResource(MR.strings.action_ok)) } } } }, ) } @Composable private fun BaseSelector( title: String, content: @Composable BoxScope.() -> Unit, onConfirm: () -> Unit, onDismissRequest: () -> Unit, thirdButton: @Composable (RowScope.() -> Unit)? = null, ) { AlertDialogContent( modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars), title = { Text(text = title) }, text = { Box( modifier = Modifier.fillMaxWidth(), content = content, ) }, buttons = { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small, Alignment.End), ) { if (thirdButton != null) { thirdButton() Spacer(modifier = Modifier.weight(1f)) } TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } TextButton(onClick = onConfirm) { Text(text = stringResource(MR.strings.action_ok)) } } }, ) } @PreviewLightDark @Composable private fun TrackStatusSelectorPreviews() { TachiyomiPreviewTheme { Surface { TrackStatusSelector( selection = 1, onSelectionChange = {}, selections = persistentMapOf( // Anilist values 1L to MR.strings.reading, 2L to MR.strings.plan_to_read, 3L to MR.strings.completed, 4L to MR.strings.on_hold, 5L to MR.strings.dropped, 6L to MR.strings.repeating, ), onConfirm = {}, onDismissRequest = {}, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt ================================================ package eu.kanade.presentation.track import android.content.ClipData import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.paddingFromBaseline import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.input.TextFieldLineLimits import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.clearText import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.Clipboard import androidx.compose.ui.platform.LocalClipboard import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.toClipEntry import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.toLowerCase import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.util.system.openInBrowser import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.plus import tachiyomi.presentation.core.util.runOnEnterKeyPressed import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun TrackerSearch( state: TextFieldState, onDispatchQuery: () -> Unit, queryResult: Result>?, selected: TrackSearch?, onSelectedChange: (TrackSearch) -> Unit, onConfirmSelection: (private: Boolean) -> Unit, onDismissRequest: () -> Unit, supportsPrivateTracking: Boolean, ) { val focusManager = LocalFocusManager.current val focusRequester = remember { FocusRequester() } val dispatchQueryAndClearFocus: () -> Unit = { onDispatchQuery() focusManager.clearFocus() } Scaffold( topBar = { Column { TopAppBar( navigationIcon = { IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowBack, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } }, title = { BasicTextField( state = state, modifier = Modifier .fillMaxWidth() .focusRequester(focusRequester) .runOnEnterKeyPressed(action = dispatchQueryAndClearFocus), textStyle = MaterialTheme.typography.bodyLarge .copy(color = MaterialTheme.colorScheme.onSurface), lineLimits = TextFieldLineLimits.SingleLine, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), onKeyboardAction = { dispatchQueryAndClearFocus() }, cursorBrush = SolidColor(MaterialTheme.colorScheme.primary), decorator = { if (state.text.isEmpty()) { Text( text = stringResource(MR.strings.action_search_hint), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) } it() }, ) }, actions = { if (state.text.isNotEmpty()) { IconButton( onClick = { state.clearText() focusRequester.requestFocus() }, ) { Icon( imageVector = Icons.Default.Close, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } } }, ) HorizontalDivider() } }, bottomBar = { AnimatedVisibility( visible = selected != null, enter = fadeIn() + slideInVertically { it / 2 }, exit = slideOutVertically { it / 2 } + fadeOut(), ) { Row( modifier = Modifier .padding(MaterialTheme.padding.small) .windowInsetsPadding(WindowInsets.navigationBars) .fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Button( onClick = { onConfirmSelection(false) }, modifier = Modifier.weight(1f), elevation = ButtonDefaults.elevatedButtonElevation(), ) { Text(text = stringResource(MR.strings.action_track)) } if (supportsPrivateTracking) { Button( onClick = { onConfirmSelection(true) }, elevation = ButtonDefaults.elevatedButtonElevation(), ) { Icon( imageVector = Icons.Filled.VisibilityOff, contentDescription = stringResource(MR.strings.action_toggle_private_on), ) } } } } }, ) { innerPadding -> if (queryResult == null) { LoadingScreen(modifier = Modifier.padding(innerPadding)) } else { val availableTracks = queryResult.getOrNull() if (availableTracks != null) { if (availableTracks.isEmpty()) { EmptyScreen( modifier = Modifier.padding(innerPadding), stringRes = MR.strings.no_results_found, ) } else { ScrollbarLazyColumn( contentPadding = innerPadding + PaddingValues(vertical = 12.dp), verticalArrangement = Arrangement.spacedBy(12.dp), ) { items( items = availableTracks, key = { it.hashCode() }, ) { SearchResultItem( trackSearch = it, selected = it == selected, onClick = { onSelectedChange(it) }, ) } } } } else { EmptyScreen( modifier = Modifier.padding(innerPadding), message = queryResult.exceptionOrNull()?.message ?: stringResource(MR.strings.unknown_error), ) } } } } @Composable private fun SearchResultItem( trackSearch: TrackSearch, selected: Boolean, onClick: () -> Unit, ) { val context = LocalContext.current val clipboard: Clipboard = LocalClipboard.current val focusManager = LocalFocusManager.current val type = trackSearch.publishing_type.toLowerCase(Locale.current).capitalize(Locale.current) val status = trackSearch.publishing_status.toLowerCase(Locale.current).capitalize(Locale.current) val description = trackSearch.summary.trim() val shape = RoundedCornerShape(16.dp) val borderColor = if (selected) MaterialTheme.colorScheme.outline else Color.Transparent var dropDownMenuExpanded by remember { mutableStateOf(false) } val scope = rememberCoroutineScope() Box( modifier = Modifier .fillMaxWidth() .padding(horizontal = 12.dp) .clip(shape) .background(MaterialTheme.colorScheme.surface) .border( width = 2.dp, color = borderColor, shape = shape, ) .combinedClickable( onLongClick = { dropDownMenuExpanded = true }, onClick = { focusManager.clearFocus() onClick() }, ) .padding(12.dp), ) { if (selected) { Icon( imageVector = Icons.Filled.CheckCircle, contentDescription = null, modifier = Modifier.align(Alignment.TopEnd), tint = MaterialTheme.colorScheme.primary, ) } Column { Row { MangaCover.Book( data = trackSearch.cover_url, modifier = Modifier.height(96.dp), ) Spacer(modifier = Modifier.width(12.dp)) Column { Text( text = trackSearch.title, modifier = Modifier.padding(end = 28.dp), maxLines = 2, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.titleMedium, ) SearchResultItemDropDownMenu( expanded = dropDownMenuExpanded, onCollapseMenu = { dropDownMenuExpanded = false }, onCopyName = { scope.launch { val clipEntry = ClipData.newPlainText( trackSearch.title, trackSearch.title, ).toClipEntry() clipboard.setClipEntry(clipEntry) } }, onOpenInBrowser = { val url = trackSearch.tracking_url if (url.isNotBlank()) { context.openInBrowser(url) } }, ) if (trackSearch.authors.isNotEmpty() || trackSearch.artists.isNotEmpty()) { Text( text = (trackSearch.authors + trackSearch.artists).distinct().joinToString(), modifier = Modifier.secondaryItemAlpha(), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, ) } if (type.isNotBlank()) { SearchResultItemDetails( title = stringResource(MR.strings.track_type), text = type, ) } if (trackSearch.start_date.isNotBlank()) { SearchResultItemDetails( title = stringResource(MR.strings.label_started), text = trackSearch.start_date, ) } if (status.isNotBlank()) { SearchResultItemDetails( title = stringResource(MR.strings.track_status), text = status, ) } if (trackSearch.score != -1.0) { SearchResultItemDetails( title = stringResource(MR.strings.score), text = trackSearch.score.toString(), ) } } } if (description.isNotBlank()) { Text( text = description, modifier = Modifier .paddingFromBaseline(top = 24.dp) .secondaryItemAlpha(), maxLines = 4, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, ) } } } } @Composable private fun SearchResultItemDropDownMenu( expanded: Boolean, onCollapseMenu: () -> Unit, onCopyName: () -> Unit, onOpenInBrowser: () -> Unit, ) { DropdownMenu( expanded = expanded, onDismissRequest = onCollapseMenu, ) { DropdownMenuItem( text = { Text(stringResource(MR.strings.action_copy_to_clipboard)) }, onClick = { onCopyName() onCollapseMenu() }, ) DropdownMenuItem( text = { Text(stringResource(MR.strings.action_open_in_browser)) }, onClick = { onOpenInBrowser() }, ) } } @Composable private fun SearchResultItemDetails( title: String, text: String, ) { Row(horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall)) { Text( text = title, maxLines = 1, style = MaterialTheme.typography.titleSmall, ) Text( text = text, modifier = Modifier .weight(1f) .secondaryItemAlpha(), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) } } @PreviewLightDark @Composable private fun TrackerSearchPreviews( @PreviewParameter(TrackerSearchPreviewProvider::class) content: @Composable () -> Unit, ) { TachiyomiPreviewTheme { content() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/TrackerSearchPreviewProvider.kt ================================================ package eu.kanade.presentation.track import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.datasource.LoremIpsum import eu.kanade.tachiyomi.data.track.model.TrackSearch import java.text.SimpleDateFormat import java.time.Instant import java.time.temporal.ChronoUnit import java.util.Date import java.util.Locale import kotlin.random.Random internal class TrackerSearchPreviewProvider : PreviewParameterProvider<@Composable () -> Unit> { private val fullPageWithSecondSelected = @Composable { val items = someTrackSearches().take(30).toList() TrackerSearch( state = TextFieldState(initialText = "search text"), onDispatchQuery = {}, queryResult = Result.success(items), selected = items[1], onSelectedChange = {}, onConfirmSelection = {}, onDismissRequest = {}, supportsPrivateTracking = false, ) } private val fullPageWithoutSelected = @Composable { TrackerSearch( state = TextFieldState(), onDispatchQuery = {}, queryResult = Result.success(someTrackSearches().take(30).toList()), selected = null, onSelectedChange = {}, onConfirmSelection = {}, onDismissRequest = {}, supportsPrivateTracking = false, ) } private val loading = @Composable { TrackerSearch( state = TextFieldState(), onDispatchQuery = {}, queryResult = null, selected = null, onSelectedChange = {}, onConfirmSelection = {}, onDismissRequest = {}, supportsPrivateTracking = false, ) } private val fullPageWithPrivateTracking = @Composable { val items = someTrackSearches().take(30).toList() TrackerSearch( state = TextFieldState(initialText = "search text"), onDispatchQuery = {}, queryResult = Result.success(items), selected = items[1], onSelectedChange = {}, onConfirmSelection = {}, onDismissRequest = {}, supportsPrivateTracking = true, ) } override val values: Sequence<@Composable () -> Unit> = sequenceOf( fullPageWithSecondSelected, fullPageWithoutSelected, loading, fullPageWithPrivateTracking, ) private fun someTrackSearches(): Sequence = sequence { while (true) { yield(randTrackSearch()) } } private val formatter: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) private fun randTrackSearch() = TrackSearch().let { it.id = Random.nextLong() it.manga_id = Random.nextLong() it.tracker_id = Random.nextLong() it.remote_id = Random.nextLong() it.library_id = Random.nextLong() it.title = lorem((1..10).random()).joinToString() it.last_chapter_read = (0..100).random().toDouble() it.total_chapters = (100L..1000L).random() it.score = (0..10).random().toDouble() it.status = Random.nextLong() it.started_reading_date = 0L it.finished_reading_date = 0L it.tracking_url = "https://example.com/tracker-example" it.cover_url = "https://example.com/cover.png" it.start_date = formatter.format(Date.from(Instant.now().minus((1L..365).random(), ChronoUnit.DAYS))) it.summary = lorem((0..40).random()).joinToString() it.publishing_status = if (Random.nextBoolean()) "Finished" else "" it.publishing_type = if (Random.nextBoolean()) "Oneshot" else "" it.artists = randomNames() it.authors = randomNames() it } private fun randomNames(): List = (0..(0..3).random()).map { lorem((3..5).random()).joinToString() } private fun lorem(words: Int): Sequence = LoremIpsum(words).values } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIcon.kt ================================================ package eu.kanade.presentation.track.components import androidx.compose.foundation.Image import androidx.compose.foundation.layout.size import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.data.track.Tracker import tachiyomi.presentation.core.util.clickableNoIndication @Composable fun TrackLogoIcon( tracker: Tracker, onClick: (() -> Unit)? = null, onLongClick: (() -> Unit)? = null, ) { val modifier = if (onClick != null) { Modifier.clickableNoIndication(onClick = onClick, onLongClick = onLongClick) } else { Modifier } Image( painter = painterResource(tracker.getLogo()), contentDescription = tracker.name, modifier = modifier .size(48.dp) .clip(MaterialTheme.shapes.medium), ) } @PreviewLightDark @Composable private fun TrackLogoIconPreviews( @PreviewParameter(TrackLogoIconPreviewProvider::class) tracker: Tracker, ) { TachiyomiPreviewTheme { TrackLogoIcon( tracker = tracker, onClick = null, onLongClick = null, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIconPreviewProvider.kt ================================================ package eu.kanade.presentation.track.components import androidx.compose.ui.tooling.preview.PreviewParameterProvider import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.test.DummyTracker internal class TrackLogoIconPreviewProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( DummyTracker( id = 1L, name = "Dummy Tracker", ), ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/updates/UpdatesDeleteConfirmationDialog.kt ================================================ package eu.kanade.presentation.updates import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun UpdatesDeleteConfirmationDialog( onDismissRequest: () -> Unit, onConfirm: () -> Unit, ) { AlertDialog( text = { Text(text = stringResource(MR.strings.confirm_delete_chapters)) }, onDismissRequest = onDismissRequest, confirmButton = { TextButton(onClick = { onConfirm() onDismissRequest() }) { Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/updates/UpdatesFilterDialog.kt ================================================ package eu.kanade.presentation.updates import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.ui.updates.UpdatesSettingsScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.common.preference.getAndSet import tachiyomi.domain.updates.service.UpdatesPreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsItemsPaddings import tachiyomi.presentation.core.components.TriStateItem import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable fun UpdatesFilterDialog( onDismissRequest: () -> Unit, screenModel: UpdatesSettingsScreenModel, ) { TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( stringResource(MR.strings.action_filter), ), ) { Column( modifier = Modifier .padding(vertical = TabbedDialogPaddings.Vertical) .verticalScroll(rememberScrollState()), ) { FilterSheet(screenModel = screenModel) } } } @Composable private fun ColumnScope.FilterSheet( screenModel: UpdatesSettingsScreenModel, ) { val filterDownloaded by screenModel.updatesPreferences.filterDownloaded.collectAsState() TriStateItem( label = stringResource(MR.strings.label_downloaded), state = filterDownloaded, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterDownloaded) }, ) val filterUnread by screenModel.updatesPreferences.filterUnread.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_unread), state = filterUnread, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterUnread) }, ) val filterStarted by screenModel.updatesPreferences.filterStarted.collectAsState() TriStateItem( label = stringResource(MR.strings.label_started), state = filterStarted, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterStarted) }, ) val filterBookmarked by screenModel.updatesPreferences.filterBookmarked.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_bookmarked), state = filterBookmarked, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterBookmarked) }, ) HorizontalDivider(modifier = Modifier.padding(MaterialTheme.padding.small)) val filterExcludedScanlators by screenModel.updatesPreferences.filterExcludedScanlators.collectAsState() fun toggleScanlatorFilter() = screenModel.updatesPreferences.filterExcludedScanlators.getAndSet { !it } Row( modifier = Modifier .clickable { toggleScanlatorFilter() } .fillMaxWidth() .padding(horizontal = SettingsItemsPaddings.Horizontal), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, ) { Text( text = stringResource(MR.strings.action_filter_excluded_scanlators), color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.bodyMedium, ) Switch( checked = filterExcludedScanlators, onCheckedChange = { toggleScanlatorFilter() }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt ================================================ package eu.kanade.presentation.updates import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.CalendarMonth import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.FlipToBack import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material.icons.outlined.SelectAll import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.util.fastAll import androidx.compose.ui.util.fastAny import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.manga.components.MangaBottomActionMenu import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.ui.updates.UpdatesItem import eu.kanade.tachiyomi.ui.updates.UpdatesScreenModel import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.delay import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.theme.active import java.time.LocalDate import kotlin.time.Duration.Companion.seconds @Composable fun UpdateScreen( state: UpdatesScreenModel.State, snackbarHostState: SnackbarHostState, lastUpdated: Long, onClickCover: (UpdatesItem) -> Unit, onSelectAll: (Boolean) -> Unit, onInvertSelection: () -> Unit, onCalendarClicked: () -> Unit, onUpdateLibrary: () -> Boolean, onDownloadChapter: (List, ChapterDownloadAction) -> Unit, onMultiBookmarkClicked: (List, bookmark: Boolean) -> Unit, onMultiMarkAsReadClicked: (List, read: Boolean) -> Unit, onMultiDeleteClicked: (List) -> Unit, onUpdateSelected: (UpdatesItem, Boolean, Boolean) -> Unit, onOpenChapter: (UpdatesItem) -> Unit, onFilterClicked: () -> Unit, hasActiveFilters: Boolean, ) { BackHandler(enabled = state.selectionMode) { onSelectAll(false) } Scaffold( topBar = { scrollBehavior -> UpdatesAppBar( onCalendarClicked = { onCalendarClicked() }, onUpdateLibrary = { onUpdateLibrary() }, onFilterClicked = { onFilterClicked() }, hasFilters = hasActiveFilters, actionModeCounter = state.selected.size, onSelectAll = { onSelectAll(true) }, onInvertSelection = { onInvertSelection() }, onCancelActionMode = { onSelectAll(false) }, scrollBehavior = scrollBehavior, ) }, bottomBar = { UpdatesBottomBar( selected = state.selected, onDownloadChapter = onDownloadChapter, onMultiBookmarkClicked = onMultiBookmarkClicked, onMultiMarkAsReadClicked = onMultiMarkAsReadClicked, onMultiDeleteClicked = onMultiDeleteClicked, ) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { contentPadding -> when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.items.isEmpty() -> EmptyScreen( stringRes = MR.strings.information_no_recent, modifier = Modifier.padding(contentPadding), ) else -> { val scope = rememberCoroutineScope() var isRefreshing by remember { mutableStateOf(false) } PullRefresh( refreshing = isRefreshing, onRefresh = { val started = onUpdateLibrary() if (!started) return@PullRefresh scope.launch { // Fake refresh status but hide it after a second as it's a long running task isRefreshing = true delay(1.seconds) isRefreshing = false } }, enabled = !state.selectionMode, indicatorPadding = contentPadding, ) { FastScrollLazyColumn( contentPadding = contentPadding, ) { updatesLastUpdatedItem(lastUpdated) updatesUiItems( uiModels = state.getUiModel(), selectionMode = state.selectionMode, onUpdateSelected = onUpdateSelected, onClickCover = onClickCover, onClickUpdate = onOpenChapter, onDownloadChapter = onDownloadChapter, ) } } } } } } @Composable private fun UpdatesAppBar( onCalendarClicked: () -> Unit, onUpdateLibrary: () -> Unit, onFilterClicked: () -> Unit, hasFilters: Boolean, // For action mode actionModeCounter: Int, onSelectAll: () -> Unit, onInvertSelection: () -> Unit, onCancelActionMode: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, modifier: Modifier = Modifier, ) { AppBar( modifier = modifier, title = stringResource(MR.strings.label_recent_updates), actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current, onClick = onFilterClicked, ), AppBar.Action( title = stringResource(MR.strings.action_view_upcoming), icon = Icons.Outlined.CalendarMonth, onClick = onCalendarClicked, ), AppBar.Action( title = stringResource(MR.strings.action_update_library), icon = Icons.Outlined.Refresh, onClick = onUpdateLibrary, ), ), ) }, actionModeCounter = actionModeCounter, onCancelActionMode = onCancelActionMode, actionModeActions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onSelectAll, ), AppBar.Action( title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onInvertSelection, ), ), ) }, scrollBehavior = scrollBehavior, ) } @Composable private fun UpdatesBottomBar( selected: List, onDownloadChapter: (List, ChapterDownloadAction) -> Unit, onMultiBookmarkClicked: (List, bookmark: Boolean) -> Unit, onMultiMarkAsReadClicked: (List, read: Boolean) -> Unit, onMultiDeleteClicked: (List) -> Unit, ) { MangaBottomActionMenu( visible = selected.isNotEmpty(), modifier = Modifier.fillMaxWidth(), onBookmarkClicked = { onMultiBookmarkClicked.invoke(selected, true) }.takeIf { selected.fastAny { !it.update.bookmark } }, onRemoveBookmarkClicked = { onMultiBookmarkClicked.invoke(selected, false) }.takeIf { selected.fastAll { it.update.bookmark } }, onMarkAsReadClicked = { onMultiMarkAsReadClicked(selected, true) }.takeIf { selected.fastAny { !it.update.read } }, onMarkAsUnreadClicked = { onMultiMarkAsReadClicked(selected, false) }.takeIf { selected.fastAny { it.update.read || it.update.lastPageRead > 0L } }, onDownloadClicked = { onDownloadChapter(selected, ChapterDownloadAction.START) }.takeIf { selected.fastAny { it.downloadStateProvider() != Download.State.DOWNLOADED } }, onDeleteClicked = { onMultiDeleteClicked(selected) }.takeIf { selected.fastAny { it.downloadStateProvider() == Download.State.DOWNLOADED } }, ) } sealed interface UpdatesUiModel { data class Header(val date: LocalDate) : UpdatesUiModel data class Item(val item: UpdatesItem) : UpdatesUiModel } ================================================ FILE: app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt ================================================ package eu.kanade.presentation.updates import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Bookmark import androidx.compose.material.icons.filled.Circle import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.relativeDateText import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.manga.components.ChapterDownloadIndicator import eu.kanade.presentation.manga.components.DotSeparatorText import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.presentation.util.relativeTimeSpanString import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.ui.updates.UpdatesItem import tachiyomi.domain.updates.model.UpdatesWithRelations import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ListGroupHeader import tachiyomi.presentation.core.components.material.DISABLED_ALPHA import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground internal fun LazyListScope.updatesLastUpdatedItem( lastUpdated: Long, ) { item(key = "updates-lastUpdated") { Box( modifier = Modifier .animateItem(fadeInSpec = null, fadeOutSpec = null) .padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small), ) { Text( text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)), fontStyle = FontStyle.Italic, ) } } } internal fun LazyListScope.updatesUiItems( uiModels: List, selectionMode: Boolean, onUpdateSelected: (UpdatesItem, Boolean, Boolean) -> Unit, onClickCover: (UpdatesItem) -> Unit, onClickUpdate: (UpdatesItem) -> Unit, onDownloadChapter: (List, ChapterDownloadAction) -> Unit, ) { items( items = uiModels, contentType = { when (it) { is UpdatesUiModel.Header -> "header" is UpdatesUiModel.Item -> "item" } }, key = { when (it) { is UpdatesUiModel.Header -> "updatesHeader-${it.hashCode()}" is UpdatesUiModel.Item -> "updates-${it.item.update.mangaId}-${it.item.update.chapterId}" } }, ) { item -> when (item) { is UpdatesUiModel.Header -> { ListGroupHeader( modifier = Modifier.animateItemFastScroll(), text = relativeDateText(item.date), ) } is UpdatesUiModel.Item -> { val updatesItem = item.item UpdatesUiItem( modifier = Modifier.animateItemFastScroll(), update = updatesItem.update, selected = updatesItem.selected, readProgress = updatesItem.update.lastPageRead .takeIf { !updatesItem.update.read && it > 0L } ?.let { stringResource( MR.strings.chapter_progress, it + 1, ) }, onLongClick = { onUpdateSelected(updatesItem, !updatesItem.selected, true) }, onClick = { when { selectionMode -> onUpdateSelected(updatesItem, !updatesItem.selected, false) else -> onClickUpdate(updatesItem) } }, onClickCover = { onClickCover(updatesItem) }.takeIf { !selectionMode }, onDownloadChapter = { action: ChapterDownloadAction -> onDownloadChapter(listOf(updatesItem), action) }.takeIf { !selectionMode }, downloadStateProvider = updatesItem.downloadStateProvider, downloadProgressProvider = updatesItem.downloadProgressProvider, ) } } } } @Composable private fun UpdatesUiItem( update: UpdatesWithRelations, selected: Boolean, readProgress: String?, onClick: () -> Unit, onLongClick: () -> Unit, onClickCover: (() -> Unit)?, onDownloadChapter: ((ChapterDownloadAction) -> Unit)?, // Download Indicator downloadStateProvider: () -> Download.State, downloadProgressProvider: () -> Int, modifier: Modifier = Modifier, ) { val haptic = LocalHapticFeedback.current val textAlpha = if (update.read) DISABLED_ALPHA else 1f Row( modifier = modifier .selectedBackground(selected) .combinedClickable( onClick = onClick, onLongClick = { onLongClick() haptic.performHapticFeedback(HapticFeedbackType.LongPress) }, ) .height(56.dp) .padding(horizontal = MaterialTheme.padding.medium), verticalAlignment = Alignment.CenterVertically, ) { MangaCover.Square( modifier = Modifier .padding(vertical = 6.dp) .fillMaxHeight(), data = update.coverData, onClick = onClickCover, ) Column( modifier = Modifier .padding(horizontal = MaterialTheme.padding.medium) .weight(1f), ) { Text( text = update.mangaTitle, maxLines = 1, style = MaterialTheme.typography.bodyMedium, color = LocalContentColor.current.copy(alpha = textAlpha), overflow = TextOverflow.Ellipsis, ) Row(verticalAlignment = Alignment.CenterVertically) { var textHeight by remember { mutableIntStateOf(0) } if (!update.read) { Icon( imageVector = Icons.Filled.Circle, contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), tint = MaterialTheme.colorScheme.primary, ) } if (update.bookmark) { Icon( imageVector = Icons.Filled.Bookmark, contentDescription = stringResource(MR.strings.action_filter_bookmarked), modifier = Modifier .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }), tint = MaterialTheme.colorScheme.primary, ) Spacer(modifier = Modifier.width(2.dp)) } Text( text = update.chapterName, maxLines = 1, style = MaterialTheme.typography.bodySmall, color = LocalContentColor.current.copy(alpha = textAlpha), overflow = TextOverflow.Ellipsis, onTextLayout = { textHeight = it.size.height }, modifier = Modifier .weight(weight = 1f, fill = false), ) if (readProgress != null) { DotSeparatorText() Text( text = readProgress, maxLines = 1, color = LocalContentColor.current.copy(alpha = DISABLED_ALPHA), overflow = TextOverflow.Ellipsis, ) } } } ChapterDownloadIndicator( enabled = onDownloadChapter != null, modifier = Modifier.padding(start = 4.dp), downloadStateProvider = downloadStateProvider, downloadProgressProvider = downloadProgressProvider, onClick = { onDownloadChapter?.invoke(it) }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/ChapterNumberFormatter.kt ================================================ package eu.kanade.presentation.util import java.text.DecimalFormat import java.text.DecimalFormatSymbols private val formatter = DecimalFormat( "#.###", DecimalFormatSymbols().apply { decimalSeparator = '.' }, ) fun formatChapterNumber(chapterNumber: Double): String { return formatter.format(chapterNumber) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt ================================================ package eu.kanade.presentation.util import android.content.Context import eu.kanade.tachiyomi.network.HttpException import eu.kanade.tachiyomi.util.system.isOnline import tachiyomi.core.common.i18n.stringResource import tachiyomi.data.source.NoResultsException import tachiyomi.domain.source.model.SourceNotInstalledException import tachiyomi.i18n.MR import java.net.UnknownHostException context(context: Context) val Throwable.formattedMessage: String get() { when (this) { is HttpException -> return context.stringResource(MR.strings.exception_http, code) is UnknownHostException -> { return if (!context.isOnline()) { context.stringResource(MR.strings.exception_offline) } else { context.stringResource(MR.strings.exception_unknown_host, message ?: "") } } is NoResultsException -> return context.stringResource(MR.strings.no_results_found) is SourceNotInstalledException -> return context.stringResource(MR.strings.loader_not_implemented_error) } return when (val className = this::class.simpleName) { "Exception", "IOException" -> message ?: className else -> "$className: $message" } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/FastScrollAnimateItem.kt ================================================ package eu.kanade.presentation.util import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.ui.Modifier // https://issuetracker.google.com/352584409 context(itemScope: LazyItemScope) fun Modifier.animateItemFastScroll() = with(itemScope) { this@animateItemFastScroll.animateItem(fadeInSpec = null, fadeOutSpec = null) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/Navigator.kt ================================================ package eu.kanade.presentation.util import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.ContentTransform import androidx.compose.runtime.Composable import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.Modifier import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.ScreenModelStore import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.core.screen.ScreenKey import cafe.adriel.voyager.core.screen.uniqueScreenKey import cafe.adriel.voyager.core.stack.StackEvent import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.transitions.ScreenTransitionContent import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.plus import soup.compose.material.motion.animation.materialSharedAxisX import soup.compose.material.motion.animation.rememberSlideDistance /** * For invoking back press to the parent activity */ val LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null } interface Tab : cafe.adriel.voyager.navigator.tab.Tab { suspend fun onReselect(navigator: Navigator) {} } abstract class Screen : Screen { override val key: ScreenKey = uniqueScreenKey } /** * A variant of ScreenModel.coroutineScope except with the IO dispatcher instead of the * main dispatcher. */ val ScreenModel.ioCoroutineScope: CoroutineScope get() = ScreenModelStore.getOrPutDependency( screenModel = this, name = "ScreenModelIoCoroutineScope", factory = { key -> CoroutineScope(Dispatchers.IO + SupervisorJob()) + CoroutineName(key) }, onDispose = { scope -> scope.cancel() }, ) interface AssistContentScreen { fun onProvideAssistUrl(): String? } @Composable fun DefaultNavigatorScreenTransition( navigator: Navigator, modifier: Modifier = Modifier, ) { val slideDistance = rememberSlideDistance() ScreenTransition( navigator = navigator, transition = { materialSharedAxisX( forward = navigator.lastEvent != StackEvent.Pop, slideDistance = slideDistance, ) }, modifier = modifier, ) } @Composable fun ScreenTransition( navigator: Navigator, transition: AnimatedContentTransitionScope.() -> ContentTransform, modifier: Modifier = Modifier, content: ScreenTransitionContent = { it.Content() }, ) { AnimatedContent( targetState = navigator.lastItem, transitionSpec = transition, modifier = modifier, label = "transition", ) { screen -> navigator.saveableState("transition", screen) { content(screen) } } BackHandler(enabled = navigator.canPop, onBack = navigator::pop) } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/Permissions.kt ================================================ package eu.kanade.presentation.util import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.compose.LocalLifecycleOwner @Composable fun rememberRequestPackageInstallsPermissionState(initialValue: Boolean = false): Boolean { val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current var installGranted by remember { mutableStateOf(initialValue) } DisposableEffect(lifecycleOwner.lifecycle) { val observer = object : DefaultLifecycleObserver { override fun onResume(owner: LifecycleOwner) { installGranted = context.packageManager.canRequestPackageInstalls() } } lifecycleOwner.lifecycle.addObserver(observer) onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } } return installGranted } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/Resources.kt ================================================ package eu.kanade.presentation.util import android.content.res.Resources import androidx.annotation.DrawableRes import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.platform.LocalContext import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.toBitmap /** * Create a BitmapPainter from a drawable resource. * Use this only if [androidx.compose.ui.res.painterResource] doesn't work. * * @param id the resource identifier * * @return the bitmap associated with the resource */ @Composable fun rememberResourceBitmapPainter(@DrawableRes id: Int): BitmapPainter { val context = LocalContext.current return remember(id) { val drawable = ContextCompat.getDrawable(context, id) ?: throw Resources.NotFoundException() BitmapPainter(drawable.toBitmap().asImageBitmap()) } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt ================================================ package eu.kanade.presentation.util import android.content.Context import android.text.format.DateUtils import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import java.time.Instant import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes fun Duration.toDurationString(context: Context, fallback: String): String { return toComponents { days, hours, minutes, seconds, _ -> buildList(4) { if (days != 0L) add(context.stringResource(MR.strings.day_short, days)) if (hours != 0) add(context.stringResource(MR.strings.hour_short, hours)) if (minutes != 0 && (days == 0L || hours == 0)) { add( context.stringResource(MR.strings.minute_short, minutes), ) } if (seconds != 0 && days == 0L && hours == 0) add(context.stringResource(MR.strings.seconds_short, seconds)) }.joinToString(" ").ifBlank { fallback } } } @Composable @ReadOnlyComposable fun relativeTimeSpanString(epochMillis: Long): String { val now = Instant.now().toEpochMilli() return when { epochMillis <= 0L -> stringResource(MR.strings.relative_time_span_never) now - epochMillis < 1.minutes.inWholeMilliseconds -> stringResource( MR.strings.updates_last_update_info_just_now, ) else -> DateUtils.getRelativeTimeSpanString(epochMillis, now, DateUtils.MINUTE_IN_MILLIS).toString() } } ================================================ FILE: app/src/main/java/eu/kanade/presentation/util/WindowSize.kt ================================================ package eu.kanade.presentation.util import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalConfiguration import eu.kanade.tachiyomi.util.system.isTabletUi @Composable @ReadOnlyComposable fun isTabletUi(): Boolean { return LocalConfiguration.current.isTabletUi() } ================================================ FILE: app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt ================================================ package eu.kanade.presentation.webview import android.content.pm.ApplicationInfo import android.graphics.Bitmap import android.os.Message import android.webkit.JsPromptResult import android.webkit.JsResult import android.webkit.WebResourceRequest import android.webkit.WebView import androidx.activity.compose.BackHandler import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.automirrored.outlined.ArrowForward import androidx.compose.material.icons.outlined.Close import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp import cafe.adriel.voyager.core.stack.mutableStateStackOf import com.kevinnzou.web.AccompanistWebChromeClient import com.kevinnzou.web.AccompanistWebViewClient import com.kevinnzou.web.LoadingState import com.kevinnzou.web.WebContent import com.kevinnzou.web.WebView import com.kevinnzou.web.WebViewNavigator import com.kevinnzou.web.WebViewState import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.WarningBanner import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.getHtml import eu.kanade.tachiyomi.util.system.setDefaultSettings import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource class WebViewWindow(webContent: WebContent, val navigator: WebViewNavigator) { var state by mutableStateOf(WebViewState(webContent)) var popupMessage: Message? = null private set var webView: WebView? = null constructor(popupMessage: Message, navigator: WebViewNavigator) : this(WebContent.NavigatorOnly, navigator) { this.popupMessage = popupMessage } } @Composable fun WebViewScreenContent( onNavigateUp: () -> Unit, initialTitle: String?, url: String, onShare: (String) -> Unit, onOpenInBrowser: (String) -> Unit, onClearCookies: (String) -> Unit, headers: Map = emptyMap(), onUrlChange: (String) -> Unit = {}, ) { val coroutineScope = rememberCoroutineScope() val windowStack = remember { mutableStateStackOf( WebViewWindow( WebContent.Url(url = url, additionalHttpHeaders = headers), WebViewNavigator(coroutineScope), ), ) } val currentWindow = windowStack.lastItemOrNull!! val navigator = currentWindow.navigator val uriHandler = LocalUriHandler.current val scope = rememberCoroutineScope() var currentUrl by remember { mutableStateOf(url) } var showCloudflareHelp by remember { mutableStateOf(false) } var isActive by remember { mutableStateOf(true) } DisposableEffect(Unit) { onDispose { isActive = false } } val webClient = remember { object : AccompanistWebViewClient() { override fun onPageStarted(view: WebView, url: String?, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) url?.let { currentUrl = it onUrlChange(it) } } override fun onPageFinished(view: WebView, url: String?) { super.onPageFinished(view, url) scope.launch { val html = view.getHtml() showCloudflareHelp = "window._cf_chl_opt" in html || "Ray ID is" in html } } override fun doUpdateVisitedHistory( view: WebView, url: String?, isReload: Boolean, ) { super.doUpdateVisitedHistory(view, url, isReload) url?.let { currentUrl = it onUrlChange(it) } } override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest?, ): Boolean { val url = request?.url?.toString() ?: return false // Ignore intents urls if (url.startsWith("intent://")) return true // Only open valid web urls if (url.startsWith("http") || url.startsWith("https")) { if (url != view?.url) { view?.loadUrl(url, headers) return true } } return false } } } val webChromeClient = remember { object : AccompanistWebChromeClient() { override fun onCreateWindow( view: WebView, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message, ): Boolean { // if it wasn't initiated by a user gesture, we should ignore it like a normal browser would if (isUserGesture) { windowStack.push(WebViewWindow(resultMsg, WebViewNavigator(coroutineScope))) return true } return false } override fun onJsAlert(view: WebView, url: String?, message: String?, result: JsResult): Boolean { if (!isActive) { result.confirm() return true } return super.onJsAlert(view, url, message, result) } override fun onJsConfirm(view: WebView, url: String?, message: String?, result: JsResult): Boolean { if (!isActive) { result.cancel() return true } return super.onJsConfirm(view, url, message, result) } override fun onJsPrompt( view: WebView, url: String?, message: String?, defaultValue: String?, result: JsPromptResult, ): Boolean { if (!isActive) { result.cancel() return true } return super.onJsPrompt(view, url, message, defaultValue, result) } } } fun initializePopup(webView: WebView, message: Message): WebView { val transport = message.obj as WebView.WebViewTransport transport.webView = webView message.sendToTarget() return webView } val popState = remember<() -> Unit> { { if (windowStack.size == 1) { onNavigateUp() } else { windowStack.pop() } } } BackHandler(windowStack.size > 1, popState) Scaffold( topBar = { Box { Column { AppBar( title = currentWindow.state.pageTitle ?: initialTitle, subtitle = currentUrl, navigateUp = onNavigateUp, navigationIcon = Icons.Outlined.Close, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_webview_back), icon = Icons.AutoMirrored.Outlined.ArrowBack, onClick = { if (navigator.canGoBack) { navigator.navigateBack() } }, enabled = navigator.canGoBack, ), AppBar.Action( title = stringResource(MR.strings.action_webview_forward), icon = Icons.AutoMirrored.Outlined.ArrowForward, onClick = { if (navigator.canGoForward) { navigator.navigateForward() } }, enabled = navigator.canGoForward, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_webview_refresh), onClick = { navigator.reload() }, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_share), onClick = { onShare(currentUrl) }, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_open_in_browser), onClick = { onOpenInBrowser(currentUrl) }, ), AppBar.OverflowAction( title = stringResource(MR.strings.pref_clear_cookies), onClick = { onClearCookies(currentUrl) }, ), ).builder().apply { if (windowStack.size > 1) { add( 0, AppBar.Action( title = stringResource(MR.strings.action_webview_close_tab), icon = ImageVector.vectorResource(R.drawable.ic_tab_close_24px), onClick = popState, ), ) } }.build(), ) }, ) if (showCloudflareHelp) { Surface( modifier = Modifier.padding(8.dp), ) { WarningBanner( textRes = MR.strings.information_cloudflare_help, modifier = Modifier .clip(MaterialTheme.shapes.small) .clickable { uriHandler.openUri( "https://mihon.app/docs/guides/troubleshooting/#cloudflare", ) }, ) } } } when (val loadingState = currentWindow.state.loadingState) { is LoadingState.Initializing -> LinearProgressIndicator( modifier = Modifier .fillMaxWidth() .align(Alignment.BottomCenter), ) is LoadingState.Loading -> LinearProgressIndicator( progress = { loadingState.progress }, modifier = Modifier .fillMaxWidth() .align(Alignment.BottomCenter), ) else -> {} } } }, ) { contentPadding -> // We need to key the WebView composable to the window object since simply updating the WebView composable will // not cause it to re-invoke the WebView factory and render the new current window's WebView. This lets us // completely reset the WebView composable when the current window switches. key(currentWindow) { WebView( state = currentWindow.state, modifier = Modifier .fillMaxSize() .padding(contentPadding), navigator = navigator, onCreated = { webView -> webView.setDefaultSettings() // Debug mode (chrome://inspect/#devices) if (BuildConfig.DEBUG && 0 != webView.context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE ) { WebView.setWebContentsDebuggingEnabled(true) } headers["user-agent"]?.let { webView.settings.userAgentString = it } }, onDispose = { webView -> val window = windowStack.items.find { it.webView == webView } if (window == null) { // If we couldn't find any window on the stack that owns this WebView, it means that we can // safely dispose of it because the window containing it has been closed. webView.destroy() } else { // The composable is being disposed but the WebView object is not. // When the WebView element is recomposed, we will want the WebView to resume from its state // before it was unmounted, we won't want it to reset back to its original target. window.state.content = WebContent.NavigatorOnly } }, client = webClient, chromeClient = webChromeClient, factory = { context -> currentWindow.webView ?: WebView(context).also { webView -> currentWindow.webView = webView currentWindow.popupMessage?.let { initializePopup(webView, it) } } }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/App.kt ================================================ package eu.kanade.tachiyomi import android.annotation.SuppressLint import android.app.Application import android.app.PendingIntent import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.Looper import android.webkit.WebView import androidx.core.content.ContextCompat import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.lifecycleScope import coil3.ImageLoader import coil3.SingletonImageLoader import coil3.memory.MemoryCache import coil3.network.okhttp.OkHttpNetworkFetcherFactory import coil3.request.allowRgb565 import coil3.request.crossfade import coil3.util.DebugLogger import dev.mihon.injekt.patchInjekt import eu.kanade.domain.DomainModule import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode import eu.kanade.tachiyomi.core.security.PrivacyPreferences import eu.kanade.tachiyomi.crash.CrashActivity import eu.kanade.tachiyomi.crash.GlobalExceptionHandler import eu.kanade.tachiyomi.data.coil.BufferedSourceFetcher import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher import eu.kanade.tachiyomi.data.coil.MangaCoverKeyer import eu.kanade.tachiyomi.data.coil.MangaKeyer import eu.kanade.tachiyomi.data.coil.TachiyomiImageDecoder import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.di.AppModule import eu.kanade.tachiyomi.di.PreferenceModule import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.NetworkPreferences import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.GLUtil import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.animatorDurationScale import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notify import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.AndroidLogcatLogger import logcat.LogPriority import logcat.LogcatLogger import mihon.core.migration.Migrator import mihon.core.migration.migrations.migrations import mihon.telemetry.TelemetryConfig import org.conscrypt.Conscrypt import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR import tachiyomi.presentation.widget.WidgetManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import java.security.Security class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factory { private val basePreferences: BasePreferences by injectLazy() private val privacyPreferences: PrivacyPreferences by injectLazy() private val networkPreferences: NetworkPreferences by injectLazy() private val disableIncognitoReceiver = DisableIncognitoReceiver() @SuppressLint("LaunchActivityFromNotification") override fun onCreate() { super.onCreate() patchInjekt() TelemetryConfig.init(applicationContext) GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java) // TLS 1.3 support for Android < 10 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { Security.insertProviderAt(Conscrypt.newProvider(), 1) } // Avoid potential crashes if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { val process = getProcessName() if (packageName != process) WebView.setDataDirectorySuffix(process) } Injekt.importModule(PreferenceModule(this)) Injekt.importModule(AppModule(this)) Injekt.importModule(DomainModule()) setupNotificationChannels() ProcessLifecycleOwner.get().lifecycle.addObserver(this) val scope = ProcessLifecycleOwner.get().lifecycleScope // Show notification to disable Incognito Mode when it's enabled basePreferences.incognitoMode.changes() .onEach { enabled -> if (enabled) { disableIncognitoReceiver.register() notify( Notifications.ID_INCOGNITO_MODE, Notifications.CHANNEL_INCOGNITO_MODE, ) { setContentTitle(stringResource(MR.strings.pref_incognito_mode)) setContentText(stringResource(MR.strings.notification_incognito_text)) setSmallIcon(R.drawable.ic_glasses_24dp) setOngoing(true) val pendingIntent = PendingIntent.getBroadcast( this@App, 0, Intent(ACTION_DISABLE_INCOGNITO_MODE).setPackage(BuildConfig.APPLICATION_ID), PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE, ) setContentIntent(pendingIntent) } } else { disableIncognitoReceiver.unregister() cancelNotification(Notifications.ID_INCOGNITO_MODE) } } .launchIn(scope) privacyPreferences.analytics .changes() .onEach(TelemetryConfig::setAnalyticsEnabled) .launchIn(scope) privacyPreferences.crashlytics .changes() .onEach(TelemetryConfig::setCrashlyticsEnabled) .launchIn(scope) basePreferences.hardwareBitmapThreshold.let { preference -> if (!preference.isSet()) preference.set(GLUtil.DEVICE_TEXTURE_LIMIT) } basePreferences.hardwareBitmapThreshold.changes() .onEach { ImageUtil.hardwareBitmapThreshold = it } .launchIn(scope) setAppCompatDelegateThemeMode(Injekt.get().themeMode.get()) // Updates widget update WidgetManager(Injekt.get(), Injekt.get()).apply { init(scope) } if (!LogcatLogger.isInstalled) { val minLogPriority = when { networkPreferences.verboseLogging.get() -> LogPriority.VERBOSE BuildConfig.DEBUG -> LogPriority.DEBUG else -> LogPriority.INFO } LogcatLogger.install() LogcatLogger.loggers += AndroidLogcatLogger(minLogPriority) } initializeMigrator() } private fun initializeMigrator() { val preferenceStore = Injekt.get() val preference = preferenceStore.getInt(Preference.appStateKey("last_version_code"), 0) logcat { "Migration from ${preference.get()} to ${BuildConfig.VERSION_CODE}" } Migrator.initialize( old = preference.get(), new = BuildConfig.VERSION_CODE, migrations = migrations, onMigrationComplete = { logcat { "Updating last version to ${BuildConfig.VERSION_CODE}" } preference.set(BuildConfig.VERSION_CODE) }, ) } override fun newImageLoader(context: Context): ImageLoader { return ImageLoader.Builder(this).apply { val callFactoryLazy = lazy { Injekt.get().client } components { // NetworkFetcher.Factory add(OkHttpNetworkFetcherFactory(callFactoryLazy::value)) // Decoder.Factory add(TachiyomiImageDecoder.Factory()) // Fetcher.Factory add(BufferedSourceFetcher.Factory()) add(MangaCoverFetcher.MangaCoverFactory(callFactoryLazy)) add(MangaCoverFetcher.MangaFactory(callFactoryLazy)) // Keyer add(MangaCoverKeyer()) add(MangaKeyer()) } memoryCache( MemoryCache.Builder() .maxSizePercent(context) .build(), ) crossfade((300 * this@App.animatorDurationScale).toInt()) allowRgb565(DeviceUtil.isLowRamDevice(this@App)) if (networkPreferences.verboseLogging.get()) logger(DebugLogger()) // Coil spawns a new thread for every image load by default fetcherCoroutineContext(Dispatchers.IO.limitedParallelism(8)) decoderCoroutineContext(Dispatchers.IO.limitedParallelism(3)) } .build() } override fun onStart(owner: LifecycleOwner) { SecureActivityDelegate.onApplicationStart() } override fun onStop(owner: LifecycleOwner) { SecureActivityDelegate.onApplicationStopped() } override fun getPackageName(): String { try { // Override the value passed as X-Requested-With in WebView requests val stackTrace = Looper.getMainLooper().thread.stackTrace val isChromiumCall = stackTrace.any { trace -> trace.className.lowercase() in setOf("org.chromium.base.buildinfo", "org.chromium.base.apkinfo") && trace.methodName.lowercase() in setOf("getall", "getpackagename", "") } if (isChromiumCall) return WebViewUtil.spoofedPackageName(applicationContext) } catch (_: Exception) { } return super.getPackageName() } private fun setupNotificationChannels() { try { Notifications.createChannels(this) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to modify notification channels" } } } private inner class DisableIncognitoReceiver : BroadcastReceiver() { private var registered = false override fun onReceive(context: Context, intent: Intent) { basePreferences.incognitoMode.set(false) } fun register() { if (!registered) { ContextCompat.registerReceiver( this@App, this, IntentFilter(ACTION_DISABLE_INCOGNITO_MODE), ContextCompat.RECEIVER_NOT_EXPORTED, ) registered = true } } fun unregister() { if (registered) { unregisterReceiver(this) registered = false } } } } private const val ACTION_DISABLE_INCOGNITO_MODE = "tachi.action.DISABLE_INCOGNITO_MODE" ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/AppInfo.kt ================================================ package eu.kanade.tachiyomi import tachiyomi.core.common.util.system.ImageUtil /** * Used by extensions. */ @Suppress("UNUSED") object AppInfo { /** * Version code of the host application. May be useful for sharing as User-Agent information. * Note that this value differs between forks so logic should not rely on it. * * @since extension-lib 1.3 */ fun getVersionCode(): Int = BuildConfig.VERSION_CODE /** * Version name of the host application. May be useful for sharing as User-Agent information. * Note that this value differs between forks so logic should not rely on it. * * @since extension-lib 1.3 */ fun getVersionName(): String = BuildConfig.VERSION_NAME /** * A list of supported image MIME types by the reader. * e.g. ["image/jpeg", "image/png", ...] * * @since extension-lib 1.5 */ fun getSupportedImageMimeTypes(): List = ImageUtil.ImageType.entries.map { it.mime } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/crash/CrashActivity.kt ================================================ package eu.kanade.tachiyomi.crash import android.content.Intent import android.os.Bundle import androidx.core.view.WindowCompat import eu.kanade.presentation.crash.CrashScreen import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.util.view.setComposeContent class CrashActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) val exception = GlobalExceptionHandler.getThrowableFromIntent(intent) setComposeContent { CrashScreen( exception = exception, onRestartClick = { finishAffinity() startActivity(Intent(this@CrashActivity, MainActivity::class.java)) }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/crash/GlobalExceptionHandler.kt ================================================ package eu.kanade.tachiyomi.crash import android.content.Context import android.content.Intent import kotlinx.serialization.KSerializer import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.Json import logcat.LogPriority import tachiyomi.core.common.util.system.logcat class GlobalExceptionHandler private constructor( private val applicationContext: Context, private val defaultHandler: Thread.UncaughtExceptionHandler, private val activityToBeLaunched: Class<*>, ) : Thread.UncaughtExceptionHandler { object ThrowableSerializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Throwable", PrimitiveKind.STRING) override fun deserialize(decoder: Decoder): Throwable = Throwable(message = decoder.decodeString()) override fun serialize(encoder: Encoder, value: Throwable) = encoder.encodeString(value.stackTraceToString()) } override fun uncaughtException(thread: Thread, exception: Throwable) { logcat(priority = LogPriority.ERROR, throwable = exception) launchActivity(applicationContext, activityToBeLaunched, exception) defaultHandler.uncaughtException(thread, exception) } private fun launchActivity( applicationContext: Context, activity: Class<*>, exception: Throwable, ) { val intent = Intent(applicationContext, activity).apply { putExtra(INTENT_EXTRA, Json.encodeToString(ThrowableSerializer, exception)) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) } applicationContext.startActivity(intent) } companion object { private const val INTENT_EXTRA = "Throwable" fun initialize( applicationContext: Context, activityToBeLaunched: Class<*>, ) { val handler = GlobalExceptionHandler( applicationContext, Thread.getDefaultUncaughtExceptionHandler() as Thread.UncaughtExceptionHandler, activityToBeLaunched, ) Thread.setDefaultUncaughtExceptionHandler(handler) } fun getThrowableFromIntent(intent: Intent): Throwable? { return try { Json.decodeFromString(ThrowableSerializer, intent.getStringExtra(INTENT_EXTRA)!!) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Wasn't able to retrieve throwable from intent" } null } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupDecoder.kt ================================================ package eu.kanade.tachiyomi.data.backup import android.content.Context import android.net.Uri import eu.kanade.tachiyomi.data.backup.models.Backup import kotlinx.serialization.SerializationException import kotlinx.serialization.protobuf.ProtoBuf import okio.buffer import okio.gzip import okio.source import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.IOException class BackupDecoder( private val context: Context, private val parser: ProtoBuf = Injekt.get(), ) { /** * Decode a potentially-gzipped backup. */ fun decode(uri: Uri): Backup { return context.contentResolver.openInputStream(uri)!!.use { inputStream -> val source = inputStream.source().buffer() val peeked = source.peek().apply { require(2) } val id1id2 = peeked.readShort() val backupString = when (id1id2.toInt()) { 0x1f8b -> source.gzip().buffer() // 0x1f8b is gzip magic bytes MAGIC_JSON_SIGNATURE1, MAGIC_JSON_SIGNATURE2, MAGIC_JSON_SIGNATURE3 -> { throw IOException(context.stringResource(MR.strings.invalid_backup_file_json)) } else -> source }.use { it.readByteArray() } try { parser.decodeFromByteArray(Backup.serializer(), backupString) } catch (_: SerializationException) { throw IOException(context.stringResource(MR.strings.invalid_backup_file_unknown)) } } } companion object { private const val MAGIC_JSON_SIGNATURE1 = 0x7b7d // `{}` private const val MAGIC_JSON_SIGNATURE2 = 0x7b22 // `{"` private const val MAGIC_JSON_SIGNATURE3 = 0x7b0a // `{\n` } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt ================================================ package eu.kanade.tachiyomi.data.backup import android.content.Context import android.net.Uri import eu.kanade.tachiyomi.data.track.TrackerManager import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class BackupFileValidator( private val context: Context, private val sourceManager: SourceManager = Injekt.get(), private val trackerManager: TrackerManager = Injekt.get(), ) { /** * Checks for critical backup file data. * * @return List of missing sources or missing trackers. */ fun validate(uri: Uri): Results { val backup = try { BackupDecoder(context).decode(uri) } catch (e: Exception) { throw IllegalStateException(e) } val sources = backup.backupSources.associate { it.sourceId to it.name } val missingSources = sources .filter { sourceManager.get(it.key) == null } .values.map { val id = it.toLongOrNull() if (id == null) { it } else { sourceManager.getOrStub(id).toString() } } .distinct() .sorted() val trackers = backup.backupManga .flatMap { it.tracking } .map { it.syncId } .distinct() val missingTrackers = trackers .mapNotNull { trackerManager.get(it.toLong()) } .filter { !it.isLoggedIn } .map { it.name } .sorted() return Results(missingSources, missingTrackers) } data class Results( val missingSources: List, val missingTrackers: List, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt ================================================ package eu.kanade.tachiyomi.data.backup import android.content.Context import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.common.i18n.pluralStringResource import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.displayablePath import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.io.File import java.util.concurrent.TimeUnit class BackupNotifier(private val context: Context) { private val preferences: SecurityPreferences by injectLazy() private val progressNotificationBuilder = context.notificationBuilder( Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS, ) { setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setSmallIcon(R.drawable.ic_mihon) setAutoCancel(false) setOngoing(true) setOnlyAlertOnce(true) } private val completeNotificationBuilder = context.notificationBuilder( Notifications.CHANNEL_BACKUP_RESTORE_COMPLETE, ) { setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setSmallIcon(R.drawable.ic_mihon) setAutoCancel(false) } private fun NotificationCompat.Builder.show(id: Int) { context.notify(id, build()) } fun showBackupProgress(): NotificationCompat.Builder { val builder = with(progressNotificationBuilder) { setContentTitle(context.stringResource(MR.strings.creating_backup)) setProgress(0, 0, true) } builder.show(Notifications.ID_BACKUP_PROGRESS) return builder } fun showBackupError(error: String?) { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { setContentTitle(context.stringResource(MR.strings.creating_backup_error)) setContentText(error) show(Notifications.ID_BACKUP_COMPLETE) } } fun showBackupComplete(file: UniFile) { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { setContentTitle(context.stringResource(MR.strings.backup_created)) setContentText(file.displayablePath) clearActions() addAction( R.drawable.ic_share_24dp, context.stringResource(MR.strings.action_share), NotificationReceiver.shareBackupPendingActivity(context, file.uri), ) show(Notifications.ID_BACKUP_COMPLETE) } } fun showRestoreProgress( content: String = "", progress: Int = 0, maxAmount: Int = 100, sync: Boolean = false, ): NotificationCompat.Builder { val builder = with(progressNotificationBuilder) { val contentTitle = if (sync) { context.stringResource(MR.strings.syncing_library) } else { context.stringResource(MR.strings.restoring_backup) } setContentTitle(contentTitle) if (!preferences.hideNotificationContent.get()) { setContentText(content) } setProgress(maxAmount, progress, false) setOnlyAlertOnce(true) clearActions() addAction( R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel), NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS), ) } builder.show(Notifications.ID_RESTORE_PROGRESS) return builder } fun showRestoreError(error: String?) { context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) with(completeNotificationBuilder) { setContentTitle(context.stringResource(MR.strings.restoring_backup_error)) setContentText(error) show(Notifications.ID_RESTORE_COMPLETE) } } fun showRestoreComplete( time: Long, errorCount: Int, path: String?, file: String?, sync: Boolean, ) { val contentTitle = if (sync) { context.stringResource(MR.strings.library_sync_complete) } else { context.stringResource(MR.strings.restore_completed) } context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) val timeString = context.stringResource( MR.strings.restore_duration, TimeUnit.MILLISECONDS.toMinutes(time), TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toMinutes(time), ), ) with(completeNotificationBuilder) { setContentTitle(contentTitle) setContentText( context.pluralStringResource( MR.plurals.restore_completed_message, errorCount, timeString, errorCount, ), ) clearActions() if (errorCount > 0 && !path.isNullOrEmpty() && !file.isNullOrEmpty()) { val destFile = File(path, file) val uri = destFile.getUriCompat(context) val errorLogIntent = NotificationReceiver.openErrorLogPendingActivity(context, uri) setContentIntent(errorLogIntent) addAction( R.drawable.ic_folder_24dp, context.stringResource(MR.strings.action_show_errors), errorLogIntent, ) } show(Notifications.ID_RESTORE_COMPLETE) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt ================================================ package eu.kanade.tachiyomi.data.backup.create import android.content.Context import android.content.pm.ServiceInfo import android.net.Uri import android.os.Build import androidx.core.net.toUri import androidx.work.BackoffPolicy import androidx.work.Constraints import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingWorkPolicy import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkerParameters import androidx.work.workDataOf import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.data.backup.BackupNotifier import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.setForegroundSafely import eu.kanade.tachiyomi.util.system.workManager import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.storage.service.StorageManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.concurrent.TimeUnit class BackupCreateJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { private val notifier = BackupNotifier(context) override suspend fun doWork(): Result { val isAutoBackup = inputData.getBoolean(IS_AUTO_BACKUP_KEY, true) if (isAutoBackup && BackupRestoreJob.isRunning(context)) return Result.retry() val uri = inputData.getString(LOCATION_URI_KEY)?.toUri() ?: getAutomaticBackupLocation() ?: return Result.failure() setForegroundSafely() val options = inputData.getBooleanArray(OPTIONS_KEY)?.let { BackupOptions.fromBooleanArray(it) } ?: BackupOptions() return try { val location = BackupCreator(context, isAutoBackup).backup(uri, options) if (!isAutoBackup) { notifier.showBackupComplete(UniFile.fromUri(context, location.toUri())!!) } Result.success() } catch (e: Exception) { logcat(LogPriority.ERROR, e) if (!isAutoBackup) notifier.showBackupError(e.message) Result.failure() } finally { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) } } override suspend fun getForegroundInfo(): ForegroundInfo { return ForegroundInfo( Notifications.ID_BACKUP_PROGRESS, notifier.showBackupProgress().build(), if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC } else { 0 }, ) } private fun getAutomaticBackupLocation(): Uri? { val storageManager = Injekt.get() return storageManager.getAutomaticBackupsDirectory()?.uri } companion object { fun isManualJobRunning(context: Context): Boolean { return context.workManager.isRunning(TAG_MANUAL) } fun setupTask(context: Context, prefInterval: Int? = null) { val backupPreferences = Injekt.get() val interval = prefInterval ?: backupPreferences.backupInterval.get() if (interval > 0) { val constraints = Constraints( requiresBatteryNotLow = true, ) val request = PeriodicWorkRequestBuilder( interval.toLong(), TimeUnit.HOURS, 10, TimeUnit.MINUTES, ) .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 10, TimeUnit.MINUTES) .addTag(TAG_AUTO) .setConstraints(constraints) .setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true)) .build() context.workManager.enqueueUniquePeriodicWork(TAG_AUTO, ExistingPeriodicWorkPolicy.UPDATE, request) } else { context.workManager.cancelUniqueWork(TAG_AUTO) } } fun startNow(context: Context, uri: Uri, options: BackupOptions) { val inputData = workDataOf( IS_AUTO_BACKUP_KEY to false, LOCATION_URI_KEY to uri.toString(), OPTIONS_KEY to options.asBooleanArray(), ) val request = OneTimeWorkRequestBuilder() .addTag(TAG_MANUAL) .setInputData(inputData) .build() context.workManager.enqueueUniqueWork(TAG_MANUAL, ExistingWorkPolicy.KEEP, request) } } } private const val TAG_AUTO = "BackupCreator" private const val TAG_MANUAL = "$TAG_AUTO:manual" private const val IS_AUTO_BACKUP_KEY = "is_auto_backup" // Boolean private const val LOCATION_URI_KEY = "location_uri" // String private const val OPTIONS_KEY = "options" // BooleanArray ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt ================================================ package eu.kanade.tachiyomi.data.backup.create import android.content.Context import android.net.Uri import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.backup.BackupFileValidator import eu.kanade.tachiyomi.data.backup.create.creators.CategoriesBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.ExtensionRepoBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.MangaBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.PreferenceBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.SourcesBackupCreator import eu.kanade.tachiyomi.data.backup.models.Backup import eu.kanade.tachiyomi.data.backup.models.BackupCategory import eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos import eu.kanade.tachiyomi.data.backup.models.BackupManga import eu.kanade.tachiyomi.data.backup.models.BackupPreference import eu.kanade.tachiyomi.data.backup.models.BackupSource import eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences import kotlinx.serialization.protobuf.ProtoBuf import logcat.LogPriority import okio.buffer import okio.gzip import okio.sink import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.FileOutputStream import java.text.SimpleDateFormat import java.time.Instant import java.util.Date import java.util.Locale class BackupCreator( private val context: Context, private val isAutoBackup: Boolean, private val parser: ProtoBuf = Injekt.get(), private val getFavorites: GetFavorites = Injekt.get(), private val backupPreferences: BackupPreferences = Injekt.get(), private val mangaRepository: MangaRepository = Injekt.get(), private val categoriesBackupCreator: CategoriesBackupCreator = CategoriesBackupCreator(), private val mangaBackupCreator: MangaBackupCreator = MangaBackupCreator(), private val preferenceBackupCreator: PreferenceBackupCreator = PreferenceBackupCreator(), private val extensionRepoBackupCreator: ExtensionRepoBackupCreator = ExtensionRepoBackupCreator(), private val sourcesBackupCreator: SourcesBackupCreator = SourcesBackupCreator(), ) { suspend fun backup(uri: Uri, options: BackupOptions): String { var file: UniFile? = null try { file = if (isAutoBackup) { // Get dir of file and create val dir = UniFile.fromUri(context, uri) // Delete older backups dir?.listFiles { _, filename -> FILENAME_REGEX.matches(filename) } .orEmpty() .sortedByDescending { it.name } .drop(MAX_AUTO_BACKUPS - 1) .forEach { it.delete() } // Create new file to place backup dir?.createFile(getFilename()) } else { UniFile.fromUri(context, uri) } if (file == null || !file.isFile) { throw IllegalStateException(context.stringResource(MR.strings.create_backup_file_error)) } val nonFavoriteManga = if (options.readEntries) mangaRepository.getReadMangaNotInLibrary() else emptyList() val backupManga = backupMangas(getFavorites.await() + nonFavoriteManga, options) val backup = Backup( backupManga = backupManga, backupCategories = backupCategories(options), backupSources = backupSources(backupManga), backupPreferences = backupAppPreferences(options), backupExtensionRepo = backupExtensionRepos(options), backupSourcePreferences = backupSourcePreferences(options), ) val byteArray = parser.encodeToByteArray(Backup.serializer(), backup) if (byteArray.isEmpty()) { throw IllegalStateException(context.stringResource(MR.strings.empty_backup_error)) } file.openOutputStream() .also { // Force overwrite old file (it as? FileOutputStream)?.channel?.truncate(0) } .sink().gzip().buffer().use { it.write(byteArray) } val fileUri = file.uri // Make sure it's a valid backup file BackupFileValidator(context).validate(fileUri) if (isAutoBackup) { backupPreferences.lastAutoBackupTimestamp.set(Instant.now().toEpochMilli()) } return fileUri.toString() } catch (e: Exception) { logcat(LogPriority.ERROR, e) file?.delete() throw e } } private suspend fun backupCategories(options: BackupOptions): List { if (!options.categories) return emptyList() return categoriesBackupCreator() } private suspend fun backupMangas(mangas: List, options: BackupOptions): List { if (!options.libraryEntries) return emptyList() return mangaBackupCreator(mangas, options) } private fun backupSources(mangas: List): List { return sourcesBackupCreator(mangas) } private fun backupAppPreferences(options: BackupOptions): List { if (!options.appSettings) return emptyList() return preferenceBackupCreator.createApp(includePrivatePreferences = options.privateSettings) } private suspend fun backupExtensionRepos(options: BackupOptions): List { if (!options.extensionRepoSettings) return emptyList() return extensionRepoBackupCreator() } private fun backupSourcePreferences(options: BackupOptions): List { if (!options.sourceSettings) return emptyList() return preferenceBackupCreator.createSource(includePrivatePreferences = options.privateSettings) } companion object { private const val MAX_AUTO_BACKUPS: Int = 4 private val FILENAME_REGEX = """${BuildConfig.APPLICATION_ID}_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.tachibk""".toRegex() fun getFilename(): String { val date = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.ENGLISH).format(Date()) return "${BuildConfig.APPLICATION_ID}_$date.tachibk" } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt ================================================ package eu.kanade.tachiyomi.data.backup.create import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR data class BackupOptions( val libraryEntries: Boolean = true, val categories: Boolean = true, val chapters: Boolean = true, val tracking: Boolean = true, val history: Boolean = true, val readEntries: Boolean = true, val appSettings: Boolean = true, val extensionRepoSettings: Boolean = true, val sourceSettings: Boolean = true, val privateSettings: Boolean = false, ) { fun asBooleanArray() = booleanArrayOf( libraryEntries, categories, chapters, tracking, history, readEntries, appSettings, extensionRepoSettings, sourceSettings, privateSettings, ) fun canCreate() = libraryEntries || categories || appSettings || extensionRepoSettings || sourceSettings companion object { val libraryOptions = persistentListOf( Entry( label = MR.strings.manga, getter = BackupOptions::libraryEntries, setter = { options, enabled -> options.copy(libraryEntries = enabled) }, ), Entry( label = MR.strings.chapters, getter = BackupOptions::chapters, setter = { options, enabled -> options.copy(chapters = enabled) }, enabled = { it.libraryEntries }, ), Entry( label = MR.strings.track, getter = BackupOptions::tracking, setter = { options, enabled -> options.copy(tracking = enabled) }, enabled = { it.libraryEntries }, ), Entry( label = MR.strings.history, getter = BackupOptions::history, setter = { options, enabled -> options.copy(history = enabled) }, enabled = { it.libraryEntries }, ), Entry( label = MR.strings.categories, getter = BackupOptions::categories, setter = { options, enabled -> options.copy(categories = enabled) }, ), Entry( label = MR.strings.non_library_settings, getter = BackupOptions::readEntries, setter = { options, enabled -> options.copy(readEntries = enabled) }, enabled = { it.libraryEntries }, ), ) val settingsOptions = persistentListOf( Entry( label = MR.strings.app_settings, getter = BackupOptions::appSettings, setter = { options, enabled -> options.copy(appSettings = enabled) }, ), Entry( label = MR.strings.extensionRepo_settings, getter = BackupOptions::extensionRepoSettings, setter = { options, enabled -> options.copy(extensionRepoSettings = enabled) }, ), Entry( label = MR.strings.source_settings, getter = BackupOptions::sourceSettings, setter = { options, enabled -> options.copy(sourceSettings = enabled) }, ), Entry( label = MR.strings.private_settings, getter = BackupOptions::privateSettings, setter = { options, enabled -> options.copy(privateSettings = enabled) }, enabled = { it.appSettings || it.sourceSettings }, ), ) fun fromBooleanArray(array: BooleanArray) = BackupOptions( libraryEntries = array[0], categories = array[1], chapters = array[2], tracking = array[3], history = array[4], readEntries = array[5], appSettings = array[6], extensionRepoSettings = array[7], sourceSettings = array[8], privateSettings = array[9], ) } data class Entry( val label: StringResource, val getter: (BackupOptions) -> Boolean, val setter: (BackupOptions, Boolean) -> BackupOptions, val enabled: (BackupOptions) -> Boolean = { true }, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/CategoriesBackupCreator.kt ================================================ package eu.kanade.tachiyomi.data.backup.create.creators import eu.kanade.tachiyomi.data.backup.models.BackupCategory import eu.kanade.tachiyomi.data.backup.models.backupCategoryMapper import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.model.Category import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class CategoriesBackupCreator( private val getCategories: GetCategories = Injekt.get(), ) { suspend operator fun invoke(): List { return getCategories.await() .filterNot(Category::isSystemCategory) .map(backupCategoryMapper) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/ExtensionRepoBackupCreator.kt ================================================ package eu.kanade.tachiyomi.data.backup.create.creators import eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos import eu.kanade.tachiyomi.data.backup.models.backupExtensionReposMapper import mihon.domain.extensionrepo.interactor.GetExtensionRepo import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionRepoBackupCreator( private val getExtensionRepos: GetExtensionRepo = Injekt.get(), ) { suspend operator fun invoke(): List { return getExtensionRepos.getAll() .map(backupExtensionReposMapper) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt ================================================ package eu.kanade.tachiyomi.data.backup.create.creators import eu.kanade.tachiyomi.data.backup.create.BackupOptions import eu.kanade.tachiyomi.data.backup.models.BackupChapter import eu.kanade.tachiyomi.data.backup.models.BackupHistory import eu.kanade.tachiyomi.data.backup.models.BackupManga import eu.kanade.tachiyomi.data.backup.models.backupChapterMapper import eu.kanade.tachiyomi.data.backup.models.backupTrackMapper import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.data.DatabaseHandler import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.history.interactor.GetHistory import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MangaBackupCreator( private val handler: DatabaseHandler = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val getHistory: GetHistory = Injekt.get(), ) { suspend operator fun invoke(mangas: List, options: BackupOptions): List { return mangas.map { backupManga(it, options) } } private suspend fun backupManga(manga: Manga, options: BackupOptions): BackupManga { // Entry for this manga val mangaObject = manga.toBackupManga() mangaObject.excludedScanlators = handler.awaitList { excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(manga.id) } if (options.chapters) { // Backup all the chapters handler.awaitList { chaptersQueries.getChaptersByMangaId( mangaId = manga.id, applyScanlatorFilter = 0, // false mapper = backupChapterMapper, ) } .takeUnless(List::isEmpty) ?.let { mangaObject.chapters = it } } if (options.categories) { // Backup categories for this manga val categoriesForManga = getCategories.await(manga.id) if (categoriesForManga.isNotEmpty()) { mangaObject.categories = categoriesForManga.map { it.order } } } if (options.tracking) { val tracks = handler.awaitList { manga_syncQueries.getTracksByMangaId(manga.id, backupTrackMapper) } if (tracks.isNotEmpty()) { mangaObject.tracking = tracks } } if (options.history) { val historyByMangaId = getHistory.await(manga.id) if (historyByMangaId.isNotEmpty()) { val history = historyByMangaId.map { history -> val chapter = handler.awaitOne { chaptersQueries.getChapterById(history.chapterId) } BackupHistory(chapter.url, history.readAt?.time ?: 0L, history.readDuration) } if (history.isNotEmpty()) { mangaObject.history = history } } } return mangaObject } } private fun Manga.toBackupManga() = BackupManga( url = this.url, title = this.title, artist = this.artist, author = this.author, description = this.description, genre = this.genre.orEmpty(), status = this.status.toInt(), thumbnailUrl = this.thumbnailUrl, favorite = this.favorite, source = this.source, dateAdded = this.dateAdded, viewer = (this.viewerFlags.toInt() and ReadingMode.MASK), viewer_flags = this.viewerFlags.toInt(), chapterFlags = this.chapterFlags.toInt(), updateStrategy = this.updateStrategy, lastModifiedAt = this.lastModifiedAt, favoriteModifiedAt = this.favoriteModifiedAt, version = this.version, notes = this.notes, initialized = this.initialized, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/PreferenceBackupCreator.kt ================================================ package eu.kanade.tachiyomi.data.backup.create.creators import eu.kanade.tachiyomi.data.backup.models.BackupPreference import eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences import eu.kanade.tachiyomi.data.backup.models.BooleanPreferenceValue import eu.kanade.tachiyomi.data.backup.models.FloatPreferenceValue import eu.kanade.tachiyomi.data.backup.models.IntPreferenceValue import eu.kanade.tachiyomi.data.backup.models.LongPreferenceValue import eu.kanade.tachiyomi.data.backup.models.StringPreferenceValue import eu.kanade.tachiyomi.data.backup.models.StringSetPreferenceValue import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.preferenceKey import eu.kanade.tachiyomi.source.sourcePreferences import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class PreferenceBackupCreator( private val sourceManager: SourceManager = Injekt.get(), private val preferenceStore: PreferenceStore = Injekt.get(), ) { fun createApp(includePrivatePreferences: Boolean): List { return preferenceStore.getAll().toBackupPreferences() .withPrivatePreferences(includePrivatePreferences) } fun createSource(includePrivatePreferences: Boolean): List { return sourceManager.getCatalogueSources() .filterIsInstance() .map { BackupSourcePreferences( it.preferenceKey(), it.sourcePreferences().all.toBackupPreferences() .withPrivatePreferences(includePrivatePreferences), ) } .filter { it.prefs.isNotEmpty() } } @Suppress("UNCHECKED_CAST") private fun Map.toBackupPreferences(): List { return this .filterKeys { !Preference.isAppState(it) } .mapNotNull { (key, value) -> when (value) { is Int -> BackupPreference(key, IntPreferenceValue(value)) is Long -> BackupPreference(key, LongPreferenceValue(value)) is Float -> BackupPreference(key, FloatPreferenceValue(value)) is String -> BackupPreference(key, StringPreferenceValue(value)) is Boolean -> BackupPreference(key, BooleanPreferenceValue(value)) is Set<*> -> (value as? Set)?.let { BackupPreference(key, StringSetPreferenceValue(it)) } else -> null } } } private fun List.withPrivatePreferences(include: Boolean) = if (include) { this } else { this.filter { !Preference.isPrivate(it.key) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SourcesBackupCreator.kt ================================================ package eu.kanade.tachiyomi.data.backup.create.creators import eu.kanade.tachiyomi.data.backup.models.BackupManga import eu.kanade.tachiyomi.data.backup.models.BackupSource import eu.kanade.tachiyomi.source.Source import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class SourcesBackupCreator( private val sourceManager: SourceManager = Injekt.get(), ) { operator fun invoke(mangas: List): List { return mangas .asSequence() .map(BackupManga::source) .distinct() .map(sourceManager::getOrStub) .map { it.toBackupSource() } .toList() } } private fun Source.toBackupSource() = BackupSource( name = this.name, sourceId = this.id, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/Backup.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber @Serializable data class Backup( @ProtoNumber(1) val backupManga: List, @ProtoNumber(2) var backupCategories: List = emptyList(), // @ProtoNumber(100) var backupBrokenSources, legacy source model with non-compliant proto number, @ProtoNumber(101) var backupSources: List = emptyList(), @ProtoNumber(104) var backupPreferences: List = emptyList(), @ProtoNumber(105) var backupSourcePreferences: List = emptyList(), @ProtoNumber(106) var backupExtensionRepo: List = emptyList(), ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupCategory.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber import tachiyomi.domain.category.model.Category @Serializable class BackupCategory( @ProtoNumber(1) var name: String, @ProtoNumber(2) var order: Long = 0, @ProtoNumber(3) var id: Long = 0, // @ProtoNumber(3) val updateInterval: Int = 0, 1.x value not used in 0.x @ProtoNumber(100) var flags: Long = 0, ) { fun toCategory(id: Long) = Category( id = id, name = this@BackupCategory.name, flags = this@BackupCategory.flags, order = this@BackupCategory.order, ) } val backupCategoryMapper = { category: Category -> BackupCategory( id = category.id, name = category.name, order = category.order, flags = category.flags, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupChapter.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber import tachiyomi.domain.chapter.model.Chapter @Serializable data class BackupChapter( // in 1.x some of these values have different names // url is called key in 1.x @ProtoNumber(1) var url: String, @ProtoNumber(2) var name: String, @ProtoNumber(3) var scanlator: String? = null, @ProtoNumber(4) var read: Boolean = false, @ProtoNumber(5) var bookmark: Boolean = false, // lastPageRead is called progress in 1.x @ProtoNumber(6) var lastPageRead: Long = 0, @ProtoNumber(7) var dateFetch: Long = 0, @ProtoNumber(8) var dateUpload: Long = 0, // chapterNumber is called number is 1.x @ProtoNumber(9) var chapterNumber: Float = 0F, @ProtoNumber(10) var sourceOrder: Long = 0, @ProtoNumber(11) var lastModifiedAt: Long = 0, @ProtoNumber(12) var version: Long = 0, ) { fun toChapterImpl(): Chapter { return Chapter.create().copy( url = this@BackupChapter.url, name = this@BackupChapter.name, chapterNumber = this@BackupChapter.chapterNumber.toDouble(), scanlator = this@BackupChapter.scanlator, read = this@BackupChapter.read, bookmark = this@BackupChapter.bookmark, lastPageRead = this@BackupChapter.lastPageRead, dateFetch = this@BackupChapter.dateFetch, dateUpload = this@BackupChapter.dateUpload, sourceOrder = this@BackupChapter.sourceOrder, lastModifiedAt = this@BackupChapter.lastModifiedAt, version = this@BackupChapter.version, ) } } val backupChapterMapper = { _: Long, _: Long, url: String, name: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, chapterNumber: Double, sourceOrder: Long, dateFetch: Long, dateUpload: Long, lastModifiedAt: Long, version: Long, _: Long, -> BackupChapter( url = url, name = name, chapterNumber = chapterNumber.toFloat(), scanlator = scanlator, read = read, bookmark = bookmark, lastPageRead = lastPageRead, dateFetch = dateFetch, dateUpload = dateUpload, sourceOrder = sourceOrder, lastModifiedAt = lastModifiedAt, version = version, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupExtensionRepos.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber import mihon.domain.extensionrepo.model.ExtensionRepo @Serializable class BackupExtensionRepos( @ProtoNumber(1) var baseUrl: String, @ProtoNumber(2) var name: String, @ProtoNumber(3) var shortName: String?, @ProtoNumber(4) var website: String, @ProtoNumber(5) var signingKeyFingerprint: String, ) val backupExtensionReposMapper = { repo: ExtensionRepo -> BackupExtensionRepos( baseUrl = repo.baseUrl, name = repo.name, shortName = repo.shortName, website = repo.website, signingKeyFingerprint = repo.signingKeyFingerprint, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupHistory.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber import tachiyomi.domain.history.model.History import java.util.Date @Serializable data class BackupHistory( @ProtoNumber(1) var url: String, @ProtoNumber(2) var lastRead: Long, @ProtoNumber(3) var readDuration: Long = 0, ) { fun getHistoryImpl(): History { return History.create().copy( readAt = Date(lastRead), readDuration = readDuration, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import eu.kanade.tachiyomi.source.model.UpdateStrategy import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber import tachiyomi.domain.manga.model.Manga @Suppress("DEPRECATION") @Serializable data class BackupManga( // in 1.x some of these values have different names @ProtoNumber(1) var source: Long, // url is called key in 1.x @ProtoNumber(2) var url: String, @ProtoNumber(3) var title: String = "", @ProtoNumber(4) var artist: String? = null, @ProtoNumber(5) var author: String? = null, @ProtoNumber(6) var description: String? = null, @ProtoNumber(7) var genre: List = emptyList(), @ProtoNumber(8) var status: Int = 0, // thumbnailUrl is called cover in 1.x @ProtoNumber(9) var thumbnailUrl: String? = null, // @ProtoNumber(10) val customCover: String = "", 1.x value, not used in 0.x // @ProtoNumber(11) val lastUpdate: Long = 0, 1.x value, not used in 0.x // @ProtoNumber(12) val lastInit: Long = 0, 1.x value, not used in 0.x @ProtoNumber(13) var dateAdded: Long = 0, @ProtoNumber(14) var viewer: Int = 0, // Replaced by viewer_flags // @ProtoNumber(15) val flags: Int = 0, 1.x value, not used in 0.x @ProtoNumber(16) var chapters: List = emptyList(), @ProtoNumber(17) var categories: List = emptyList(), @ProtoNumber(18) var tracking: List = emptyList(), // Bump by 100 for values that are not saved/implemented in 1.x but are used in 0.x @ProtoNumber(100) var favorite: Boolean = true, @ProtoNumber(101) var chapterFlags: Int = 0, // @ProtoNumber(102) var brokenHistory, legacy history model with non-compliant proto number @ProtoNumber(103) var viewer_flags: Int? = null, @ProtoNumber(104) var history: List = emptyList(), @ProtoNumber(105) var updateStrategy: UpdateStrategy = UpdateStrategy.ALWAYS_UPDATE, @ProtoNumber(106) var lastModifiedAt: Long = 0, @ProtoNumber(107) var favoriteModifiedAt: Long? = null, // Mihon values start here @ProtoNumber(108) var excludedScanlators: List = emptyList(), @ProtoNumber(109) var version: Long = 0, @ProtoNumber(110) var notes: String = "", @ProtoNumber(111) var initialized: Boolean = false, ) { fun getMangaImpl(): Manga { return Manga.create().copy( url = this@BackupManga.url, title = this@BackupManga.title, artist = this@BackupManga.artist, author = this@BackupManga.author, description = this@BackupManga.description, genre = this@BackupManga.genre, status = this@BackupManga.status.toLong(), thumbnailUrl = this@BackupManga.thumbnailUrl, favorite = this@BackupManga.favorite, source = this@BackupManga.source, dateAdded = this@BackupManga.dateAdded, viewerFlags = (this@BackupManga.viewer_flags ?: this@BackupManga.viewer).toLong(), chapterFlags = this@BackupManga.chapterFlags.toLong(), updateStrategy = this@BackupManga.updateStrategy, lastModifiedAt = this@BackupManga.lastModifiedAt, favoriteModifiedAt = this@BackupManga.favoriteModifiedAt, version = this@BackupManga.version, notes = this@BackupManga.notes, initialized = this@BackupManga.initialized, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupPreference.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber @Serializable data class BackupPreference( @ProtoNumber(1) val key: String, @ProtoNumber(2) val value: PreferenceValue, ) @Serializable data class BackupSourcePreferences( @ProtoNumber(1) val sourceKey: String, @ProtoNumber(2) val prefs: List, ) @Serializable sealed class PreferenceValue @Serializable data class IntPreferenceValue(val value: Int) : PreferenceValue() @Serializable data class LongPreferenceValue(val value: Long) : PreferenceValue() @Serializable data class FloatPreferenceValue(val value: Float) : PreferenceValue() @Serializable data class StringPreferenceValue(val value: String) : PreferenceValue() @Serializable data class BooleanPreferenceValue(val value: Boolean) : PreferenceValue() @Serializable data class StringSetPreferenceValue(val value: Set) : PreferenceValue() ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupSource.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber @Serializable data class BackupSource( @ProtoNumber(1) var name: String = "", @ProtoNumber(2) var sourceId: Long, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupTracking.kt ================================================ package eu.kanade.tachiyomi.data.backup.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber import tachiyomi.domain.track.model.Track @Serializable data class BackupTracking( // in 1.x some of these values have different types or names @ProtoNumber(1) var syncId: Int, // LibraryId is not null in 1.x @ProtoNumber(2) var libraryId: Long, @Deprecated("Use mediaId instead", level = DeprecationLevel.WARNING) @ProtoNumber(3) var mediaIdInt: Int = 0, // trackingUrl is called mediaUrl in 1.x @ProtoNumber(4) var trackingUrl: String = "", @ProtoNumber(5) var title: String = "", // lastChapterRead is called last read, and it has been changed to a float in 1.x @ProtoNumber(6) var lastChapterRead: Float = 0F, @ProtoNumber(7) var totalChapters: Int = 0, @ProtoNumber(8) var score: Float = 0F, @ProtoNumber(9) var status: Int = 0, // startedReadingDate is called startReadTime in 1.x @ProtoNumber(10) var startedReadingDate: Long = 0, // finishedReadingDate is called endReadTime in 1.x @ProtoNumber(11) var finishedReadingDate: Long = 0, @ProtoNumber(12) var private: Boolean = false, @ProtoNumber(100) var mediaId: Long = 0, ) { @Suppress("DEPRECATION") fun getTrackImpl(): Track { return Track( id = -1, mangaId = -1, trackerId = this@BackupTracking.syncId.toLong(), remoteId = if (this@BackupTracking.mediaIdInt != 0) { this@BackupTracking.mediaIdInt.toLong() } else { this@BackupTracking.mediaId }, libraryId = this@BackupTracking.libraryId, title = this@BackupTracking.title, lastChapterRead = this@BackupTracking.lastChapterRead.toDouble(), totalChapters = this@BackupTracking.totalChapters.toLong(), score = this@BackupTracking.score.toDouble(), status = this@BackupTracking.status.toLong(), startDate = this@BackupTracking.startedReadingDate, finishDate = this@BackupTracking.finishedReadingDate, remoteUrl = this@BackupTracking.trackingUrl, private = this@BackupTracking.private, ) } } val backupTrackMapper = { _: Long, _: Long, syncId: Long, mediaId: Long, libraryId: Long?, title: String, lastChapterRead: Double, totalChapters: Long, status: Long, score: Double, remoteUrl: String, startDate: Long, finishDate: Long, private: Boolean, -> BackupTracking( syncId = syncId.toInt(), mediaId = mediaId, // forced not null so its compatible with 1.x backup system libraryId = libraryId ?: 0, title = title, lastChapterRead = lastChapterRead.toFloat(), totalChapters = totalChapters.toInt(), score = score.toFloat(), status = status.toInt(), startedReadingDate = startDate, finishedReadingDate = finishDate, trackingUrl = remoteUrl, private = private, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestoreJob.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore import android.content.Context import android.content.pm.ServiceInfo import android.net.Uri import android.os.Build import androidx.core.net.toUri import androidx.work.CoroutineWorker import androidx.work.ExistingWorkPolicy import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.tachiyomi.data.backup.BackupNotifier import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.setForegroundSafely import eu.kanade.tachiyomi.util.system.workManager import kotlinx.coroutines.CancellationException import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR class BackupRestoreJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { private val notifier = BackupNotifier(context) override suspend fun doWork(): Result { val uri = inputData.getString(LOCATION_URI_KEY)?.toUri() val options = inputData.getBooleanArray(OPTIONS_KEY)?.let { RestoreOptions.fromBooleanArray(it) } if (uri == null || options == null) { return Result.failure() } val isSync = inputData.getBoolean(SYNC_KEY, false) setForegroundSafely() return try { BackupRestorer(context, notifier, isSync).restore(uri, options) Result.success() } catch (e: Exception) { if (e is CancellationException) { notifier.showRestoreError(context.stringResource(MR.strings.restoring_backup_canceled)) Result.success() } else { logcat(LogPriority.ERROR, e) notifier.showRestoreError(e.message) Result.failure() } } finally { context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) } } override suspend fun getForegroundInfo(): ForegroundInfo { return ForegroundInfo( Notifications.ID_RESTORE_PROGRESS, notifier.showRestoreProgress().build(), if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC } else { 0 }, ) } companion object { fun isRunning(context: Context): Boolean { return context.workManager.isRunning(TAG) } fun start( context: Context, uri: Uri, options: RestoreOptions, sync: Boolean = false, ) { val inputData = workDataOf( LOCATION_URI_KEY to uri.toString(), SYNC_KEY to sync, OPTIONS_KEY to options.asBooleanArray(), ) val request = OneTimeWorkRequestBuilder() .addTag(TAG) .setInputData(inputData) .build() context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, request) } fun stop(context: Context) { context.workManager.cancelUniqueWork(TAG) } } } private const val TAG = "BackupRestore" private const val LOCATION_URI_KEY = "location_uri" // String private const val SYNC_KEY = "sync" // Boolean private const val OPTIONS_KEY = "options" // BooleanArray ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestorer.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore import android.content.Context import android.net.Uri import eu.kanade.tachiyomi.data.backup.BackupDecoder import eu.kanade.tachiyomi.data.backup.BackupNotifier import eu.kanade.tachiyomi.data.backup.models.BackupCategory import eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos import eu.kanade.tachiyomi.data.backup.models.BackupManga import eu.kanade.tachiyomi.data.backup.models.BackupPreference import eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences import eu.kanade.tachiyomi.data.backup.restore.restorers.CategoriesRestorer import eu.kanade.tachiyomi.data.backup.restore.restorers.ExtensionRepoRestorer import eu.kanade.tachiyomi.data.backup.restore.restorers.MangaRestorer import eu.kanade.tachiyomi.data.backup.restore.restorers.PreferenceRestorer import eu.kanade.tachiyomi.util.system.createFileInCacheDir import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive import kotlinx.coroutines.launch import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import java.io.File import java.text.SimpleDateFormat import java.util.Date import java.util.Locale class BackupRestorer( private val context: Context, private val notifier: BackupNotifier, private val isSync: Boolean, private val categoriesRestorer: CategoriesRestorer = CategoriesRestorer(), private val preferenceRestorer: PreferenceRestorer = PreferenceRestorer(context), private val extensionRepoRestorer: ExtensionRepoRestorer = ExtensionRepoRestorer(), private val mangaRestorer: MangaRestorer = MangaRestorer(), ) { private var restoreAmount = 0 private var restoreProgress = 0 private val errors = mutableListOf>() /** * Mapping of source ID to source name from backup data */ private var sourceMapping: Map = emptyMap() suspend fun restore(uri: Uri, options: RestoreOptions) { val startTime = System.currentTimeMillis() restoreFromFile(uri, options) val time = System.currentTimeMillis() - startTime val logFile = writeErrorLog() notifier.showRestoreComplete( time, errors.size, logFile.parent, logFile.name, isSync, ) } private suspend fun restoreFromFile(uri: Uri, options: RestoreOptions) { val backup = BackupDecoder(context).decode(uri) // Store source mapping for error messages val backupMaps = backup.backupSources sourceMapping = backupMaps.associate { it.sourceId to it.name } if (options.libraryEntries) { restoreAmount += backup.backupManga.size } if (options.categories) { restoreAmount += 1 } if (options.appSettings) { restoreAmount += 1 } if (options.extensionRepoSettings) { restoreAmount += backup.backupExtensionRepo.size } if (options.sourceSettings) { restoreAmount += 1 } coroutineScope { if (options.categories) { restoreCategories(backup.backupCategories) } if (options.appSettings) { restoreAppPreferences(backup.backupPreferences, backup.backupCategories.takeIf { options.categories }) } if (options.sourceSettings) { restoreSourcePreferences(backup.backupSourcePreferences) } if (options.libraryEntries) { restoreManga(backup.backupManga, if (options.categories) backup.backupCategories else emptyList()) } if (options.extensionRepoSettings) { restoreExtensionRepos(backup.backupExtensionRepo) } // TODO: optionally trigger online library + tracker update } } private fun CoroutineScope.restoreCategories(backupCategories: List) = launch { ensureActive() categoriesRestorer(backupCategories) restoreProgress += 1 notifier.showRestoreProgress( context.stringResource(MR.strings.categories), restoreProgress, restoreAmount, isSync, ) } private fun CoroutineScope.restoreManga( backupMangas: List, backupCategories: List, ) = launch { mangaRestorer.sortByNew(backupMangas) .forEach { ensureActive() try { mangaRestorer.restore(it, backupCategories) } catch (e: Exception) { val sourceName = sourceMapping[it.source] ?: it.source.toString() errors.add(Date() to "${it.title} [$sourceName]: ${e.message}") } restoreProgress += 1 notifier.showRestoreProgress(it.title, restoreProgress, restoreAmount, isSync) } } private fun CoroutineScope.restoreAppPreferences( preferences: List, categories: List?, ) = launch { ensureActive() preferenceRestorer.restoreApp( preferences, categories, ) restoreProgress += 1 notifier.showRestoreProgress( context.stringResource(MR.strings.app_settings), restoreProgress, restoreAmount, isSync, ) } private fun CoroutineScope.restoreSourcePreferences(preferences: List) = launch { ensureActive() preferenceRestorer.restoreSource(preferences) restoreProgress += 1 notifier.showRestoreProgress( context.stringResource(MR.strings.source_settings), restoreProgress, restoreAmount, isSync, ) } private fun CoroutineScope.restoreExtensionRepos( backupExtensionRepo: List, ) = launch { backupExtensionRepo .forEach { ensureActive() try { extensionRepoRestorer(it) } catch (e: Exception) { errors.add(Date() to "Error Adding Repo: ${it.name} : ${e.message}") } restoreProgress += 1 notifier.showRestoreProgress( context.stringResource(MR.strings.extensionRepo_settings), restoreProgress, restoreAmount, isSync, ) } } private fun writeErrorLog(): File { try { if (errors.isNotEmpty()) { val file = context.createFileInCacheDir("mihon_restore_error.txt") val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()) file.bufferedWriter().use { out -> errors.forEach { (date, message) -> out.write("[${sdf.format(date)}] $message\n") } } return file } } catch (e: Exception) { // Empty } return File("") } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/RestoreOptions.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR data class RestoreOptions( val libraryEntries: Boolean = true, val categories: Boolean = true, val appSettings: Boolean = true, val extensionRepoSettings: Boolean = true, val sourceSettings: Boolean = true, ) { fun asBooleanArray() = booleanArrayOf( libraryEntries, categories, appSettings, extensionRepoSettings, sourceSettings, ) fun canRestore() = libraryEntries || categories || appSettings || extensionRepoSettings || sourceSettings companion object { val options = persistentListOf( Entry( label = MR.strings.label_library, getter = RestoreOptions::libraryEntries, setter = { options, enabled -> options.copy(libraryEntries = enabled) }, ), Entry( label = MR.strings.categories, getter = RestoreOptions::categories, setter = { options, enabled -> options.copy(categories = enabled) }, ), Entry( label = MR.strings.app_settings, getter = RestoreOptions::appSettings, setter = { options, enabled -> options.copy(appSettings = enabled) }, ), Entry( label = MR.strings.extensionRepo_settings, getter = RestoreOptions::extensionRepoSettings, setter = { options, enabled -> options.copy(extensionRepoSettings = enabled) }, ), Entry( label = MR.strings.source_settings, getter = RestoreOptions::sourceSettings, setter = { options, enabled -> options.copy(sourceSettings = enabled) }, ), ) fun fromBooleanArray(array: BooleanArray) = RestoreOptions( libraryEntries = array[0], categories = array[1], appSettings = array[2], extensionRepoSettings = array[3], sourceSettings = array[4], ) } data class Entry( val label: StringResource, val getter: (RestoreOptions) -> Boolean, val setter: (RestoreOptions, Boolean) -> RestoreOptions, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore.restorers import eu.kanade.tachiyomi.data.backup.models.BackupCategory import tachiyomi.data.DatabaseHandler import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.library.service.LibraryPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class CategoriesRestorer( private val handler: DatabaseHandler = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), ) { suspend operator fun invoke(backupCategories: List) { if (backupCategories.isNotEmpty()) { val dbCategories = getCategories.await() val dbCategoriesByName = dbCategories.associateBy { it.name } var nextOrder = dbCategories.maxOfOrNull { it.order }?.plus(1) ?: 0 val categories = backupCategories .sortedBy { it.order } .map { val dbCategory = dbCategoriesByName[it.name] if (dbCategory != null) return@map dbCategory val order = nextOrder++ handler.awaitOneExecutable { categoriesQueries.insert(it.name, order, it.flags) categoriesQueries.selectLastInsertedRowId() } .let { id -> it.toCategory(id).copy(order = order) } } libraryPreferences.categorizedDisplaySettings.set( (dbCategories + categories) .distinctBy { it.flags } .size > 1, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/ExtensionRepoRestorer.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore.restorers import eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos import mihon.domain.extensionrepo.interactor.GetExtensionRepo import tachiyomi.data.DatabaseHandler import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionRepoRestorer( private val handler: DatabaseHandler = Injekt.get(), private val getExtensionRepos: GetExtensionRepo = Injekt.get(), ) { suspend operator fun invoke( backupRepo: BackupExtensionRepos, ) { val dbRepos = getExtensionRepos.getAll() val existingReposBySHA = dbRepos.associateBy { it.signingKeyFingerprint } val existingReposByUrl = dbRepos.associateBy { it.baseUrl } val urlExists = existingReposByUrl[backupRepo.baseUrl] val shaExists = existingReposBySHA[backupRepo.signingKeyFingerprint] if (urlExists != null && urlExists.signingKeyFingerprint != backupRepo.signingKeyFingerprint) { error("Already Exists with different signing key fingerprint") } else if (shaExists != null) { error("${shaExists.name} has the same signing key fingerprint") } else { handler.await { extension_reposQueries.insert( backupRepo.baseUrl, backupRepo.name, backupRepo.shortName, backupRepo.website, backupRepo.signingKeyFingerprint, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore.restorers import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.tachiyomi.data.backup.models.BackupCategory import eu.kanade.tachiyomi.data.backup.models.BackupChapter import eu.kanade.tachiyomi.data.backup.models.BackupHistory import eu.kanade.tachiyomi.data.backup.models.BackupManga import eu.kanade.tachiyomi.data.backup.models.BackupTracking import tachiyomi.data.DatabaseHandler import tachiyomi.data.UpdateStrategyColumnAdapter import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.interactor.FetchInterval import tachiyomi.domain.manga.interactor.GetMangaByUrlAndSourceId import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.interactor.InsertTrack import tachiyomi.domain.track.model.Track import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.ZonedDateTime import java.util.Date import kotlin.math.max class MangaRestorer( private val handler: DatabaseHandler = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val getMangaByUrlAndSourceId: GetMangaByUrlAndSourceId = Injekt.get(), private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), private val getTracks: GetTracks = Injekt.get(), private val insertTrack: InsertTrack = Injekt.get(), fetchInterval: FetchInterval = Injekt.get(), ) { private var now = ZonedDateTime.now() private var currentFetchWindow = fetchInterval.getWindow(now) init { now = ZonedDateTime.now() currentFetchWindow = fetchInterval.getWindow(now) } suspend fun sortByNew(backupMangas: List): List { val urlsBySource = handler.awaitList { mangasQueries.getAllMangaSourceAndUrl() } .groupBy({ it.source }, { it.url }) return backupMangas .sortedWith( compareBy { it.url in urlsBySource[it.source].orEmpty() } .then(compareByDescending { it.lastModifiedAt }), ) } suspend fun restore( backupManga: BackupManga, backupCategories: List, ) { handler.await(inTransaction = true) { val dbManga = findExistingManga(backupManga) val manga = backupManga.getMangaImpl() val restoredManga = if (dbManga == null) { restoreNewManga(manga) } else { restoreExistingManga(manga, dbManga) } restoreMangaDetails( manga = restoredManga, chapters = backupManga.chapters, categories = backupManga.categories, backupCategories = backupCategories, history = backupManga.history, tracks = backupManga.tracking, excludedScanlators = backupManga.excludedScanlators, ) } } private suspend fun findExistingManga(backupManga: BackupManga): Manga? { return getMangaByUrlAndSourceId.await(backupManga.url, backupManga.source) } private suspend fun restoreExistingManga(manga: Manga, dbManga: Manga): Manga { return if (manga.version > dbManga.version) { updateManga(dbManga.copyFrom(manga).copy(id = dbManga.id)) } else { updateManga(manga.copyFrom(dbManga).copy(id = dbManga.id)) } } private fun Manga.copyFrom(newer: Manga): Manga { return this.copy( favorite = this.favorite || newer.favorite, author = newer.author, artist = newer.artist, description = newer.description, genre = newer.genre, thumbnailUrl = newer.thumbnailUrl, status = newer.status, initialized = this.initialized || newer.initialized, version = newer.version, ) } private suspend fun updateManga(manga: Manga): Manga { handler.await(true) { mangasQueries.update( source = manga.source, url = manga.url, artist = manga.artist, author = manga.author, description = manga.description, genre = manga.genre?.joinToString(separator = ", "), title = manga.title, status = manga.status, thumbnailUrl = manga.thumbnailUrl, favorite = manga.favorite, lastUpdate = manga.lastUpdate, nextUpdate = null, calculateInterval = null, initialized = manga.initialized, viewer = manga.viewerFlags, chapterFlags = manga.chapterFlags, coverLastModified = manga.coverLastModified, dateAdded = manga.dateAdded, mangaId = manga.id, updateStrategy = manga.updateStrategy.let(UpdateStrategyColumnAdapter::encode), version = manga.version, isSyncing = 1, notes = manga.notes, ) } return manga } private suspend fun restoreNewManga( manga: Manga, ): Manga { return manga.copy( id = insertManga(manga), ) } private suspend fun restoreChapters(manga: Manga, backupChapters: List) { val dbChaptersByUrl = getChaptersByMangaId.await(manga.id) .associateBy { it.url } val (existingChapters, newChapters) = backupChapters .mapNotNull { val chapter = it.toChapterImpl().copy(mangaId = manga.id) val dbChapter = dbChaptersByUrl[chapter.url] ?: // New chapter return@mapNotNull chapter if (chapter.forComparison() == dbChapter.forComparison()) { // Same state; skip return@mapNotNull null } // Update to an existing chapter var updatedChapter = chapter .copyFrom(dbChapter) .copy( id = dbChapter.id, bookmark = chapter.bookmark || dbChapter.bookmark, ) if (dbChapter.read && !updatedChapter.read) { updatedChapter = updatedChapter.copy( read = true, lastPageRead = dbChapter.lastPageRead, ) } else if (updatedChapter.lastPageRead == 0L && dbChapter.lastPageRead != 0L) { updatedChapter = updatedChapter.copy( lastPageRead = dbChapter.lastPageRead, ) } updatedChapter } .partition { it.id > 0 } insertNewChapters(newChapters) updateExistingChapters(existingChapters) } private fun Chapter.forComparison() = this.copy(id = 0L, mangaId = 0L, dateFetch = 0L, dateUpload = 0L, lastModifiedAt = 0L, version = 0L) private suspend fun insertNewChapters(chapters: List) { handler.await(true) { chapters.forEach { chapter -> chaptersQueries.insert( chapter.mangaId, chapter.url, chapter.name, chapter.scanlator, chapter.read, chapter.bookmark, chapter.lastPageRead, chapter.chapterNumber, chapter.sourceOrder, chapter.dateFetch, chapter.dateUpload, chapter.version, ) } } } private suspend fun updateExistingChapters(chapters: List) { handler.await(true) { chapters.forEach { chapter -> chaptersQueries.update( mangaId = null, url = null, name = null, scanlator = null, read = chapter.read, bookmark = chapter.bookmark, lastPageRead = chapter.lastPageRead, chapterNumber = null, sourceOrder = null, dateFetch = null, dateUpload = null, chapterId = chapter.id, version = chapter.version, isSyncing = 0, ) } } } /** * Inserts manga and returns id * * @return id of [Manga], null if not found */ private suspend fun insertManga(manga: Manga): Long { return handler.awaitOneExecutable(true) { mangasQueries.insert( source = manga.source, url = manga.url, artist = manga.artist, author = manga.author, description = manga.description, genre = manga.genre, title = manga.title, status = manga.status, thumbnailUrl = manga.thumbnailUrl, favorite = manga.favorite, lastUpdate = manga.lastUpdate, nextUpdate = 0L, calculateInterval = 0L, initialized = manga.initialized, viewerFlags = manga.viewerFlags, chapterFlags = manga.chapterFlags, coverLastModified = manga.coverLastModified, dateAdded = manga.dateAdded, updateStrategy = manga.updateStrategy, version = manga.version, notes = manga.notes, ) mangasQueries.selectLastInsertedRowId() } } private suspend fun restoreMangaDetails( manga: Manga, chapters: List, categories: List, backupCategories: List, history: List, tracks: List, excludedScanlators: List, ): Manga { restoreCategories(manga, categories, backupCategories) restoreChapters(manga, chapters) restoreTracking(manga, tracks) restoreHistory(history) restoreExcludedScanlators(manga, excludedScanlators) updateManga.awaitUpdateFetchInterval(manga, now, currentFetchWindow) return manga } /** * Restores the categories a manga is in. * * @param manga the manga whose categories have to be restored. * @param categories the categories to restore. */ private suspend fun restoreCategories( manga: Manga, categories: List, backupCategories: List, ) { val dbCategories = getCategories.await() val dbCategoriesByName = dbCategories.associateBy { it.name } val backupCategoriesByOrder = backupCategories.associateBy { it.order } val mangaCategoriesToUpdate = categories.mapNotNull { backupCategoryOrder -> backupCategoriesByOrder[backupCategoryOrder]?.let { backupCategory -> dbCategoriesByName[backupCategory.name]?.let { dbCategory -> Pair(manga.id, dbCategory.id) } } } if (mangaCategoriesToUpdate.isNotEmpty()) { handler.await(true) { mangas_categoriesQueries.deleteMangaCategoryByMangaId(manga.id) mangaCategoriesToUpdate.forEach { (mangaId, categoryId) -> mangas_categoriesQueries.insert(mangaId, categoryId) } } } } private suspend fun restoreHistory(backupHistory: List) { val toUpdate = backupHistory.mapNotNull { history -> val dbHistory = handler.awaitOneOrNull { historyQueries.getHistoryByChapterUrl(history.url) } val item = history.getHistoryImpl() if (dbHistory == null) { val chapter = handler.awaitOneOrNull { chaptersQueries.getChapterByUrl(history.url) } return@mapNotNull if (chapter == null) { // Chapter doesn't exist; skip null } else { // New history entry item.copy(chapterId = chapter._id) } } // Update history entry item.copy( id = dbHistory._id, chapterId = dbHistory.chapter_id, readAt = max(item.readAt?.time ?: 0L, dbHistory.last_read?.time ?: 0L) .takeIf { it > 0L } ?.let { Date(it) }, readDuration = max(item.readDuration, dbHistory.time_read) - dbHistory.time_read, ) } if (toUpdate.isNotEmpty()) { handler.await(true) { toUpdate.forEach { historyQueries.upsert( it.chapterId, it.readAt, it.readDuration, ) } } } } private suspend fun restoreTracking(manga: Manga, backupTracks: List) { val dbTrackByTrackerId = getTracks.await(manga.id).associateBy { it.trackerId } val (existingTracks, newTracks) = backupTracks .mapNotNull { val track = it.getTrackImpl() val dbTrack = dbTrackByTrackerId[track.trackerId] ?: // New track return@mapNotNull track.copy( id = 0, // Let DB assign new ID mangaId = manga.id, ) if (track.forComparison() == dbTrack.forComparison()) { // Same state; skip return@mapNotNull null } // Update to an existing track dbTrack.copy( remoteId = track.remoteId, libraryId = track.libraryId, lastChapterRead = max(dbTrack.lastChapterRead, track.lastChapterRead), ) } .partition { it.id > 0 } if (newTracks.isNotEmpty()) { insertTrack.awaitAll(newTracks) } if (existingTracks.isNotEmpty()) { handler.await(true) { existingTracks.forEach { track -> manga_syncQueries.update( track.mangaId, track.trackerId, track.remoteId, track.libraryId, track.title, track.lastChapterRead, track.totalChapters, track.status, track.score, track.remoteUrl, track.startDate, track.finishDate, track.private, track.id, ) } } } } private fun Track.forComparison() = this.copy(id = 0L, mangaId = 0L) /** * Restores the excluded scanlators for the manga. * * @param manga the manga whose excluded scanlators have to be restored. * @param excludedScanlators the excluded scanlators to restore. */ private suspend fun restoreExcludedScanlators(manga: Manga, excludedScanlators: List) { if (excludedScanlators.isEmpty()) return val existingExcludedScanlators = handler.awaitList { excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(manga.id) } val toInsert = excludedScanlators.filter { it !in existingExcludedScanlators } if (toInsert.isNotEmpty()) { handler.await { toInsert.forEach { excluded_scanlatorsQueries.insert(manga.id, it) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/PreferenceRestorer.kt ================================================ package eu.kanade.tachiyomi.data.backup.restore.restorers import android.content.Context import android.util.Log import eu.kanade.tachiyomi.data.backup.create.BackupCreateJob import eu.kanade.tachiyomi.data.backup.models.BackupCategory import eu.kanade.tachiyomi.data.backup.models.BackupPreference import eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences import eu.kanade.tachiyomi.data.backup.models.BooleanPreferenceValue import eu.kanade.tachiyomi.data.backup.models.FloatPreferenceValue import eu.kanade.tachiyomi.data.backup.models.IntPreferenceValue import eu.kanade.tachiyomi.data.backup.models.LongPreferenceValue import eu.kanade.tachiyomi.data.backup.models.StringPreferenceValue import eu.kanade.tachiyomi.data.backup.models.StringSetPreferenceValue import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.source.sourcePreferences import tachiyomi.core.common.preference.AndroidPreferenceStore import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.plusAssign import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class PreferenceRestorer( private val context: Context, private val getCategories: GetCategories = Injekt.get(), private val preferenceStore: PreferenceStore = Injekt.get(), ) { suspend fun restoreApp( preferences: List, backupCategories: List?, ) { restorePreferences( preferences, preferenceStore, backupCategories, ) LibraryUpdateJob.setupTask(context) BackupCreateJob.setupTask(context) } suspend fun restoreSource(preferences: List) { preferences.forEach { val sourcePrefs = AndroidPreferenceStore(context, sourcePreferences(it.sourceKey)) restorePreferences(it.prefs, sourcePrefs) } } private suspend fun restorePreferences( toRestore: List, preferenceStore: PreferenceStore, backupCategories: List? = null, ) { val allCategories = if (backupCategories != null) getCategories.await() else emptyList() val categoriesByName = allCategories.associateBy { it.name } val backupCategoriesById = backupCategories?.associateBy { it.id.toString() }.orEmpty() val prefs = preferenceStore.getAll() toRestore.forEach { (key, value) -> try { when (value) { is IntPreferenceValue -> { if (prefs[key] is Int?) { val newValue = if (key == LibraryPreferences.DEFAULT_CATEGORY_PREF_KEY) { backupCategoriesById[value.value.toString()] ?.let { categoriesByName[it.name]?.id?.toInt() } } else { value.value } newValue?.let { preferenceStore.getInt(key).set(it) } } } is LongPreferenceValue -> { if (prefs[key] is Long?) { preferenceStore.getLong(key).set(value.value) } } is FloatPreferenceValue -> { if (prefs[key] is Float?) { preferenceStore.getFloat(key).set(value.value) } } is StringPreferenceValue -> { if (prefs[key] is String?) { preferenceStore.getString(key).set(value.value) } } is BooleanPreferenceValue -> { if (prefs[key] is Boolean?) { preferenceStore.getBoolean(key).set(value.value) } } is StringSetPreferenceValue -> { if (prefs[key] is Set<*>?) { val restored = restoreCategoriesPreference( key, value.value, preferenceStore, backupCategoriesById, categoriesByName, ) if (!restored) preferenceStore.getStringSet(key).set(value.value) } } } } catch (e: Exception) { Log.e("PreferenceRestorer", "Failed to restore preference <$key>", e) } } } private fun restoreCategoriesPreference( key: String, value: Set, preferenceStore: PreferenceStore, backupCategoriesById: Map, categoriesByName: Map, ): Boolean { val categoryPreferences = LibraryPreferences.categoryPreferenceKeys + DownloadPreferences.categoryPreferenceKeys if (key !in categoryPreferences) return false val ids = value.mapNotNull { backupCategoriesById[it]?.name?.let { name -> categoriesByName[name]?.id?.toString() } } if (ids.isNotEmpty()) { preferenceStore.getStringSet(key) += ids } return true } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt ================================================ package eu.kanade.tachiyomi.data.cache import android.content.Context import android.text.format.Formatter import com.jakewharton.disklrucache.DiskLruCache import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.saveTo import kotlinx.serialization.json.Json import logcat.LogPriority import okhttp3.Response import okio.buffer import okio.sink import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import java.io.File import java.io.IOException /** * Class used to create chapter cache * For each image in a chapter a file is created * For each chapter a Json list is created and converted to a file. * The files are in format *md5key*.0 * * @param context the application context. */ class ChapterCache( private val context: Context, private val json: Json, ) { /** Cache class used for cache management. */ private val diskCache = DiskLruCache.open( File(context.cacheDir, "chapter_disk_cache"), PARAMETER_APP_VERSION, PARAMETER_VALUE_COUNT, PARAMETER_CACHE_SIZE, ) /** * Returns directory of cache. */ private val cacheDir: File = diskCache.directory /** * Returns real size of directory. */ private val realSize: Long get() = DiskUtil.getDirectorySize(cacheDir) /** * Returns real size of directory in human readable format. */ val readableSize: String get() = Formatter.formatFileSize(context, realSize) /** * Get page list from cache. * * @param chapter the chapter. * @return the list of pages. */ fun getPageListFromCache(chapter: Chapter): List { // Get the key for the chapter. val key = DiskUtil.hashKeyForDisk(getKey(chapter)) // Convert JSON string to list of objects. Throws an exception if snapshot is null return diskCache.get(key).use { json.decodeFromString(it.getString(0)) } } /** * Add page list to disk cache. * * @param chapter the chapter. * @param pages list of pages. */ fun putPageListToCache(chapter: Chapter, pages: List) { // Convert list of pages to json string. val cachedValue = json.encodeToString(pages) // Initialize the editor (edits the values for an entry). var editor: DiskLruCache.Editor? = null try { // Get editor from md5 key. val key = DiskUtil.hashKeyForDisk(getKey(chapter)) editor = diskCache.edit(key) ?: return // Write chapter urls to cache. editor.newOutputStream(0).sink().buffer().use { it.write(cachedValue.toByteArray()) it.flush() } diskCache.flush() editor.commit() editor.abortUnlessCommitted() } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Failed to put page list to cache" } // Ignore. } finally { editor?.abortUnlessCommitted() } } /** * Returns true if image is in cache. * * @param imageUrl url of image. * @return true if in cache otherwise false. */ fun isImageInCache(imageUrl: String): Boolean { return try { diskCache.get(DiskUtil.hashKeyForDisk(imageUrl)).use { it != null } } catch (_: IOException) { false } } /** * Get image file from url. * * @param imageUrl url of image. * @return path of image. */ fun getImageFile(imageUrl: String): File { // Get file from md5 key. val imageName = DiskUtil.hashKeyForDisk(imageUrl) + ".0" return File(diskCache.directory, imageName) } /** * Add image to cache. * * @param imageUrl url of image. * @param response http response from page. * @throws IOException image error. */ @Throws(IOException::class) fun putImageToCache(imageUrl: String, response: Response) { // Initialize editor (edits the values for an entry). var editor: DiskLruCache.Editor? = null try { // Get editor from md5 key. val key = DiskUtil.hashKeyForDisk(imageUrl) editor = diskCache.edit(key) ?: return // Get OutputStream and write image with Okio. response.body.source().saveTo(editor.newOutputStream(0)) diskCache.flush() editor.commit() } finally { response.body.close() editor?.abortUnlessCommitted() } } fun clear(): Int { var deletedFiles = 0 cacheDir.listFiles()?.forEach { if (removeFileFromCache(it.name)) { deletedFiles++ } } return deletedFiles } /** * Remove file from cache. * * @param file name of file "md5.0". * @return status of deletion for the file. */ private fun removeFileFromCache(file: String): Boolean { // Make sure we don't delete the journal file (keeps track of cache) if (file == "journal" || file.startsWith("journal.")) { return false } return try { // Remove the extension from the file to get the key of the cache val key = file.substringBeforeLast(".") // Remove file from cache diskCache.remove(key) } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Failed to remove file from cache" } false } } private fun getKey(chapter: Chapter): String { return "${chapter.mangaId}${chapter.url}" } } /** Application cache version. */ private const val PARAMETER_APP_VERSION = 1 /** The number of values per cache entry. Must be positive. */ private const val PARAMETER_VALUE_COUNT = 1 /** The maximum number of bytes this cache should use to store. */ private const val PARAMETER_CACHE_SIZE = 100L * 1024 * 1024 ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt ================================================ package eu.kanade.tachiyomi.data.cache import android.content.Context import eu.kanade.tachiyomi.util.storage.DiskUtil import tachiyomi.domain.manga.model.Manga import java.io.File import java.io.IOException import java.io.InputStream /** * Class used to create cover cache. * It is used to store the covers of the library. * Names of files are created with the md5 of the thumbnail URL. * * @param context the application context. * @constructor creates an instance of the cover cache. */ class CoverCache(private val context: Context) { companion object { private const val COVERS_DIR = "covers" private const val CUSTOM_COVERS_DIR = "covers/custom" } /** * Cache directory used for cache management. */ private val cacheDir = getCacheDir(COVERS_DIR) private val customCoverCacheDir = getCacheDir(CUSTOM_COVERS_DIR) /** * Returns the cover from cache. * * @param mangaThumbnailUrl thumbnail url for the manga. * @return cover image. */ fun getCoverFile(mangaThumbnailUrl: String?): File? { return mangaThumbnailUrl?.let { File(cacheDir, DiskUtil.hashKeyForDisk(it)) } } /** * Returns the custom cover from cache. * * @param mangaId the manga id. * @return cover image. */ fun getCustomCoverFile(mangaId: Long?): File { return File(customCoverCacheDir, DiskUtil.hashKeyForDisk(mangaId.toString())) } /** * Saves the given stream as the manga's custom cover to cache. * * @param manga the manga. * @param inputStream the stream to copy. * @throws IOException if there's any error. */ @Throws(IOException::class) fun setCustomCoverToCache(manga: Manga, inputStream: InputStream) { getCustomCoverFile(manga.id).outputStream().use { inputStream.copyTo(it) } } /** * Delete the cover files of the manga from the cache. * * @param manga the manga. * @param deleteCustomCover whether the custom cover should be deleted. * @return number of files that were deleted. */ fun deleteFromCache(manga: Manga, deleteCustomCover: Boolean = false): Int { var deleted = 0 getCoverFile(manga.thumbnailUrl)?.let { if (it.exists() && it.delete()) ++deleted } if (deleteCustomCover) { if (deleteCustomCover(manga.id)) ++deleted } return deleted } /** * Delete custom cover of the manga from the cache * * @param mangaId the manga id. * @return whether the cover was deleted. */ fun deleteCustomCover(mangaId: Long?): Boolean { return getCustomCoverFile(mangaId).let { it.exists() && it.delete() } } private fun getCacheDir(dir: String): File { return context.getExternalFilesDir(dir) ?: File(context.filesDir, dir).also { it.mkdirs() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/coil/BufferedSourceFetcher.kt ================================================ package eu.kanade.tachiyomi.data.coil import coil3.ImageLoader import coil3.decode.DataSource import coil3.decode.ImageSource import coil3.fetch.FetchResult import coil3.fetch.Fetcher import coil3.fetch.SourceFetchResult import coil3.request.Options import okio.BufferedSource class BufferedSourceFetcher( private val data: BufferedSource, private val options: Options, ) : Fetcher { override suspend fun fetch(): FetchResult { return SourceFetchResult( source = ImageSource( source = data, fileSystem = options.fileSystem, ), mimeType = null, dataSource = DataSource.MEMORY, ) } class Factory : Fetcher.Factory { override fun create( data: BufferedSource, options: Options, imageLoader: ImageLoader, ): Fetcher { return BufferedSourceFetcher(data, options) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt ================================================ package eu.kanade.tachiyomi.data.coil import androidx.core.net.toUri import coil3.Extras import coil3.ImageLoader import coil3.decode.DataSource import coil3.decode.ImageSource import coil3.disk.DiskCache import coil3.fetch.FetchResult import coil3.fetch.Fetcher import coil3.fetch.SourceFetchResult import coil3.getOrDefault import coil3.request.Options import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher.Companion.USE_CUSTOM_COVER_KEY import eu.kanade.tachiyomi.network.await import eu.kanade.tachiyomi.source.online.HttpSource import logcat.LogPriority import okhttp3.CacheControl import okhttp3.Call import okhttp3.Request import okhttp3.Response import okio.FileSystem import okio.Path.Companion.toOkioPath import okio.Source import okio.buffer import okio.sink import okio.source import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaCover import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.injectLazy import java.io.File import java.io.IOException /** * A [Fetcher] that fetches cover image for [Manga] object. * * It uses [Manga.thumbnailUrl] if custom cover is not set by the user. * Disk caching for library items is handled by [CoverCache], otherwise * handled by Coil's [DiskCache]. * * Available request parameter: * - [USE_CUSTOM_COVER_KEY]: Use custom cover if set by user, default is true */ class MangaCoverFetcher( private val url: String?, private val isLibraryManga: Boolean, private val options: Options, private val coverFileLazy: Lazy, private val customCoverFileLazy: Lazy, private val diskCacheKeyLazy: Lazy, private val sourceLazy: Lazy, private val callFactoryLazy: Lazy, private val imageLoader: ImageLoader, ) : Fetcher { private val diskCacheKey: String get() = diskCacheKeyLazy.value override suspend fun fetch(): FetchResult { // Use custom cover if exists val useCustomCover = options.extras.getOrDefault(USE_CUSTOM_COVER_KEY) if (useCustomCover) { val customCoverFile = customCoverFileLazy.value if (customCoverFile.exists()) { return fileLoader(customCoverFile) } } // diskCacheKey is thumbnail_url if (url == null) error("No cover specified") return when (getResourceType(url)) { Type.File -> fileLoader(File(url.substringAfter("file://"))) Type.URI -> fileUriLoader(url) Type.URL -> httpLoader() null -> error("Invalid image") } } private fun fileLoader(file: File): FetchResult { return SourceFetchResult( source = ImageSource( file = file.toOkioPath(), fileSystem = FileSystem.SYSTEM, diskCacheKey = diskCacheKey, ), mimeType = "image/*", dataSource = DataSource.DISK, ) } private fun fileUriLoader(uri: String): FetchResult { val source = UniFile.fromUri(options.context, uri.toUri())!! .openInputStream() .source() .buffer() return SourceFetchResult( source = ImageSource(source = source, fileSystem = FileSystem.SYSTEM), mimeType = "image/*", dataSource = DataSource.DISK, ) } private suspend fun httpLoader(): FetchResult { // Only cache separately if it's a library item val libraryCoverCacheFile = if (isLibraryManga) { coverFileLazy.value ?: error("No cover specified") } else { null } if (libraryCoverCacheFile?.exists() == true && options.diskCachePolicy.readEnabled) { return fileLoader(libraryCoverCacheFile) } var snapshot = readFromDiskCache() try { // Fetch from disk cache if (snapshot != null) { val snapshotCoverCache = moveSnapshotToCoverCache(snapshot, libraryCoverCacheFile) if (snapshotCoverCache != null) { // Read from cover cache after added to library return fileLoader(snapshotCoverCache) } // Read from snapshot return SourceFetchResult( source = snapshot.toImageSource(), mimeType = "image/*", dataSource = DataSource.DISK, ) } // Fetch from network val response = executeNetworkRequest() val responseBody = checkNotNull(response.body) { "Null response source" } try { // Read from cover cache after library manga cover updated val responseCoverCache = writeResponseToCoverCache(response, libraryCoverCacheFile) if (responseCoverCache != null) { return fileLoader(responseCoverCache) } // Read from disk cache snapshot = writeToDiskCache(response) if (snapshot != null) { return SourceFetchResult( source = snapshot.toImageSource(), mimeType = "image/*", dataSource = DataSource.NETWORK, ) } // Read from response if cache is unused or unusable return SourceFetchResult( source = ImageSource(source = responseBody.source(), fileSystem = FileSystem.SYSTEM), mimeType = "image/*", dataSource = if (response.cacheResponse != null) DataSource.DISK else DataSource.NETWORK, ) } catch (e: Exception) { responseBody.close() throw e } } catch (e: Exception) { snapshot?.close() throw e } } private suspend fun executeNetworkRequest(): Response { val client = sourceLazy.value?.client ?: callFactoryLazy.value val response = client.newCall(newRequest()).await() if (!response.isSuccessful && response.code != HTTP_NOT_MODIFIED) { response.close() throw IOException(response.message) } return response } private fun newRequest(): Request { val request = Request.Builder().apply { url(url!!) val sourceHeaders = sourceLazy.value?.headers if (sourceHeaders != null) { headers(sourceHeaders) } } when { options.networkCachePolicy.readEnabled -> { // don't take up okhttp cache request.cacheControl(CACHE_CONTROL_NO_STORE) } else -> { // This causes the request to fail with a 504 Unsatisfiable Request. request.cacheControl(CACHE_CONTROL_NO_NETWORK_NO_CACHE) } } return request.build() } private fun moveSnapshotToCoverCache(snapshot: DiskCache.Snapshot, cacheFile: File?): File? { if (cacheFile == null) return null return try { imageLoader.diskCache?.run { fileSystem.source(snapshot.data).use { input -> writeSourceToCoverCache(input, cacheFile) } remove(diskCacheKey) } cacheFile.takeIf { it.exists() } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to write snapshot data to cover cache ${cacheFile.name}" } null } } private fun writeResponseToCoverCache(response: Response, cacheFile: File?): File? { if (cacheFile == null || !options.diskCachePolicy.writeEnabled) return null return try { response.peekBody(Long.MAX_VALUE).source().use { input -> writeSourceToCoverCache(input, cacheFile) } cacheFile.takeIf { it.exists() } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to write response data to cover cache ${cacheFile.name}" } null } } private fun writeSourceToCoverCache(input: Source, cacheFile: File) { cacheFile.parentFile?.mkdirs() cacheFile.delete() try { cacheFile.sink().buffer().use { output -> output.writeAll(input) } } catch (e: Exception) { cacheFile.delete() throw e } } private fun readFromDiskCache(): DiskCache.Snapshot? { return if (options.diskCachePolicy.readEnabled) { imageLoader.diskCache?.openSnapshot(diskCacheKey) } else { null } } private fun writeToDiskCache( response: Response, ): DiskCache.Snapshot? { val diskCache = imageLoader.diskCache val editor = diskCache?.openEditor(diskCacheKey) ?: return null try { diskCache.fileSystem.write(editor.data) { response.body.source().readAll(this) } return editor.commitAndOpenSnapshot() } catch (e: Exception) { try { editor.abort() } catch (ignored: Exception) { } throw e } } private fun DiskCache.Snapshot.toImageSource(): ImageSource { return ImageSource( file = data, fileSystem = FileSystem.SYSTEM, diskCacheKey = diskCacheKey, closeable = this, ) } private fun getResourceType(cover: String?): Type? { return when { cover.isNullOrEmpty() -> null cover.startsWith("http", true) || cover.startsWith("Custom-", true) -> Type.URL cover.startsWith("/") || cover.startsWith("file://") -> Type.File cover.startsWith("content") -> Type.URI else -> null } } private enum class Type { File, URI, URL, } class MangaFactory( private val callFactoryLazy: Lazy, ) : Fetcher.Factory { private val coverCache: CoverCache by injectLazy() private val sourceManager: SourceManager by injectLazy() override fun create(data: Manga, options: Options, imageLoader: ImageLoader): Fetcher { return MangaCoverFetcher( url = data.thumbnailUrl, isLibraryManga = data.favorite, options = options, coverFileLazy = lazy { coverCache.getCoverFile(data.thumbnailUrl) }, customCoverFileLazy = lazy { coverCache.getCustomCoverFile(data.id) }, diskCacheKeyLazy = lazy { imageLoader.components.key(data, options)!! }, sourceLazy = lazy { sourceManager.get(data.source) as? HttpSource }, callFactoryLazy = callFactoryLazy, imageLoader = imageLoader, ) } } class MangaCoverFactory( private val callFactoryLazy: Lazy, ) : Fetcher.Factory { private val coverCache: CoverCache by injectLazy() private val sourceManager: SourceManager by injectLazy() override fun create(data: MangaCover, options: Options, imageLoader: ImageLoader): Fetcher { return MangaCoverFetcher( url = data.url, isLibraryManga = data.isMangaFavorite, options = options, coverFileLazy = lazy { coverCache.getCoverFile(data.url) }, customCoverFileLazy = lazy { coverCache.getCustomCoverFile(data.mangaId) }, diskCacheKeyLazy = lazy { imageLoader.components.key(data, options)!! }, sourceLazy = lazy { sourceManager.get(data.sourceId) as? HttpSource }, callFactoryLazy = callFactoryLazy, imageLoader = imageLoader, ) } } companion object { val USE_CUSTOM_COVER_KEY = Extras.Key(true) private val CACHE_CONTROL_NO_STORE = CacheControl.Builder().noStore().build() private val CACHE_CONTROL_NO_NETWORK_NO_CACHE = CacheControl.Builder().noCache().onlyIfCached().build() private const val HTTP_NOT_MODIFIED = 304 } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt ================================================ package eu.kanade.tachiyomi.data.coil import coil3.key.Keyer import coil3.request.Options import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.tachiyomi.data.cache.CoverCache import tachiyomi.domain.manga.model.MangaCover import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import tachiyomi.domain.manga.model.Manga as DomainManga class MangaKeyer : Keyer { override fun key(data: DomainManga, options: Options): String { return if (data.hasCustomCover()) { "${data.id};${data.coverLastModified}" } else { "${data.thumbnailUrl};${data.coverLastModified}" } } } class MangaCoverKeyer( private val coverCache: CoverCache = Injekt.get(), ) : Keyer { override fun key(data: MangaCover, options: Options): String { return if (coverCache.getCustomCoverFile(data.mangaId).exists()) { "${data.mangaId};${data.lastModified}" } else { "${data.url};${data.lastModified}" } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt ================================================ package eu.kanade.tachiyomi.data.coil import android.graphics.Bitmap import coil3.ImageLoader import coil3.asImage import coil3.decode.DecodeResult import coil3.decode.DecodeUtils import coil3.decode.Decoder import coil3.decode.ImageSource import coil3.fetch.SourceFetchResult import coil3.request.Options import coil3.request.bitmapConfig import okio.BufferedSource import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.decoder.ImageDecoder /** * A [Decoder] that uses built-in [ImageDecoder] to decode images that is not supported by the system. */ class TachiyomiImageDecoder(private val resources: ImageSource, private val options: Options) : Decoder { override suspend fun decode(): DecodeResult { val decoder = resources.sourceOrNull()?.use { ImageDecoder.newInstance(it.inputStream(), options.cropBorders, displayProfile) } check(decoder != null && decoder.width > 0 && decoder.height > 0) { "Failed to initialize decoder" } val srcWidth = decoder.width val srcHeight = decoder.height val dstWidth = options.size.widthPx(options.scale) { srcWidth } val dstHeight = options.size.heightPx(options.scale) { srcHeight } val sampleSize = DecodeUtils.calculateInSampleSize( srcWidth = srcWidth, srcHeight = srcHeight, dstWidth = dstWidth, dstHeight = dstHeight, scale = options.scale, ) var bitmap = decoder.decode(sampleSize = sampleSize) decoder.recycle() check(bitmap != null) { "Failed to decode image" } if (options.bitmapConfig == Bitmap.Config.HARDWARE && ImageUtil.canUseHardwareBitmap(bitmap)) { val hwBitmap = bitmap.copy(Bitmap.Config.HARDWARE, false) if (hwBitmap != null) { bitmap.recycle() bitmap = hwBitmap } } return DecodeResult( image = bitmap.asImage(), isSampled = sampleSize > 1, ) } class Factory : Decoder.Factory { override fun create(result: SourceFetchResult, options: Options, imageLoader: ImageLoader): Decoder? { return if (options.customDecoder || isApplicable(result.source.source())) { TachiyomiImageDecoder(result.source, options) } else { null } } private fun isApplicable(source: BufferedSource): Boolean { val type = source.peek().inputStream().use { ImageUtil.findImageType(it) } return when (type) { ImageUtil.ImageType.AVIF, ImageUtil.ImageType.JXL, ImageUtil.ImageType.HEIF -> true else -> false } } override fun equals(other: Any?) = other is Factory override fun hashCode() = javaClass.hashCode() } companion object { var displayProfile: ByteArray? = null } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/coil/Utils.kt ================================================ package eu.kanade.tachiyomi.data.coil import coil3.Extras import coil3.getExtra import coil3.request.ImageRequest import coil3.request.Options import coil3.size.Dimension import coil3.size.Scale import coil3.size.Size import coil3.size.isOriginal import coil3.size.pxOrElse internal inline fun Size.widthPx(scale: Scale, original: () -> Int): Int { return if (isOriginal) original() else width.toPx(scale) } internal inline fun Size.heightPx(scale: Scale, original: () -> Int): Int { return if (isOriginal) original() else height.toPx(scale) } internal fun Dimension.toPx(scale: Scale): Int = pxOrElse { when (scale) { Scale.FILL -> Int.MIN_VALUE Scale.FIT -> Int.MAX_VALUE } } fun ImageRequest.Builder.cropBorders(enable: Boolean) = apply { extras[cropBordersKey] = enable } val Options.cropBorders: Boolean get() = getExtra(cropBordersKey) private val cropBordersKey = Extras.Key(default = false) fun ImageRequest.Builder.customDecoder(enable: Boolean) = apply { extras[customDecoderKey] = enable } val Options.customDecoder: Boolean get() = getExtra(customDecoderKey) private val customDecoderKey = Extras.Key(default = false) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/database/models/Chapter.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.data.database.models import eu.kanade.tachiyomi.source.model.SChapter import java.io.Serializable import tachiyomi.domain.chapter.model.Chapter as DomainChapter interface Chapter : SChapter, Serializable { var id: Long? var manga_id: Long? var read: Boolean var bookmark: Boolean var last_page_read: Int var date_fetch: Long var source_order: Int var last_modified: Long var version: Long } val Chapter.isRecognizedNumber: Boolean get() = chapter_number >= 0f fun Chapter.toDomainChapter(): DomainChapter? { if (id == null || manga_id == null) return null return DomainChapter( id = id!!, mangaId = manga_id!!, read = read, bookmark = bookmark, lastPageRead = last_page_read.toLong(), dateFetch = date_fetch, sourceOrder = source_order.toLong(), url = url, name = name, dateUpload = date_upload, chapterNumber = chapter_number.toDouble(), scanlator = scanlator, lastModifiedAt = last_modified, version = version, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/database/models/ChapterImpl.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.data.database.models class ChapterImpl : Chapter { override var id: Long? = null override var manga_id: Long? = null override lateinit var url: String override lateinit var name: String override var scanlator: String? = null override var read: Boolean = false override var bookmark: Boolean = false override var last_page_read: Int = 0 override var date_fetch: Long = 0 override var date_upload: Long = 0 override var chapter_number: Float = 0f override var source_order: Int = 0 override var last_modified: Long = 0 override var version: Long = 0 override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null || javaClass != other.javaClass) return false val chapter = other as Chapter if (url != chapter.url) return false return id == chapter.id } override fun hashCode(): Int { return url.hashCode() + id.hashCode() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/database/models/Track.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.data.database.models import java.io.Serializable interface Track : Serializable { var id: Long? var manga_id: Long var tracker_id: Long var remote_id: Long var library_id: Long? var title: String var last_chapter_read: Double var total_chapters: Long var score: Double var status: Long var started_reading_date: Long var finished_reading_date: Long var tracking_url: String var private: Boolean fun copyPersonalFrom(other: Track, copyRemotePrivate: Boolean = true) { last_chapter_read = other.last_chapter_read score = other.score status = other.status started_reading_date = other.started_reading_date finished_reading_date = other.finished_reading_date if (copyRemotePrivate) private = other.private } companion object { fun create(serviceId: Long): Track = TrackImpl().apply { tracker_id = serviceId } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/database/models/TrackImpl.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.data.database.models class TrackImpl : Track { override var id: Long? = null override var manga_id: Long = 0 override var tracker_id: Long = 0 override var remote_id: Long = 0 override var library_id: Long? = null override lateinit var title: String override var last_chapter_read: Double = 0.0 override var total_chapters: Long = 0 override var score: Double = 0.0 override var status: Long = 0 override var started_reading_date: Long = 0 override var finished_reading_date: Long = 0 override var tracking_url: String = "" override var private: Boolean = false } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt ================================================ package eu.kanade.tachiyomi.data.download import android.app.Application import android.content.Context import androidx.core.net.toUri import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.Source import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withTimeoutOrNull import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromByteArray import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encodeToByteArray import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.protobuf.ProtoBuf import logcat.LogPriority import tachiyomi.core.common.storage.extension import tachiyomi.core.common.storage.nameWithoutExtension import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.storage.service.StorageManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.seconds /** * Cache where we dump the downloads directory from the filesystem. This class is needed because * directory checking is expensive and it slows down the app. The cache is invalidated by the time * defined in [renewInterval] as we don't have any control over the filesystem and the user can * delete the folders at any time without the app noticing. */ class DownloadCache( private val context: Context, private val provider: DownloadProvider = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), private val storageManager: StorageManager = Injekt.get(), ) { private val scope = CoroutineScope(Dispatchers.IO) private val _changes: Channel = Channel(Channel.UNLIMITED) val changes = _changes.receiveAsFlow() .onStart { emit(Unit) } .shareIn(scope, SharingStarted.Lazily, 1) /** * The interval after which this cache should be invalidated. 1 hour shouldn't cause major * issues, as the cache is only used for UI feedback. */ private val renewInterval = 1.hours.inWholeMilliseconds /** * The last time the cache was refreshed. */ private var lastRenew = 0L private var renewalJob: Job? = null private val _isInitializing = MutableStateFlow(false) val isInitializing = _isInitializing .debounce(1000L) // Don't notify if it finishes quickly enough .stateIn(scope, SharingStarted.WhileSubscribed(), false) private val diskCacheFile: File get() = File(context.cacheDir, "dl_index_cache_v3") private val rootDownloadsDirMutex = Mutex() private var rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory()) init { // Attempt to read cache file scope.launch { rootDownloadsDirMutex.withLock { try { if (diskCacheFile.exists()) { val diskCache = diskCacheFile.inputStream().use { ProtoBuf.decodeFromByteArray(it.readBytes()) } rootDownloadsDir = diskCache lastRenew = System.currentTimeMillis() } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Failed to initialize from disk cache" } diskCacheFile.delete() } } } storageManager.changes .onEach { invalidateCache() } .launchIn(scope) } /** * Returns true if the chapter is downloaded. * * @param chapterName the name of the chapter to query. * @param chapterScanlator scanlator of the chapter to query * @param chapterUrl the url of the chapter to query * @param mangaTitle the title of the manga to query. * @param sourceId the id of the source of the chapter. * @param skipCache whether to skip the directory cache and check in the filesystem. */ fun isChapterDownloaded( chapterName: String, chapterScanlator: String?, chapterUrl: String, mangaTitle: String, sourceId: Long, skipCache: Boolean, ): Boolean { if (skipCache) { val source = sourceManager.getOrStub(sourceId) return provider.findChapterDir(chapterName, chapterScanlator, chapterUrl, mangaTitle, source) != null } renewCache() val sourceDir = rootDownloadsDir.sourceDirs[sourceId] if (sourceDir != null) { val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(mangaTitle)] if (mangaDir != null) { return provider.getValidChapterDirNames( chapterName, chapterScanlator, chapterUrl, ).any { it in mangaDir.chapterDirs } } } return false } /** * Returns the amount of downloaded chapters. */ fun getTotalDownloadCount(): Int { renewCache() return rootDownloadsDir.sourceDirs.values.sumOf { sourceDir -> sourceDir.mangaDirs.values.sumOf { mangaDir -> mangaDir.chapterDirs.size } } } /** * Returns the amount of downloaded chapters for a manga. * * @param manga the manga to check. */ fun getDownloadCount(manga: Manga): Int { renewCache() val sourceDir = rootDownloadsDir.sourceDirs[manga.source] if (sourceDir != null) { val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] if (mangaDir != null) { return mangaDir.chapterDirs.size } } return 0 } /** * Adds a chapter that has just been download to this cache. * * @param chapterDirName the downloaded chapter's directory name. * @param mangaUniFile the directory of the manga. * @param manga the manga of the chapter. */ suspend fun addChapter(chapterDirName: String, mangaUniFile: UniFile, manga: Manga) { rootDownloadsDirMutex.withLock { // Retrieve the cached source directory or cache a new one var sourceDir = rootDownloadsDir.sourceDirs[manga.source] if (sourceDir == null) { val source = sourceManager.get(manga.source) ?: return val sourceUniFile = provider.findSourceDir(source) ?: return sourceDir = SourceDirectory(sourceUniFile) rootDownloadsDir.sourceDirs += manga.source to sourceDir } // Retrieve the cached manga directory or cache a new one val mangaDirName = provider.getMangaDirName(manga.title) var mangaDir = sourceDir.mangaDirs[mangaDirName] if (mangaDir == null) { mangaDir = MangaDirectory(mangaUniFile) sourceDir.mangaDirs += mangaDirName to mangaDir } // Save the chapter directory mangaDir.chapterDirs += chapterDirName } notifyChanges() } /** * Removes a chapter that has been deleted from this cache. * * @param chapter the chapter to remove. * @param manga the manga of the chapter. */ suspend fun removeChapter(chapter: Chapter, manga: Manga) { rootDownloadsDirMutex.withLock { val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return provider.getValidChapterDirNames(chapter.name, chapter.scanlator, chapter.url).forEach { if (it in mangaDir.chapterDirs) { mangaDir.chapterDirs -= it } } } notifyChanges() } /** * Removes a list of chapters that have been deleted from this cache. * * @param chapters the list of chapter to remove. * @param manga the manga of the chapter. */ suspend fun removeChapters(chapters: List, manga: Manga) { rootDownloadsDirMutex.withLock { val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return chapters.forEach { chapter -> provider.getValidChapterDirNames(chapter.name, chapter.scanlator, chapter.url).forEach { if (it in mangaDir.chapterDirs) { mangaDir.chapterDirs -= it } } } } notifyChanges() } /** * Removes a manga that has been deleted from this cache. * * @param manga the manga to remove. */ suspend fun removeManga(manga: Manga) { rootDownloadsDirMutex.withLock { val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val mangaDirName = provider.getMangaDirName(manga.title) if (sourceDir.mangaDirs.containsKey(mangaDirName)) { sourceDir.mangaDirs -= mangaDirName } } notifyChanges() } /** * Renames a manga in this cache. * * @param manga the manga being renamed. * @param mangaUniFile the manga's new directory. * @param newTitle the manga's new title. */ suspend fun renameManga(manga: Manga, mangaUniFile: UniFile, newTitle: String) { rootDownloadsDirMutex.withLock { val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val oldMangaDirName = provider.getMangaDirName(manga.title) var oldChapterDirs: MutableSet? = null // Save the old name's cached chapter dirs if (sourceDir.mangaDirs.containsKey(oldMangaDirName)) { oldChapterDirs = sourceDir.mangaDirs[oldMangaDirName]?.chapterDirs sourceDir.mangaDirs -= oldMangaDirName } // Retrieve/create the cached manga directory for new name val newMangaDirName = provider.getMangaDirName(newTitle) var mangaDir = sourceDir.mangaDirs[newMangaDirName] if (mangaDir == null) { mangaDir = MangaDirectory(mangaUniFile) sourceDir.mangaDirs += newMangaDirName to mangaDir } // Add the old chapters to new name's cache if (!oldChapterDirs.isNullOrEmpty()) { mangaDir.chapterDirs += oldChapterDirs } } notifyChanges() } suspend fun removeSource(source: Source) { rootDownloadsDirMutex.withLock { rootDownloadsDir.sourceDirs -= source.id } notifyChanges() } fun invalidateCache() { lastRenew = 0L renewalJob?.cancel() diskCacheFile.delete() renewCache() } /** * Renews the downloads cache. */ private fun renewCache() { // Avoid renewing cache if in the process nor too often if (lastRenew + renewInterval >= System.currentTimeMillis() || renewalJob?.isActive == true) { return } renewalJob = scope.launchIO { if (lastRenew == 0L) { _isInitializing.emit(true) } // Try to wait until extensions and sources have loaded var sources = emptyList() withTimeoutOrNull(30.seconds) { extensionManager.isInitialized.first { it } sourceManager.isInitialized.first { it } sources = getSources() } val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id } rootDownloadsDirMutex.withLock { val updatedRootDir = RootDirectory(storageManager.getDownloadsDirectory()) updatedRootDir.sourceDirs = updatedRootDir.dir?.listFiles().orEmpty() .filter { it.isDirectory && !it.name.isNullOrBlank() } .mapNotNull { dir -> val sourceId = sourceMap[dir.name!!.lowercase()] sourceId?.let { it to SourceDirectory(dir) } } .toMap() updatedRootDir.sourceDirs.values.map { sourceDir -> async { sourceDir.mangaDirs = sourceDir.dir?.listFiles().orEmpty() .filter { it.isDirectory && !it.name.isNullOrBlank() } .associate { it.name!! to MangaDirectory(it) } sourceDir.mangaDirs.values.forEach { mangaDir -> val chapterDirs = mangaDir.dir?.listFiles().orEmpty() .mapNotNull { when { // Ignore incomplete downloads it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null // Folder of images it.isDirectory -> it.name // CBZ files it.isFile && it.extension == "cbz" -> it.nameWithoutExtension // Anything else is irrelevant else -> null } } .toMutableSet() mangaDir.chapterDirs = chapterDirs } } } .awaitAll() rootDownloadsDir = updatedRootDir } _isInitializing.emit(false) }.also { it.invokeOnCompletion(onCancelling = true) { exception -> if (exception != null && exception !is CancellationException) { logcat(LogPriority.ERROR, exception) { "DownloadCache: failed to create cache" } } lastRenew = System.currentTimeMillis() notifyChanges() } } // Mainly to notify the indexing notifier UI notifyChanges() } private fun getSources(): List { return sourceManager.getOnlineSources() + sourceManager.getStubSources() } private fun notifyChanges() { scope.launchNonCancellable { _changes.send(Unit) } updateDiskCache() } private var updateDiskCacheJob: Job? = null private fun updateDiskCache() { updateDiskCacheJob?.cancel() updateDiskCacheJob = scope.launchIO { delay(1000) ensureActive() val bytes = ProtoBuf.encodeToByteArray(rootDownloadsDir) ensureActive() try { diskCacheFile.writeBytes(bytes) } catch (e: Throwable) { logcat( priority = LogPriority.ERROR, throwable = e, message = { "Failed to write disk cache file" }, ) } } } } /** * Class to store the files under the root downloads directory. */ @Serializable private class RootDirectory( @Serializable(with = UniFileAsStringSerializer::class) val dir: UniFile?, var sourceDirs: Map = mapOf(), ) /** * Class to store the files under a source directory. */ @Serializable private class SourceDirectory( @Serializable(with = UniFileAsStringSerializer::class) val dir: UniFile?, var mangaDirs: Map = mapOf(), ) /** * Class to store the files under a manga directory. */ @Serializable private class MangaDirectory( @Serializable(with = UniFileAsStringSerializer::class) val dir: UniFile?, var chapterDirs: MutableSet = mutableSetOf(), ) private object UniFileAsStringSerializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UniFile", PrimitiveKind.STRING) override fun serialize(encoder: Encoder, value: UniFile?) { return if (value == null) { encoder.encodeNull() } else { encoder.encodeString(value.uri.toString()) } } override fun deserialize(decoder: Decoder): UniFile? { return if (decoder.decodeNotNullMark()) { UniFile.fromUri(Injekt.get(), decoder.decodeString().toUri()) } else { decoder.decodeNull() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt ================================================ package eu.kanade.tachiyomi.data.download import android.content.Context import android.content.pm.ServiceInfo import android.os.Build import androidx.lifecycle.asFlow import androidx.work.CoroutineWorker import androidx.work.ExistingWorkPolicy import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkInfo import androidx.work.WorkManager import androidx.work.WorkerParameters import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.NetworkState import eu.kanade.tachiyomi.util.system.activeNetworkState import eu.kanade.tachiyomi.util.system.networkStateFlow import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.setForegroundSafely import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combineTransform import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import tachiyomi.domain.download.service.DownloadPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * This worker is used to manage the downloader. The system can decide to stop the worker, in * which case the downloader is also stopped. It's also stopped while there's no network available. */ class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { private val downloadManager: DownloadManager = Injekt.get() private val downloadPreferences: DownloadPreferences = Injekt.get() override suspend fun getForegroundInfo(): ForegroundInfo { val notification = applicationContext.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) { setContentTitle(applicationContext.getString(R.string.download_notifier_downloader_title)) setSmallIcon(android.R.drawable.stat_sys_download) }.build() return ForegroundInfo( Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS, notification, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC } else { 0 }, ) } override suspend fun doWork(): Result { var networkCheck = checkNetworkState( applicationContext.activeNetworkState(), downloadPreferences.downloadOnlyOverWifi.get(), ) var active = networkCheck && downloadManager.downloaderStart() if (!active) { return Result.failure() } setForegroundSafely() coroutineScope { combineTransform( applicationContext.networkStateFlow(), downloadPreferences.downloadOnlyOverWifi.changes(), transform = { a, b -> emit(checkNetworkState(a, b)) }, ) .onEach { networkCheck = it } .launchIn(this) } // Keep the worker running when needed while (active) { active = !isStopped && downloadManager.isRunning && networkCheck } return Result.success() } private fun checkNetworkState(state: NetworkState, requireWifi: Boolean): Boolean { return if (state.isOnline) { val noWifi = requireWifi && !state.isWifi if (noWifi) { downloadManager.downloaderStop( applicationContext.getString(R.string.download_notifier_text_only_wifi), ) } !noWifi } else { downloadManager.downloaderStop(applicationContext.getString(R.string.download_notifier_no_network)) false } } companion object { private const val TAG = "Downloader" fun start(context: Context) { val request = OneTimeWorkRequestBuilder() .addTag(TAG) .build() WorkManager.getInstance(context) .enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request) } fun stop(context: Context) { WorkManager.getInstance(context) .cancelUniqueWork(TAG) } fun isRunning(context: Context): Boolean { return WorkManager.getInstance(context) .getWorkInfosForUniqueWork(TAG) .get() .let { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 } } fun isRunningFlow(context: Context): Flow { return WorkManager.getInstance(context) .getWorkInfosForUniqueWorkLiveData(TAG) .asFlow() .map { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt ================================================ package eu.kanade.tachiyomi.data.download import android.content.Context import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.Page import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.runBlocking import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.extension import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * This class is used to manage chapter downloads in the application. It must be instantiated once * and retrieved through dependency injection. You can use this class to queue new chapters or query * downloaded chapters. */ class DownloadManager( private val context: Context, private val provider: DownloadProvider = Injekt.get(), private val cache: DownloadCache = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val downloadPreferences: DownloadPreferences = Injekt.get(), ) { /** * Downloader whose only task is to download chapters. */ private val downloader = Downloader(context, provider, cache) val isRunning: Boolean get() = downloader.isRunning /** * Queue to delay the deletion of a list of chapters until triggered. */ private val pendingDeleter = DownloadPendingDeleter(context) val queueState get() = downloader.queueState // For use by DownloadService only fun downloaderStart() = downloader.start() fun downloaderStop(reason: String? = null) = downloader.stop(reason) val isDownloaderRunning get() = DownloadJob.isRunningFlow(context) /** * Tells the downloader to begin downloads. */ fun startDownloads() { if (downloader.isRunning) return if (DownloadJob.isRunning(context)) { downloader.start() } else { DownloadJob.start(context) } } /** * Tells the downloader to pause downloads. */ fun pauseDownloads() { downloader.pause() downloader.stop() } /** * Empties the download queue. */ fun clearQueue() { downloader.clearQueue() downloader.stop() } /** * Returns the download from queue if the chapter is queued for download * else it will return null which means that the chapter is not queued for download * * @param chapterId the chapter to check. */ fun getQueuedDownloadOrNull(chapterId: Long): Download? { return queueState.value.find { it.chapter.id == chapterId } } fun startDownloadNow(chapterId: Long) { val existingDownload = getQueuedDownloadOrNull(chapterId) // If not in queue try to start a new download val toAdd = existingDownload ?: runBlocking { Download.fromChapterId(chapterId) } ?: return queueState.value.toMutableList().apply { existingDownload?.let { remove(it) } add(0, toAdd) reorderQueue(this) } startDownloads() } /** * Reorders the download queue. * * @param downloads value to set the download queue to */ fun reorderQueue(downloads: List) { downloader.updateQueue(downloads) } /** * Tells the downloader to enqueue the given list of chapters. * * @param manga the manga of the chapters. * @param chapters the list of chapters to enqueue. * @param autoStart whether to start the downloader after enqueing the chapters. */ fun downloadChapters(manga: Manga, chapters: List, autoStart: Boolean = true) { downloader.queueChapters(manga, chapters, autoStart) } /** * Tells the downloader to enqueue the given list of downloads at the start of the queue. * * @param downloads the list of downloads to enqueue. */ fun addDownloadsToStartOfQueue(downloads: List) { if (downloads.isEmpty()) return queueState.value.toMutableList().apply { addAll(0, downloads) reorderQueue(this) } if (!DownloadJob.isRunning(context)) startDownloads() } /** * Builds the page list of a downloaded chapter. * * @param source the source of the chapter. * @param manga the manga of the chapter. * @param chapter the downloaded chapter. * @return the list of pages from the chapter. */ fun buildPageList(source: Source, manga: Manga, chapter: Chapter): List { val chapterDir = provider.findChapterDir(chapter.name, chapter.scanlator, chapter.url, manga.title, source) val files = chapterDir?.listFiles().orEmpty() .filter { it.isFile && ImageUtil.isImage(it.name) { it.openInputStream() } } if (files.isEmpty()) { throw Exception(context.stringResource(MR.strings.page_list_empty_error)) } return files.sortedBy { it.name } .mapIndexed { i, file -> Page(i, uri = file.uri).apply { status = Page.State.Ready } } } /** * Returns true if the chapter is downloaded. * * @param chapterName the name of the chapter to query. * @param chapterScanlator scanlator of the chapter to query * @param mangaTitle the title of the manga to query. * @param sourceId the id of the source of the chapter. * @param skipCache whether to skip the directory cache and check in the filesystem. */ fun isChapterDownloaded( chapterName: String, chapterScanlator: String?, chapterUrl: String, mangaTitle: String, sourceId: Long, skipCache: Boolean = false, ): Boolean { return cache.isChapterDownloaded(chapterName, chapterScanlator, chapterUrl, mangaTitle, sourceId, skipCache) } /** * Returns the amount of downloaded chapters. */ fun getDownloadCount(): Int { return cache.getTotalDownloadCount() } /** * Returns the amount of downloaded chapters for a manga. * * @param manga the manga to check. */ fun getDownloadCount(manga: Manga): Int { return cache.getDownloadCount(manga) } fun cancelQueuedDownloads(downloads: List) { removeFromDownloadQueue(downloads.map { it.chapter }) } /** * Deletes the directories of a list of downloaded chapters. * * @param chapters the list of chapters to delete. * @param manga the manga of the chapters. * @param source the source of the chapters. */ fun deleteChapters(chapters: List, manga: Manga, source: Source) { launchIO { val filteredChapters = getChaptersToDelete(chapters, manga) if (filteredChapters.isEmpty()) { return@launchIO } removeFromDownloadQueue(filteredChapters) val (mangaDir, chapterDirs) = provider.findChapterDirs(filteredChapters, manga, source) chapterDirs.forEach { it.delete() } cache.removeChapters(filteredChapters, manga) // Delete manga directory if empty if (mangaDir?.listFiles()?.isEmpty() == true) { deleteManga(manga, source, removeQueued = false) } } } /** * Deletes the directory of a downloaded manga. * * @param manga the manga to delete. * @param source the source of the manga. * @param removeQueued whether to also remove queued downloads. */ fun deleteManga(manga: Manga, source: Source, removeQueued: Boolean = true) { launchIO { if (removeQueued) { downloader.removeFromQueue(manga) } provider.findMangaDir(manga.title, source)?.delete() cache.removeManga(manga) // Delete source directory if empty val sourceDir = provider.findSourceDir(source) if (sourceDir?.listFiles()?.isEmpty() == true) { sourceDir.delete() cache.removeSource(source) } } } private fun removeFromDownloadQueue(chapters: List) { val wasRunning = downloader.isRunning if (wasRunning) { downloader.pause() } downloader.removeFromQueue(chapters) if (wasRunning) { if (queueState.value.isEmpty()) { downloader.stop() } else if (queueState.value.isNotEmpty()) { downloader.start() } } } /** * Adds a list of chapters to be deleted later. * * @param chapters the list of chapters to delete. * @param manga the manga of the chapters. */ suspend fun enqueueChaptersToDelete(chapters: List, manga: Manga) { pendingDeleter.addChapters(getChaptersToDelete(chapters, manga), manga) } /** * Triggers the execution of the deletion of pending chapters. */ fun deletePendingChapters() { val pendingChapters = pendingDeleter.getPendingChapters() for ((manga, chapters) in pendingChapters) { val source = sourceManager.get(manga.source) ?: continue deleteChapters(chapters, manga, source) } } /** * Renames source download folder * * @param oldSource the old source. * @param newSource the new source. */ fun renameSource(oldSource: Source, newSource: Source) { val oldFolder = provider.findSourceDir(oldSource) ?: return val newName = provider.getSourceDirName(newSource) if (oldFolder.name == newName) return val capitalizationChanged = oldFolder.name.equals(newName, ignoreCase = true) if (capitalizationChanged) { val tempName = newName + Downloader.TMP_DIR_SUFFIX if (!oldFolder.renameTo(tempName)) { logcat(LogPriority.ERROR) { "Failed to rename source download folder: ${oldFolder.name}" } return } } if (!oldFolder.renameTo(newName)) { logcat(LogPriority.ERROR) { "Failed to rename source download folder: ${oldFolder.name}" } } } /** * Renames manga download folder * * @param manga the manga * @param newTitle the new manga title. */ suspend fun renameManga(manga: Manga, newTitle: String) { val source = sourceManager.getOrStub(manga.source) val oldFolder = provider.findMangaDir(manga.title, source) ?: return val newName = provider.getMangaDirName(newTitle) if (oldFolder.name == newName) return // just to be safe, don't allow downloads for this manga while renaming it downloader.removeFromQueue(manga) val capitalizationChanged = oldFolder.name.equals(newName, ignoreCase = true) if (capitalizationChanged) { val tempName = newName + Downloader.TMP_DIR_SUFFIX if (!oldFolder.renameTo(tempName)) { logcat(LogPriority.ERROR) { "Failed to rename manga download folder: ${oldFolder.name}" } return } } if (oldFolder.renameTo(newName)) { cache.renameManga(manga, oldFolder, newTitle) } else { logcat(LogPriority.ERROR) { "Failed to rename manga download folder: ${oldFolder.name}" } } } /** * Renames an already downloaded chapter * * @param source the source of the manga. * @param manga the manga of the chapter. * @param oldChapter the existing chapter with the old name. * @param newChapter the target chapter with the new name. */ suspend fun renameChapter(source: Source, manga: Manga, oldChapter: Chapter, newChapter: Chapter) { val oldNames = provider.getValidChapterDirNames(oldChapter.name, oldChapter.scanlator, oldChapter.url) val mangaDir = provider.getMangaDir(manga.title, source).getOrElse { e -> logcat(LogPriority.ERROR, e) { "Manga download folder doesn't exist. Skipping renaming after source sync" } return } // Assume there's only 1 version of the chapter name formats present val oldDownload = oldNames.asSequence() .mapNotNull { mangaDir.findFile(it) } .firstOrNull() ?: return var newName = provider.getChapterDirName(newChapter.name, newChapter.scanlator, newChapter.url) if (oldDownload.isFile && oldDownload.extension == "cbz") { newName += ".cbz" } if (oldDownload.name == newName) return if (oldDownload.renameTo(newName)) { cache.removeChapter(oldChapter, manga) cache.addChapter(newName, mangaDir, manga) } else { logcat(LogPriority.ERROR) { "Could not rename downloaded chapter: ${oldNames.joinToString()}" } } } private suspend fun getChaptersToDelete(chapters: List, manga: Manga): List { // Retrieve the categories that are set to exclude from being deleted on read val categoriesToExclude = downloadPreferences.removeExcludeCategories.get().map(String::toLong) val categoriesForManga = getCategories.await(manga.id) .map { it.id } .ifEmpty { listOf(0) } val filteredCategoryManga = if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) { chapters.filterNot { it.read } } else { chapters } return if (!downloadPreferences.removeBookmarkedChapters.get()) { filteredCategoryManga.filterNot { it.bookmark } } else { filteredCategoryManga } } fun statusFlow(): Flow = queueState .flatMapLatest { downloads -> downloads .map { download -> download.statusFlow.drop(1).map { download } } .merge() } .onStart { emitAll( queueState.value.filter { download -> download.status == Download.State.DOWNLOADING }.asFlow(), ) } fun progressFlow(): Flow = queueState .flatMapLatest { downloads -> downloads .map { download -> download.progressFlow.drop(1).map { download } } .merge() } .onStart { emitAll( queueState.value.filter { download -> download.status == Download.State.DOWNLOADING } .asFlow(), ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt ================================================ package eu.kanade.tachiyomi.data.download import android.app.PendingIntent import android.content.Context import android.graphics.BitmapFactory import androidx.core.app.NotificationCompat import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.lang.chop import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.util.regex.Pattern /** * DownloadNotifier is used to show notifications when downloading one or multiple chapters. * * @param context context of application */ internal class DownloadNotifier(private val context: Context) { private val preferences: SecurityPreferences by injectLazy() private val progressNotificationBuilder by lazy { context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) { setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)) setAutoCancel(false) setOnlyAlertOnce(true) } } private val errorNotificationBuilder by lazy { context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) { setAutoCancel(false) } } /** * Status of download. Used for correct notification icon. */ private var isDownloading = false /** * Shows a notification from this builder. * * @param id the id of the notification. */ private fun NotificationCompat.Builder.show(id: Int) { context.notify(id, build()) } /** * Dismiss the downloader's notification. Downloader error notifications use a different id, so * those can only be dismissed by the user. */ fun dismissProgress() { context.cancelNotification(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS) } /** * Called when download progress changes. * * @param download download object containing download information. */ fun onProgressChange(download: Download) { with(progressNotificationBuilder) { if (!isDownloading) { setSmallIcon(android.R.drawable.stat_sys_download) clearActions() // Open download manager when clicked setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) isDownloading = true // Pause action addAction( R.drawable.ic_pause_24dp, context.stringResource(MR.strings.action_pause), NotificationReceiver.pauseDownloadsPendingBroadcast(context), ) addAction( R.drawable.ic_book_24dp, context.stringResource(MR.strings.action_show_manga), NotificationReceiver.openEntryPendingActivity(context, download.manga.id), ) } val downloadingProgressText = context.stringResource( MR.strings.chapter_downloading_progress, download.downloadedImages, download.pages!!.size, ) if (preferences.hideNotificationContent.get()) { setContentTitle(downloadingProgressText) setContentText(null) } else { val title = download.manga.title.chop(15) val quotedTitle = Pattern.quote(title) val chapter = download.chapter.name.replaceFirst( "$quotedTitle[\\s]*[-]*[\\s]*".toRegex(RegexOption.IGNORE_CASE), "", ) setContentTitle("$title - $chapter".chop(30)) setContentText(downloadingProgressText) } setProgress(download.pages!!.size, download.downloadedImages, false) setOngoing(true) show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS) } } /** * Show notification when download is paused. */ fun onPaused() { with(progressNotificationBuilder) { setContentTitle(context.stringResource(MR.strings.chapter_paused)) setContentText(context.stringResource(MR.strings.download_notifier_download_paused)) setSmallIcon(R.drawable.ic_pause_24dp) setProgress(0, 0, false) setOngoing(false) clearActions() // Open download manager when clicked setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) // Resume action addAction( R.drawable.ic_play_arrow_24dp, context.stringResource(MR.strings.action_resume), NotificationReceiver.resumeDownloadsPendingBroadcast(context), ) // Clear action addAction( R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel_all), NotificationReceiver.clearDownloadsPendingBroadcast(context), ) show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS) } // Reset initial values isDownloading = false } /** * Resets the state once downloads are completed. */ fun onComplete() { dismissProgress() // Reset states to default isDownloading = false } /** * Called when the downloader receives a warning. * * @param reason the text to show. * @param timeout duration after which to automatically dismiss the notification. * @param mangaId the id of the entry being warned about * Only works on Android 8+. */ fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null, mangaId: Long? = null) { with(errorNotificationBuilder) { setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title)) setStyle(NotificationCompat.BigTextStyle().bigText(reason)) setSmallIcon(R.drawable.ic_warning_white_24dp) setAutoCancel(true) clearActions() setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) if (mangaId != null) { addAction( R.drawable.ic_book_24dp, context.stringResource(MR.strings.action_show_manga), NotificationReceiver.openEntryPendingActivity(context, mangaId), ) } setProgress(0, 0, false) timeout?.let { setTimeoutAfter(it) } contentIntent?.let { setContentIntent(it) } show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR) } // Reset download information isDownloading = false } /** * Called when the downloader receives an error. It's shown as a separate notification to avoid * being overwritten. * * @param error string containing error information. * @param chapter string containing chapter title. * @param mangaId the id of the entry that the error occurred on */ fun onError(error: String? = null, chapter: String? = null, mangaTitle: String? = null, mangaId: Long? = null) { // Create notification with(errorNotificationBuilder) { setContentTitle( mangaTitle?.plus(": $chapter") ?: context.stringResource(MR.strings.download_notifier_downloader_title), ) setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) clearActions() setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) if (mangaId != null) { addAction( R.drawable.ic_book_24dp, context.stringResource(MR.strings.action_show_manga), NotificationReceiver.openEntryPendingActivity(context, mangaId), ) } setProgress(0, 0, false) show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR) } // Reset download information isDownloading = false } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadPendingDeleter.kt ================================================ package eu.kanade.tachiyomi.data.download import android.content.Context import androidx.core.content.edit import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * Class used to keep a list of chapters for future deletion. * * @param context the application context. */ class DownloadPendingDeleter( context: Context, private val json: Json = Injekt.get(), ) { /** * Preferences used to store the list of chapters to delete. */ private val preferences = context.getSharedPreferences("chapters_to_delete", Context.MODE_PRIVATE) /** * Last added chapter, used to avoid decoding from the preference too often. */ private var lastAddedEntry: Entry? = null /** * Adds a list of chapters for future deletion. * * @param chapters the chapters to be deleted. * @param manga the manga of the chapters. */ @Synchronized fun addChapters(chapters: List, manga: Manga) { val lastEntry = lastAddedEntry val newEntry = if (lastEntry != null && lastEntry.manga.id == manga.id) { // Append new chapters val newChapters = lastEntry.chapters.addUniqueById(chapters) // If no chapters were added, do nothing if (newChapters.size == lastEntry.chapters.size) return // Last entry matches the manga, reuse it to avoid decoding json from preferences lastEntry.copy(chapters = newChapters) } else { val existingEntry = preferences.getString(manga.id.toString(), null) if (existingEntry != null) { // Existing entry found on preferences, decode json and add the new chapter val savedEntry = json.decodeFromString(existingEntry) // Append new chapters val newChapters = savedEntry.chapters.addUniqueById(chapters) // If no chapters were added, do nothing if (newChapters.size == savedEntry.chapters.size) return savedEntry.copy(chapters = newChapters) } else { // No entry has been found yet, create a new one Entry(chapters.map { it.toEntry() }, manga.toEntry()) } } // Save current state val json = json.encodeToString(newEntry) preferences.edit { putString(newEntry.manga.id.toString(), json) } lastAddedEntry = newEntry } /** * Returns the list of chapters to be deleted grouped by its manga. * * Note: the returned list of manga and chapters only contain basic information needed by the * downloader, so don't use them for anything else. */ @Synchronized fun getPendingChapters(): Map> { val entries = decodeAll() preferences.edit { clear() } lastAddedEntry = null return entries.associate { (chapters, manga) -> manga.toModel() to chapters.map { it.toModel() } } } /** * Decodes all the chapters from preferences. */ private fun decodeAll(): List { return preferences.all.values.mapNotNull { rawEntry -> try { (rawEntry as? String)?.let { json.decodeFromString(it) } } catch (e: Exception) { null } } } /** * Returns a copy of chapter entries ensuring no duplicates by chapter id. */ private fun List.addUniqueById(chapters: List): List { val newList = toMutableList() for (chapter in chapters) { if (none { it.id == chapter.id }) { newList.add(chapter.toEntry()) } } return newList } /** * Returns a manga entry from a manga model. */ private fun Manga.toEntry() = MangaEntry(id, url, title, source) /** * Returns a chapter entry from a chapter model. */ private fun Chapter.toEntry() = ChapterEntry(id, url, name, scanlator) /** * Returns a manga model from a manga entry. */ private fun MangaEntry.toModel() = Manga.create().copy( url = url, title = title, source = source, id = id, ) /** * Returns a chapter model from a chapter entry. */ private fun ChapterEntry.toModel() = Chapter.create().copy( id = id, url = url, name = name, scanlator = scanlator, ) /** * Class used to save an entry of chapters with their manga into preferences. */ @Serializable private data class Entry( val chapters: List, val manga: MangaEntry, ) /** * Class used to save an entry for a chapter into preferences. */ @Serializable private data class ChapterEntry( val id: Long, val url: String, val name: String, val scanlator: String? = null, ) /** * Class used to save an entry for a manga into preferences. */ @Serializable private data class MangaEntry( val id: Long, val url: String, val title: String, val source: Long, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt ================================================ package eu.kanade.tachiyomi.data.download import android.content.Context import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.util.lang.Hash.md5 import eu.kanade.tachiyomi.util.storage.DiskUtil import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.displayablePath import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.storage.service.StorageManager import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.IOException /** * This class is used to provide the directories where the downloads should be saved. * It uses the following path scheme: //// * * @param context the application context. */ class DownloadProvider( private val context: Context, private val storageManager: StorageManager = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), ) { private val downloadsDir: UniFile? get() = storageManager.getDownloadsDirectory() /** * Returns the download directory for a manga. For internal use only. * * @param mangaTitle the title of the manga to query. * @param source the source of the manga. */ internal fun getMangaDir(mangaTitle: String, source: Source): Result { val downloadsDir = downloadsDir if (downloadsDir == null) { logcat(LogPriority.ERROR) { "Failed to create download directory" } return Result.failure( IOException(context.stringResource(MR.strings.storage_failed_to_create_download_directory)), ) } val sourceDirName = getSourceDirName(source) val sourceDir = downloadsDir.createDirectory(sourceDirName) if (sourceDir == null) { val displayablePath = downloadsDir.displayablePath + "/$sourceDirName" logcat(LogPriority.ERROR) { "Failed to create source download directory: $displayablePath" } return Result.failure( IOException(context.stringResource(MR.strings.storage_failed_to_create_directory, displayablePath)), ) } val mangaDirName = getMangaDirName(mangaTitle) val mangaDir = sourceDir.createDirectory(mangaDirName) if (mangaDir == null) { val displayablePath = sourceDir.displayablePath + "/$mangaDirName" logcat(LogPriority.ERROR) { "Failed to create manga download directory: $displayablePath" } return Result.failure( IOException(context.stringResource(MR.strings.storage_failed_to_create_directory, displayablePath)), ) } return Result.success(mangaDir) } /** * Returns the download directory for a source if it exists. * * @param source the source to query. */ fun findSourceDir(source: Source): UniFile? { return downloadsDir?.findFile(getSourceDirName(source)) } /** * Returns the download directory for a manga if it exists. * * @param mangaTitle the title of the manga to query. * @param source the source of the manga. */ fun findMangaDir(mangaTitle: String, source: Source): UniFile? { val sourceDir = findSourceDir(source) return sourceDir?.findFile(getMangaDirName(mangaTitle)) } /** * Returns the download directory for a chapter if it exists. * * @param chapterName the name of the chapter to query. * @param chapterScanlator scanlator of the chapter to query * @param mangaTitle the title of the manga to query. * @param source the source of the chapter. */ fun findChapterDir( chapterName: String, chapterScanlator: String?, chapterUrl: String, mangaTitle: String, source: Source, ): UniFile? { val mangaDir = findMangaDir(mangaTitle, source) return getValidChapterDirNames(chapterName, chapterScanlator, chapterUrl).asSequence() .mapNotNull { mangaDir?.findFile(it) } .firstOrNull() } /** * Returns a list of downloaded directories for the chapters that exist. * * @param chapters the chapters to query. * @param manga the manga of the chapter. * @param source the source of the chapter. */ fun findChapterDirs(chapters: List, manga: Manga, source: Source): Pair> { val mangaDir = findMangaDir(manga.title, source) ?: return null to emptyList() return mangaDir to chapters.mapNotNull { chapter -> getValidChapterDirNames(chapter.name, chapter.scanlator, chapter.url).asSequence() .mapNotNull { mangaDir.findFile(it) } .firstOrNull() } } /** * Returns the download directory name for a source. * * @param source the source to query. */ fun getSourceDirName(source: Source): String { return DiskUtil.buildValidFilename( source.toString(), disallowNonAscii = libraryPreferences.disallowNonAsciiFilenames.get(), ) } /** * Returns the download directory name for a manga. * * @param mangaTitle the title of the manga to query. */ fun getMangaDirName(mangaTitle: String): String { return DiskUtil.buildValidFilename( mangaTitle, disallowNonAscii = libraryPreferences.disallowNonAsciiFilenames.get(), ) } /** * Returns the chapter directory name for a chapter. * * @param chapterName the name of the chapter to query. * @param chapterScanlator scanlator of the chapter to query. * @param chapterUrl url of the chapter to query. */ fun getChapterDirName( chapterName: String, chapterScanlator: String?, chapterUrl: String, disallowNonAsciiFilenames: Boolean = libraryPreferences.disallowNonAsciiFilenames.get(), ): String { var dirName = sanitizeChapterName(chapterName) if (!chapterScanlator.isNullOrBlank()) { dirName = chapterScanlator + "_" + dirName } // Subtract 7 bytes for hash and underscore, 4 bytes for .cbz dirName = DiskUtil.buildValidFilename(dirName, DiskUtil.MAX_FILE_NAME_BYTES - 11, disallowNonAsciiFilenames) dirName += "_" + md5(chapterUrl).take(6) return dirName } /** * Returns list of names that might have been previously used as * the directory name for a chapter. * Add to this list if naming pattern ever changes. * * @param chapterName the name of the chapter to query. * @param chapterScanlator scanlator of the chapter to query. * @param chapterUrl url of the chapter to query. */ private fun getLegacyChapterDirNames( chapterName: String, chapterScanlator: String?, chapterUrl: String, ): List { val sanitizedChapterName = sanitizeChapterName(chapterName) val chapterNameV1 = DiskUtil.buildValidFilename( when { !chapterScanlator.isNullOrBlank() -> "${chapterScanlator}_$sanitizedChapterName" else -> sanitizedChapterName }, ) // Get the filename that would be generated if the user were // using the other value for the disallow non-ASCII // filenames setting. This ensures that chapters downloaded // before the user changed the setting can still be found. val otherChapterDirName = getChapterDirName( chapterName, chapterScanlator, chapterUrl, !libraryPreferences.disallowNonAsciiFilenames.get(), ) return buildList(2) { // Chapter name without hash (unable to handle duplicate // chapter names) add(chapterNameV1) add(otherChapterDirName) } } /** * Return the new name for the chapter (in case it's empty or blank) * * @param chapterName the name of the chapter */ private fun sanitizeChapterName(chapterName: String): String { return chapterName.ifBlank { "Chapter" } } fun isChapterDirNameChanged(oldChapter: Chapter, newChapter: Chapter): Boolean { return getChapterDirName(oldChapter.name, oldChapter.scanlator, oldChapter.url) != getChapterDirName(newChapter.name, newChapter.scanlator, newChapter.url) } /** * Returns valid downloaded chapter directory names. * * @param chapter the domain chapter object. */ fun getValidChapterDirNames(chapterName: String, chapterScanlator: String?, chapterUrl: String): List { val chapterDirName = getChapterDirName(chapterName, chapterScanlator, chapterUrl) val legacyChapterDirNames = getLegacyChapterDirNames(chapterName, chapterScanlator, chapterUrl) return buildList { // Folder of images add(chapterDirName) // Archived chapters add("$chapterDirName.cbz") // any legacy names legacyChapterDirNames.forEach { add(it) add("$it.cbz") } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadStore.kt ================================================ package eu.kanade.tachiyomi.data.download import android.content.Context import androidx.core.content.edit import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import tachiyomi.domain.chapter.interactor.GetChapter import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * This class is used to persist active downloads across application restarts. */ class DownloadStore( context: Context, private val sourceManager: SourceManager = Injekt.get(), private val json: Json = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val getChapter: GetChapter = Injekt.get(), ) { /** * Preference file where active downloads are stored. */ private val preferences = context.getSharedPreferences("active_downloads", Context.MODE_PRIVATE) /** * Counter used to keep the queue order. */ private var counter = 0 /** * Adds a list of downloads to the store. * * @param downloads the list of downloads to add. */ fun addAll(downloads: List) { preferences.edit { downloads.forEach { putString(getKey(it), serialize(it)) } } } /** * Removes a download from the store. * * @param download the download to remove. */ fun remove(download: Download) { preferences.edit { remove(getKey(download)) } } /** * Removes a list of downloads from the store. * * @param downloads the download to remove. */ fun removeAll(downloads: List) { preferences.edit { downloads.forEach { remove(getKey(it)) } } } /** * Removes all the downloads from the store. */ fun clear() { preferences.edit { clear() } } /** * Returns the preference's key for the given download. * * @param download the download. */ private fun getKey(download: Download): String { return download.chapter.id.toString() } /** * Returns the list of downloads to restore. It should be called in a background thread. */ fun restore(): List { val objs = preferences.all .mapNotNull { it.value as? String } .mapNotNull { deserialize(it) } .sortedBy { it.order } val downloads = mutableListOf() if (objs.isNotEmpty()) { val cachedManga = mutableMapOf() for ((mangaId, chapterId) in objs) { val manga = cachedManga.getOrPut(mangaId) { runBlocking { getManga.await(mangaId) } } ?: continue val source = sourceManager.get(manga.source) as? HttpSource ?: continue val chapter = runBlocking { getChapter.await(chapterId) } ?: continue downloads.add(Download(source, manga, chapter)) } } // Clear the store, downloads will be added again immediately. clear() return downloads } /** * Converts a download to a string. * * @param download the download to serialize. */ private fun serialize(download: Download): String { val obj = DownloadObject(download.manga.id, download.chapter.id, counter++) return json.encodeToString(obj) } /** * Restore a download from a string. * * @param string the download as string. */ private fun deserialize(string: String): DownloadObject? { return try { json.decodeFromString(string) } catch (e: Exception) { null } } } /** * Class used for download serialization * * @param mangaId the id of the manga. * @param chapterId the id of the chapter. * @param order the order of the download in the queue. */ @Serializable private data class DownloadObject(val mangaId: Long, val chapterId: Long, val order: Int) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt ================================================ package eu.kanade.tachiyomi.data.download import android.content.Context import com.hippo.unifile.UniFile import eu.kanade.domain.chapter.model.toSChapter import eu.kanade.domain.manga.model.getComicInfo import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.library.LibraryUpdateNotifier import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.source.UnmeteredSource import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.DiskUtil.NOMEDIA_FILE import eu.kanade.tachiyomi.util.storage.saveTo import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.async import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapMerge import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.retryWhen import kotlinx.coroutines.flow.transformLatest import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope import logcat.LogPriority import mihon.core.archive.ZipWriter import nl.adaptivity.xmlutil.serialization.XML import okhttp3.Response import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.extension import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNow import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File import java.util.Locale /** * This class is the one in charge of downloading chapters. * * Its queue contains the list of chapters to download. */ class Downloader( private val context: Context, private val provider: DownloadProvider, private val cache: DownloadCache, private val sourceManager: SourceManager = Injekt.get(), private val chapterCache: ChapterCache = Injekt.get(), private val downloadPreferences: DownloadPreferences = Injekt.get(), private val xml: XML = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val getTracks: GetTracks = Injekt.get(), ) { /** * Store for persisting downloads across restarts. */ private val store = DownloadStore(context) /** * Queue where active downloads are kept. */ private val _queueState = MutableStateFlow>(emptyList()) val queueState = _queueState.asStateFlow() /** * Notifier for the downloader state and progress. */ private val notifier by lazy { DownloadNotifier(context) } private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) private var downloaderJob: Job? = null /** * Whether the downloader is running. */ val isRunning: Boolean get() = downloaderJob?.isActive ?: false /** * Whether the downloader is paused */ @Volatile var isPaused: Boolean = false init { launchNow { val chapters = async { store.restore() } addAllToQueue(chapters.await()) } } /** * Starts the downloader. It doesn't do anything if it's already running or there isn't anything * to download. * * @return true if the downloader is started, false otherwise. */ fun start(): Boolean { if (isRunning || queueState.value.isEmpty()) { return false } val pending = queueState.value.filter { it.status != Download.State.DOWNLOADED } pending.forEach { if (it.status != Download.State.QUEUE) it.status = Download.State.QUEUE } isPaused = false launchDownloaderJob() return pending.isNotEmpty() } /** * Stops the downloader. */ fun stop(reason: String? = null) { cancelDownloaderJob() queueState.value .filter { it.status == Download.State.DOWNLOADING } .forEach { it.status = Download.State.ERROR } if (reason != null) { notifier.onWarning(reason) return } if (isPaused && queueState.value.isNotEmpty()) { notifier.onPaused() } else { notifier.onComplete() } isPaused = false DownloadJob.stop(context) } /** * Pauses the downloader */ fun pause() { cancelDownloaderJob() queueState.value .filter { it.status == Download.State.DOWNLOADING } .forEach { it.status = Download.State.QUEUE } isPaused = true } /** * Removes everything from the queue. */ fun clearQueue() { cancelDownloaderJob() internalClearQueue() notifier.dismissProgress() } /** * Prepares the subscriptions to start downloading. */ private fun launchDownloaderJob() { if (isRunning) return downloaderJob = scope.launch { val activeDownloadsFlow = combine( queueState, downloadPreferences.parallelSourceLimit.changes(), ) { a, b -> a to b }.transformLatest { (queue, parallelCount) -> while (true) { val activeDownloads = queue.asSequence() // Ignore completed downloads, leave them in the queue .filter { it.status.value <= Download.State.DOWNLOADING.value } .groupBy { it.source } .toList() .take(parallelCount) .map { (_, downloads) -> downloads.first() } emit(activeDownloads) if (activeDownloads.isEmpty()) break // Suspend until a download enters the ERROR state val activeDownloadsErroredFlow = combine(activeDownloads.map(Download::statusFlow)) { states -> states.contains(Download.State.ERROR) }.filter { it } activeDownloadsErroredFlow.first() } } .distinctUntilChanged() // Use supervisorScope to cancel child jobs when the downloader job is cancelled supervisorScope { val downloadJobs = mutableMapOf() activeDownloadsFlow.collectLatest { activeDownloads -> val downloadJobsToStop = downloadJobs.filter { it.key !in activeDownloads } downloadJobsToStop.forEach { (download, job) -> job.cancel() downloadJobs.remove(download) } val downloadsToStart = activeDownloads.filter { it !in downloadJobs } downloadsToStart.forEach { download -> downloadJobs[download] = launchDownloadJob(download) } } } } } private fun CoroutineScope.launchDownloadJob(download: Download) = launchIO { try { downloadChapter(download) // Remove successful download from queue if (download.status == Download.State.DOWNLOADED) { removeFromQueue(download) } if (areAllDownloadsFinished()) { stop() } } catch (e: Throwable) { if (e is CancellationException) throw e logcat(LogPriority.ERROR, e) notifier.onError(e.message) stop() } } /** * Destroys the downloader subscriptions. */ private fun cancelDownloaderJob() { downloaderJob?.cancel() downloaderJob = null } /** * Creates a download object for every chapter and adds them to the downloads queue. * * @param manga the manga of the chapters to download. * @param chapters the list of chapters to download. * @param autoStart whether to start the downloader after enqueing the chapters. */ fun queueChapters(manga: Manga, chapters: List, autoStart: Boolean) { if (chapters.isEmpty()) return val source = sourceManager.get(manga.source) as? HttpSource ?: return val wasEmpty = queueState.value.isEmpty() val chaptersToQueue = chapters.asSequence() // Filter out those already downloaded. .filter { provider.findChapterDir(it.name, it.scanlator, it.url, manga.title, source) == null } // Add chapters to queue from the start. .sortedByDescending { it.sourceOrder } // Filter out those already enqueued. .filter { chapter -> queueState.value.none { it.chapter.id == chapter.id } } // Create a download for each one. .map { Download(source, manga, it) } .toList() if (chaptersToQueue.isNotEmpty()) { addAllToQueue(chaptersToQueue) // Start downloader if needed if (autoStart && wasEmpty) { val queuedDownloads = queueState.value.count { it.source !is UnmeteredSource } val maxDownloadsFromSource = queueState.value .groupBy { it.source } .filterKeys { it !is UnmeteredSource } .maxOfOrNull { it.value.size } ?: 0 if ( queuedDownloads > DOWNLOADS_QUEUED_WARNING_THRESHOLD || maxDownloadsFromSource > CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD ) { notifier.onWarning( context.stringResource( MR.strings.download_queue_size_warning, context.stringResource(MR.strings.app_name), ), WARNING_NOTIF_TIMEOUT_MS, NotificationHandler.openUrl(context, LibraryUpdateNotifier.HELP_WARNING_URL), ) } DownloadJob.start(context) } } } /** * Downloads a chapter. * * @param download the chapter to be downloaded. */ private suspend fun downloadChapter(download: Download) { val mangaDir = provider.getMangaDir(download.manga.title, download.source).getOrElse { e -> download.status = Download.State.ERROR notifier.onError(e.message, download.chapter.name, download.manga.title, download.manga.id) return } val availSpace = DiskUtil.getAvailableStorageSpace(mangaDir) if (availSpace != -1L && availSpace < MIN_DISK_SPACE) { download.status = Download.State.ERROR notifier.onError( context.stringResource(MR.strings.download_insufficient_space), download.chapter.name, download.manga.title, download.manga.id, ) return } val chapterDirname = provider.getChapterDirName( download.chapter.name, download.chapter.scanlator, download.chapter.url, ) val tmpDir = mangaDir.createDirectory(chapterDirname + TMP_DIR_SUFFIX)!! try { // If the page list already exists, start from the file val pageList = download.pages ?: run { // Otherwise, pull page list from network and add them to download object val pages = download.source.getPageList(download.chapter.toSChapter()) if (pages.isEmpty()) { throw Exception(context.stringResource(MR.strings.page_list_empty_error)) } // Don't trust index from source val reIndexedPages = pages.mapIndexed { index, page -> Page(index, page.url, page.imageUrl, page.uri) } download.pages = reIndexedPages reIndexedPages } // Delete all temporary (unfinished) files tmpDir.listFiles() ?.filter { it.extension == "tmp" } ?.forEach { it.delete() } download.status = Download.State.DOWNLOADING // Start downloading images, consider we can have downloaded images already pageList.asFlow().flatMapMerge(concurrency = downloadPreferences.parallelPageLimit.get()) { page -> flow { // Fetch image URL if necessary if (page.imageUrl.isNullOrEmpty()) { page.status = Page.State.LoadPage try { page.imageUrl = download.source.getImageUrl(page) } catch (e: Throwable) { page.status = Page.State.Error(e) } } withIOContext { getOrDownloadImage(page, download, tmpDir) } emit(page) } .flowOn(Dispatchers.IO) } .collect { // Do when page is downloaded. notifier.onProgressChange(download) } // Do after download completes if (!isDownloadSuccessful(download, tmpDir)) { download.status = Download.State.ERROR return } createComicInfoFile( tmpDir, download.manga, download.chapter, download.source, ) // Only rename the directory if it's downloaded if (downloadPreferences.saveChaptersAsCBZ.get()) { archiveChapter(mangaDir, chapterDirname, tmpDir) } else { tmpDir.renameTo(chapterDirname) } cache.addChapter(chapterDirname, mangaDir, download.manga) DiskUtil.createNoMediaFile(tmpDir, context) download.status = Download.State.DOWNLOADED } catch (error: Throwable) { if (error is CancellationException) throw error // If the page list threw, it will resume here logcat(LogPriority.ERROR, error) download.status = Download.State.ERROR notifier.onError(error.message, download.chapter.name, download.manga.title, download.manga.id) } } /** * Gets the image from the filesystem if it exists or downloads it otherwise. * * @param page the page to download. * @param download the download of the page. * @param tmpDir the temporary directory of the download. */ private suspend fun getOrDownloadImage(page: Page, download: Download, tmpDir: UniFile) { // If the image URL is empty, do nothing if (page.imageUrl == null) { return } val digitCount = (download.pages?.size ?: 0).toString().length.coerceAtLeast(3) val filename = "%0${digitCount}d".format(Locale.ENGLISH, page.number) val tmpFile = tmpDir.findFile("$filename.tmp") // Delete temp file if it exists tmpFile?.delete() // Try to find the image file val imageFile = tmpDir.listFiles()?.firstOrNull { it.name!!.startsWith("$filename.") || it.name!!.startsWith("${filename}__001") } try { // If the image is already downloaded, do nothing. Otherwise download from network val file = when { imageFile != null -> imageFile chapterCache.isImageInCache( page.imageUrl!!, ) -> copyImageFromCache(chapterCache.getImageFile(page.imageUrl!!), tmpDir, filename) else -> downloadImage(page, download.source, tmpDir, filename) } // When the page is ready, set page path, progress (just in case) and status splitTallImageIfNeeded(page, tmpDir) page.uri = file.uri page.progress = 100 page.status = Page.State.Ready } catch (e: Throwable) { if (e is CancellationException) throw e // Mark this page as error and allow to download the remaining page.progress = 0 page.status = Page.State.Error(e) notifier.onError(e.message, download.chapter.name, download.manga.title, download.manga.id) } } /** * Downloads the image from network to a file in tmpDir. * * @param page the page to download. * @param source the source of the page. * @param tmpDir the temporary directory of the download. * @param filename the filename of the image. */ private suspend fun downloadImage(page: Page, source: HttpSource, tmpDir: UniFile, filename: String): UniFile { page.status = Page.State.DownloadImage page.progress = 0 return flow { val response = source.getImage(page) val file = tmpDir.createFile("$filename.tmp")!! try { response.body.source().saveTo(file.openOutputStream()) val extension = getImageExtension(response, file) file.renameTo("$filename.$extension") } catch (e: Exception) { response.close() file.delete() throw e } emit(file) } // Retry 3 times, waiting 2, 4 and 8 seconds between attempts. .retryWhen { _, attempt -> if (attempt < 3) { delay((2L shl attempt.toInt()) * 1000) true } else { false } } .first() } /** * Copies the image from cache to file in tmpDir. * * @param cacheFile the file from cache. * @param tmpDir the temporary directory of the download. * @param filename the filename of the image. */ private fun copyImageFromCache(cacheFile: File, tmpDir: UniFile, filename: String): UniFile { val tmpFile = tmpDir.createFile("$filename.tmp")!! cacheFile.inputStream().use { input -> tmpFile.openOutputStream().use { output -> input.copyTo(output) } } val extension = ImageUtil.findImageType(cacheFile.inputStream()) ?: return tmpFile tmpFile.renameTo("$filename.${extension.extension}") cacheFile.delete() return tmpFile } /** * Returns the extension of the downloaded image from the network response, or if it's null, * analyze the file. If everything fails, assume it's a jpg. * * @param response the network response of the image. * @param file the file where the image is already downloaded. */ private fun getImageExtension(response: Response, file: UniFile): String { val mime = response.body.contentType()?.run { if (type == "image") "image/$subtype" else null } return ImageUtil.getExtensionFromMimeType(mime) { file.openInputStream() } } private fun splitTallImageIfNeeded(page: Page, tmpDir: UniFile) { if (!downloadPreferences.splitTallImages.get()) return try { val filenamePrefix = "%03d".format(Locale.ENGLISH, page.number) val imageFile = tmpDir.listFiles()?.firstOrNull { it.name.orEmpty().startsWith(filenamePrefix) } ?: error(context.stringResource(MR.strings.download_notifier_split_page_not_found, page.number)) // If the original page was previously split, then skip if (imageFile.name.orEmpty().startsWith("${filenamePrefix}__")) return ImageUtil.splitTallImage(tmpDir, imageFile, filenamePrefix) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to split downloaded image" } } } /** * Checks if the download was successful. * * @param download the download to check. * @param tmpDir the directory where the download is currently stored. */ private fun isDownloadSuccessful( download: Download, tmpDir: UniFile, ): Boolean { // Page list hasn't been initialized val downloadPageCount = download.pages?.size ?: return false // Ensure that all pages have been downloaded if (download.downloadedImages != downloadPageCount) { return false } // Ensure that the chapter folder has all the pages val downloadedImagesCount = tmpDir.listFiles().orEmpty().count { val fileName = it.name.orEmpty() when { fileName in listOf(COMIC_INFO_FILE, NOMEDIA_FILE) -> false fileName.endsWith(".tmp") -> false // Only count the first split page and not the others fileName.contains("__") && !fileName.endsWith("__001.jpg") -> false else -> true } } return downloadedImagesCount == downloadPageCount } /** * Archive the chapter pages as a CBZ. */ private fun archiveChapter( mangaDir: UniFile, dirname: String, tmpDir: UniFile, ) { val zip = mangaDir.createFile("$dirname.cbz$TMP_DIR_SUFFIX")!! ZipWriter(context, zip).use { writer -> tmpDir.listFiles()?.forEach { file -> writer.write(file) } } zip.renameTo("$dirname.cbz") tmpDir.delete() } /** * Creates a ComicInfo.xml file inside the given directory. */ private suspend fun createComicInfoFile( dir: UniFile, manga: Manga, chapter: Chapter, source: HttpSource, ) { val categories = getCategories.await(manga.id).map { it.name.trim() }.takeUnless { it.isEmpty() } val urls = getTracks.await(manga.id) .mapNotNull { track -> track.remoteUrl.takeUnless { url -> url.isBlank() }?.trim() } .plus(source.getChapterUrl(chapter.toSChapter()).trim()) .distinct() val comicInfo = getComicInfo( manga, chapter, urls, categories, source.name, ) // Remove the old file dir.findFile(COMIC_INFO_FILE)?.delete() dir.createFile(COMIC_INFO_FILE)!!.openOutputStream().use { val comicInfoString = xml.encodeToString(ComicInfo.serializer(), comicInfo) it.write(comicInfoString.toByteArray()) } } /** * Returns true if all the queued downloads are in DOWNLOADED or ERROR state. */ private fun areAllDownloadsFinished(): Boolean { return queueState.value.none { it.status.value <= Download.State.DOWNLOADING.value } } private fun addAllToQueue(downloads: List) { _queueState.update { downloads.forEach { download -> download.status = Download.State.QUEUE } store.addAll(downloads) it + downloads } } private fun removeFromQueue(download: Download) { _queueState.update { store.remove(download) if (download.status == Download.State.DOWNLOADING || download.status == Download.State.QUEUE) { download.status = Download.State.NOT_DOWNLOADED } it - download } } private inline fun removeFromQueueIf(predicate: (Download) -> Boolean) { _queueState.update { queue -> val downloads = queue.filter { predicate(it) } store.removeAll(downloads) downloads.forEach { download -> if (download.status == Download.State.DOWNLOADING || download.status == Download.State.QUEUE) { download.status = Download.State.NOT_DOWNLOADED } } queue - downloads } } fun removeFromQueue(chapters: List) { val chapterIds = chapters.map { it.id } removeFromQueueIf { it.chapter.id in chapterIds } } fun removeFromQueue(manga: Manga) { removeFromQueueIf { it.manga.id == manga.id } } private fun internalClearQueue() { _queueState.update { it.forEach { download -> if (download.status == Download.State.DOWNLOADING || download.status == Download.State.QUEUE) { download.status = Download.State.NOT_DOWNLOADED } } store.clear() emptyList() } } fun updateQueue(downloads: List) { val wasRunning = isRunning if (downloads.isEmpty()) { clearQueue() stop() return } pause() internalClearQueue() addAllToQueue(downloads) if (wasRunning) { start() } } companion object { const val TMP_DIR_SUFFIX = "_tmp" const val WARNING_NOTIF_TIMEOUT_MS = 30_000L const val CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 15 private const val DOWNLOADS_QUEUED_WARNING_THRESHOLD = 30 } } // Arbitrary minimum required space to start a download: 200 MB private const val MIN_DISK_SPACE = 200L * 1024 * 1024 ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/download/model/Download.kt ================================================ package eu.kanade.tachiyomi.data.download.model import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flow import tachiyomi.domain.chapter.interactor.GetChapter import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get data class Download( val source: HttpSource, val manga: Manga, val chapter: Chapter, ) { var pages: List? = null val totalProgress: Int get() = pages?.sumOf(Page::progress) ?: 0 val downloadedImages: Int get() = pages?.count { it.status == Page.State.Ready } ?: 0 @Transient private val _statusFlow = MutableStateFlow(State.NOT_DOWNLOADED) @Transient val statusFlow = _statusFlow.asStateFlow() var status: State get() = _statusFlow.value set(status) { _statusFlow.value = status } @Transient val progressFlow = flow { if (pages == null) { emit(0) while (pages == null) { delay(50) } } val progressFlows = pages!!.map(Page::progressFlow) emitAll(combine(progressFlows) { it.average().toInt() }) } .distinctUntilChanged() .debounce(50) val progress: Int get() { val pages = pages ?: return 0 return pages.map(Page::progress).average().toInt() } enum class State(val value: Int) { NOT_DOWNLOADED(0), QUEUE(1), DOWNLOADING(2), DOWNLOADED(3), ERROR(4), } companion object { suspend fun fromChapterId( chapterId: Long, getChapter: GetChapter = Injekt.get(), getManga: GetManga = Injekt.get(), sourceManager: SourceManager = Injekt.get(), ): Download? { val chapter = getChapter.await(chapterId) ?: return null val manga = getManga.await(chapter.mangaId) ?: return null val source = sourceManager.get(manga.source) as? HttpSource ?: return null return Download(source, manga, chapter) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/export/LibraryExporter.kt ================================================ package eu.kanade.tachiyomi.data.export import android.content.Context import android.net.Uri import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import tachiyomi.domain.manga.model.Manga object LibraryExporter { data class ExportOptions( val includeTitle: Boolean, val includeAuthor: Boolean, val includeArtist: Boolean, ) suspend fun exportToCsv( context: Context, uri: Uri, favorites: List, options: ExportOptions, onExportComplete: () -> Unit, ) { withContext(Dispatchers.IO) { context.contentResolver.openOutputStream(uri)?.use { outputStream -> val csvData = generateCsvData(favorites, options) outputStream.write(csvData.toByteArray()) } onExportComplete() } } private val escapeRequired = listOf("\r", "\n", "\"", ",") private fun generateCsvData(favorites: List, options: ExportOptions): String { val columnSize = listOf( options.includeTitle, options.includeAuthor, options.includeArtist, ) .count { it } val rows = buildList(favorites.size) { favorites.forEach { manga -> buildList(columnSize) { if (options.includeTitle) add(manga.title) if (options.includeAuthor) add(manga.author) if (options.includeArtist) add(manga.artist) } .let(::add) } } return rows.joinToString("\r\n") { columns -> columns.joinToString(",") columns@{ column -> if (column.isNullOrBlank()) return@columns "" if (escapeRequired.any { column.contains(it) }) { column.replace("\"", "\"\"").let { "\"$it\"" } } else { column } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt ================================================ package eu.kanade.tachiyomi.data.library import android.content.Context import android.content.pm.ServiceInfo import android.net.NetworkCapabilities import android.net.NetworkRequest import android.os.Build import androidx.work.BackoffPolicy import androidx.work.Constraints import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingWorkPolicy import androidx.work.ForegroundInfo import androidx.work.NetworkType import androidx.work.OneTimeWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkInfo import androidx.work.WorkQuery import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.toSManga import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.UpdateStrategy import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.createFileInCacheDir import eu.kanade.tachiyomi.util.system.isConnectedToWifi import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.setForegroundSafely import eu.kanade.tachiyomi.util.system.workManager import kotlinx.coroutines.CancellationException import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import logcat.LogPriority import mihon.domain.chapter.interactor.FilterChaptersForDownload import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.preference.getAndSet import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.Category import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.NoChaptersException import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED import tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_HAS_UNREAD import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_READ import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_OUTSIDE_RELEASE_PERIOD import tachiyomi.domain.manga.interactor.FetchInterval import tachiyomi.domain.manga.interactor.GetLibraryManga import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.model.SourceNotInstalledException import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File import java.time.Instant import java.time.ZonedDateTime import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.TimeUnit import kotlin.concurrent.atomics.AtomicBoolean import kotlin.concurrent.atomics.AtomicInt import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.concurrent.atomics.incrementAndFetch @OptIn(ExperimentalAtomicApi::class) class LibraryUpdateJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { private val sourceManager: SourceManager = Injekt.get() private val libraryPreferences: LibraryPreferences = Injekt.get() private val downloadManager: DownloadManager = Injekt.get() private val coverCache: CoverCache = Injekt.get() private val getLibraryManga: GetLibraryManga = Injekt.get() private val getManga: GetManga = Injekt.get() private val updateManga: UpdateManga = Injekt.get() private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get() private val fetchInterval: FetchInterval = Injekt.get() private val filterChaptersForDownload: FilterChaptersForDownload = Injekt.get() private val notifier = LibraryUpdateNotifier(context) private var mangaToUpdate: List = mutableListOf() override suspend fun doWork(): Result { if (tags.contains(WORK_NAME_AUTO)) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { val preferences = Injekt.get() val restrictions = preferences.autoUpdateDeviceRestrictions.get() if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) { return Result.retry() } } // Find a running manual worker. If exists, try again later if (context.workManager.isRunning(WORK_NAME_MANUAL)) { return Result.retry() } } setForegroundSafely() libraryPreferences.lastUpdatedTimestamp.set(Instant.now().toEpochMilli()) val categoryId = inputData.getLong(KEY_CATEGORY, -1L) addMangaToQueue(categoryId) return withIOContext { try { updateChapterList() Result.success() } catch (e: Exception) { if (e is CancellationException) { // Assume success although cancelled Result.success() } else { logcat(LogPriority.ERROR, e) Result.failure() } } finally { notifier.cancelProgressNotification() } } } override suspend fun getForegroundInfo(): ForegroundInfo { val notifier = LibraryUpdateNotifier(context) return ForegroundInfo( Notifications.ID_LIBRARY_PROGRESS, notifier.progressNotificationBuilder.build(), if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC } else { 0 }, ) } /** * Adds list of manga to be updated. * * @param categoryId the ID of the category to update, or -1 if no category specified. */ private suspend fun addMangaToQueue(categoryId: Long) { val libraryManga = getLibraryManga.await() val listToUpdate = if (categoryId != -1L) { libraryManga.filter { categoryId in it.categories } } else { val includedCategories = libraryPreferences.updateCategories.get().map { it.toLong() } val excludedCategories = libraryPreferences.updateCategoriesExclude.get().map { it.toLong() } libraryManga.filter { val included = includedCategories.isEmpty() || it.categories.intersect(includedCategories).isNotEmpty() val excluded = it.categories.intersect(excludedCategories).isNotEmpty() included && !excluded } } val restrictions = libraryPreferences.autoUpdateMangaRestrictions.get() val skippedUpdates = mutableListOf>() val (_, fetchWindowUpperBound) = fetchInterval.getWindow(ZonedDateTime.now()) mangaToUpdate = listToUpdate .filter { when { it.manga.updateStrategy == UpdateStrategy.ONLY_FETCH_ONCE && it.totalChapters > 0L -> { skippedUpdates.add( it.manga to context.stringResource(MR.strings.skipped_reason_not_always_update), ) false } MANGA_NON_COMPLETED in restrictions && it.manga.status.toInt() == SManga.COMPLETED -> { skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_completed)) false } MANGA_HAS_UNREAD in restrictions && it.unreadCount != 0L -> { skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_not_caught_up)) false } MANGA_NON_READ in restrictions && it.totalChapters > 0L && !it.hasStarted -> { skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_not_started)) false } MANGA_OUTSIDE_RELEASE_PERIOD in restrictions && it.manga.nextUpdate > fetchWindowUpperBound -> { skippedUpdates.add( it.manga to context.stringResource(MR.strings.skipped_reason_not_in_release_period), ) false } else -> true } } .sortedBy { it.manga.title } notifier.showQueueSizeWarningNotificationIfNeeded(mangaToUpdate) if (skippedUpdates.isNotEmpty()) { // TODO: surface skipped reasons to user? logcat { skippedUpdates .groupBy { it.second } .map { (reason, entries) -> "$reason: [${entries.map { it.first.title }.sorted().joinToString()}]" } .joinToString() } } } /** * Method that updates manga in [mangaToUpdate]. It's called in a background thread, so it's safe * to do heavy operations or network calls here. * For each manga it calls [updateManga] and updates the notification showing the current * progress. * * @return an observable delivering the progress of each update. */ private suspend fun updateChapterList() { val semaphore = Semaphore(5) val progressCount = AtomicInt(0) val currentlyUpdatingManga = CopyOnWriteArrayList() val newUpdates = CopyOnWriteArrayList>>() val failedUpdates = CopyOnWriteArrayList>() val hasDownloads = AtomicBoolean(false) val fetchWindow = fetchInterval.getWindow(ZonedDateTime.now()) coroutineScope { mangaToUpdate.groupBy { it.manga.source }.values .map { mangaInSource -> async { semaphore.withPermit { mangaInSource.forEach { libraryManga -> val manga = libraryManga.manga ensureActive() // Don't continue to update if manga is not in library if (getManga.await(manga.id)?.favorite != true) { return@forEach } withUpdateNotification( currentlyUpdatingManga, progressCount, manga, ) { try { val newChapters = updateManga(manga, fetchWindow) .sortedByDescending { it.sourceOrder } if (newChapters.isNotEmpty()) { val chaptersToDownload = filterChaptersForDownload.await(manga, newChapters) if (chaptersToDownload.isNotEmpty()) { downloadChapters(manga, chaptersToDownload) hasDownloads.store(true) } libraryPreferences.newUpdatesCount.getAndSet { it + newChapters.size } // Convert to the manga that contains new chapters newUpdates.add(manga to newChapters.toTypedArray()) } } catch (e: Throwable) { val errorMessage = when (e) { is NoChaptersException -> context.stringResource( MR.strings.no_chapters_error, ) // failedUpdates will already have the source, don't need to copy it into the message is SourceNotInstalledException -> context.stringResource( MR.strings.loader_not_implemented_error, ) else -> e.message } failedUpdates.add(manga to errorMessage) } } } } } } .awaitAll() } notifier.cancelProgressNotification() if (newUpdates.isNotEmpty()) { notifier.showUpdateNotifications(newUpdates) if (hasDownloads.load()) { downloadManager.startDownloads() } } if (failedUpdates.isNotEmpty()) { val errorFile = writeErrorFile(failedUpdates) notifier.showUpdateErrorNotification( failedUpdates.size, errorFile.getUriCompat(context), ) } } private fun downloadChapters(manga: Manga, chapters: List) { // We don't want to start downloading while the library is updating, because websites // may don't like it and they could ban the user. downloadManager.downloadChapters(manga, chapters, false) } /** * Updates the chapters for the given manga and adds them to the database. * * @param manga the manga to update. * @return a pair of the inserted and removed chapters. */ private suspend fun updateManga(manga: Manga, fetchWindow: Pair): List { val source = sourceManager.getOrStub(manga.source) // Update manga metadata if needed if (libraryPreferences.autoUpdateMetadata.get()) { val networkManga = source.getMangaDetails(manga.toSManga()) updateManga.awaitUpdateFromSource(manga, networkManga, manualFetch = false, coverCache) } val chapters = source.getChapterList(manga.toSManga()) // Get manga from database to account for if it was removed during the update and // to get latest data so it doesn't get overwritten later on val dbManga = getManga.await(manga.id)?.takeIf { it.favorite } ?: return emptyList() return syncChaptersWithSource.await(chapters, dbManga, source, false, fetchWindow) } private suspend fun withUpdateNotification( updatingManga: CopyOnWriteArrayList, completed: AtomicInt, manga: Manga, block: suspend () -> Unit, ) = coroutineScope { ensureActive() updatingManga.add(manga) notifier.showProgressNotification( updatingManga, completed.load(), mangaToUpdate.size, ) block() ensureActive() updatingManga.remove(manga) completed.incrementAndFetch() notifier.showProgressNotification( updatingManga, completed.load(), mangaToUpdate.size, ) } /** * Writes basic file of update errors to cache dir. */ private fun writeErrorFile(errors: List>): File { try { if (errors.isNotEmpty()) { val file = context.createFileInCacheDir("mihon_update_errors.txt") file.bufferedWriter().use { out -> out.write(context.stringResource(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n") // Error file format: // ! Error // # Source // - Manga errors.groupBy({ it.second }, { it.first }).forEach { (error, mangas) -> out.write("\n! ${error}\n") mangas.groupBy { it.source }.forEach { (srcId, mangas) -> val source = sourceManager.getOrStub(srcId) out.write(" # $source\n") mangas.forEach { out.write(" - ${it.title}\n") } } } } return file } } catch (_: Exception) {} return File("") } companion object { private const val TAG = "LibraryUpdate" private const val WORK_NAME_AUTO = "LibraryUpdate-auto" private const val WORK_NAME_MANUAL = "LibraryUpdate-manual" private const val ERROR_LOG_HELP_URL = "https://mihon.app/docs/guides/troubleshooting/" private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 /** * Key for category to update. */ private const val KEY_CATEGORY = "category" fun setupTask( context: Context, prefInterval: Int? = null, ) { val preferences = Injekt.get() val interval = prefInterval ?: preferences.autoUpdateInterval.get() if (interval > 0) { val restrictions = preferences.autoUpdateDeviceRestrictions.get() val networkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) { NetworkType.UNMETERED } else { NetworkType.CONNECTED } val networkRequest = NetworkRequest.Builder().apply { removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) if (DEVICE_ONLY_ON_WIFI in restrictions) { addTransportType(NetworkCapabilities.TRANSPORT_WIFI) } if (DEVICE_NETWORK_NOT_METERED in restrictions) { addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) } } .build() val constraints = Constraints.Builder() // 'networkRequest' only applies to Android 9+, otherwise 'networkType' is used .setRequiredNetworkRequest(networkRequest, networkType) .setRequiresCharging(DEVICE_CHARGING in restrictions) .setRequiresBatteryNotLow(true) .build() val request = PeriodicWorkRequestBuilder( interval.toLong(), TimeUnit.HOURS, 10, TimeUnit.MINUTES, ) .addTag(TAG) .addTag(WORK_NAME_AUTO) .setConstraints(constraints) .setBackoffCriteria(BackoffPolicy.LINEAR, 10, TimeUnit.MINUTES) .build() context.workManager.enqueueUniquePeriodicWork( WORK_NAME_AUTO, ExistingPeriodicWorkPolicy.UPDATE, request, ) } else { context.workManager.cancelUniqueWork(WORK_NAME_AUTO) } } fun startNow( context: Context, category: Category? = null, ): Boolean { val wm = context.workManager if (wm.isRunning(TAG)) { // Already running either as a scheduled or manual job return false } val inputData = workDataOf( KEY_CATEGORY to category?.id, ) val request = OneTimeWorkRequestBuilder() .addTag(TAG) .addTag(WORK_NAME_MANUAL) .setInputData(inputData) .build() wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request) return true } fun stop(context: Context) { val wm = context.workManager val workQuery = WorkQuery.Builder.fromTags(listOf(TAG)) .addStates(listOf(WorkInfo.State.RUNNING)) .build() wm.getWorkInfos(workQuery).get() // Should only return one work but just in case .forEach { wm.cancelWorkById(it.id) // Re-enqueue cancelled scheduled work if (it.tags.contains(WORK_NAME_AUTO)) { setupTask(context) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt ================================================ package eu.kanade.tachiyomi.data.library import android.app.Notification import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import coil3.asDrawable import coil3.imageLoader import coil3.request.ImageRequest import coil3.request.transformations import coil3.transform.CircleCropTransformation import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.download.Downloader import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.source.UnmeteredSource import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.util.lang.chop import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.common.Constants import tachiyomi.core.common.i18n.pluralStringResource import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchUI import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.math.RoundingMode import java.text.NumberFormat class LibraryUpdateNotifier( private val context: Context, private val securityPreferences: SecurityPreferences = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), ) { private val percentFormatter = NumberFormat.getPercentInstance().apply { roundingMode = RoundingMode.DOWN maximumFractionDigits = 0 } /** * Pending intent of action that cancels the library update */ private val cancelIntent by lazy { NotificationReceiver.cancelLibraryUpdatePendingBroadcast(context) } /** * Bitmap of the app for notifications. */ private val notificationBitmap by lazy { BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher) } /** * Cached progress notification to avoid creating a lot. */ val progressNotificationBuilder by lazy { context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) { setContentTitle(context.stringResource(MR.strings.app_name)) setSmallIcon(R.drawable.ic_refresh_24dp) setLargeIcon(notificationBitmap) setOngoing(true) setOnlyAlertOnce(true) addAction(R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel), cancelIntent) } } /** * Shows the notification containing the currently updating manga and the progress. * * @param manga the manga that are being updated. * @param current the current progress. * @param total the total progress. */ fun showProgressNotification(manga: List, current: Int, total: Int) { progressNotificationBuilder .setContentTitle( context.stringResource( MR.strings.notification_updating_progress, percentFormatter.format(current.toFloat() / total), ), ) if (!securityPreferences.hideNotificationContent.get()) { val updatingText = manga.joinToString("\n") { it.title.chop(40) } progressNotificationBuilder.setStyle(NotificationCompat.BigTextStyle().bigText(updatingText)) } context.notify( Notifications.ID_LIBRARY_PROGRESS, progressNotificationBuilder .setProgress(total, current, false) .build(), ) } /** * Warn when excessively checking any single source. */ fun showQueueSizeWarningNotificationIfNeeded(mangaToUpdate: List) { val maxUpdatesFromSource = mangaToUpdate .groupBy { it.manga.source } .filterKeys { sourceManager.get(it) !is UnmeteredSource } .maxOfOrNull { it.value.size } ?: 0 if (maxUpdatesFromSource <= MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { return } context.notify( Notifications.ID_LIBRARY_SIZE_WARNING, Notifications.CHANNEL_LIBRARY_PROGRESS, ) { setContentTitle(context.stringResource(MR.strings.label_warning)) setStyle( NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)), ) setSmallIcon(R.drawable.ic_warning_white_24dp) setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS) setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL)) } } /** * Shows notification containing update entries that failed with action to open full log. * * @param failed Number of entries that failed to update. * @param uri Uri for error log file containing all titles that failed. */ fun showUpdateErrorNotification(failed: Int, uri: Uri) { if (failed == 0) { return } context.notify( Notifications.ID_LIBRARY_ERROR, Notifications.CHANNEL_LIBRARY_ERROR, ) { setContentTitle(context.stringResource(MR.strings.notification_update_error, failed)) setContentText(context.stringResource(MR.strings.action_show_errors)) setSmallIcon(R.drawable.ic_mihon) setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri)) } } /** * Shows the notification containing the result of the update done by the service. * * @param updates a list of manga with new updates. */ fun showUpdateNotifications(updates: List>>) { // Parent group notification context.notify( Notifications.ID_NEW_CHAPTERS, Notifications.CHANNEL_NEW_CHAPTERS, ) { setContentTitle(context.stringResource(MR.strings.notification_new_chapters)) if (updates.size == 1 && !securityPreferences.hideNotificationContent.get()) { setContentText(updates.first().first.title.chop(NOTIF_TITLE_MAX_LEN)) } else { setContentText( context.pluralStringResource( MR.plurals.notification_new_chapters_summary, updates.size, updates.size, ), ) if (!securityPreferences.hideNotificationContent.get()) { setStyle( NotificationCompat.BigTextStyle().bigText( updates.joinToString("\n") { it.first.title.chop(NOTIF_TITLE_MAX_LEN) }, ), ) } } setSmallIcon(R.drawable.ic_mihon) setLargeIcon(notificationBitmap) setGroup(Notifications.GROUP_NEW_CHAPTERS) setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY) setGroupSummary(true) priority = NotificationCompat.PRIORITY_HIGH setContentIntent(getNotificationIntent()) setAutoCancel(true) } // Per-manga notification if (!securityPreferences.hideNotificationContent.get()) { launchUI { context.notify( updates.map { (manga, chapters) -> NotificationManagerCompat.NotificationWithIdAndTag( manga.id.hashCode(), createNewChaptersNotification(manga, chapters), ) }, ) } } } private suspend fun createNewChaptersNotification(manga: Manga, chapters: Array): Notification { val icon = getMangaIcon(manga) return context.notificationBuilder(Notifications.CHANNEL_NEW_CHAPTERS) { setContentTitle(manga.title) val description = getNewChaptersDescription(chapters) setContentText(description) setStyle(NotificationCompat.BigTextStyle().bigText(description)) setSmallIcon(R.drawable.ic_mihon) if (icon != null) { setLargeIcon(icon) } setGroup(Notifications.GROUP_NEW_CHAPTERS) setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY) priority = NotificationCompat.PRIORITY_HIGH // Open first chapter on tap setContentIntent(NotificationReceiver.openChapterPendingActivity(context, manga, chapters.first())) setAutoCancel(true) // Mark chapters as read action addAction( R.drawable.ic_done_24dp, context.stringResource(MR.strings.action_mark_as_read), NotificationReceiver.markAsReadPendingBroadcast( context, manga, chapters, Notifications.ID_NEW_CHAPTERS, ), ) // View chapters action addAction( R.drawable.ic_book_24dp, context.stringResource(MR.strings.action_view_chapters), NotificationReceiver.openChapterPendingActivity( context, manga, Notifications.ID_NEW_CHAPTERS, ), ) // Download chapters action // Only add the action when chapters is within threshold if (chapters.size <= Downloader.CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { addAction( android.R.drawable.stat_sys_download_done, context.stringResource(MR.strings.action_download), NotificationReceiver.downloadChaptersPendingBroadcast( context, manga, chapters, Notifications.ID_NEW_CHAPTERS, ), ) } }.build() } /** * Cancels the progress notification. */ fun cancelProgressNotification() { context.cancelNotification(Notifications.ID_LIBRARY_PROGRESS) } private suspend fun getMangaIcon(manga: Manga): Bitmap? { val request = ImageRequest.Builder(context) .data(manga) .transformations(CircleCropTransformation()) .size(NOTIF_ICON_SIZE) .build() val drawable = context.imageLoader.execute(request).image?.asDrawable(context.resources) return drawable?.getBitmapOrNull() } private fun getNewChaptersDescription(chapters: Array): String { val displayableChapterNumbers = chapters .filter { it.isRecognizedNumber } .sortedBy { it.chapterNumber } .map { formatChapterNumber(it.chapterNumber) } .toSet() return when (displayableChapterNumbers.size) { // No sensible chapter numbers to show (i.e. no chapters have parsed chapter number) 0 -> { // "1 new chapter" or "5 new chapters" context.pluralStringResource( MR.plurals.notification_chapters_generic, chapters.size, chapters.size, ) } // Only 1 chapter has a parsed chapter number 1 -> { val remaining = chapters.size - displayableChapterNumbers.size if (remaining == 0) { // "Chapter 2.5" context.stringResource( MR.strings.notification_chapters_single, displayableChapterNumbers.first(), ) } else { // "Chapter 2.5 and 10 more" context.stringResource( MR.strings.notification_chapters_single_and_more, displayableChapterNumbers.first(), remaining, ) } } // Everything else (i.e. multiple parsed chapter numbers) else -> { val shouldTruncate = displayableChapterNumbers.size > NOTIF_MAX_CHAPTERS if (shouldTruncate) { // "Chapters 1, 2.5, 3, 4, 5 and 10 more" val remaining = displayableChapterNumbers.size - NOTIF_MAX_CHAPTERS val joinedChapterNumbers = displayableChapterNumbers .take(NOTIF_MAX_CHAPTERS) .joinToString(", ") context.pluralStringResource( MR.plurals.notification_chapters_multiple_and_more, remaining, joinedChapterNumbers, remaining, ) } else { // "Chapters 1, 2.5, 3" context.stringResource( MR.strings.notification_chapters_multiple, displayableChapterNumbers.joinToString(", "), ) } } } } /** * Returns an intent to open the main activity. */ private fun getNotificationIntent(): PendingIntent { val intent = Intent(context, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP action = Constants.SHORTCUT_UPDATES } return PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } companion object { const val HELP_WARNING_URL = "https://mihon.app/docs/faq/library#why-am-i-warned-about-large-bulk-updates-and-downloads" } } private const val NOTIF_MAX_CHAPTERS = 5 private const val NOTIF_TITLE_MAX_LEN = 45 private const val NOTIF_ICON_SIZE = 192 private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/library/MetadataUpdateJob.kt ================================================ package eu.kanade.tachiyomi.data.library import android.content.Context import android.content.pm.ServiceInfo import android.os.Build import androidx.work.CoroutineWorker import androidx.work.ExistingWorkPolicy import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkInfo import androidx.work.WorkQuery import androidx.work.WorkerParameters import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.copyFrom import eu.kanade.domain.manga.model.toSManga import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.prepUpdateCover import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.setForegroundSafely import eu.kanade.tachiyomi.util.system.workManager import kotlinx.coroutines.CancellationException import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.ensureActive import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import logcat.LogPriority import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.interactor.GetLibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.toMangaUpdate import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.concurrent.CopyOnWriteArrayList import kotlin.concurrent.atomics.AtomicInt import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.concurrent.atomics.fetchAndIncrement @OptIn(ExperimentalAtomicApi::class) class MetadataUpdateJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { private val sourceManager: SourceManager = Injekt.get() private val coverCache: CoverCache = Injekt.get() private val getLibraryManga: GetLibraryManga = Injekt.get() private val updateManga: UpdateManga = Injekt.get() private val notifier = LibraryUpdateNotifier(context) private var mangaToUpdate: List = mutableListOf() override suspend fun doWork(): Result { setForegroundSafely() addMangaToQueue() return withIOContext { try { updateMetadata() Result.success() } catch (e: Exception) { if (e is CancellationException) { // Assume success although cancelled Result.success() } else { logcat(LogPriority.ERROR, e) Result.failure() } } finally { notifier.cancelProgressNotification() } } } override suspend fun getForegroundInfo(): ForegroundInfo { val notifier = LibraryUpdateNotifier(context) return ForegroundInfo( Notifications.ID_LIBRARY_PROGRESS, notifier.progressNotificationBuilder.build(), if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC } else { 0 }, ) } /** * Adds list of manga to be updated. */ private suspend fun addMangaToQueue() { mangaToUpdate = getLibraryManga.await() notifier.showQueueSizeWarningNotificationIfNeeded(mangaToUpdate) } private suspend fun updateMetadata() { val semaphore = Semaphore(5) val progressCount = AtomicInt(0) val currentlyUpdatingManga = CopyOnWriteArrayList() coroutineScope { mangaToUpdate.groupBy { it.manga.source } .values .map { mangaInSource -> async { semaphore.withPermit { mangaInSource.forEach { libraryManga -> val manga = libraryManga.manga ensureActive() withUpdateNotification( currentlyUpdatingManga, progressCount, manga, ) { val source = sourceManager.get(manga.source) ?: return@withUpdateNotification try { val networkManga = source.getMangaDetails(manga.toSManga()) val updatedManga = manga.prepUpdateCover(coverCache, networkManga, true) .copyFrom(networkManga) try { updateManga.await(updatedManga.toMangaUpdate()) } catch (e: Exception) { logcat(LogPriority.ERROR) { "Manga doesn't exist anymore" } } } catch (e: Throwable) { // Ignore errors and continue logcat(LogPriority.ERROR, e) } } } } } } .awaitAll() } notifier.cancelProgressNotification() } private suspend fun withUpdateNotification( updatingManga: CopyOnWriteArrayList, completed: AtomicInt, manga: Manga, block: suspend () -> Unit, ) = coroutineScope { ensureActive() updatingManga.add(manga) notifier.showProgressNotification( updatingManga, completed.load(), mangaToUpdate.size, ) block() ensureActive() updatingManga.remove(manga) completed.fetchAndIncrement() notifier.showProgressNotification( updatingManga, completed.load(), mangaToUpdate.size, ) } companion object { private const val TAG = "MetadataUpdate" private const val WORK_NAME_MANUAL = "MetadataUpdate" private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 fun startNow(context: Context): Boolean { val wm = context.workManager if (wm.isRunning(TAG)) { // Already running either as a scheduled or manual job return false } val request = OneTimeWorkRequestBuilder() .addTag(TAG) .addTag(WORK_NAME_MANUAL) .build() wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request) return true } fun stop(context: Context) { val wm = context.workManager val workQuery = WorkQuery.Builder.fromTags(listOf(TAG)) .addStates(listOf(WorkInfo.State.RUNNING)) .build() wm.getWorkInfos(workQuery).get() // Should only return one work but just in case .forEach { wm.cancelWorkById(it.id) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationHandler.kt ================================================ package eu.kanade.tachiyomi.data.notification import android.app.PendingIntent import android.content.Context import android.content.Intent import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.ui.main.MainActivity import tachiyomi.core.common.Constants /** * Class that manages [PendingIntent] of activity's */ object NotificationHandler { /** * Returns [PendingIntent] that starts a download activity. * * @param context context of application */ internal fun openDownloadManagerPendingActivity(context: Context): PendingIntent { val intent = Intent(context, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP action = Constants.SHORTCUT_DOWNLOADS } return PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that starts a gallery activity * * @param context context of application * @param file file containing image */ internal fun openImagePendingActivity(context: Context, uri: Uri): PendingIntent { val intent = Intent(Intent.ACTION_VIEW).apply { setDataAndType(uri, "image/*") flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION } return PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that prompts user with apk install intent * * @param context context * @param uri uri of apk that is installed */ fun installApkPendingActivity(context: Context, uri: Uri): PendingIntent { val intent = Intent(Intent.ACTION_VIEW).apply { setDataAndType(uri, ExtensionInstaller.APK_MIME) flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION } return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } fun openUrl(context: Context, url: String): PendingIntent { val notificationIntent = Intent(Intent.ACTION_VIEW, url.toUri()) return PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt ================================================ package eu.kanade.tachiyomi.data.notification import android.app.PendingIntent import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.updater.AppUpdateDownloadJob import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getParcelableExtraCompat import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.runBlocking import tachiyomi.core.common.Constants import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.chapter.interactor.GetChapter import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.toChapterUpdate import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import eu.kanade.tachiyomi.BuildConfig.APPLICATION_ID as ID /** * Global [BroadcastReceiver] that runs on UI thread * Pending Broadcasts should be made from here. * NOTE: Use local broadcasts if possible. */ class NotificationReceiver : BroadcastReceiver() { private val getManga: GetManga by injectLazy() private val getChapter: GetChapter by injectLazy() private val updateChapter: UpdateChapter by injectLazy() private val downloadManager: DownloadManager by injectLazy() override fun onReceive(context: Context, intent: Intent) { when (intent.action) { // Dismiss notification ACTION_DISMISS_NOTIFICATION -> dismissNotification(context, intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)) // Resume the download service ACTION_RESUME_DOWNLOADS -> downloadManager.startDownloads() // Pause the download service ACTION_PAUSE_DOWNLOADS -> downloadManager.pauseDownloads() // Clear the download queue ACTION_CLEAR_DOWNLOADS -> downloadManager.clearQueue() // Launch share activity and dismiss notification ACTION_SHARE_IMAGE -> shareImage( context, intent.getStringExtra(EXTRA_URI)!!.toUri(), ) // Share backup file ACTION_SHARE_BACKUP -> shareFile( context, intent.getParcelableExtraCompat(EXTRA_URI)!!, "application/x-protobuf+gzip", ) ACTION_CANCEL_RESTORE -> cancelRestore(context) // Cancel library update and dismiss notification ACTION_CANCEL_LIBRARY_UPDATE -> cancelLibraryUpdate(context) // Start downloading app update ACTION_START_APP_UPDATE -> startDownloadAppUpdate(context, intent) // Cancel downloading app update ACTION_CANCEL_APP_UPDATE_DOWNLOAD -> cancelDownloadAppUpdate(context) // Open reader activity ACTION_OPEN_CHAPTER -> { openChapter( context, intent.getLongExtra(EXTRA_MANGA_ID, -1), intent.getLongExtra(EXTRA_CHAPTER_ID, -1), ) } // Mark updated manga chapters as read ACTION_MARK_AS_READ -> { val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) if (notificationId > -1) { dismissNotification(context, notificationId, intent.getIntExtra(EXTRA_GROUP_ID, 0)) } val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return val mangaId = intent.getLongExtra(EXTRA_MANGA_ID, -1) if (mangaId > -1) { markAsRead(urls, mangaId) } } // Download manga chapters ACTION_DOWNLOAD_CHAPTER -> { val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) if (notificationId > -1) { dismissNotification(context, notificationId, intent.getIntExtra(EXTRA_GROUP_ID, 0)) } val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return val mangaId = intent.getLongExtra(EXTRA_MANGA_ID, -1) if (mangaId > -1) { downloadChapters(urls, mangaId) } } } } /** * Dismiss the notification * * @param notificationId the id of the notification */ private fun dismissNotification(context: Context, notificationId: Int) { context.cancelNotification(notificationId) } /** * Called to start share intent to share image * * @param context context of application * @param uri path of file */ private fun shareImage(context: Context, uri: Uri) { context.startActivity(uri.toShareIntent(context)) } /** * Called to start share intent to share backup file * * @param context context of application * @param path path of file */ private fun shareFile(context: Context, uri: Uri, fileMimeType: String) { context.startActivity(uri.toShareIntent(context, fileMimeType)) } /** * Starts reader activity * * @param context context of application * @param mangaId id of manga * @param chapterId id of chapter */ private fun openChapter(context: Context, mangaId: Long, chapterId: Long) { val manga = runBlocking { getManga.await(mangaId) } val chapter = runBlocking { getChapter.await(chapterId) } if (manga != null && chapter != null) { val intent = ReaderActivity.newIntent(context, manga.id, chapter.id).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP } context.startActivity(intent) } else { context.toast(MR.strings.chapter_error) } } /** * Method called when user wants to stop a backup restore job. * * @param context context of application */ private fun cancelRestore(context: Context) { BackupRestoreJob.stop(context) } /** * Method called when user wants to stop a library update * * @param context context of application */ private fun cancelLibraryUpdate(context: Context) { LibraryUpdateJob.stop(context) } private fun startDownloadAppUpdate(context: Context, intent: Intent) { val url = intent.getStringExtra(AppUpdateDownloadJob.EXTRA_DOWNLOAD_URL) ?: return AppUpdateDownloadJob.start(context, url) } private fun cancelDownloadAppUpdate(context: Context) { AppUpdateDownloadJob.stop(context) } /** * Method called when user wants to mark manga chapters as read * * @param chapterUrls URLs of chapter to mark as read * @param mangaId id of manga */ private fun markAsRead(chapterUrls: Array, mangaId: Long) { val downloadPreferences: DownloadPreferences = Injekt.get() val sourceManager: SourceManager = Injekt.get() launchIO { val toUpdate = chapterUrls.mapNotNull { getChapter.await(it, mangaId) } .map { val chapter = it.copy(read = true) if (downloadPreferences.removeAfterMarkedAsRead.get()) { val manga = getManga.await(mangaId) if (manga != null) { val source = sourceManager.get(manga.source) if (source != null) { downloadManager.deleteChapters(listOf(it), manga, source) } } } chapter.toChapterUpdate() } updateChapter.awaitAll(toUpdate) } } /** * Method called when user wants to download chapters * * @param chapterUrls URLs of chapter to download * @param mangaId id of manga */ private fun downloadChapters(chapterUrls: Array, mangaId: Long) { launchIO { val manga = getManga.await(mangaId) ?: return@launchIO val chapters = chapterUrls.mapNotNull { getChapter.await(it, mangaId) } downloadManager.downloadChapters(manga, chapters) } } companion object { private const val NAME = "NotificationReceiver" private const val ACTION_SHARE_IMAGE = "$ID.$NAME.SHARE_IMAGE" private const val ACTION_SHARE_BACKUP = "$ID.$NAME.SEND_BACKUP" private const val ACTION_CANCEL_RESTORE = "$ID.$NAME.CANCEL_RESTORE" private const val ACTION_CANCEL_LIBRARY_UPDATE = "$ID.$NAME.CANCEL_LIBRARY_UPDATE" private const val ACTION_START_APP_UPDATE = "$ID.$NAME.ACTION_START_APP_UPDATE" private const val ACTION_CANCEL_APP_UPDATE_DOWNLOAD = "$ID.$NAME.CANCEL_APP_UPDATE_DOWNLOAD" private const val ACTION_MARK_AS_READ = "$ID.$NAME.MARK_AS_READ" private const val ACTION_OPEN_CHAPTER = "$ID.$NAME.ACTION_OPEN_CHAPTER" private const val ACTION_DOWNLOAD_CHAPTER = "$ID.$NAME.ACTION_DOWNLOAD_CHAPTER" private const val ACTION_OPEN_ENTRY = "$ID.$NAME.ACTION_OPEN_ENTRY" private const val ACTION_RESUME_DOWNLOADS = "$ID.$NAME.ACTION_RESUME_DOWNLOADS" private const val ACTION_PAUSE_DOWNLOADS = "$ID.$NAME.ACTION_PAUSE_DOWNLOADS" private const val ACTION_CLEAR_DOWNLOADS = "$ID.$NAME.ACTION_CLEAR_DOWNLOADS" private const val ACTION_DISMISS_NOTIFICATION = "$ID.$NAME.ACTION_DISMISS_NOTIFICATION" private const val EXTRA_URI = "$ID.$NAME.URI" private const val EXTRA_NOTIFICATION_ID = "$ID.$NAME.NOTIFICATION_ID" private const val EXTRA_GROUP_ID = "$ID.$NAME.EXTRA_GROUP_ID" private const val EXTRA_MANGA_ID = "$ID.$NAME.EXTRA_MANGA_ID" private const val EXTRA_CHAPTER_ID = "$ID.$NAME.EXTRA_CHAPTER_ID" private const val EXTRA_CHAPTER_URL = "$ID.$NAME.EXTRA_CHAPTER_URL" /** * Returns a [PendingIntent] that resumes the download of a chapter * * @param context context of application * @return [PendingIntent] */ internal fun resumeDownloadsPendingBroadcast(context: Context): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_RESUME_DOWNLOADS } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that pauses the download queue * * @param context context of application * @return [PendingIntent] */ internal fun pauseDownloadsPendingBroadcast(context: Context): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_PAUSE_DOWNLOADS } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns a [PendingIntent] that clears the download queue * * @param context context of application * @return [PendingIntent] */ internal fun clearDownloadsPendingBroadcast(context: Context): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_CLEAR_DOWNLOADS } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that starts a service which dismissed the notification * * @param context context of application * @param notificationId id of notification * @return [PendingIntent] */ internal fun dismissNotificationPendingBroadcast(context: Context, notificationId: Int): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_DISMISS_NOTIFICATION putExtra(EXTRA_NOTIFICATION_ID, notificationId) } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that starts a service which dismissed the notification * * @param context context of application * @param notificationId id of notification * @return [PendingIntent] */ internal fun dismissNotification(context: Context, notificationId: Int, groupId: Int? = null) { /* Group notifications always have at least 2 notifications: - Group summary notification - Single manga notification If the single notification is dismissed by the system, ie by a user swipe or tapping on the notification, it will auto dismiss the group notification if there's no other single updates. When programmatically dismissing this notification, the group notification is not automatically dismissed. */ val groupKey = context.notificationManager.activeNotifications.find { it.id == notificationId }?.groupKey if (groupId != null && groupId != 0 && !groupKey.isNullOrEmpty()) { val notifications = context.notificationManager.activeNotifications.filter { it.groupKey == groupKey } if (notifications.size == 2) { context.cancelNotification(groupId) return } } context.cancelNotification(notificationId) } /** * Returns [PendingIntent] that starts a share activity * * @param context context of application * @param uri location path of file * @param notificationId id of notification * @return [PendingIntent] */ internal fun shareImagePendingBroadcast(context: Context, uri: Uri): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_SHARE_IMAGE putExtra(EXTRA_URI, uri.toString()) } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that starts a reader activity containing chapter. * * @param context context of application * @param manga manga of chapter * @param chapter chapter that needs to be opened */ internal fun openChapterPendingActivity(context: Context, manga: Manga, chapter: Chapter): PendingIntent { val newIntent = ReaderActivity.newIntent(context, manga.id, chapter.id) return PendingIntent.getActivity( context, manga.id.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that opens the manga info controller. * * @param context context of application * @param manga manga of chapter */ internal fun openChapterPendingActivity(context: Context, manga: Manga, groupId: Int): PendingIntent { val newIntent = Intent(context, MainActivity::class.java).setAction(Constants.SHORTCUT_MANGA) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) .putExtra(Constants.MANGA_EXTRA, manga.id) .putExtra("notificationId", manga.id.hashCode()) .putExtra("groupId", groupId) return PendingIntent.getActivity( context, manga.id.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that marks a chapter as read and deletes it if preferred * * @param context context of application * @param manga manga of chapter */ internal fun markAsReadPendingBroadcast( context: Context, manga: Manga, chapters: Array, groupId: Int, ): PendingIntent { val newIntent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_MARK_AS_READ putExtra(EXTRA_CHAPTER_URL, chapters.map { it.url }.toTypedArray()) putExtra(EXTRA_MANGA_ID, manga.id) putExtra(EXTRA_NOTIFICATION_ID, manga.id.hashCode()) putExtra(EXTRA_GROUP_ID, groupId) } return PendingIntent.getBroadcast( context, manga.id.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that downloads chapters * * @param context context of application * @param manga manga of chapter */ internal fun downloadChaptersPendingBroadcast( context: Context, manga: Manga, chapters: Array, groupId: Int, ): PendingIntent { val newIntent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_DOWNLOAD_CHAPTER putExtra(EXTRA_CHAPTER_URL, chapters.map { it.url }.toTypedArray()) putExtra(EXTRA_MANGA_ID, manga.id) putExtra(EXTRA_NOTIFICATION_ID, manga.id.hashCode()) putExtra(EXTRA_GROUP_ID, groupId) } return PendingIntent.getBroadcast( context, manga.id.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that opens the manga info controller * * @param context context of application * @param mangaId id of the entry to open */ internal fun openEntryPendingActivity(context: Context, mangaId: Long): PendingIntent { val newIntent = Intent(context, MainActivity::class.java).setAction(Constants.SHORTCUT_MANGA) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) .putExtra(Constants.MANGA_EXTRA, mangaId) .putExtra("notificationId", mangaId.hashCode()) return PendingIntent.getActivity( context, mangaId.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that starts a service which stops the library update * * @param context context of application * @return [PendingIntent] */ internal fun cancelLibraryUpdatePendingBroadcast(context: Context): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_CANCEL_LIBRARY_UPDATE } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that starts the [AppUpdateDownloadJob] to download an app update. * * @param context context of application * @return [PendingIntent] */ internal fun downloadAppUpdatePendingBroadcast( context: Context, url: String, title: String? = null, ): PendingIntent { return Intent(context, NotificationReceiver::class.java).run { action = ACTION_START_APP_UPDATE putExtra(AppUpdateDownloadJob.EXTRA_DOWNLOAD_URL, url) title?.let { putExtra(AppUpdateDownloadJob.EXTRA_DOWNLOAD_TITLE, it) } PendingIntent.getBroadcast( context, 0, this, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } } /** * */ internal fun cancelDownloadAppUpdatePendingBroadcast(context: Context): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_CANCEL_APP_UPDATE_DOWNLOAD } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that opens the extensions controller. * * @param context context of application * @return [PendingIntent] */ internal fun openExtensionsPendingActivity(context: Context): PendingIntent { val intent = Intent(context, MainActivity::class.java).apply { action = Constants.SHORTCUT_EXTENSIONS addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) } return PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that directly launches a share activity for a backup file. * * @param context context of application * @param uri uri of backup file * @return [PendingIntent] */ internal fun shareBackupPendingActivity(context: Context, uri: Uri): PendingIntent { val intent = uri.toShareIntent(context, "application/x-protobuf+gzip").apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION) } return PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } /** * Returns [PendingIntent] that opens the error log file in an external viewer * * @param context context of application * @param uri uri of error log file * @return [PendingIntent] */ internal fun openErrorLogPendingActivity(context: Context, uri: Uri): PendingIntent { val intent = Intent().apply { action = Intent.ACTION_VIEW setDataAndType(uri, "text/plain") flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION } return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } /** * Returns [PendingIntent] that cancels a backup restore job. * * @param context context of application * @param notificationId id of notification * @return [PendingIntent] */ internal fun cancelRestorePendingBroadcast(context: Context, notificationId: Int): PendingIntent { val intent = Intent(context, NotificationReceiver::class.java).apply { action = ACTION_CANCEL_RESTORE putExtra(EXTRA_NOTIFICATION_ID, notificationId) } return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt ================================================ package eu.kanade.tachiyomi.data.notification import android.content.Context import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat.IMPORTANCE_DEFAULT import androidx.core.app.NotificationManagerCompat.IMPORTANCE_HIGH import androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW import eu.kanade.tachiyomi.util.system.buildNotificationChannel import eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR /** * Class to manage the basic information of all the notifications used in the app. */ object Notifications { /** * Common notification channel and ids used anywhere. */ const val CHANNEL_COMMON = "common_channel" const val ID_DOWNLOAD_IMAGE = 2 /** * Notification channel and ids used by the library updater. */ private const val GROUP_LIBRARY = "group_library" const val CHANNEL_LIBRARY_PROGRESS = "library_progress_channel" const val ID_LIBRARY_PROGRESS = -101 const val ID_LIBRARY_SIZE_WARNING = -103 const val CHANNEL_LIBRARY_ERROR = "library_errors_channel" const val ID_LIBRARY_ERROR = -102 /** * Notification channel and ids used by the downloader. */ private const val GROUP_DOWNLOADER = "group_downloader" const val CHANNEL_DOWNLOADER_PROGRESS = "downloader_progress_channel" const val ID_DOWNLOAD_CHAPTER_PROGRESS = -201 const val CHANNEL_DOWNLOADER_ERROR = "downloader_error_channel" const val ID_DOWNLOAD_CHAPTER_ERROR = -202 /** * Notification channel and ids used by the library updater. */ const val CHANNEL_NEW_CHAPTERS = "new_chapters_channel" const val ID_NEW_CHAPTERS = -301 const val GROUP_NEW_CHAPTERS = "eu.kanade.tachiyomi.NEW_CHAPTERS" /** * Notification channel and ids used by the backup/restore system. */ private const val GROUP_BACKUP_RESTORE = "group_backup_restore" const val CHANNEL_BACKUP_RESTORE_PROGRESS = "backup_restore_progress_channel" const val ID_BACKUP_PROGRESS = -501 const val ID_RESTORE_PROGRESS = -503 const val CHANNEL_BACKUP_RESTORE_COMPLETE = "backup_restore_complete_channel_v2" const val ID_BACKUP_COMPLETE = -502 const val ID_RESTORE_COMPLETE = -504 /** * Notification channel used for Incognito Mode */ const val CHANNEL_INCOGNITO_MODE = "incognito_mode_channel" const val ID_INCOGNITO_MODE = -701 /** * Notification channel and ids used for app and extension updates. */ private const val GROUP_APK_UPDATES = "group_apk_updates" const val CHANNEL_APP_UPDATE = "app_apk_update_channel" const val ID_APP_UPDATER = 1 const val ID_APP_UPDATE_PROMPT = 2 const val ID_APP_UPDATE_ERROR = 3 const val CHANNEL_EXTENSIONS_UPDATE = "ext_apk_update_channel" const val ID_UPDATES_TO_EXTS = -401 const val ID_EXTENSION_INSTALLER = -402 private val deprecatedChannels = listOf( "downloader_channel", "downloader_complete_channel", "backup_restore_complete_channel", "library_channel", "library_progress_channel", "updates_ext_channel", "downloader_cache_renewal", "crash_logs_channel", "library_skipped_channel", ) /** * Creates the notification channels introduced in Android Oreo. * This won't do anything on Android versions that don't support notification channels. * * @param context The application context. */ fun createChannels(context: Context) { val notificationManager = NotificationManagerCompat.from(context) // Delete old notification channels deprecatedChannels.forEach(notificationManager::deleteNotificationChannel) notificationManager.createNotificationChannelGroupsCompat( listOf( buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) { setName(context.stringResource(MR.strings.label_backup)) }, buildNotificationChannelGroup(GROUP_DOWNLOADER) { setName(context.stringResource(MR.strings.download_notifier_downloader_title)) }, buildNotificationChannelGroup(GROUP_LIBRARY) { setName(context.stringResource(MR.strings.label_library)) }, buildNotificationChannelGroup(GROUP_APK_UPDATES) { setName(context.stringResource(MR.strings.label_recent_updates)) }, ), ) notificationManager.createNotificationChannelsCompat( listOf( buildNotificationChannel(CHANNEL_COMMON, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.channel_common)) }, buildNotificationChannel(CHANNEL_LIBRARY_PROGRESS, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.channel_errors)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_NEW_CHAPTERS, IMPORTANCE_DEFAULT) { setName(context.stringResource(MR.strings.channel_new_chapters)) }, buildNotificationChannel(CHANNEL_DOWNLOADER_PROGRESS, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_DOWNLOADER) setShowBadge(false) }, buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.channel_errors)) setGroup(GROUP_DOWNLOADER) setShowBadge(false) }, buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_BACKUP_RESTORE) setShowBadge(false) }, buildNotificationChannel(CHANNEL_BACKUP_RESTORE_COMPLETE, IMPORTANCE_HIGH) { setName(context.stringResource(MR.strings.channel_complete)) setGroup(GROUP_BACKUP_RESTORE) setShowBadge(false) setSound(null, null) }, buildNotificationChannel(CHANNEL_INCOGNITO_MODE, IMPORTANCE_LOW) { setName(context.stringResource(MR.strings.pref_incognito_mode)) }, buildNotificationChannel(CHANNEL_APP_UPDATE, IMPORTANCE_DEFAULT) { setGroup(GROUP_APK_UPDATES) setName(context.stringResource(MR.strings.channel_app_updates)) }, buildNotificationChannel(CHANNEL_EXTENSIONS_UPDATE, IMPORTANCE_DEFAULT) { setGroup(GROUP_APK_UPDATES) setName(context.stringResource(MR.strings.channel_ext_updates)) }, ), ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/preference/SharedPreferencesDataStore.kt ================================================ package eu.kanade.tachiyomi.data.preference import android.content.SharedPreferences import androidx.core.content.edit import androidx.preference.PreferenceDataStore class SharedPreferencesDataStore(private val prefs: SharedPreferences) : PreferenceDataStore() { override fun getBoolean(key: String?, defValue: Boolean): Boolean { return prefs.getBoolean(key, defValue) } override fun putBoolean(key: String?, value: Boolean) { prefs.edit { putBoolean(key, value) } } override fun getInt(key: String?, defValue: Int): Int { return prefs.getInt(key, defValue) } override fun putInt(key: String?, value: Int) { prefs.edit { putInt(key, value) } } override fun getLong(key: String?, defValue: Long): Long { return prefs.getLong(key, defValue) } override fun putLong(key: String?, value: Long) { prefs.edit { putLong(key, value) } } override fun getFloat(key: String?, defValue: Float): Float { return prefs.getFloat(key, defValue) } override fun putFloat(key: String?, value: Float) { prefs.edit { putFloat(key, value) } } override fun getString(key: String?, defValue: String?): String? { return prefs.getString(key, defValue) } override fun putString(key: String?, value: String?) { prefs.edit { putString(key, value) } } override fun getStringSet(key: String?, defValues: MutableSet?): MutableSet? { return prefs.getStringSet(key, defValues) } override fun putStringSet(key: String?, values: MutableSet?) { prefs.edit { putStringSet(key, values) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt ================================================ package eu.kanade.tachiyomi.data.saver import android.content.ContentUris import android.content.Context import android.graphics.Bitmap import android.net.Uri import android.os.Build import android.os.Environment import android.provider.MediaStore import android.webkit.MimeTypeMap import androidx.annotation.RequiresApi import androidx.core.content.contentValuesOf import androidx.core.net.toUri import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.cacheImageDir import eu.kanade.tachiyomi.util.storage.getUriCompat import logcat.LogPriority import okio.IOException import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.File import java.io.InputStream import java.time.Instant class ImageSaver( val context: Context, ) { fun save(image: Image): Uri { val data = image.data val type = ImageUtil.findImageType(data) ?: throw IllegalArgumentException("Not an image") val filename = DiskUtil.buildValidFilename("${image.name}.${type.extension}") if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || image.location !is Location.Pictures) { return save(data(), image.location.directory(context), filename) } return saveApi29(image, type, filename, data) } private fun save(inputStream: InputStream, directory: File, filename: String): Uri { directory.mkdirs() val destFile = File(directory, filename) inputStream.use { input -> destFile.outputStream().use { output -> input.copyTo(output) } } DiskUtil.scanMedia(context, destFile.toUri()) return destFile.getUriCompat(context) } @RequiresApi(Build.VERSION_CODES.Q) private fun saveApi29( image: Image, type: ImageUtil.ImageType, filename: String, data: () -> InputStream, ): Uri { val isMimeTypeSupported = MimeTypeMap.getSingleton().hasMimeType(type.mime) val pictureDir = if (isMimeTypeSupported) { MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) } else { MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) } val imageLocation = (image.location as Location.Pictures).relativePath val relativePath = listOf( if (isMimeTypeSupported) Environment.DIRECTORY_PICTURES else Environment.DIRECTORY_DOCUMENTS, context.stringResource(MR.strings.app_name), imageLocation, ).joinToString(File.separator) val contentValues = contentValuesOf( MediaStore.MediaColumns.RELATIVE_PATH to relativePath, MediaStore.MediaColumns.DISPLAY_NAME to if (isMimeTypeSupported) image.name else filename, MediaStore.MediaColumns.MIME_TYPE to type.mime, MediaStore.MediaColumns.DATE_MODIFIED to Instant.now().epochSecond, ) val picture = findUriOrDefault(relativePath, filename) { context.contentResolver.insert( pictureDir, contentValues, ) ?: throw IOException(context.stringResource(MR.strings.error_saving_picture)) } try { data().use { input -> context.contentResolver.openOutputStream(picture, "w").use { output -> input.copyTo(output!!) } } } catch (e: Exception) { logcat(LogPriority.ERROR, e) throw IOException(context.stringResource(MR.strings.error_saving_picture)) } DiskUtil.scanMedia(context, picture) return picture } @RequiresApi(Build.VERSION_CODES.Q) private fun findUriOrDefault(path: String, filename: String, default: () -> Uri): Uri { val projection = arrayOf( MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.RELATIVE_PATH, ) val selection = "${MediaStore.MediaColumns.RELATIVE_PATH}=? AND ${MediaStore.MediaColumns.DISPLAY_NAME}=?" // Need to make sure it ends with the separator val normalizedPath = "${path.removeSuffix(File.separator)}${File.separator}" context.contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, arrayOf(normalizedPath, filename), null, ).use { cursor -> if (cursor != null && cursor.count >= 1) { if (cursor.moveToFirst()) { val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) return ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id) } } } return default() } } sealed class Image( open val name: String, open val location: Location, ) { data class Cover( val bitmap: Bitmap, override val name: String, override val location: Location, ) : Image(name, location) data class Page( val inputStream: () -> InputStream, override val name: String, override val location: Location, ) : Image(name, location) val data: () -> InputStream get() { return when (this) { is Cover -> { { val baos = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos) ByteArrayInputStream(baos.toByteArray()) } } is Page -> inputStream } } } sealed interface Location { @ConsistentCopyVisibility data class Pictures private constructor(val relativePath: String) : Location { companion object { fun create(relativePath: String = ""): Pictures { return Pictures(relativePath) } } } data object Cache : Location fun directory(context: Context): File { return when (this) { Cache -> context.cacheImageDir is Pictures -> { val file = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), context.stringResource(MR.strings.app_name), ) if (relativePath.isNotEmpty()) { return File( file, relativePath, ) } file } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/BaseTracker.kt ================================================ package eu.kanade.tachiyomi.data.track import android.app.Application import androidx.annotation.CallSuper import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.domain.track.model.toDomainTrack import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import logcat.LogPriority import okhttp3.OkHttpClient import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.track.interactor.InsertTrack import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack abstract class BaseTracker( override val id: Long, override val name: String, ) : Tracker { val trackPreferences: TrackPreferences by injectLazy() val networkService: NetworkHelper by injectLazy() private val addTracks: AddTracks by injectLazy() private val insertTrack: InsertTrack by injectLazy() override val client: OkHttpClient get() = networkService.client // Application and remote support for reading dates override val supportsReadingDates: Boolean = false override val supportsPrivateTracking: Boolean = false // TODO: Store all scores as 10 point in the future maybe? override fun get10PointScore(track: DomainTrack): Double { return track.score } override fun indexToScore(index: Int): Double { return index.toDouble() } @CallSuper override fun logout() { trackPreferences.setCredentials(this, "", "") } override val isLoggedIn: Boolean get() = getUsername().isNotEmpty() && getPassword().isNotEmpty() override val isLoggedInFlow: Flow by lazy { combine( trackPreferences.trackUsername(this).changes(), trackPreferences.trackPassword(this).changes(), ) { username, password -> username.isNotEmpty() && password.isNotEmpty() } } override fun getUsername() = trackPreferences.trackUsername(this).get() override fun getPassword() = trackPreferences.trackPassword(this).get() override fun saveCredentials(username: String, password: String) { trackPreferences.setCredentials(this, username, password) } override suspend fun register(item: Track, mangaId: Long) { item.manga_id = mangaId try { addTracks.bind(this, item, mangaId) } catch (e: Throwable) { withUIContext { Injekt.get().toast(e.message) } } } override suspend fun setRemoteStatus(track: Track, status: Long) { track.status = status if (track.status == getCompletionStatus() && track.total_chapters != 0L) { track.last_chapter_read = track.total_chapters.toDouble() } updateRemote(track) } override suspend fun setRemoteLastChapterRead(track: Track, chapterNumber: Int) { if ( track.last_chapter_read == 0.0 && track.last_chapter_read < chapterNumber && track.status != getRereadingStatus() ) { track.status = getReadingStatus() } track.last_chapter_read = chapterNumber.toDouble() if (track.total_chapters != 0L && track.last_chapter_read.toLong() == track.total_chapters) { track.status = getCompletionStatus() track.finished_reading_date = System.currentTimeMillis() } updateRemote(track) } override suspend fun setRemoteScore(track: Track, scoreString: String) { track.score = indexToScore(getScoreList().indexOf(scoreString)) updateRemote(track) } override suspend fun setRemoteStartDate(track: Track, epochMillis: Long) { track.started_reading_date = epochMillis updateRemote(track) } override suspend fun setRemoteFinishDate(track: Track, epochMillis: Long) { track.finished_reading_date = epochMillis updateRemote(track) } override suspend fun setRemotePrivate(track: Track, private: Boolean) { track.private = private updateRemote(track) } private suspend fun updateRemote(track: Track): Unit = withIOContext { try { update(track) track.toDomainTrack(idRequired = false)?.let { insertTrack.await(it) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to update remote track data id=$id" } withUIContext { Injekt.get().toast(e.message) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/DeletableTracker.kt ================================================ package eu.kanade.tachiyomi.data.track import tachiyomi.domain.track.model.Track /** * Tracker that support deleting am entry from a user's list. */ interface DeletableTracker { suspend fun delete(track: Track) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/EnhancedTracker.kt ================================================ package eu.kanade.tachiyomi.data.track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.source.Source import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.track.model.Track /** * A tracker that will never prompt the user to manually bind an entry. * It is expected that such tracker can only work with specific sources and unique IDs. */ interface EnhancedTracker { /** * This tracker will only work with the sources that are accepted by this filter function. */ fun accept(source: Source): Boolean { return source::class.qualifiedName in getAcceptedSources() } /** * Fully qualified source classes that this tracker is compatible with. */ fun getAcceptedSources(): List fun loginNoop() /** * Similar to [Tracker].search, but only returns zero or one match. */ suspend fun match(manga: Manga): TrackSearch? /** * Checks whether the provided source/track/manga triplet is from this [Tracker] */ fun isTrackFrom(track: Track, manga: Manga, source: Source?): Boolean /** * Migrates the given track for the manga to the newSource, if possible */ fun migrateTrack(track: Track, manga: Manga, newSource: Source): Track? } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/Tracker.kt ================================================ package eu.kanade.tachiyomi.data.track import androidx.annotation.CallSuper import androidx.annotation.DrawableRes import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.flow.Flow import okhttp3.OkHttpClient import tachiyomi.domain.track.model.Track as DomainTrack interface Tracker { val id: Long val name: String val client: OkHttpClient // Application and remote support for reading dates val supportsReadingDates: Boolean val supportsPrivateTracking: Boolean @DrawableRes fun getLogo(): Int fun getStatusList(): List fun getStatus(status: Long): StringResource? fun getReadingStatus(): Long fun getRereadingStatus(): Long fun getCompletionStatus(): Long fun getScoreList(): ImmutableList // TODO: Store all scores as 10 point in the future maybe? fun get10PointScore(track: DomainTrack): Double fun indexToScore(index: Int): Double fun displayScore(track: DomainTrack): String suspend fun update(track: Track, didReadChapter: Boolean = false): Track suspend fun bind(track: Track, hasReadChapters: Boolean = false): Track suspend fun search(query: String): List suspend fun refresh(track: Track): Track suspend fun login(username: String, password: String) @CallSuper fun logout() val isLoggedIn: Boolean val isLoggedInFlow: Flow fun getUsername(): String fun getPassword(): String fun saveCredentials(username: String, password: String) // TODO: move this to an interactor, and update all trackers based on common data suspend fun register(item: Track, mangaId: Long) suspend fun setRemoteStatus(track: Track, status: Long) suspend fun setRemoteLastChapterRead(track: Track, chapterNumber: Int) suspend fun setRemoteScore(track: Track, scoreString: String) suspend fun setRemoteStartDate(track: Track, epochMillis: Long) suspend fun setRemoteFinishDate(track: Track, epochMillis: Long) suspend fun setRemotePrivate(track: Track, private: Boolean) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/TrackerManager.kt ================================================ package eu.kanade.tachiyomi.data.track import eu.kanade.tachiyomi.data.track.anilist.Anilist import eu.kanade.tachiyomi.data.track.bangumi.Bangumi import eu.kanade.tachiyomi.data.track.kavita.Kavita import eu.kanade.tachiyomi.data.track.kitsu.Kitsu import eu.kanade.tachiyomi.data.track.komga.Komga import eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates import eu.kanade.tachiyomi.data.track.myanimelist.MyAnimeList import eu.kanade.tachiyomi.data.track.shikimori.Shikimori import eu.kanade.tachiyomi.data.track.suwayomi.Suwayomi import kotlinx.coroutines.flow.combine class TrackerManager { companion object { const val ANILIST = 2L const val KITSU = 3L const val KAVITA = 8L } val myAnimeList = MyAnimeList(1L) val aniList = Anilist(ANILIST) val kitsu = Kitsu(KITSU) val shikimori = Shikimori(4L) val bangumi = Bangumi(5L) val komga = Komga(6L) val mangaUpdates = MangaUpdates(7L) val kavita = Kavita(KAVITA) val suwayomi = Suwayomi(9L) val trackers = listOf(myAnimeList, aniList, kitsu, shikimori, bangumi, komga, mangaUpdates, kavita, suwayomi) fun loggedInTrackers() = trackers.filter { it.isLoggedIn } fun loggedInTrackersFlow() = combine(trackers.map { it.isLoggedInFlow }) { it.mapIndexedNotNull { index, isLoggedIn -> if (isLoggedIn) trackers[index] else null } } fun get(id: Long) = trackers.find { it.id == id } fun getAll(ids: Set) = trackers.filter { it.id in ids } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.model.toDbTrack import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.anilist.dto.ALOAuth import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.json.Json import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack class Anilist(id: Long) : BaseTracker(id, "AniList"), DeletableTracker { companion object { const val READING = 1L const val COMPLETED = 2L const val ON_HOLD = 3L const val DROPPED = 4L const val PLAN_TO_READ = 5L const val REREADING = 6L const val POINT_100 = "POINT_100" const val POINT_10 = "POINT_10" const val POINT_10_DECIMAL = "POINT_10_DECIMAL" const val POINT_5 = "POINT_5" const val POINT_3 = "POINT_3" } private val json: Json by injectLazy() private val interceptor by lazy { AnilistInterceptor(this, getPassword()) } private val api by lazy { AnilistApi(client, interceptor) } override val supportsReadingDates: Boolean = true override val supportsPrivateTracking: Boolean = true private val scorePreference = trackPreferences.anilistScoreType init { // If the preference is an int from APIv1, logout user to force using APIv2 try { scorePreference.get() } catch (e: ClassCastException) { logout() scorePreference.delete() } } override fun getLogo() = R.drawable.brand_anilist override fun getStatusList(): List { return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING) } override fun getStatus(status: Long): StringResource? = when (status) { READING -> MR.strings.reading PLAN_TO_READ -> MR.strings.plan_to_read COMPLETED -> MR.strings.completed ON_HOLD -> MR.strings.on_hold DROPPED -> MR.strings.dropped REREADING -> MR.strings.repeating else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = REREADING override fun getCompletionStatus(): Long = COMPLETED override fun getScoreList(): ImmutableList { return when (scorePreference.get()) { // 10 point POINT_10 -> IntRange(0, 10).map(Int::toString).toImmutableList() // 100 point POINT_100 -> IntRange(0, 100).map(Int::toString).toImmutableList() // 5 stars POINT_5 -> IntRange(0, 5).map { "$it ★" }.toImmutableList() // Smiley POINT_3 -> persistentListOf("-", "😦", "😐", "😊") // 10 point decimal POINT_10_DECIMAL -> IntRange(0, 100).map { (it / 10f).toString() }.toImmutableList() else -> throw Exception("Unknown score type") } } override fun get10PointScore(track: DomainTrack): Double { // Score is stored in 100 point format return track.score / 10.0 } override fun indexToScore(index: Int): Double { return when (scorePreference.get()) { // 10 point POINT_10 -> index * 10.0 // 100 point POINT_100 -> index.toDouble() // 5 stars POINT_5 -> when (index) { 0 -> 0.0 else -> index * 20.0 - 10.0 } // Smiley POINT_3 -> when (index) { 0 -> 0.0 else -> index * 25.0 + 10.0 } // 10 point decimal POINT_10_DECIMAL -> index.toDouble() else -> throw Exception("Unknown score type") } } override fun displayScore(track: DomainTrack): String { val score = track.score return when (scorePreference.get()) { POINT_5 -> when (score) { 0.0 -> "0 ★" else -> "${((score + 10) / 20).toInt()} ★" } POINT_3 -> when { score == 0.0 -> "0" score <= 35 -> "😦" score <= 60 -> "😐" else -> "😊" } else -> track.toApiScore() } } private suspend fun add(track: Track): Track { return api.addLibManga(track) } override suspend fun update(track: Track, didReadChapter: Boolean): Track { // If user was using API v1 fetch library_id if (track.library_id == null || track.library_id!! == 0L) { val libManga = api.findLibManga(track, getUsername().toInt()) ?: throw Exception("$track not found on user library") track.library_id = libManga.library_id } if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED track.finished_reading_date = System.currentTimeMillis() } else if (track.status != REREADING) { track.status = READING if (track.last_chapter_read == 1.0) { track.started_reading_date = System.currentTimeMillis() } } } } return api.updateLibManga(track) } override suspend fun delete(track: DomainTrack) { if (track.libraryId == null || track.libraryId == 0L) { val libManga = api.findLibManga(track.toDbTrack(), getUsername().toInt()) ?: return return api.deleteLibManga(track.copy(id = libManga.library_id!!)) } api.deleteLibManga(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { val remoteTrack = api.findLibManga(track, getUsername().toInt()) return if (remoteTrack != null) { track.copyPersonalFrom(remoteTrack, copyRemotePrivate = false) track.library_id = remoteTrack.library_id if (track.status != COMPLETED) { val isRereading = track.status == REREADING track.status = if (!isRereading && hasReadChapters) READING else track.status } update(track) } else { // Set default fields if it's not found in the list track.status = if (hasReadChapters) READING else PLAN_TO_READ track.score = 0.0 add(track) } } override suspend fun search(query: String): List { return api.search(query) } override suspend fun refresh(track: Track): Track { val remoteTrack = api.getLibManga(track, getUsername().toInt()) track.copyPersonalFrom(remoteTrack) track.title = remoteTrack.title track.total_chapters = remoteTrack.total_chapters return track } override suspend fun login(username: String, password: String) = login(password) suspend fun login(token: String) { try { val oauth = api.createOAuth(token) interceptor.setAuth(oauth) val (username, scoreType) = api.getCurrentUser() scorePreference.set(scoreType) saveCredentials(username.toString(), oauth.accessToken) } catch (e: Throwable) { logout() } } override fun logout() { super.logout() trackPreferences.trackToken(this).delete() interceptor.setAuth(null) } fun saveOAuth(alOAuth: ALOAuth?) { trackPreferences.trackToken(this).set(json.encodeToString(alOAuth)) } fun loadOAuth(): ALOAuth? { return try { json.decodeFromString(trackPreferences.trackToken(this).get()) } catch (e: Exception) { null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.anilist.dto.ALAddMangaResult import eu.kanade.tachiyomi.data.track.anilist.dto.ALCurrentUserResult import eu.kanade.tachiyomi.data.track.anilist.dto.ALOAuth import eu.kanade.tachiyomi.data.track.anilist.dto.ALSearchResult import eu.kanade.tachiyomi.data.track.anilist.dto.ALUserListMangaQueryResult import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.interceptor.rateLimit import eu.kanade.tachiyomi.network.jsonMime import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject import okhttp3.OkHttpClient import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import uy.kohesive.injekt.injectLazy import java.time.Instant import java.time.ZoneId import java.time.ZonedDateTime import kotlin.time.Duration.Companion.minutes import tachiyomi.domain.track.model.Track as DomainTrack class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { private val json: Json by injectLazy() private val authClient = client.newBuilder() .addInterceptor(interceptor) .rateLimit(permits = 85, period = 1.minutes) .build() suspend fun addLibManga(track: Track): Track { return withIOContext { val query = $$""" |mutation AddManga($mangaId: Int, $progress: Int, $status: MediaListStatus, $private: Boolean) { |SaveMediaListEntry (mediaId: $mangaId, progress: $progress, status: $status, private: $private) { | id | status |} |} | """.trimMargin() val payload = buildJsonObject { put("query", query) putJsonObject("variables") { put("mangaId", track.remote_id) put("progress", track.last_chapter_read.toInt()) put("status", track.toApiStatus()) put("private", track.private) } } with(json) { authClient.newCall( POST( API_URL, body = payload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .let { track.library_id = it.data.entry.id track } } } } suspend fun updateLibManga(track: Track): Track { return withIOContext { val query = $$""" |mutation UpdateManga( |$listId: Int, $progress: Int, $status: MediaListStatus, $private: Boolean, |$score: Int, $startedAt: FuzzyDateInput, $completedAt: FuzzyDateInput |) { |SaveMediaListEntry( |id: $listId, progress: $progress, status: $status, private: $private, |scoreRaw: $score, startedAt: $startedAt, completedAt: $completedAt |) { |id |status |progress |} |} | """.trimMargin() val payload = buildJsonObject { put("query", query) putJsonObject("variables") { put("listId", track.library_id) put("progress", track.last_chapter_read.toInt()) put("status", track.toApiStatus()) put("score", track.score.toInt()) put("startedAt", createDate(track.started_reading_date)) put("completedAt", createDate(track.finished_reading_date)) put("private", track.private) } } authClient.newCall(POST(API_URL, body = payload.toString().toRequestBody(jsonMime))) .awaitSuccess() track } } suspend fun deleteLibManga(track: DomainTrack) { withIOContext { val query = $$""" |mutation DeleteManga($listId: Int) { |DeleteMediaListEntry(id: $listId) { |deleted |} |} | """.trimMargin() val payload = buildJsonObject { put("query", query) putJsonObject("variables") { put("listId", track.libraryId) } } authClient.newCall(POST(API_URL, body = payload.toString().toRequestBody(jsonMime))) .awaitSuccess() } } suspend fun search(search: String): List { return withIOContext { val query = $$""" |query Search($query: String) { |Page (perPage: 50) { |media(search: $query, type: MANGA, format_not_in: [NOVEL]) { |id |staff { |edges { |role |id |node { |name { |full |userPreferred |native |} |} |} |} |title { |userPreferred |} |coverImage { |large |} |format |status |chapters |description |startDate { |year |month |day |} |averageScore |} |} |} | """.trimMargin() val payload = buildJsonObject { put("query", query) putJsonObject("variables") { put("query", search) } } with(json) { authClient.newCall( POST( API_URL, body = payload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .data.page.media .map { it.toALManga().toTrack() } } } } suspend fun findLibManga(track: Track, userid: Int): Track? { return withIOContext { val query = $$""" |query ($id: Int!, $manga_id: Int!) { |Page { |mediaList(userId: $id, type: MANGA, mediaId: $manga_id) { |id |status |scoreRaw: score(format: POINT_100) |progress |private |startedAt { |year |month |day |} |completedAt { |year |month |day |} |media { |id |title { |userPreferred |} |coverImage { |large |} |format |status |chapters |description |startDate { |year |month |day |} |staff { |edges { |role |id |node { |name { |full |userPreferred |native |} |} |} |} |} |} |} |} | """.trimMargin() val payload = buildJsonObject { put("query", query) putJsonObject("variables") { put("id", userid) put("manga_id", track.remote_id) } } with(json) { authClient.newCall( POST( API_URL, body = payload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .data.page.mediaList .map { it.toALUserManga() } .firstOrNull() ?.toTrack() } } } suspend fun getLibManga(track: Track, userId: Int): Track { return findLibManga(track, userId) ?: throw Exception("Could not find manga") } fun createOAuth(token: String): ALOAuth { return ALOAuth(token, "Bearer", System.currentTimeMillis() + 31536000000, 31536000000) } suspend fun getCurrentUser(): Pair { return withIOContext { val query = """ |query User { |Viewer { |id |mediaListOptions { |scoreFormat |} |} |} | """.trimMargin() val payload = buildJsonObject { put("query", query) } with(json) { authClient.newCall( POST( API_URL, body = payload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .let { val viewer = it.data.viewer Pair(viewer.id, viewer.mediaListOptions.scoreFormat) } } } } private fun createDate(dateValue: Long): JsonObject { if (dateValue == 0L) { return buildJsonObject { put("year", JsonNull) put("month", JsonNull) put("day", JsonNull) } } val dateTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(dateValue), ZoneId.systemDefault()) return buildJsonObject { put("year", dateTime.year) put("month", dateTime.monthValue) put("day", dateTime.dayOfMonth) } } companion object { private const val CLIENT_ID = "16329" private const val API_URL = "https://graphql.anilist.co/" private const val BASE_URL = "https://anilist.co/api/v2/" private const val BASE_MANGA_URL = "https://anilist.co/manga/" fun mangaUrl(mediaId: Long): String { return BASE_MANGA_URL + mediaId } fun authUrl(): Uri = "${BASE_URL}oauth/authorize".toUri().buildUpon() .appendQueryParameter("client_id", CLIENT_ID) .appendQueryParameter("response_type", "token") .build() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.track.anilist.dto.ALOAuth import eu.kanade.tachiyomi.data.track.anilist.dto.isExpired import okhttp3.Interceptor import okhttp3.Response import java.io.IOException class AnilistInterceptor(val anilist: Anilist, private var token: String?) : Interceptor { /** * OAuth object used for authenticated requests. * * Anilist returns the date without milliseconds. We fix that and make the token expire 1 minute * before its original expiration date. */ private var oauth: ALOAuth? = null set(value) { field = value?.copy(expires = value.expires * 1000 - 60 * 1000) } override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() if (token.isNullOrEmpty()) { throw Exception("Not authenticated with Anilist") } if (oauth == null) { oauth = anilist.loadOAuth() } // Refresh access token if null or expired. if (oauth!!.isExpired()) { anilist.logout() throw IOException("Token expired") } // Throw on null auth. if (oauth == null) { throw IOException("No authentication token") } // Add the authorization header to the original request. val authRequest = originalRequest.newBuilder() .addHeader("Authorization", "Bearer ${oauth!!.accessToken}") .header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .build() return chain.proceed(authRequest) } /** * Called when the user authenticates with Anilist for the first time. Sets the refresh token * and the oauth object. */ fun setAuth(oauth: ALOAuth?) { token = oauth?.accessToken this.oauth = oauth anilist.saveOAuth(oauth) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.tachiyomi.data.database.models.Track import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack fun Track.toApiStatus() = when (status) { Anilist.READING -> "CURRENT" Anilist.COMPLETED -> "COMPLETED" Anilist.ON_HOLD -> "PAUSED" Anilist.DROPPED -> "DROPPED" Anilist.PLAN_TO_READ -> "PLANNING" Anilist.REREADING -> "REPEATING" else -> throw NotImplementedError("Unknown status: $status") } private val preferences: TrackPreferences by injectLazy() fun DomainTrack.toApiScore(): String = when (preferences.anilistScoreType.get()) { // 10 point "POINT_10" -> (score.toInt() / 10).toString() // 100 point "POINT_100" -> score.toInt().toString() // 5 stars "POINT_5" -> when { score == 0.0 -> "0" score < 30 -> "1" score < 50 -> "2" score < 70 -> "3" score < 90 -> "4" else -> "5" } // Smiley "POINT_3" -> when { score == 0.0 -> "0" score <= 35 -> ":(" score <= 60 -> ":|" else -> ":)" } // 10 point decimal "POINT_10_DECIMAL" -> (score / 10).toString() else -> throw NotImplementedError("Unknown score type") } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALAddManga.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class ALAddMangaResult( val data: ALAddMangaData, ) @Serializable data class ALAddMangaData( @SerialName("SaveMediaListEntry") val entry: ALAddMangaEntry, ) @Serializable data class ALAddMangaEntry( val id: Long, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALFuzzyDate.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.Serializable import java.time.LocalDate import java.time.ZoneId @Serializable data class ALFuzzyDate( val year: Int?, val month: Int?, val day: Int?, ) { fun toEpochMilli(): Long = try { LocalDate.of(year!!, month!!, day!!) .atStartOfDay(ZoneId.systemDefault()) .toInstant() .toEpochMilli() } catch (_: Exception) { 0L } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALManga.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.anilist.Anilist import eu.kanade.tachiyomi.data.track.anilist.AnilistApi import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.util.lang.htmlDecode import java.text.SimpleDateFormat import java.util.Locale data class ALManga( val remoteId: Long, val title: String, val imageUrl: String, val description: String?, val format: String, val publishingStatus: String, val startDateFuzzy: Long, val totalChapters: Long, val averageScore: Int, val staff: ALStaff, ) { fun toTrack() = TrackSearch.create(TrackerManager.ANILIST).apply { remote_id = remoteId title = this@ALManga.title total_chapters = totalChapters cover_url = imageUrl summary = description?.htmlDecode() ?: "" score = averageScore.toDouble() tracking_url = AnilistApi.mangaUrl(remote_id) publishing_status = publishingStatus publishing_type = format if (startDateFuzzy != 0L) { start_date = try { val outputDf = SimpleDateFormat("yyyy-MM-dd", Locale.US) outputDf.format(startDateFuzzy) } catch (e: IllegalArgumentException) { "" } } staff.edges.forEach { val name = it.node.name() ?: return@forEach if ("Story" in it.role) authors += name if ("Art" in it.role) artists += name } } } data class ALUserManga( val libraryId: Long, val listStatus: String, val scoreRaw: Int, val chaptersRead: Int, val startDateFuzzy: Long, val completedDateFuzzy: Long, val manga: ALManga, val private: Boolean, ) { fun toTrack() = Track.create(TrackerManager.ANILIST).apply { remote_id = manga.remoteId title = manga.title status = toTrackStatus() score = scoreRaw.toDouble() started_reading_date = startDateFuzzy finished_reading_date = completedDateFuzzy last_chapter_read = chaptersRead.toDouble() library_id = libraryId total_chapters = manga.totalChapters private = this@ALUserManga.private } private fun toTrackStatus() = when (listStatus) { "CURRENT" -> Anilist.READING "COMPLETED" -> Anilist.COMPLETED "PAUSED" -> Anilist.ON_HOLD "DROPPED" -> Anilist.DROPPED "PLANNING" -> Anilist.PLAN_TO_READ "REPEATING" -> Anilist.REREADING else -> throw NotImplementedError("Unknown status: $listStatus") } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALOAuth.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class ALOAuth( @SerialName("access_token") val accessToken: String, @SerialName("token_type") val tokenType: String, val expires: Long, @SerialName("expires_in") val expiresIn: Long, ) fun ALOAuth.isExpired() = System.currentTimeMillis() > expires ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALSearch.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class ALSearchResult( val data: ALSearchPage, ) @Serializable data class ALSearchPage( @SerialName("Page") val page: ALSearchMedia, ) @Serializable data class ALSearchMedia( val media: List, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALSearchItem.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.Serializable @Serializable data class ALSearchItem( val id: Long, val title: ALItemTitle, val coverImage: ItemCover, val description: String?, val format: String, val status: String?, val startDate: ALFuzzyDate, val chapters: Long?, val averageScore: Int?, val staff: ALStaff, ) { fun toALManga(): ALManga = ALManga( remoteId = id, title = title.userPreferred, imageUrl = coverImage.large, description = description, format = format.replace("_", "-"), publishingStatus = status ?: "", startDateFuzzy = startDate.toEpochMilli(), totalChapters = chapters ?: 0, averageScore = averageScore ?: -1, staff = staff, ) } @Serializable data class ALItemTitle( val userPreferred: String, ) @Serializable data class ItemCover( val large: String, ) @Serializable data class ALStaff( val edges: List, ) @Serializable data class ALEdge( val role: String, val id: Int, val node: ALStaffNode, ) @Serializable data class ALStaffNode( val name: ALStaffName, ) @Serializable data class ALStaffName( val userPreferred: String?, val native: String?, val full: String?, ) { operator fun invoke(): String? { return userPreferred ?: full ?: native } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALUser.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class ALCurrentUserResult( val data: ALUserViewer, ) @Serializable data class ALUserViewer( @SerialName("Viewer") val viewer: ALUserViewerData, ) @Serializable data class ALUserViewerData( val id: Int, val mediaListOptions: ALUserListOptions, ) @Serializable data class ALUserListOptions( val scoreFormat: String, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALUserList.kt ================================================ package eu.kanade.tachiyomi.data.track.anilist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class ALUserListMangaQueryResult( val data: ALUserListMangaPage, ) @Serializable data class ALUserListMangaPage( @SerialName("Page") val page: ALUserListMediaList, ) @Serializable data class ALUserListMediaList( val mediaList: List, ) @Serializable data class ALUserListItem( val id: Long, val status: String, val scoreRaw: Int, val progress: Int, val startedAt: ALFuzzyDate, val completedAt: ALFuzzyDate, val media: ALSearchItem, val private: Boolean, ) { fun toALUserManga(): ALUserManga { return ALUserManga( libraryId = this@ALUserListItem.id, listStatus = status, scoreRaw = scoreRaw, chaptersRead = progress, startDateFuzzy = startedAt.toEpochMilli(), completedDateFuzzy = completedAt.toEpochMilli(), manga = media.toALManga(), private = private, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/Bangumi.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.bangumi.dto.BGMOAuth import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.json.Json import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack class Bangumi(id: Long) : BaseTracker(id, "Bangumi") { private val json: Json by injectLazy() private val interceptor by lazy { BangumiInterceptor(this) } private val api by lazy { BangumiApi(id, client, interceptor) } override val supportsPrivateTracking: Boolean = true override fun getScoreList(): ImmutableList = SCORE_LIST override fun displayScore(track: DomainTrack): String { return track.score.toInt().toString() } private suspend fun add(track: Track): Track { return api.addLibManga(track) } override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED } else { track.status = READING } } } return api.updateLibManga(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { val statusTrack = api.statusLibManga(track, getUsername()) return if (statusTrack != null) { track.copyPersonalFrom(statusTrack, copyRemotePrivate = false) track.library_id = statusTrack.library_id track.score = statusTrack.score track.last_chapter_read = statusTrack.last_chapter_read track.total_chapters = statusTrack.total_chapters if (track.status != COMPLETED) { track.status = if (hasReadChapters) READING else statusTrack.status } update(track) } else { // Set default fields if it's not found in the list track.status = if (hasReadChapters) READING else PLAN_TO_READ track.score = 0.0 add(track) } } override suspend fun search(query: String): List { return api.search(query) } override suspend fun refresh(track: Track): Track { val remoteStatusTrack = api.statusLibManga(track, getUsername()) ?: throw Exception("Could not find manga") track.copyPersonalFrom(remoteStatusTrack) return track } override fun getLogo() = R.drawable.brand_bangumi override fun getStatusList(): List { return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ) } override fun getStatus(status: Long): StringResource? = when (status) { READING -> MR.strings.reading PLAN_TO_READ -> MR.strings.plan_to_read COMPLETED -> MR.strings.completed ON_HOLD -> MR.strings.on_hold DROPPED -> MR.strings.dropped else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = -1 override fun getCompletionStatus(): Long = COMPLETED override suspend fun login(username: String, password: String) = login(password) suspend fun login(code: String) { try { val oauth = api.accessToken(code) interceptor.newAuth(oauth) // Users can set a 'username' (not nickname) once which effectively // replaces the stringified ID in certain queries. // If no username is set, the API returns the user ID as a strings val username = api.getUsername() saveCredentials(username, oauth.accessToken) } catch (_: Throwable) { logout() } } fun saveToken(oauth: BGMOAuth?) { trackPreferences.trackToken(this).set(json.encodeToString(oauth)) } fun restoreToken(): BGMOAuth? { return try { json.decodeFromString(trackPreferences.trackToken(this).get()) } catch (_: Exception) { null } } override fun logout() { super.logout() trackPreferences.trackToken(this).delete() interceptor.newAuth(null) } companion object { const val PLAN_TO_READ = 1L const val COMPLETED = 2L const val READING = 3L const val ON_HOLD = 4L const val DROPPED = 5L private val SCORE_LIST = IntRange(0, 10) .map(Int::toString) .toImmutableList() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.bangumi.dto.BGMCollectionResponse import eu.kanade.tachiyomi.data.track.bangumi.dto.BGMOAuth import eu.kanade.tachiyomi.data.track.bangumi.dto.BGMSearchResult import eu.kanade.tachiyomi.data.track.bangumi.dto.BGMUser import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.HttpException import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import kotlinx.serialization.json.add import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonArray import kotlinx.serialization.json.putJsonObject import okhttp3.CacheControl import okhttp3.FormBody import okhttp3.Headers.Companion.headersOf import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import uy.kohesive.injekt.injectLazy class BangumiApi( private val trackId: Long, private val client: OkHttpClient, interceptor: BangumiInterceptor, ) { private val json: Json by injectLazy() private val authClient = client.newBuilder().addInterceptor(interceptor).build() suspend fun addLibManga(track: Track): Track { return withIOContext { val url = "$API_URL/v0/users/-/collections/${track.remote_id}" val body = buildJsonObject { put("type", track.toApiStatus()) put("rate", track.score.toInt().coerceIn(0, 10)) put("ep_status", track.last_chapter_read.toInt()) put("private", track.private) } .toString() .toRequestBody() // Returns with 202 Accepted on success with no body authClient.newCall(POST(url, body = body, headers = headersOf("Content-Type", APP_JSON))) .awaitSuccess() track } } suspend fun updateLibManga(track: Track): Track { return withIOContext { val url = "$API_URL/v0/users/-/collections/${track.remote_id}" val body = buildJsonObject { put("type", track.toApiStatus()) put("rate", track.score.toInt().coerceIn(0, 10)) put("ep_status", track.last_chapter_read.toInt()) put("private", track.private) } .toString() .toRequestBody() val request = Request.Builder() .url(url) .patch(body) .headers(headersOf("Content-Type", APP_JSON)) .build() // Returns with 204 No Content authClient.newCall(request) .awaitSuccess() track } } suspend fun search(search: String): List { // This API is marked as experimental in the documentation // but that has been the case since 2022 with few significant // changes to the schema for this endpoint since // "实验性 API, 本 schema 和实际的 API 行为都可能随时发生改动" return withIOContext { val url = "$API_URL/v0/search/subjects?limit=20" val body = buildJsonObject { put("keyword", search) put("sort", "match") putJsonObject("filter") { putJsonArray("type") { add(1) // "Book" (书籍) type } } } .toString() .toRequestBody() with(json) { authClient.newCall(POST(url, body = body, headers = headersOf("Content-Type", APP_JSON))) .awaitSuccess() .parseAs() .data .filter { it.platform == null || it.platform == "漫画" } .map { it.toTrackSearch(trackId) } } } } suspend fun statusLibManga(track: Track, username: String): Track? { return withIOContext { val url = "$API_URL/v0/users/$username/collections/${track.remote_id}" with(json) { try { authClient.newCall(GET(url, cache = CacheControl.FORCE_NETWORK)) .awaitSuccess() .parseAs() .let { track.status = it.getStatus() track.last_chapter_read = it.epStatus?.toDouble() ?: 0.0 track.score = it.rate?.toDouble() ?: 0.0 track.total_chapters = it.subject?.eps?.toLong() ?: 0L track } } catch (e: HttpException) { if (e.code == 404) { // "subject is not collected by user" null } else { throw e } } } } } suspend fun accessToken(code: String): BGMOAuth { return withIOContext { val body = FormBody.Builder() .add("grant_type", "authorization_code") .add("client_id", CLIENT_ID) .add("client_secret", CLIENT_SECRET) .add("code", code) .add("redirect_uri", REDIRECT_URL) .build() with(json) { client.newCall(POST(OAUTH_URL, body = body)) .awaitSuccess() .parseAs() } } } suspend fun getUsername(): String { return withIOContext { with(json) { authClient.newCall(GET("$API_URL/v0/me")) .awaitSuccess() .parseAs() .username } } } companion object { private const val CLIENT_ID = "bgm291665acbd06a4c28" private const val CLIENT_SECRET = "43e5ce36b207de16e5d3cfd3e79118db" private const val API_URL = "https://api.bgm.tv" private const val OAUTH_URL = "https://bgm.tv/oauth/access_token" private const val LOGIN_URL = "https://bgm.tv/oauth/authorize" private const val REDIRECT_URL = "mihon://bangumi-auth" private const val APP_JSON = "application/json" fun authUrl(): Uri = LOGIN_URL.toUri().buildUpon() .appendQueryParameter("client_id", CLIENT_ID) .appendQueryParameter("response_type", "code") .appendQueryParameter("redirect_uri", REDIRECT_URL) .build() fun refreshTokenRequest(token: String) = POST( OAUTH_URL, body = FormBody.Builder() .add("grant_type", "refresh_token") .add("client_id", CLIENT_ID) .add("client_secret", CLIENT_SECRET) .add("refresh_token", token) .add("redirect_uri", REDIRECT_URL) .build(), ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.track.bangumi.dto.BGMOAuth import eu.kanade.tachiyomi.data.track.bangumi.dto.isExpired import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Response import uy.kohesive.injekt.injectLazy class BangumiInterceptor(private val bangumi: Bangumi) : Interceptor { private val json: Json by injectLazy() /** * OAuth object used for authenticated requests. */ private var oauth: BGMOAuth? = bangumi.restoreToken() override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() var currAuth: BGMOAuth = oauth ?: throw Exception("Not authenticated with Bangumi") if (currAuth.isExpired()) { val response = chain.proceed(BangumiApi.refreshTokenRequest(currAuth.refreshToken!!)) if (response.isSuccessful) { currAuth = json.decodeFromString(response.body.string()) newAuth(currAuth) } else { response.close() } } return originalRequest.newBuilder() .header( "User-Agent", "antsylich/Mihon/v${BuildConfig.VERSION_NAME} (Android) (http://github.com/mihonapp/mihon)", ) .apply { addHeader("Authorization", "Bearer ${currAuth.accessToken}") } .build() .let(chain::proceed) } fun newAuth(oauth: BGMOAuth?) { this.oauth = if (oauth == null) { null } else { BGMOAuth( oauth.accessToken, oauth.tokenType, System.currentTimeMillis() / 1000, oauth.expiresIn, oauth.refreshToken, this.oauth?.userId, ) } bangumi.saveToken(oauth) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiUtils.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi import eu.kanade.tachiyomi.data.database.models.Track fun Track.toApiStatus() = when (status) { Bangumi.PLAN_TO_READ -> 1 Bangumi.COMPLETED -> 2 Bangumi.READING -> 3 Bangumi.ON_HOLD -> 4 Bangumi.DROPPED -> 5 else -> throw NotImplementedError("Unknown status: $status") } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMCollectionResponse.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi.dto import eu.kanade.tachiyomi.data.track.bangumi.Bangumi import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable // Incomplete DTO with only our needed attributes data class BGMCollectionResponse( val rate: Int?, val type: Int?, @SerialName("ep_status") val epStatus: Int? = 0, @SerialName("vol_status") val volStatus: Int? = 0, val private: Boolean = false, val subject: BGMSlimSubject? = null, ) { fun getStatus(): Long = when (type) { 1 -> Bangumi.PLAN_TO_READ 2 -> Bangumi.COMPLETED 3 -> Bangumi.READING 4 -> Bangumi.ON_HOLD 5 -> Bangumi.DROPPED else -> throw NotImplementedError("Unknown status: $type") } } @Serializable // Incomplete DTO with only our needed attributes data class BGMSlimSubject( val volumes: Int?, val eps: Int?, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi.dto import kotlinx.serialization.EncodeDefault import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class BGMOAuth( @SerialName("access_token") val accessToken: String, @SerialName("token_type") val tokenType: String, @SerialName("created_at") @EncodeDefault val createdAt: Long = System.currentTimeMillis() / 1000, @SerialName("expires_in") val expiresIn: Long, @SerialName("refresh_token") val refreshToken: String?, @SerialName("user_id") val userId: Long?, ) // Access token refresh before expired fun BGMOAuth.isExpired() = (System.currentTimeMillis() / 1000) > (createdAt + expiresIn - 3600) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMSearch.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi.dto import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class BGMSearchResult( val total: Int, val limit: Int, val offset: Int, val data: List = emptyList(), ) @Serializable // Incomplete DTO with only our needed attributes data class BGMSubject( val id: Long, @SerialName("name_cn") val nameCn: String, val name: String, val summary: String?, val date: String?, // YYYY-MM-DD val images: BGMSubjectImages?, val volumes: Long = 0, val eps: Long = 0, val rating: BGMSubjectRating?, val platform: String?, ) { fun toTrackSearch(trackId: Long): TrackSearch = TrackSearch.create(trackId).apply { remote_id = this@BGMSubject.id title = nameCn.ifBlank { name } cover_url = images?.common.orEmpty() summary = if (nameCn.isNotBlank()) { "作品原名:$name" + this@BGMSubject.summary?.let { "\n${it.trim()}" }.orEmpty() } else { this@BGMSubject.summary?.trim().orEmpty() } score = rating?.score ?: -1.0 tracking_url = "https://bangumi.tv/subject/${this@BGMSubject.id}" total_chapters = eps start_date = date ?: "" } } @Serializable // Incomplete DTO with only our needed attributes data class BGMSubjectImages( val common: String?, ) @Serializable // Incomplete DTO with only our needed attributes data class BGMSubjectRating( val score: Double?, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMUser.kt ================================================ package eu.kanade.tachiyomi.data.track.bangumi.dto import kotlinx.serialization.Serializable @Serializable // Incomplete DTO with only our needed attributes data class BGMUser( val username: String, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/Kavita.kt ================================================ package eu.kanade.tachiyomi.data.track.kavita import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.sourcePreferences import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.security.MessageDigest import tachiyomi.domain.track.model.Track as DomainTrack class Kavita(id: Long) : BaseTracker(id, "Kavita"), EnhancedTracker { companion object { const val UNREAD = 1L const val READING = 2L const val COMPLETED = 3L } var authentications: OAuth? = null private val interceptor by lazy { KavitaInterceptor(this) } val api by lazy { KavitaApi(client, interceptor) } private val sourceManager: SourceManager by injectLazy() override fun getLogo(): Int = R.drawable.brand_kavita override fun getStatusList(): List = listOf(UNREAD, READING, COMPLETED) override fun getStatus(status: Long): StringResource? = when (status) { UNREAD -> MR.strings.unread READING -> MR.strings.reading COMPLETED -> MR.strings.completed else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = -1 override fun getCompletionStatus(): Long = COMPLETED override fun getScoreList(): ImmutableList = persistentListOf() override fun displayScore(track: DomainTrack): String = "" override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED } else { track.status = READING } } } return api.updateProgress(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { return track } override suspend fun search(query: String): List { TODO("Not yet implemented: search") } override suspend fun refresh(track: Track): Track { val remoteTrack = api.getTrackSearch(track.tracking_url) track.copyPersonalFrom(remoteTrack) track.total_chapters = remoteTrack.total_chapters return track } override suspend fun login(username: String, password: String) { saveCredentials("user", "pass") } // [Tracker].isLogged works by checking that credentials are saved. // By saving dummy, unused credentials, we can activate the tracker simply by login/logout override fun loginNoop() { saveCredentials("user", "pass") } override fun getAcceptedSources() = listOf("eu.kanade.tachiyomi.extension.all.kavita.Kavita") override suspend fun match(manga: Manga): TrackSearch? = try { api.getTrackSearch(manga.url) } catch (e: Exception) { null } override fun isTrackFrom(track: DomainTrack, manga: Manga, source: Source?): Boolean = track.remoteUrl == manga.url && source?.let { accept(it) } == true override fun migrateTrack(track: DomainTrack, manga: Manga, newSource: Source): DomainTrack? = if (accept(newSource)) { track.copy(remoteUrl = manga.url) } else { null } fun loadOAuth() { val oauth = OAuth() for (id in 1..3) { val authentication = oauth.authentications[id - 1] val sourceId by lazy { val key = "kavita_$id/all/1" // Hardcoded versionID to 1 val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray()) (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) } .reduce(Long::or) and Long.MAX_VALUE } val preferences = (sourceManager.get(sourceId) as ConfigurableSource).sourcePreferences() val prefApiUrl = preferences.getString("APIURL", "") val prefApiKey = preferences.getString("APIKEY", "") if (prefApiUrl.isNullOrEmpty() || prefApiKey.isNullOrEmpty()) { // Source not configured. Skip continue } val token = api.getNewToken(apiUrl = prefApiUrl, apiKey = prefApiKey) if (token.isNullOrEmpty()) { // Source is not accessible. Skip continue } authentication.apiUrl = prefApiUrl authentication.jwtToken = token } authentications = oauth } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaApi.kt ================================================ package eu.kanade.tachiyomi.data.track.kavita import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import logcat.LogPriority import okhttp3.Dns import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.injectLazy import java.io.IOException import java.net.SocketTimeoutException class KavitaApi(private val client: OkHttpClient, interceptor: KavitaInterceptor) { private val json: Json by injectLazy() private val authClient = client.newBuilder() .dns(Dns.SYSTEM) .addInterceptor(interceptor) .build() fun getApiFromUrl(url: String): String { return url.split("/api/").first() + "/api" } /* * Uses url to compare against each source APIURL's to get the correct custom source preference. * Now having source preference we can do getString("APIKEY") * Authenticates to get the token * Saves the token in the var jwtToken */ fun getNewToken(apiUrl: String, apiKey: String): String? { val request = POST( "$apiUrl/Plugin/authenticate?apiKey=$apiKey&pluginName=Tachiyomi-Kavita", body = "{}".toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull()), ) try { with(json) { client.newCall(request).execute().use { when (it.code) { 200 -> return it.parseAs().token 401 -> { logcat(LogPriority.WARN) { "Unauthorized / API key not valid: API URL: $apiUrl, empty API key: ${apiKey.isEmpty()}" } throw IOException("Unauthorized / api key not valid") } 500 -> { logcat( LogPriority.WARN, ) { "Error fetching JWT token. API URL: $apiUrl, empty API key: ${apiKey.isEmpty()}" } throw IOException("Error fetching JWT token") } else -> {} } } } // Not sure which one to catch } catch (e: SocketTimeoutException) { logcat(LogPriority.WARN) { "Could not fetch JWT token. Probably due to connectivity issue or URL '$apiUrl' not available, skipping" } return null } catch (e: Exception) { logcat(LogPriority.ERROR) { "Unhandled exception fetching JWT token for URL: '$apiUrl'" } throw IOException(e) } return null } private fun getApiVolumesUrl(url: String): String { return "${getApiFromUrl(url)}/Series/volumes?seriesId=${getIdFromUrl(url)}" } /* Strips serie id from URL */ private fun getIdFromUrl(url: String): Int { return url.substringAfterLast("/").toInt() } /* * Returns total chapters in the series. * Ignores volumes. * Volumes consisting of 1 file treated as chapter */ private fun getTotalChapters(url: String): Long { val requestUrl = getApiVolumesUrl(url) try { val listVolumeDto = with(json) { authClient.newCall(GET(requestUrl)) .execute() .parseAs>() } var volumeNumber = 0L var maxChapterNumber = 0L for (volume in listVolumeDto) { if (volume.chapters.maxOf { it.number!!.toFloat() } == 0f) { volumeNumber++ } else if (maxChapterNumber < volume.chapters.maxOf { it.number!!.toFloat() }) { maxChapterNumber = volume.chapters.maxOf { it.number!!.toFloat().toLong() } } } return if (maxChapterNumber > volumeNumber) maxChapterNumber else volumeNumber } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Exception fetching Total Chapters. Request:$requestUrl" } throw e } } private fun getLatestChapterRead(url: String): Double { val seriesId = getIdFromUrl(url) val requestUrl = "${getApiFromUrl(url)}/Tachiyomi/latest-chapter?seriesId=$seriesId" try { with(json) { authClient.newCall(GET(requestUrl)).execute().use { if (it.code == 200) { return it.parseAs().number!!.replace(",", ".").toDouble() } if (it.code == 204) { return 0.0 } } } } catch (e: Exception) { logcat( LogPriority.WARN, e, ) { "Exception getting latest chapter read. Could not get itemRequest: $requestUrl" } throw e } return 0.0 } suspend fun getTrackSearch(url: String): TrackSearch = withIOContext { try { val seriesDto: SeriesDto = with(json) { authClient.newCall(GET(url)) .awaitSuccess() .parseAs() } val track = seriesDto.toTrack() track.apply { cover_url = seriesDto.thumbnail_url.toString() tracking_url = url total_chapters = getTotalChapters(url) title = seriesDto.name status = when (seriesDto.pagesRead) { seriesDto.pages -> Kavita.COMPLETED 0 -> Kavita.UNREAD else -> Kavita.READING } last_chapter_read = getLatestChapterRead(url) } } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Could not get item: $url" } throw e } } suspend fun updateProgress(track: Track): Track { val requestUrl = "${getApiFromUrl( track.tracking_url, )}/Tachiyomi/mark-chapter-until-as-read?seriesId=${getIdFromUrl( track.tracking_url, )}&chapterNumber=${track.last_chapter_read}" authClient.newCall( POST(requestUrl, body = "{}".toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull())), ) .awaitSuccess() return getTrackSearch(track.tracking_url) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.kavita import eu.kanade.tachiyomi.BuildConfig import okhttp3.Interceptor import okhttp3.Response class KavitaInterceptor(private val kavita: Kavita) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() if (kavita.authentications == null) { kavita.loadOAuth() } val jwtToken = kavita.authentications?.getToken( kavita.api.getApiFromUrl(originalRequest.url.toString()), ) // Add the authorization header to the original request. val authRequest = originalRequest.newBuilder() .addHeader("Authorization", "Bearer $jwtToken") .header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .build() return chain.proceed(authRequest) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaModels.kt ================================================ package eu.kanade.tachiyomi.data.track.kavita import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.serialization.Serializable @Serializable data class SeriesDto( val id: Int, val name: String, val originalName: String = "", val thumbnail_url: String? = "", val localizedName: String? = "", val sortName: String? = "", val pages: Int, val coverImageLocked: Boolean = true, val pagesRead: Int, val userRating: Int? = 0, val userReview: String? = "", val format: Int, val created: String? = "", val libraryId: Int, val libraryName: String? = "", ) { fun toTrack(): TrackSearch = TrackSearch.create(TrackerManager.KAVITA).also { it.title = name it.summary = "" } } @Serializable data class VolumeDto( val id: Int, val number: Int, val name: String, val pages: Int, val pagesRead: Int, val lastModified: String, val created: String, val seriesId: Int, val chapters: List = emptyList(), ) @Serializable data class ChapterDto( val id: Int? = -1, val range: String? = "", val number: String? = "-1", val pages: Int? = 0, val isSpecial: Boolean? = false, val title: String? = "", val pagesRead: Int? = 0, val coverImageLocked: Boolean? = false, val volumeId: Int? = -1, val created: String? = "", ) @Serializable data class AuthenticationDto( val username: String, val token: String, val apiKey: String, ) class OAuth( val authentications: List = listOf( SourceAuth(1), SourceAuth(2), SourceAuth(3), ), ) { fun getToken(apiUrl: String): String? { for (authentication in authentications) { if (authentication.apiUrl == apiUrl) { return authentication.jwtToken } } return null } } data class SourceAuth( var sourceId: Int, var apiUrl: String = "", var jwtToken: String = "", ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuOAuth import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.json.Json import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.text.DecimalFormat import tachiyomi.domain.track.model.Track as DomainTrack class Kitsu(id: Long) : BaseTracker(id, "Kitsu"), DeletableTracker { companion object { const val READING = 1L const val COMPLETED = 2L const val ON_HOLD = 3L const val DROPPED = 4L const val PLAN_TO_READ = 5L } override val supportsReadingDates: Boolean = true override val supportsPrivateTracking: Boolean = true private val json: Json by injectLazy() private val interceptor by lazy { KitsuInterceptor(this) } private val api by lazy { KitsuApi(client, interceptor) } override fun getLogo() = R.drawable.brand_kitsu override fun getStatusList(): List { return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ) } override fun getStatus(status: Long): StringResource? = when (status) { READING -> MR.strings.reading PLAN_TO_READ -> MR.strings.plan_to_read COMPLETED -> MR.strings.completed ON_HOLD -> MR.strings.on_hold DROPPED -> MR.strings.dropped else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = -1 override fun getCompletionStatus(): Long = COMPLETED override fun getScoreList(): ImmutableList { val df = DecimalFormat("0.#") return (listOf("0") + IntRange(2, 20).map { df.format(it / 2f) }).toImmutableList() } override fun indexToScore(index: Int): Double { return if (index > 0) (index + 1) / 2.0 else 0.0 } override fun displayScore(track: DomainTrack): String { val df = DecimalFormat("0.#") return df.format(track.score) } private suspend fun add(track: Track): Track { return api.addLibManga(track, getUserId()) } override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED track.finished_reading_date = System.currentTimeMillis() } else { track.status = READING if (track.last_chapter_read == 1.0) { track.started_reading_date = System.currentTimeMillis() } } } } return api.updateLibManga(track) } override suspend fun delete(track: DomainTrack) { api.removeLibManga(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { val remoteTrack = api.findLibManga(track, getUserId()) return if (remoteTrack != null) { track.copyPersonalFrom(remoteTrack, copyRemotePrivate = false) track.remote_id = remoteTrack.remote_id track.library_id = remoteTrack.library_id if (track.status != COMPLETED) { track.status = if (hasReadChapters) READING else track.status } update(track) } else { track.status = if (hasReadChapters) READING else PLAN_TO_READ track.score = 0.0 add(track) } } override suspend fun search(query: String): List { return api.search(query) } override suspend fun refresh(track: Track): Track { val remoteTrack = api.getLibManga(track) track.copyPersonalFrom(remoteTrack) track.total_chapters = remoteTrack.total_chapters return track } override suspend fun login(username: String, password: String) { val token = api.login(username, password) interceptor.newAuth(token) val userId = api.getCurrentUser() saveCredentials(username, userId) } override fun logout() { super.logout() interceptor.newAuth(null) } private fun getUserId(): String { return getPassword() } fun saveToken(oauth: KitsuOAuth?) { trackPreferences.trackToken(this).set(json.encodeToString(oauth)) } fun restoreToken(): KitsuOAuth? { return try { json.decodeFromString(trackPreferences.trackToken(this).get()) } catch (_: Exception) { null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuAddMangaResult import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuAlgoliaSearchResult import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuCurrentUserResult import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuListSearchResult import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuOAuth import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuSearchResult import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.DELETE import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.jsonMime import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject import okhttp3.FormBody import okhttp3.Headers.Companion.headersOf import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import uy.kohesive.injekt.injectLazy import java.net.URLEncoder import java.nio.charset.StandardCharsets import tachiyomi.domain.track.model.Track as DomainTrack class KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor) { private val json: Json by injectLazy() private val authClient = client.newBuilder().addInterceptor(interceptor).build() suspend fun addLibManga(track: Track, userId: String): Track { return withIOContext { val data = buildJsonObject { putJsonObject("data") { put("type", "libraryEntries") putJsonObject("attributes") { put("status", track.toApiStatus()) put("progress", track.last_chapter_read.toInt()) put("private", track.private) } putJsonObject("relationships") { putJsonObject("user") { putJsonObject("data") { put("id", userId) put("type", "users") } } putJsonObject("media") { putJsonObject("data") { put("id", track.remote_id) put("type", "manga") } } } } } with(json) { authClient.newCall( POST( "${BASE_URL}library-entries", headers = headersOf("Content-Type", VND_API_JSON), body = data.toString().toRequestBody(VND_JSON_MEDIA_TYPE), ), ) .awaitSuccess() .parseAs() .let { track.library_id = it.data.id track } } } } suspend fun updateLibManga(track: Track): Track { return withIOContext { val data = buildJsonObject { putJsonObject("data") { put("type", "libraryEntries") put("id", track.library_id) putJsonObject("attributes") { put("status", track.toApiStatus()) put("progress", track.last_chapter_read.toInt()) put("ratingTwenty", track.toApiScore()) put("startedAt", KitsuDateHelper.convert(track.started_reading_date)) put("finishedAt", KitsuDateHelper.convert(track.finished_reading_date)) put("private", track.private) } } } authClient.newCall( Request.Builder() .url("${BASE_URL}library-entries/${track.library_id}") .headers( headersOf("Content-Type", VND_API_JSON), ) .patch(data.toString().toRequestBody(VND_JSON_MEDIA_TYPE)) .build(), ) .awaitSuccess() track } } suspend fun removeLibManga(track: DomainTrack) { withIOContext { authClient.newCall( DELETE( "${BASE_URL}library-entries/${track.libraryId}", headers = headersOf("Content-Type", VND_API_JSON), ), ) .awaitSuccess() } } suspend fun search(query: String): List { return withIOContext { with(json) { authClient.newCall(GET(ALGOLIA_KEY_URL)) .awaitSuccess() .parseAs() .let { algoliaSearch(it.media.key, query) } } } } private suspend fun algoliaSearch(key: String, query: String): List { return withIOContext { val jsonObject = buildJsonObject { put("params", "query=${URLEncoder.encode(query, StandardCharsets.UTF_8.name())}$ALGOLIA_FILTER") } with(json) { client.newCall( POST( ALGOLIA_URL, headers = headersOf( "X-Algolia-Application-Id", ALGOLIA_APP_ID, "X-Algolia-API-Key", key, ), body = jsonObject.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .hits .filter { it.subtype != "novel" } .map { it.toTrack() } } } } suspend fun findLibManga(track: Track, userId: String): Track? { return withIOContext { val url = "${BASE_URL}library-entries".toUri().buildUpon() .encodedQuery("filter[manga_id]=${track.remote_id}&filter[user_id]=$userId") .appendQueryParameter("include", "manga") .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs() .let { if (it.data.isNotEmpty() && it.included.isNotEmpty()) { it.firstToTrack() } else { null } } } } } suspend fun getLibManga(track: Track): Track { return withIOContext { val url = "${BASE_URL}library-entries".toUri().buildUpon() .encodedQuery("filter[id]=${track.library_id}") .appendQueryParameter("include", "manga") .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs() .let { if (it.data.isNotEmpty() && it.included.isNotEmpty()) { it.firstToTrack() } else { throw Exception("Could not find manga") } } } } } suspend fun login(username: String, password: String): KitsuOAuth { return withIOContext { val formBody: RequestBody = FormBody.Builder() .add("username", username) .add("password", password) .add("grant_type", "password") .add("client_id", CLIENT_ID) .add("client_secret", CLIENT_SECRET) .build() with(json) { client.newCall(POST(LOGIN_URL, body = formBody)) .awaitSuccess() .parseAs() } } } suspend fun getCurrentUser(): String { return withIOContext { val url = "${BASE_URL}users".toUri().buildUpon() .encodedQuery("filter[self]=true") .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs() .data[0] .id } } } companion object { private const val CLIENT_ID = "dd031b32d2f56c990b1425efe6c42ad847e7fe3ab46bf1299f05ecd856bdb7dd" private const val CLIENT_SECRET = "54d7307928f63414defd96399fc31ba847961ceaecef3a5fd93144e960c0e151" private const val BASE_URL = "https://kitsu.app/api/edge/" private const val LOGIN_URL = "https://kitsu.app/api/oauth/token" private const val BASE_MANGA_URL = "https://kitsu.app/manga/" private const val ALGOLIA_KEY_URL = "https://kitsu.app/api/edge/algolia-keys/media/" private const val ALGOLIA_APP_ID = "AWQO5J657S" private const val ALGOLIA_URL = "https://$ALGOLIA_APP_ID-dsn.algolia.net/1/indexes/production_media/query/" private const val ALGOLIA_FILTER = "&facetFilters=%5B%22kind%3Amanga%22%5D&attributesToRetrieve=" + "%5B%22synopsis%22%2C%22averageRating%22%2C%22canonicalTitle%22%2C%22chapterCount%22%2C%22" + "posterImage%22%2C%22startDate%22%2C%22subtype%22%2C%22endDate%22%2C%20%22id%22%5D" private const val VND_API_JSON = "application/vnd.api+json" private val VND_JSON_MEDIA_TYPE = VND_API_JSON.toMediaType() fun mangaUrl(remoteId: Long): String { return BASE_MANGA_URL + remoteId } fun refreshTokenRequest(token: String) = POST( LOGIN_URL, body = FormBody.Builder() .add("grant_type", "refresh_token") .add("refresh_token", token) .add("client_id", CLIENT_ID) .add("client_secret", CLIENT_SECRET) .build(), ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuDateHelper.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu import java.text.SimpleDateFormat import java.util.Date import java.util.Locale object KitsuDateHelper { private const val PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" private val formatter = SimpleDateFormat(PATTERN, Locale.ENGLISH) fun convert(dateValue: Long): String? { if (dateValue == 0L) return null return formatter.format(Date(dateValue)) } fun parse(dateString: String?): Long { if (dateString == null) return 0L val dateValue = formatter.parse(dateString) return dateValue?.time ?: return 0 } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuOAuth import eu.kanade.tachiyomi.data.track.kitsu.dto.isExpired import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Response import uy.kohesive.injekt.injectLazy class KitsuInterceptor(private val kitsu: Kitsu) : Interceptor { private val json: Json by injectLazy() /** * OAuth object used for authenticated requests. */ private var oauth: KitsuOAuth? = kitsu.restoreToken() override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() val currAuth = oauth ?: throw Exception("Not authenticated with Kitsu") val refreshToken = currAuth.refreshToken!! // Refresh access token if expired. if (currAuth.isExpired()) { val response = chain.proceed(KitsuApi.refreshTokenRequest(refreshToken)) if (response.isSuccessful) { newAuth(json.decodeFromString(response.body.string())) } else { response.close() } } // Add the authorization header to the original request. val authRequest = originalRequest.newBuilder() .addHeader("Authorization", "Bearer ${oauth!!.accessToken}") .header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .header("Accept", "application/vnd.api+json") .header("Content-Type", "application/vnd.api+json") .build() return chain.proceed(authRequest) } fun newAuth(oauth: KitsuOAuth?) { this.oauth = oauth kitsu.saveToken(oauth) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuUtils.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu import eu.kanade.tachiyomi.data.database.models.Track fun Track.toApiStatus() = when (status) { Kitsu.READING -> "current" Kitsu.COMPLETED -> "completed" Kitsu.ON_HOLD -> "on_hold" Kitsu.DROPPED -> "dropped" Kitsu.PLAN_TO_READ -> "planned" else -> throw Exception("Unknown status") } fun Track.toApiScore(): String? { return if (score > 0) (score * 2).toInt().toString() else null } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuAddManga.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu.dto import kotlinx.serialization.Serializable @Serializable data class KitsuAddMangaResult( val data: KitsuAddMangaItem, ) @Serializable data class KitsuAddMangaItem( val id: Long, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuListSearch.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu.dto import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.kitsu.Kitsu import eu.kanade.tachiyomi.data.track.kitsu.KitsuApi import eu.kanade.tachiyomi.data.track.kitsu.KitsuDateHelper import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.serialization.Serializable @Serializable data class KitsuListSearchResult( val data: List, val included: List = emptyList(), ) { fun firstToTrack(): TrackSearch { require(data.isNotEmpty()) { "Missing User data from Kitsu" } require(included.isNotEmpty()) { "Missing Manga data from Kitsu" } val userData = data[0] val userDataAttrs = userData.attributes val manga = included[0].attributes return TrackSearch.create(TrackerManager.KITSU).apply { remote_id = included[0].id library_id = userData.id title = manga.canonicalTitle total_chapters = manga.chapterCount ?: 0 cover_url = manga.posterImage?.original ?: "" summary = manga.synopsis ?: "" tracking_url = KitsuApi.mangaUrl(remote_id) publishing_status = manga.status publishing_type = manga.mangaType ?: "" start_date = userDataAttrs.startedAt ?: "" started_reading_date = KitsuDateHelper.parse(userDataAttrs.startedAt) finished_reading_date = KitsuDateHelper.parse(userDataAttrs.finishedAt) status = when (userDataAttrs.status) { "current" -> Kitsu.READING "completed" -> Kitsu.COMPLETED "on_hold" -> Kitsu.ON_HOLD "dropped" -> Kitsu.DROPPED "planned" -> Kitsu.PLAN_TO_READ else -> throw Exception("Unknown status") } score = userDataAttrs.ratingTwenty?.let { it / 2.0 } ?: 0.0 last_chapter_read = userDataAttrs.progress.toDouble() private = userDataAttrs.private } } } @Serializable data class KitsuListSearchItemData( val id: Long, val attributes: KitsuListSearchItemDataAttributes, ) @Serializable data class KitsuListSearchItemDataAttributes( val status: String, val startedAt: String?, val finishedAt: String?, val ratingTwenty: Int?, val progress: Int, val private: Boolean, ) @Serializable data class KitsuListSearchItemIncluded( val id: Long, val attributes: KitsuListSearchItemIncludedAttributes, ) @Serializable data class KitsuListSearchItemIncludedAttributes( val canonicalTitle: String, val chapterCount: Long?, val mangaType: String?, val posterImage: KitsuSearchItemCover?, val synopsis: String?, val startDate: String?, val status: String, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuOAuth.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class KitsuOAuth( @SerialName("access_token") val accessToken: String, @SerialName("token_type") val tokenType: String, @SerialName("created_at") val createdAt: Long, @SerialName("expires_in") val expiresIn: Long, @SerialName("refresh_token") val refreshToken: String?, ) fun KitsuOAuth.isExpired() = (System.currentTimeMillis() / 1000) > (createdAt + expiresIn - 3600) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuSearch.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu.dto import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.kitsu.KitsuApi import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.serialization.Serializable import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @Serializable data class KitsuSearchResult( val media: KitsuSearchResultData, ) @Serializable data class KitsuSearchResultData( val key: String, ) @Serializable data class KitsuAlgoliaSearchResult( val hits: List, ) @Serializable data class KitsuAlgoliaSearchItem( val id: Long, val canonicalTitle: String, val chapterCount: Long?, val subtype: String?, val posterImage: KitsuSearchItemCover?, val synopsis: String?, val averageRating: Double?, val startDate: Long?, val endDate: Long?, ) { fun toTrack(): TrackSearch { return TrackSearch.create(TrackerManager.KITSU).apply { remote_id = this@KitsuAlgoliaSearchItem.id title = canonicalTitle total_chapters = chapterCount ?: 0 cover_url = posterImage?.original ?: "" summary = synopsis ?: "" tracking_url = KitsuApi.mangaUrl(remote_id) score = averageRating ?: -1.0 publishing_status = if (endDate == null) "Publishing" else "Finished" publishing_type = subtype ?: "" start_date = startDate?.let { val outputDf = SimpleDateFormat("yyyy-MM-dd", Locale.US) outputDf.format(Date(it * 1000)) } ?: "" } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuSearchItemCover.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu.dto import kotlinx.serialization.Serializable @Serializable data class KitsuSearchItemCover( val original: String?, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuUser.kt ================================================ package eu.kanade.tachiyomi.data.track.kitsu.dto import kotlinx.serialization.Serializable @Serializable data class KitsuCurrentUserResult( val data: List, ) @Serializable data class KitsuUser( val id: String, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/komga/Komga.kt ================================================ package eu.kanade.tachiyomi.data.track.komga import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.source.Source import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import okhttp3.Dns import okhttp3.OkHttpClient import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.domain.track.model.Track as DomainTrack class Komga(id: Long) : BaseTracker(id, "Komga"), EnhancedTracker { companion object { const val UNREAD = 1L const val READING = 2L const val COMPLETED = 3L } override val client: OkHttpClient = networkService.client.newBuilder() .dns(Dns.SYSTEM) // don't use DNS over HTTPS as it breaks IP addressing .build() val api by lazy { KomgaApi(id, client) } override fun getLogo() = R.drawable.brand_komga override fun getStatusList(): List = listOf(UNREAD, READING, COMPLETED) override fun getStatus(status: Long): StringResource? = when (status) { UNREAD -> MR.strings.unread READING -> MR.strings.reading COMPLETED -> MR.strings.completed else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = -1 override fun getCompletionStatus(): Long = COMPLETED override fun getScoreList(): ImmutableList = persistentListOf() override fun displayScore(track: DomainTrack): String = "" override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED } else { track.status = READING } } } return api.updateProgress(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { return track } override suspend fun search(query: String): List { TODO("Not yet implemented: search") } override suspend fun refresh(track: Track): Track { val remoteTrack = api.getTrackSearch(track.tracking_url) track.copyPersonalFrom(remoteTrack) track.total_chapters = remoteTrack.total_chapters return track } override suspend fun login(username: String, password: String) { saveCredentials("user", "pass") } // [Tracker].isLogged works by checking that credentials are saved. // By saving dummy, unused credentials, we can activate the tracker simply by login/logout override fun loginNoop() { saveCredentials("user", "pass") } override fun getAcceptedSources() = listOf("eu.kanade.tachiyomi.extension.all.komga.Komga") override suspend fun match(manga: Manga): TrackSearch? = try { api.getTrackSearch(manga.url) } catch (e: Exception) { null } override fun isTrackFrom(track: DomainTrack, manga: Manga, source: Source?): Boolean = track.remoteUrl == manga.url && source?.let { accept(it) } == true override fun migrateTrack(track: DomainTrack, manga: Manga, newSource: Source): DomainTrack? = if (accept(newSource)) { track.copy(remoteUrl = manga.url) } else { null } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/komga/KomgaApi.kt ================================================ package eu.kanade.tachiyomi.data.track.komga import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import logcat.LogPriority import okhttp3.Headers import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.injectLazy private const val READLIST_API = "/api/v1/readlists" class KomgaApi( private val trackId: Long, private val client: OkHttpClient, ) { private val headers: Headers by lazy { Headers.Builder() .add("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .build() } private val json: Json by injectLazy() suspend fun getTrackSearch(url: String): TrackSearch = withIOContext { try { val track = with(json) { if (url.contains(READLIST_API)) { client.newCall(GET(url, headers)) .awaitSuccess() .parseAs() .toTrack() } else { client.newCall(GET(url, headers)) .awaitSuccess() .parseAs() .toTrack() } } val progress = client .newCall( GET("${url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi", headers), ) .awaitSuccess().let { with(json) { if (url.contains("/api/v1/series/")) { it.parseAs() } else { it.parseAs().toV2() } } } track.apply { cover_url = "$url/thumbnail" tracking_url = url total_chapters = progress.maxNumberSort.toLong() status = when (progress.booksCount) { progress.booksUnreadCount -> Komga.UNREAD progress.booksReadCount -> Komga.COMPLETED else -> Komga.READING } last_chapter_read = progress.lastReadContinuousNumberSort } } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Could not get item: $url" } throw e } } suspend fun updateProgress(track: Track): Track { val payload = if (track.tracking_url.contains("/api/v1/series/")) { json.encodeToString(ReadProgressUpdateV2Dto(track.last_chapter_read)) } else { json.encodeToString(ReadProgressUpdateDto(track.last_chapter_read.toInt())) } client.newCall( Request.Builder() .url("${track.tracking_url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi") .headers(headers) .put(payload.toRequestBody("application/json".toMediaType())) .build(), ) .awaitSuccess() return getTrackSearch(track.tracking_url) } private fun SeriesDto.toTrack(): TrackSearch = TrackSearch.create(trackId).also { it.title = metadata.title it.summary = metadata.summary it.publishing_status = metadata.status } private fun ReadListDto.toTrack(): TrackSearch = TrackSearch.create(trackId).also { it.title = name } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/komga/KomgaModels.kt ================================================ package eu.kanade.tachiyomi.data.track.komga import kotlinx.serialization.Serializable @Serializable data class SeriesDto( val id: String, val libraryId: String, val name: String, val created: String?, val lastModified: String?, val fileLastModified: String, val booksCount: Int, val booksReadCount: Int, val booksUnreadCount: Int, val booksInProgressCount: Int, val metadata: SeriesMetadataDto, val booksMetadata: BookMetadataAggregationDto, ) @Serializable data class SeriesMetadataDto( val status: String, val created: String?, val lastModified: String?, val title: String, val titleSort: String, val summary: String, val summaryLock: Boolean, val readingDirection: String, val readingDirectionLock: Boolean, val publisher: String, val publisherLock: Boolean, val ageRating: Int?, val ageRatingLock: Boolean, val language: String, val languageLock: Boolean, val genres: Set, val genresLock: Boolean, val tags: Set, val tagsLock: Boolean, ) @Serializable data class BookMetadataAggregationDto( val authors: List = emptyList(), val releaseDate: String?, val summary: String, val summaryNumber: String, val created: String, val lastModified: String, ) @Serializable data class AuthorDto( val name: String, val role: String, ) @Serializable data class ReadProgressUpdateDto( val lastBookRead: Int, ) @Serializable data class ReadProgressUpdateV2Dto( val lastBookNumberSortRead: Double, ) @Serializable data class ReadListDto( val id: String, val name: String, val bookIds: List, val createdDate: String, val lastModifiedDate: String, val filtered: Boolean, ) @Serializable data class ReadProgressDto( val booksCount: Int, val booksReadCount: Int, val booksUnreadCount: Int, val booksInProgressCount: Int, val lastReadContinuousIndex: Int, ) { fun toV2() = ReadProgressV2Dto( booksCount, booksReadCount, booksUnreadCount, booksInProgressCount, lastReadContinuousIndex.toDouble(), booksCount.toFloat(), ) } @Serializable data class ReadProgressV2Dto( val booksCount: Int, val booksReadCount: Int, val booksUnreadCount: Int, val booksInProgressCount: Int, val lastReadContinuousNumberSort: Double, val maxNumberSort: Float, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUListItem import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURating import eu.kanade.tachiyomi.data.track.mangaupdates.dto.copyTo import eu.kanade.tachiyomi.data.track.mangaupdates.dto.toTrackSearch import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import tachiyomi.i18n.MR import tachiyomi.domain.track.model.Track as DomainTrack class MangaUpdates(id: Long) : BaseTracker(id, "MangaUpdates"), DeletableTracker { companion object { const val READING_LIST = 0L const val WISH_LIST = 1L const val COMPLETE_LIST = 2L const val UNFINISHED_LIST = 3L const val ON_HOLD_LIST = 4L private val SCORE_LIST = (0..10) .flatMap { decimal -> when (decimal) { 0 -> listOf("-") 10 -> listOf("10.0") else -> (0..9).map { fraction -> "$decimal.$fraction" } } } .toImmutableList() } private val interceptor by lazy { MangaUpdatesInterceptor(this) } private val api by lazy { MangaUpdatesApi(interceptor, client) } override fun getLogo(): Int = R.drawable.brand_mangaupdates override fun getStatusList(): List { return listOf(READING_LIST, COMPLETE_LIST, ON_HOLD_LIST, UNFINISHED_LIST, WISH_LIST) } override fun getStatus(status: Long): StringResource? = when (status) { READING_LIST -> MR.strings.reading_list WISH_LIST -> MR.strings.wish_list COMPLETE_LIST -> MR.strings.complete_list ON_HOLD_LIST -> MR.strings.on_hold_list UNFINISHED_LIST -> MR.strings.unfinished_list else -> null } override fun getReadingStatus(): Long = READING_LIST override fun getRereadingStatus(): Long = -1 override fun getCompletionStatus(): Long = COMPLETE_LIST override fun getScoreList(): ImmutableList = SCORE_LIST override fun indexToScore(index: Int): Double = if (index == 0) 0.0 else SCORE_LIST[index].toDouble() override fun displayScore(track: DomainTrack): String = track.score.toString() override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETE_LIST && didReadChapter) { track.status = READING_LIST } api.updateSeriesListItem(track) return track } override suspend fun delete(track: DomainTrack) { api.deleteSeriesFromList(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { return try { val (series, rating) = api.getSeriesListItem(track) track.copyFrom(series, rating) } catch (e: Exception) { track.score = 0.0 api.addSeriesToList(track, hasReadChapters) track } } override suspend fun search(query: String): List { return api.search(query) .map { it.toTrackSearch(id) } } override suspend fun refresh(track: Track): Track { val (series, rating) = api.getSeriesListItem(track) return track.copyFrom(series, rating) } private fun Track.copyFrom(item: MUListItem, rating: MURating?): Track = apply { item.copyTo(this) score = rating?.rating ?: 0.0 } override suspend fun login(username: String, password: String) { val authenticated = api.authenticate(username, password) ?: throw Throwable("Unable to login") saveCredentials(authenticated.uid.toString(), authenticated.sessionToken) interceptor.newAuth(authenticated.sessionToken) } fun restoreSession(): String? { return trackPreferences.trackPassword(this).get().ifBlank { null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdatesApi.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates.Companion.READING_LIST import eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates.Companion.WISH_LIST import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUContext import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUListItem import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MULoginResponse import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURating import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURecord import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUSearchResult import eu.kanade.tachiyomi.network.DELETE import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.PUT import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import kotlinx.serialization.json.add import kotlinx.serialization.json.addJsonObject import kotlinx.serialization.json.buildJsonArray import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.RequestBody.Companion.toRequestBody import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack class MangaUpdatesApi( interceptor: MangaUpdatesInterceptor, private val client: OkHttpClient, ) { private val json: Json by injectLazy() private val authClient by lazy { client.newBuilder() .addInterceptor(interceptor) .build() } suspend fun getSeriesListItem(track: Track): Pair { val listItem = with(json) { authClient.newCall(GET("$BASE_URL/v1/lists/series/${track.remote_id}")) .awaitSuccess() .parseAs() } val rating = getSeriesRating(track) return listItem to rating } suspend fun addSeriesToList(track: Track, hasReadChapters: Boolean) { val status = if (hasReadChapters) READING_LIST else WISH_LIST val body = buildJsonArray { addJsonObject { putJsonObject("series") { put("id", track.remote_id) } put("list_id", status) } } authClient.newCall( POST( url = "$BASE_URL/v1/lists/series", body = body.toString().toRequestBody(CONTENT_TYPE), ), ) .awaitSuccess() .let { if (it.code == 200) { track.status = status track.last_chapter_read = 1.0 } } } suspend fun updateSeriesListItem(track: Track) { val body = buildJsonArray { addJsonObject { putJsonObject("series") { put("id", track.remote_id) } put("list_id", track.status) putJsonObject("status") { put("chapter", track.last_chapter_read.toInt()) } } } authClient.newCall( POST( url = "$BASE_URL/v1/lists/series/update", body = body.toString().toRequestBody(CONTENT_TYPE), ), ) .awaitSuccess() updateSeriesRating(track) } suspend fun deleteSeriesFromList(track: DomainTrack) { val body = buildJsonArray { add(track.remoteId) } authClient.newCall( POST( url = "$BASE_URL/v1/lists/series/delete", body = body.toString().toRequestBody(CONTENT_TYPE), ), ) .awaitSuccess() } private suspend fun getSeriesRating(track: Track): MURating? { return try { with(json) { authClient.newCall(GET("$BASE_URL/v1/series/${track.remote_id}/rating")) .awaitSuccess() .parseAs() } } catch (e: Exception) { null } } private suspend fun updateSeriesRating(track: Track) { if (track.score < 0.0) return if (track.score != 0.0) { val body = buildJsonObject { put("rating", track.score) } authClient.newCall( PUT( url = "$BASE_URL/v1/series/${track.remote_id}/rating", body = body.toString().toRequestBody(CONTENT_TYPE), ), ) .awaitSuccess() } else { authClient.newCall( DELETE(url = "$BASE_URL/v1/series/${track.remote_id}/rating"), ) .awaitSuccess() } } suspend fun search(query: String): List { val body = buildJsonObject { put("search", query) put( "filter_types", buildJsonArray { add("drama cd") add("novel") }, ) } return with(json) { client.newCall( POST( url = "$BASE_URL/v1/series/search", body = body.toString().toRequestBody(CONTENT_TYPE), ), ) .awaitSuccess() .parseAs() .results .map { it.record } } } suspend fun authenticate(username: String, password: String): MUContext? { val body = buildJsonObject { put("username", username) put("password", password) } return with(json) { client.newCall( PUT( url = "$BASE_URL/v1/account/login", body = body.toString().toRequestBody(CONTENT_TYPE), ), ) .awaitSuccess() .parseAs() .context } } companion object { private const val BASE_URL = "https://api.mangaupdates.com" private val CONTENT_TYPE = "application/json".toMediaType() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdatesInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates import eu.kanade.tachiyomi.BuildConfig import okhttp3.Interceptor import okhttp3.Response import java.io.IOException class MangaUpdatesInterceptor( mangaUpdates: MangaUpdates, ) : Interceptor { private var token: String? = mangaUpdates.restoreSession() override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() val token = token ?: throw IOException("Not authenticated with MangaUpdates") // Add the authorization header to the original request. val authRequest = originalRequest.newBuilder() .addHeader("Authorization", "Bearer $token") .header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .build() return chain.proceed(authRequest) } fun newAuth(token: String?) { this.token = token } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUContext.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class MUContext( @SerialName("session_token") val sessionToken: String, val uid: Long, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUImage.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.Serializable @Serializable data class MUImage( val url: MUUrl? = null, val height: Int? = null, val width: Int? = null, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUListItem.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates.Companion.READING_LIST import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class MUListItem( val series: MUSeries? = null, @SerialName("list_id") val listId: Long? = null, val status: MUStatus? = null, val priority: Int? = null, ) fun MUListItem.copyTo(track: Track): Track { return track.apply { this.status = listId ?: READING_LIST this.last_chapter_read = this@copyTo.status?.chapter?.toDouble() ?: 0.0 } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MULoginResponse.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.Serializable @Serializable data class MULoginResponse( val context: MUContext, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURating.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import eu.kanade.tachiyomi.data.database.models.Track import kotlinx.serialization.Serializable @Serializable data class MURating( val rating: Double? = null, ) fun MURating.copyTo(track: Track): Track { return track.apply { this.score = rating ?: 0.0 } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURecord.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.util.lang.htmlDecode import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class MURecord( @SerialName("series_id") val seriesId: Long? = null, val title: String? = null, val url: String? = null, val description: String? = null, val image: MUImage? = null, val type: String? = null, val year: String? = null, @SerialName("bayesian_rating") val bayesianRating: Double? = null, @SerialName("rating_votes") val ratingVotes: Int? = null, @SerialName("latest_chapter") val latestChapter: Int? = null, ) fun MURecord.toTrackSearch(id: Long): TrackSearch { return TrackSearch.create(id).apply { remote_id = this@toTrackSearch.seriesId ?: 0L title = this@toTrackSearch.title?.htmlDecode() ?: "" total_chapters = 0 cover_url = this@toTrackSearch.image?.url?.original ?: "" summary = this@toTrackSearch.description?.htmlDecode() ?: "" tracking_url = this@toTrackSearch.url ?: "" publishing_status = "" publishing_type = this@toTrackSearch.type.toString() start_date = this@toTrackSearch.year.toString() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUSearch.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.Serializable @Serializable data class MUSearchResult( val results: List, ) @Serializable data class MUSearchResultItem( val record: MURecord, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUSeries.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.Serializable @Serializable data class MUSeries( val id: Long? = null, val title: String? = null, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUStatus.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.Serializable @Serializable data class MUStatus( val volume: Int? = null, val chapter: Int? = null, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUUrl.kt ================================================ package eu.kanade.tachiyomi.data.track.mangaupdates.dto import kotlinx.serialization.Serializable @Serializable data class MUUrl( val original: String? = null, val thumb: String? = null, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/model/TrackSearch.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.data.track.model import eu.kanade.tachiyomi.data.database.models.Track class TrackSearch : Track { override var id: Long? = null override var manga_id: Long = 0 override var tracker_id: Long = 0 override var remote_id: Long = 0 override var library_id: Long? = null override lateinit var title: String override var last_chapter_read: Double = 0.0 override var total_chapters: Long = 0 override var score: Double = -1.0 override var status: Long = 0 override var started_reading_date: Long = 0 override var finished_reading_date: Long = 0 override var private: Boolean = false override lateinit var tracking_url: String var authors: List = emptyList() var artists: List = emptyList() var cover_url: String = "" var summary: String = "" var publishing_status: String = "" var publishing_type: String = "" var start_date: String = "" override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as TrackSearch if (manga_id != other.manga_id) return false if (tracker_id != other.tracker_id) return false if (remote_id != other.remote_id) return false return true } override fun hashCode(): Int { var result = manga_id.hashCode() result = 31 * result + tracker_id.hashCode() result = 31 * result + remote_id.hashCode() return result } companion object { fun create(serviceId: Long): TrackSearch = TrackSearch().apply { tracker_id = serviceId } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALOAuth import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.json.Json import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack class MyAnimeList(id: Long) : BaseTracker(id, "MyAnimeList"), DeletableTracker { companion object { const val READING = 1L const val COMPLETED = 2L const val ON_HOLD = 3L const val DROPPED = 4L const val PLAN_TO_READ = 6L const val REREADING = 7L private const val SEARCH_ID_PREFIX = "id:" private const val SEARCH_LIST_PREFIX = "my:" private val SCORE_LIST = IntRange(0, 10) .map(Int::toString) .toImmutableList() } private val json: Json by injectLazy() private val interceptor by lazy { MyAnimeListInterceptor(this) } private val api by lazy { MyAnimeListApi(id, client, interceptor) } override val supportsReadingDates: Boolean = true override fun getLogo() = R.drawable.brand_myanimelist override fun getStatusList(): List { return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING) } override fun getStatus(status: Long): StringResource? = when (status) { READING -> MR.strings.reading PLAN_TO_READ -> MR.strings.plan_to_read COMPLETED -> MR.strings.completed ON_HOLD -> MR.strings.on_hold DROPPED -> MR.strings.dropped REREADING -> MR.strings.repeating else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = REREADING override fun getCompletionStatus(): Long = COMPLETED override fun getScoreList(): ImmutableList = SCORE_LIST override fun displayScore(track: DomainTrack): String { return track.score.toInt().toString() } private suspend fun add(track: Track): Track { return api.updateItem(track) } override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED track.finished_reading_date = System.currentTimeMillis() } else if (track.status != REREADING) { track.status = READING if (track.last_chapter_read == 1.0) { track.started_reading_date = System.currentTimeMillis() } } } } return api.updateItem(track) } override suspend fun delete(track: DomainTrack) { api.deleteItem(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { val remoteTrack = api.findListItem(track) return if (remoteTrack != null) { track.copyPersonalFrom(remoteTrack) track.remote_id = remoteTrack.remote_id if (track.status != COMPLETED) { val isRereading = track.status == REREADING track.status = if (!isRereading && hasReadChapters) READING else track.status } update(track) } else { // Set default fields if it's not found in the list track.status = if (hasReadChapters) READING else PLAN_TO_READ track.score = 0.0 add(track) } } override suspend fun search(query: String): List { if (query.startsWith(SEARCH_ID_PREFIX)) { query.substringAfter(SEARCH_ID_PREFIX).toIntOrNull()?.let { id -> return listOf(api.getMangaDetails(id)) } } if (query.startsWith(SEARCH_LIST_PREFIX)) { query.substringAfter(SEARCH_LIST_PREFIX).let { title -> return api.findListItems(title) } } return api.search(query) } override suspend fun refresh(track: Track): Track { return api.findListItem(track) ?: add(track) } override suspend fun login(username: String, password: String) = login(password) suspend fun login(authCode: String) { try { val oauth = api.getAccessToken(authCode) interceptor.setAuth(oauth) val username = api.getCurrentUser() saveCredentials(username, oauth.accessToken) } catch (e: Throwable) { logout() } } override fun logout() { super.logout() trackPreferences.trackToken(this).delete() interceptor.setAuth(null) } fun getIfAuthExpired(): Boolean { return trackPreferences.trackAuthExpired(this).get() } fun setAuthExpired() { trackPreferences.trackAuthExpired(this).set(true) } fun saveOAuth(oAuth: MALOAuth?) { trackPreferences.trackToken(this).set(json.encodeToString(oAuth)) } fun loadOAuth(): MALOAuth? { return try { json.decodeFromString(trackPreferences.trackToken(this).get()) } catch (e: Exception) { null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALListItem import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALListItemStatus import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALManga import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALOAuth import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALSearchResult import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALUser import eu.kanade.tachiyomi.network.DELETE import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import eu.kanade.tachiyomi.util.PkceUtil import kotlinx.serialization.json.Json import okhttp3.FormBody import okhttp3.Headers import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody import tachiyomi.core.common.util.lang.withIOContext import uy.kohesive.injekt.injectLazy import java.text.SimpleDateFormat import java.util.Locale import tachiyomi.domain.track.model.Track as DomainTrack class MyAnimeListApi( private val trackId: Long, private val client: OkHttpClient, interceptor: MyAnimeListInterceptor, ) { private val json: Json by injectLazy() private val authClient = client.newBuilder().addInterceptor(interceptor).build() suspend fun getAccessToken(authCode: String): MALOAuth { return withIOContext { val formBody: RequestBody = FormBody.Builder() .add("client_id", CLIENT_ID) .add("code", authCode) .add("code_verifier", codeVerifier) .add("grant_type", "authorization_code") .build() with(json) { client.newCall(POST("$BASE_OAUTH_URL/token", body = formBody)) .awaitSuccess() .parseAs() } } } suspend fun getCurrentUser(): String { return withIOContext { val request = Request.Builder() .url("$BASE_API_URL/users/@me") .get() .build() with(json) { authClient.newCall(request) .awaitSuccess() .parseAs() .name } } } suspend fun search(query: String): List { return withIOContext { val url = "$BASE_API_URL/manga".toUri().buildUpon() // MAL API throws a 400 when the query is over 64 characters... .appendQueryParameter("q", query.take(64)) .appendQueryParameter("nsfw", "true") .appendQueryParameter("fields", SEARCH_FIELDS) .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs() .data .filter { !(it.node.mediaType.contains("novel")) } .map { parseSearchItem(it.node) } } } } suspend fun getMangaDetails(id: Int): TrackSearch { return withIOContext { val url = "$BASE_API_URL/manga".toUri().buildUpon() .appendPath(id.toString()) .appendQueryParameter("fields", SEARCH_FIELDS) .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs() .let { parseSearchItem(it) } } } } suspend fun updateItem(track: Track): Track { return withIOContext { val formBodyBuilder = FormBody.Builder() .add("status", track.toMyAnimeListStatus() ?: "reading") .add("is_rereading", (track.status == MyAnimeList.REREADING).toString()) .add("score", track.score.toString()) .add("num_chapters_read", track.last_chapter_read.toInt().toString()) convertToIsoDate(track.started_reading_date)?.let { formBodyBuilder.add("start_date", it) } convertToIsoDate(track.finished_reading_date)?.let { formBodyBuilder.add("finish_date", it) } val request = Request.Builder() .url(mangaUrl(track.remote_id).toString()) .put(formBodyBuilder.build()) .build() with(json) { authClient.newCall(request) .awaitSuccess() .parseAs() .let { parseMangaItem(it, track) } } } } suspend fun deleteItem(track: DomainTrack) { withIOContext { authClient .newCall(DELETE(mangaUrl(track.remoteId).toString())) .awaitSuccess() } } suspend fun findListItem(track: Track): Track? { return withIOContext { val uri = "$BASE_API_URL/manga".toUri().buildUpon() .appendPath(track.remote_id.toString()) .appendQueryParameter("fields", "num_chapters,my_list_status{start_date,finish_date}") .build() with(json) { authClient.newCall(GET(uri.toString())) .awaitSuccess() .parseAs() .let { item -> track.total_chapters = item.numChapters item.myListStatus?.let { parseMangaItem(it, track) } } } } } suspend fun findListItems(query: String, offset: Int = 0): List { return withIOContext { val myListSearchResult = getListPage(offset) val matches = myListSearchResult.data .filter { it.node.title.contains(query, ignoreCase = true) } .map { parseSearchItem(it.node) } // Check next page if there's more if (!myListSearchResult.paging.next.isNullOrBlank()) { matches + findListItems(query, offset + LIST_PAGINATION_AMOUNT) } else { matches } } } private suspend fun getListPage(offset: Int): MALSearchResult { return withIOContext { val urlBuilder = "$BASE_API_URL/users/@me/mangalist".toUri().buildUpon() .appendQueryParameter("fields", SEARCH_FIELDS) .appendQueryParameter("limit", LIST_PAGINATION_AMOUNT.toString()) if (offset > 0) { urlBuilder.appendQueryParameter("offset", offset.toString()) } val request = Request.Builder() .url(urlBuilder.build().toString()) .get() .build() with(json) { authClient.newCall(request) .awaitSuccess() .parseAs() } } } private fun parseMangaItem(listStatus: MALListItemStatus, track: Track): Track { return track.apply { val isRereading = listStatus.isRereading status = if (isRereading) MyAnimeList.REREADING else getStatus(listStatus.status) last_chapter_read = listStatus.numChaptersRead score = listStatus.score.toDouble() listStatus.startDate?.let { started_reading_date = parseDate(it) } listStatus.finishDate?.let { finished_reading_date = parseDate(it) } } } private fun parseSearchItem(searchItem: MALManga): TrackSearch { return TrackSearch.create(trackId).apply { remote_id = searchItem.id title = searchItem.title summary = searchItem.synopsis total_chapters = searchItem.numChapters score = searchItem.mean cover_url = searchItem.covers?.large.orEmpty() tracking_url = "https://myanimelist.net/manga/$remote_id" publishing_status = searchItem.status.replace("_", " ") publishing_type = searchItem.mediaType.replace("_", " ") start_date = searchItem.startDate ?: "" artists = searchItem.authors .filter { authorNode -> authorNode.role == "Art" } .mapNotNull { authorNode -> authorNode.node.getFullName() } authors = searchItem.authors // count all with "Story" or "Story & Art" as authors, like is done for library entries .filter { authorNode -> authorNode.role.contains("Story") } .mapNotNull { authorNode -> authorNode.node.getFullName() } } } private fun parseDate(isoDate: String): Long { return SimpleDateFormat("yyyy-MM-dd", Locale.US).parse(isoDate)?.time ?: 0L } private fun convertToIsoDate(epochTime: Long): String? { if (epochTime == 0L) { return "" } return try { val outputDf = SimpleDateFormat("yyyy-MM-dd", Locale.US) outputDf.format(epochTime) } catch (_: Exception) { null } } companion object { private const val CLIENT_ID = "c46c9e24640a64dad5be5ca7a1a53a0f" private const val BASE_OAUTH_URL = "https://myanimelist.net/v1/oauth2" private const val BASE_API_URL = "https://api.myanimelist.net/v2" private const val SEARCH_FIELDS = "id,title,synopsis,num_chapters,mean,main_picture,status,media_type,start_date,authors{first_name,last_name}" private const val LIST_PAGINATION_AMOUNT = 250 private var codeVerifier: String = "" fun authUrl(): Uri = "$BASE_OAUTH_URL/authorize".toUri().buildUpon() .appendQueryParameter("client_id", CLIENT_ID) .appendQueryParameter("code_challenge", getPkceChallengeCode()) .appendQueryParameter("response_type", "code") .build() fun mangaUrl(id: Long): Uri = "$BASE_API_URL/manga".toUri().buildUpon() .appendPath(id.toString()) .appendPath("my_list_status") .build() fun refreshTokenRequest(oauth: MALOAuth): Request { val formBody: RequestBody = FormBody.Builder() .add("client_id", CLIENT_ID) .add("refresh_token", oauth.refreshToken) .add("grant_type", "refresh_token") .build() // Add the Authorization header manually as this particular // request is called by the interceptor itself so it doesn't reach // the part where the token is added automatically. val headers = Headers.Builder() .add("Authorization", "Bearer ${oauth.accessToken}") .build() return POST("$BASE_OAUTH_URL/token", body = formBody, headers = headers) } private fun getPkceChallengeCode(): String { codeVerifier = PkceUtil.generateCodeVerifier() return codeVerifier } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist import eu.kanade.tachiyomi.data.track.myanimelist.dto.MALOAuth import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Response import uy.kohesive.injekt.injectLazy import java.io.IOException class MyAnimeListInterceptor(private val myanimelist: MyAnimeList) : Interceptor { private val json: Json by injectLazy() private var oauth: MALOAuth? = myanimelist.loadOAuth() private val tokenExpired get() = myanimelist.getIfAuthExpired() override fun intercept(chain: Interceptor.Chain): Response { if (tokenExpired) { throw MALTokenExpired() } val originalRequest = chain.request() if (oauth?.isExpired() == true) { refreshToken(chain) } if (oauth == null) { throw IOException("MAL: User is not authenticated") } // Add the authorization header to the original request val authRequest = originalRequest.newBuilder() .addHeader("Authorization", "Bearer ${oauth!!.accessToken}") // TODO(antsy): Add back custom user agent when they stop blocking us for no apparent reason // .header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .build() return chain.proceed(authRequest) } /** * Called when the user authenticates with MyAnimeList for the first time. Sets the refresh token * and the oauth object. */ fun setAuth(oauth: MALOAuth?) { this.oauth = oauth myanimelist.saveOAuth(oauth) } private fun refreshToken(chain: Interceptor.Chain): MALOAuth = synchronized(this) { if (tokenExpired) throw MALTokenExpired() oauth?.takeUnless { it.isExpired() }?.let { return@synchronized it } val response = try { chain.proceed(MyAnimeListApi.refreshTokenRequest(oauth!!)) } catch (_: Throwable) { throw MALTokenRefreshFailed() } if (response.code == 401) { myanimelist.setAuthExpired() throw MALTokenExpired() } return runCatching { if (response.isSuccessful) { with(json) { response.parseAs() } } else { response.close() null } } .getOrNull() ?.also { this.oauth = it myanimelist.saveOAuth(it) } ?: throw MALTokenRefreshFailed() } } class MALTokenRefreshFailed : IOException("MAL: Failed to refresh account token") class MALTokenExpired : IOException("MAL: Login has expired") ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListUtils.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist import eu.kanade.tachiyomi.data.database.models.Track fun Track.toMyAnimeListStatus() = when (status) { MyAnimeList.READING -> "reading" MyAnimeList.COMPLETED -> "completed" MyAnimeList.ON_HOLD -> "on_hold" MyAnimeList.DROPPED -> "dropped" MyAnimeList.PLAN_TO_READ -> "plan_to_read" MyAnimeList.REREADING -> "reading" else -> null } fun getStatus(status: String?) = when (status) { "reading" -> MyAnimeList.READING "completed" -> MyAnimeList.COMPLETED "on_hold" -> MyAnimeList.ON_HOLD "dropped" -> MyAnimeList.DROPPED "plan_to_read" -> MyAnimeList.PLAN_TO_READ else -> MyAnimeList.READING } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALList.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class MALListItem( @SerialName("num_chapters") val numChapters: Long, @SerialName("my_list_status") val myListStatus: MALListItemStatus?, ) @Serializable data class MALListItemStatus( @SerialName("is_rereading") val isRereading: Boolean, val status: String, @SerialName("num_chapters_read") val numChaptersRead: Double, val score: Int, @SerialName("start_date") val startDate: String?, @SerialName("finish_date") val finishDate: String?, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALManga.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class MALManga( val id: Long, val title: String, val synopsis: String = "", @SerialName("num_chapters") val numChapters: Long, val mean: Double = -1.0, @SerialName("main_picture") val covers: MALMangaCovers?, val status: String, @SerialName("media_type") val mediaType: String, @SerialName("start_date") val startDate: String?, val authors: List = emptyList(), ) @Serializable data class MALAuthorNode( val node: MALAuthor, val role: String, ) @Serializable data class MALAuthor( val id: Int, @SerialName("first_name") val firstName: String, @SerialName("last_name") val lastName: String, ) { fun getFullName(): String? = "$firstName $lastName".trim().ifBlank { null } } @Serializable data class MALMangaCovers( val large: String = "", ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALOAuth.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist.dto import kotlinx.serialization.EncodeDefault import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class MALOAuth( @SerialName("token_type") val tokenType: String, @SerialName("refresh_token") val refreshToken: String, @SerialName("access_token") val accessToken: String, @SerialName("expires_in") val expiresIn: Long, @SerialName("created_at") @EncodeDefault val createdAt: Long = System.currentTimeMillis() / 1000, ) { // Assumes expired a minute earlier private val adjustedExpiresIn: Long = (expiresIn - 60) fun isExpired() = createdAt + adjustedExpiresIn < System.currentTimeMillis() / 1000 } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALSearch.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist.dto import kotlinx.serialization.Serializable @Serializable data class MALSearchResult( val data: List, val paging: MALSearchPaging, ) @Serializable data class MALSearchResultNode( val node: MALManga, ) @Serializable data class MALSearchPaging( val next: String?, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALUser.kt ================================================ package eu.kanade.tachiyomi.data.track.myanimelist.dto import kotlinx.serialization.Serializable @Serializable data class MALUser( val name: String, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/Shikimori.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.shikimori.dto.SMOAuth import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.json.Json import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack class Shikimori(id: Long) : BaseTracker(id, "Shikimori"), DeletableTracker { companion object { const val READING = 1L const val COMPLETED = 2L const val ON_HOLD = 3L const val DROPPED = 4L const val PLAN_TO_READ = 5L const val REREADING = 6L private val SCORE_LIST = IntRange(0, 10) .map(Int::toString) .toImmutableList() } private val json: Json by injectLazy() private val interceptor by lazy { ShikimoriInterceptor(this) } private val api by lazy { ShikimoriApi(id, client, interceptor) } override fun getScoreList(): ImmutableList = SCORE_LIST override fun displayScore(track: DomainTrack): String { return track.score.toInt().toString() } private suspend fun add(track: Track): Track { return api.addLibManga(track, getUsername()) } override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED } else if (track.status != REREADING) { track.status = READING } } } return api.updateLibManga(track, getUsername()) } override suspend fun delete(track: DomainTrack) { api.deleteLibManga(track) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { val remoteTrack = api.findLibManga(track, getUsername()) return if (remoteTrack != null) { track.copyPersonalFrom(remoteTrack) track.library_id = remoteTrack.library_id if (track.status != COMPLETED) { val isRereading = track.status == REREADING track.status = if (!isRereading && hasReadChapters) READING else track.status } update(track) } else { // Set default fields if it's not found in the list track.status = if (hasReadChapters) READING else PLAN_TO_READ track.score = 0.0 add(track) } } override suspend fun search(query: String): List { return api.search(query) } override suspend fun refresh(track: Track): Track { api.findLibManga(track, getUsername())?.let { remoteTrack -> track.library_id = remoteTrack.library_id track.copyPersonalFrom(remoteTrack) track.total_chapters = remoteTrack.total_chapters } ?: throw Exception("Could not find manga") return track } override fun getLogo() = R.drawable.brand_shikimori override fun getStatusList(): List { return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING) } override fun getStatus(status: Long): StringResource? = when (status) { READING -> MR.strings.reading PLAN_TO_READ -> MR.strings.plan_to_read COMPLETED -> MR.strings.completed ON_HOLD -> MR.strings.on_hold DROPPED -> MR.strings.dropped REREADING -> MR.strings.repeating else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = REREADING override fun getCompletionStatus(): Long = COMPLETED override suspend fun login(username: String, password: String) = login(password) suspend fun login(code: String) { try { val oauth = api.accessToken(code) interceptor.newAuth(oauth) val user = api.getCurrentUser() saveCredentials(user.toString(), oauth.accessToken) } catch (e: Throwable) { logout() } } fun saveToken(oauth: SMOAuth?) { trackPreferences.trackToken(this).set(json.encodeToString(oauth)) } fun restoreToken(): SMOAuth? { return try { json.decodeFromString(trackPreferences.trackToken(this).get()) } catch (e: Exception) { null } } override fun logout() { super.logout() trackPreferences.trackToken(this).delete() interceptor.newAuth(null) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori import android.net.Uri import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.shikimori.dto.SMAddMangaResponse import eu.kanade.tachiyomi.data.track.shikimori.dto.SMManga import eu.kanade.tachiyomi.data.track.shikimori.dto.SMOAuth import eu.kanade.tachiyomi.data.track.shikimori.dto.SMUser import eu.kanade.tachiyomi.data.track.shikimori.dto.SMUserListEntry import eu.kanade.tachiyomi.network.DELETE import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.jsonMime import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject import okhttp3.FormBody import okhttp3.OkHttpClient import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.model.Track as DomainTrack class ShikimoriApi( private val trackId: Long, private val client: OkHttpClient, interceptor: ShikimoriInterceptor, ) { private val json: Json by injectLazy() private val authClient = client.newBuilder().addInterceptor(interceptor).build() suspend fun addLibManga(track: Track, userId: String): Track { return withIOContext { with(json) { val payload = buildJsonObject { putJsonObject("user_rate") { put("user_id", userId) put("target_id", track.remote_id) put("target_type", "Manga") put("chapters", track.last_chapter_read.toInt()) put("score", track.score.toInt()) put("status", track.toShikimoriStatus()) } } authClient.newCall( POST( "$API_URL/v2/user_rates", body = payload.toString().toRequestBody(jsonMime), ), ).awaitSuccess() .parseAs() .let { // save id of the entry for possible future delete request track.library_id = it.id } track } } } suspend fun updateLibManga(track: Track, userId: String): Track = addLibManga(track, userId) suspend fun deleteLibManga(track: DomainTrack) { withIOContext { authClient .newCall(DELETE("$API_URL/v2/user_rates/${track.libraryId}")) .awaitSuccess() } } suspend fun search(search: String): List { return withIOContext { val url = "$API_URL/mangas".toUri().buildUpon() .appendQueryParameter("order", "popularity") .appendQueryParameter("search", search) .appendQueryParameter("limit", "20") .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs>() .map { it.toTrack(trackId) } } } } suspend fun findLibManga(track: Track, userId: String): Track? { return withIOContext { val urlMangas = "$API_URL/mangas".toUri().buildUpon() .appendPath(track.remote_id.toString()) .build() val manga = with(json) { authClient.newCall(GET(urlMangas.toString())) .awaitSuccess() .parseAs() } val url = "$API_URL/v2/user_rates".toUri().buildUpon() .appendQueryParameter("user_id", userId) .appendQueryParameter("target_id", track.remote_id.toString()) .appendQueryParameter("target_type", "Manga") .build() with(json) { authClient.newCall(GET(url.toString())) .awaitSuccess() .parseAs>() .let { entries -> if (entries.size > 1) { throw Exception("Too many manga in response") } entries .map { it.toTrack(trackId, manga) } .firstOrNull() } } } } suspend fun getCurrentUser(): Int { return with(json) { authClient.newCall(GET("$API_URL/users/whoami")) .awaitSuccess() .parseAs() .id } } suspend fun accessToken(code: String): SMOAuth { return withIOContext { with(json) { client.newCall(accessTokenRequest(code)) .awaitSuccess() .parseAs() } } } private fun accessTokenRequest(code: String) = POST( OAUTH_URL, body = FormBody.Builder() .add("grant_type", "authorization_code") .add("client_id", CLIENT_ID) .add("client_secret", CLIENT_SECRET) .add("code", code) .add("redirect_uri", REDIRECT_URL) .build(), ) companion object { const val BASE_URL = "https://shikimori.one" private const val API_URL = "$BASE_URL/api" private const val OAUTH_URL = "$BASE_URL/oauth/token" private const val LOGIN_URL = "$BASE_URL/oauth/authorize" private const val REDIRECT_URL = "mihon://shikimori-auth" private const val CLIENT_ID = "PB9dq8DzI405s7wdtwTdirYqHiyVMh--djnP7lBUqSA" private const val CLIENT_SECRET = "NajpZcOBKB9sJtgNcejf8OB9jBN1OYYoo-k4h2WWZus" fun authUrl(): Uri = LOGIN_URL.toUri().buildUpon() .appendQueryParameter("client_id", CLIENT_ID) .appendQueryParameter("redirect_uri", REDIRECT_URL) .appendQueryParameter("response_type", "code") .build() fun refreshTokenRequest(token: String) = POST( OAUTH_URL, body = FormBody.Builder() .add("grant_type", "refresh_token") .add("client_id", CLIENT_ID) .add("client_secret", CLIENT_SECRET) .add("refresh_token", token) .build(), ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.track.shikimori.dto.SMOAuth import eu.kanade.tachiyomi.data.track.shikimori.dto.isExpired import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Response import uy.kohesive.injekt.injectLazy class ShikimoriInterceptor(private val shikimori: Shikimori) : Interceptor { private val json: Json by injectLazy() /** * OAuth object used for authenticated requests. */ private var oauth: SMOAuth? = shikimori.restoreToken() override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() val currAuth = oauth ?: throw Exception("Not authenticated with Shikimori") val refreshToken = currAuth.refreshToken!! // Refresh access token if expired. if (currAuth.isExpired()) { val response = chain.proceed(ShikimoriApi.refreshTokenRequest(refreshToken)) if (response.isSuccessful) { newAuth(json.decodeFromString(response.body.string())) } else { response.close() } } // Add the authorization header to the original request. val authRequest = originalRequest.newBuilder() .addHeader("Authorization", "Bearer ${oauth!!.accessToken}") .header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})") .build() return chain.proceed(authRequest) } fun newAuth(oauth: SMOAuth?) { this.oauth = oauth shikimori.saveToken(oauth) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriUtils.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori import eu.kanade.tachiyomi.data.database.models.Track fun Track.toShikimoriStatus() = when (status) { Shikimori.READING -> "watching" Shikimori.COMPLETED -> "completed" Shikimori.ON_HOLD -> "on_hold" Shikimori.DROPPED -> "dropped" Shikimori.PLAN_TO_READ -> "planned" Shikimori.REREADING -> "rewatching" else -> throw NotImplementedError("Unknown status: $status") } fun toTrackStatus(status: String) = when (status) { "watching" -> Shikimori.READING "completed" -> Shikimori.COMPLETED "on_hold" -> Shikimori.ON_HOLD "dropped" -> Shikimori.DROPPED "planned" -> Shikimori.PLAN_TO_READ "rewatching" -> Shikimori.REREADING else -> throw NotImplementedError("Unknown status: $status") } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMAddMangaResponse.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori.dto import kotlinx.serialization.Serializable @Serializable data class SMAddMangaResponse( val id: Long, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMManga.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori.dto import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class SMManga( val id: Long, val name: String, val chapters: Long, val image: SUMangaCover, val score: Double, val url: String, val status: String, val kind: String, @SerialName("aired_on") val airedOn: String?, ) { fun toTrack(trackId: Long): TrackSearch { return TrackSearch.create(trackId).apply { remote_id = this@SMManga.id title = name total_chapters = chapters cover_url = ShikimoriApi.BASE_URL + image.preview summary = "" score = this@SMManga.score tracking_url = ShikimoriApi.BASE_URL + url publishing_status = this@SMManga.status publishing_type = kind start_date = airedOn ?: "" } } } @Serializable data class SUMangaCover( val preview: String, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMOAuth.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class SMOAuth( @SerialName("access_token") val accessToken: String, @SerialName("token_type") val tokenType: String, @SerialName("created_at") val createdAt: Long, @SerialName("expires_in") val expiresIn: Long, @SerialName("refresh_token") val refreshToken: String?, ) // Access token lives 1 day fun SMOAuth.isExpired() = (System.currentTimeMillis() / 1000) > (createdAt + expiresIn - 3600) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMUser.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori.dto import kotlinx.serialization.Serializable @Serializable data class SMUser( val id: Int, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMUserListEntry.kt ================================================ package eu.kanade.tachiyomi.data.track.shikimori.dto import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi import eu.kanade.tachiyomi.data.track.shikimori.toTrackStatus import kotlinx.serialization.Serializable @Serializable data class SMUserListEntry( val id: Long, val chapters: Double, val score: Int, val status: String, ) { fun toTrack(trackId: Long, manga: SMManga): Track { return Track.create(trackId).apply { title = manga.name remote_id = this@SMUserListEntry.id total_chapters = manga.chapters library_id = this@SMUserListEntry.id last_chapter_read = this@SMUserListEntry.chapters score = this@SMUserListEntry.score.toDouble() status = toTrackStatus(this@SMUserListEntry.status) tracking_url = ShikimoriApi.BASE_URL + manga.url } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/Suwayomi.kt ================================================ package eu.kanade.tachiyomi.data.track.suwayomi import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.source.Source import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.domain.manga.model.Manga as DomainManga import tachiyomi.domain.track.model.Track as DomainTrack class Suwayomi(id: Long) : BaseTracker(id, "Suwayomi"), EnhancedTracker { val api by lazy { SuwayomiApi(id) } override fun getLogo() = R.drawable.brand_suwayomi companion object { const val UNREAD = 1L const val READING = 2L const val COMPLETED = 3L private const val TRACKER_DELETE_KEY = "Tracker Delete" private const val TRACKER_DELETE_DEFAULT = false } override fun getStatusList(): List = listOf(UNREAD, READING, COMPLETED) override fun getStatus(status: Long): StringResource? = when (status) { UNREAD -> MR.strings.unread READING -> MR.strings.reading COMPLETED -> MR.strings.completed else -> null } override fun getReadingStatus(): Long = READING override fun getRereadingStatus(): Long = -1 override fun getCompletionStatus(): Long = COMPLETED override fun getScoreList(): ImmutableList = persistentListOf() override fun displayScore(track: DomainTrack): String = "" override suspend fun update(track: Track, didReadChapter: Boolean): Track { if (track.status != COMPLETED) { if (didReadChapter) { if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) { track.status = COMPLETED } else { track.status = READING } } } return api.updateProgress(track, getPrefTrackerDelete()) } override suspend fun bind(track: Track, hasReadChapters: Boolean): Track { return track } override suspend fun search(query: String): List { TODO("Not yet implemented") } override suspend fun refresh(track: Track): Track { val remoteTrack = api.getTrackSearch(track.remote_id) track.copyPersonalFrom(remoteTrack) track.total_chapters = remoteTrack.total_chapters return track } override suspend fun login(username: String, password: String) { saveCredentials("user", "pass") } override fun loginNoop() { saveCredentials("user", "pass") } override fun getAcceptedSources(): List = listOf("eu.kanade.tachiyomi.extension.all.tachidesk.Tachidesk") override suspend fun match(manga: DomainManga): TrackSearch? = try { api.getTrackSearch(manga.url.getMangaId()) } catch (e: Exception) { null } override fun isTrackFrom(track: DomainTrack, manga: DomainManga, source: Source?): Boolean = track.remoteUrl == manga.url && source?.let { accept(it) } == true override fun migrateTrack(track: DomainTrack, manga: DomainManga, newSource: Source): DomainTrack? = if (accept(newSource)) { track.copy(remoteUrl = manga.url) } else { null } private fun String.getMangaId(): Long = this.substringAfterLast('/').toLong() private fun getPrefTrackerDelete(): Boolean { val preferences = api.sourcePreferences() return preferences.getBoolean(TRACKER_DELETE_KEY, TRACKER_DELETE_DEFAULT) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/SuwayomiApi.kt ================================================ package eu.kanade.tachiyomi.data.track.suwayomi import android.content.SharedPreferences import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.jsonMime import eu.kanade.tachiyomi.network.parseAs import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.sourcePreferences import kotlinx.serialization.json.Json import kotlinx.serialization.json.addAll import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonArray import kotlinx.serialization.json.putJsonObject import okhttp3.OkHttpClient import okhttp3.RequestBody.Companion.toRequestBody import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import java.nio.charset.Charset import java.security.MessageDigest class SuwayomiApi(private val trackId: Long) { private val json: Json by injectLazy() private val sourceManager: SourceManager by injectLazy() private val source: HttpSource by lazy { (sourceManager.get(sourceId) as HttpSource) } private val configurableSource: ConfigurableSource by lazy { (sourceManager.get(sourceId) as ConfigurableSource) } private val client: OkHttpClient by lazy { source.client } private val baseUrl: String by lazy { source.baseUrl.trimEnd('/') } private val apiUrl: String by lazy { "$baseUrl/api/graphql" } public fun sourcePreferences(): SharedPreferences = configurableSource.sourcePreferences() suspend fun getTrackSearch(mangaId: Long): TrackSearch = withIOContext { val query = $$""" |query GetManga($mangaId: Int!) { | manga(id: $mangaId) { | ...MangaFragment | } |} | |$$MangaFragment """.trimMargin() val payload = buildJsonObject { put("query", query) putJsonObject("variables") { put("mangaId", mangaId) } } val manga = with(json) { client.newCall( POST( apiUrl, body = payload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .data .entry } TrackSearch.create(trackId).apply { remote_id = mangaId title = manga.title cover_url = "$baseUrl/${manga.thumbnailUrl}" summary = manga.description.orEmpty() tracking_url = "$baseUrl/manga/$mangaId" total_chapters = manga.chapters.totalCount.toLong() publishing_status = manga.status.name last_chapter_read = manga.latestReadChapter?.chapterNumber ?: 0.0 status = when (manga.unreadCount) { manga.chapters.totalCount -> Suwayomi.UNREAD 0 -> Suwayomi.COMPLETED else -> Suwayomi.READING } } } suspend fun updateProgress(track: Track, deleteDownloadsOnServer: Boolean = false): Track { val mangaId = track.remote_id // TODO: Include a filter on the chapter number here // Below, we only consider older chapters; since v2.1.1985 filtering works properly in the query val chaptersQuery = $$""" |query GetMangaUnreadChapters($mangaId: Int!) { | chapters(condition: {mangaId: $mangaId, isRead: false}) { | nodes { | id | chapterNumber | } | } |} """.trimMargin() val chaptersPayload = buildJsonObject { put("query", chaptersQuery) putJsonObject("variables") { put("mangaId", mangaId) } } val chaptersToMark = with(json) { client.newCall( POST( apiUrl, body = chaptersPayload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() .parseAs() .data .entry .nodes .mapNotNull { n -> n.id.takeIf { n.chapterNumber <= track.last_chapter_read + 0.001 } } } val markQuery = if (deleteDownloadsOnServer) { $$""" |mutation MarkChaptersRead($chapters: [Int!]!) { | updateChapters(input: {ids: $chapters, patch: {isRead: true}}) { | __typename | } | deleteDownloadedChapters(input: {ids: $chapters}) { | __typename | } |} """.trimMargin() } else { $$""" |mutation MarkChaptersRead($chapters: [Int!]!) { | updateChapters(input: {ids: $chapters, patch: {isRead: true}}) { | __typename | } |} """.trimMargin() } val markPayload = buildJsonObject { put("query", markQuery) putJsonObject("variables") { putJsonArray("chapters") { addAll(chaptersToMark) } } } with(json) { client.newCall( POST( apiUrl, body = markPayload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() } val trackQuery = $$""" |mutation TrackManga($mangaId: Int!) { | trackProgress(input: {mangaId: $mangaId}) { | __typename | } |} """.trimMargin() val trackPayload = buildJsonObject { put("query", trackQuery) putJsonObject("variables") { put("mangaId", mangaId) } } with(json) { client.newCall( POST( apiUrl, body = trackPayload.toString().toRequestBody(jsonMime), ), ) .awaitSuccess() } return getTrackSearch(track.remote_id) } private val sourceId by lazy { val key = "tachidesk/en/1" val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray()) (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE } companion object { private val MangaFragment = """ |fragment MangaFragment on MangaType { | artist | author | description | id | status | thumbnailUrl | title | url | genre | inLibraryAt | chapters { | totalCount | } | latestUploadedChapter { | uploadDate | } | latestFetchedChapter { | fetchedAt | } | latestReadChapter { | lastReadAt | chapterNumber | } | unreadCount | downloadCount |} """.trimMargin() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/SuwayomiModels.kt ================================================ package eu.kanade.tachiyomi.data.track.suwayomi import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable public enum class MangaStatus( public val rawValue: String, ) { UNKNOWN("UNKNOWN"), ONGOING("ONGOING"), COMPLETED("COMPLETED"), LICENSED("LICENSED"), PUBLISHING_FINISHED("PUBLISHING_FINISHED"), CANCELLED("CANCELLED"), ON_HIATUS("ON_HIATUS"), } @Serializable public data class MangaFragment( public val artist: String?, public val author: String?, public val description: String?, public val id: Int, public val status: MangaStatus, public val thumbnailUrl: String?, public val title: String, public val url: String, public val genre: List, public val inLibraryAt: Long, public val chapters: Chapters, public val latestUploadedChapter: LatestUploadedChapter?, public val latestFetchedChapter: LatestFetchedChapter?, public val latestReadChapter: LatestReadChapter?, public val unreadCount: Int, public val downloadCount: Int, ) { @Serializable public data class Chapters( public val totalCount: Int, ) @Serializable public data class LatestUploadedChapter( public val uploadDate: Long, ) @Serializable public data class LatestFetchedChapter( public val fetchedAt: Long, ) @Serializable public data class LatestReadChapter( public val lastReadAt: Long, public val chapterNumber: Double, ) } @Serializable public data class GetMangaResult( public val data: GetMangaData, ) @Serializable public data class GetMangaData( @SerialName("manga") public val entry: MangaFragment, ) @Serializable public data class GetMangaUnreadChaptersEntry( public val nodes: List, ) @Serializable public data class GetMangaUnreadChaptersNode( public val id: Int, public val chapterNumber: Double, ) @Serializable public data class GetMangaUnreadChaptersResult( public val data: GetMangaUnreadChaptersData, ) @Serializable public data class GetMangaUnreadChaptersData( @SerialName("chapters") public val entry: GetMangaUnreadChaptersEntry, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt ================================================ package eu.kanade.tachiyomi.data.updater import android.content.Context import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.util.system.isFossBuildType import eu.kanade.tachiyomi.util.system.isPreviewBuildType import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.release.interactor.GetApplicationRelease import uy.kohesive.injekt.injectLazy class AppUpdateChecker { private val getApplicationRelease: GetApplicationRelease by injectLazy() suspend fun checkForUpdate(context: Context, forceCheck: Boolean = false): GetApplicationRelease.Result { // Disable app update checks for older Android versions that we're going to drop support for // if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { // return GetApplicationRelease.Result.OsTooOld // } return withIOContext { val result = getApplicationRelease.await( GetApplicationRelease.Arguments( isFossBuildType, isPreviewBuildType, BuildConfig.COMMIT_COUNT.toInt(), BuildConfig.VERSION_NAME, GITHUB_REPO, forceCheck, ), ) when (result) { is GetApplicationRelease.Result.NewUpdate -> AppUpdateNotifier(context).promptUpdate(result.release) else -> {} } result } } } val GITHUB_REPO: String by lazy { if (isPreviewBuildType) { "mihonapp/mihon-preview" } else { "mihonapp/mihon" } } val RELEASE_TAG: String by lazy { if (isPreviewBuildType) { "r${BuildConfig.COMMIT_COUNT}" } else { "v${BuildConfig.VERSION_NAME}" } } val RELEASE_URL = "https://github.com/$GITHUB_REPO/releases/tag/$RELEASE_TAG" ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt ================================================ package eu.kanade.tachiyomi.data.updater import android.content.Context import android.content.pm.ServiceInfo import android.os.Build import androidx.work.Constraints import androidx.work.CoroutineWorker import androidx.work.ExistingWorkPolicy import androidx.work.ForegroundInfo import androidx.work.NetworkType import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.ProgressListener import eu.kanade.tachiyomi.network.await import eu.kanade.tachiyomi.network.newCachelessCallWithProgress import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.storage.saveTo import eu.kanade.tachiyomi.util.system.setForegroundSafely import eu.kanade.tachiyomi.util.system.workManager import okhttp3.internal.http2.ErrorCode import okhttp3.internal.http2.StreamResetException import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.io.File import kotlin.coroutines.cancellation.CancellationException class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { private val notifier = AppUpdateNotifier(context) private val network: NetworkHelper by injectLazy() override suspend fun doWork(): Result { val url = inputData.getString(EXTRA_DOWNLOAD_URL) val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.stringResource(MR.strings.app_name) if (url.isNullOrEmpty()) { return Result.failure() } setForegroundSafely() withIOContext { downloadApk(title, url) } return Result.success() } override suspend fun getForegroundInfo(): ForegroundInfo { return ForegroundInfo( Notifications.ID_APP_UPDATER, notifier.onDownloadStarted().build(), if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC } else { 0 }, ) } /** * Called to start downloading apk of new update * * @param url url location of file */ private suspend fun downloadApk(title: String, url: String) { // Show notification download starting. notifier.onDownloadStarted(title) val progressListener = object : ProgressListener { // Progress of the download var savedProgress = 0 // Keep track of the last notification sent to avoid posting too many. var lastTick = 0L override fun update(bytesRead: Long, contentLength: Long, done: Boolean) { val progress = (100 * (bytesRead.toFloat() / contentLength)).toInt() val currentTime = System.currentTimeMillis() if (progress > savedProgress && currentTime - 200 > lastTick) { savedProgress = progress lastTick = currentTime notifier.onProgressChange(progress) } } } try { // Download the new update. val response = network.client.newCachelessCallWithProgress(GET(url), progressListener) .await() // File where the apk will be saved. val apkFile = File(context.externalCacheDir, "update.apk") if (response.isSuccessful) { response.body.source().saveTo(apkFile) } else { response.close() throw Exception("Unsuccessful response") } notifier.cancel() notifier.promptInstall(apkFile.getUriCompat(context)) } catch (e: Exception) { val shouldCancel = e is CancellationException || (e is StreamResetException && e.errorCode == ErrorCode.CANCEL) if (shouldCancel) { notifier.cancel() } else { notifier.onDownloadError(url) } } } companion object { private const val TAG = "AppUpdateDownload" const val EXTRA_DOWNLOAD_URL = "DOWNLOAD_URL" const val EXTRA_DOWNLOAD_TITLE = "DOWNLOAD_TITLE" fun start(context: Context, url: String, title: String? = null) { val constraints = Constraints( requiredNetworkType = NetworkType.CONNECTED, ) val request = OneTimeWorkRequestBuilder() .setConstraints(constraints) .addTag(TAG) .setInputData( workDataOf( EXTRA_DOWNLOAD_URL to url, EXTRA_DOWNLOAD_TITLE to title, ), ) .build() context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request) } fun stop(context: Context) { context.workManager.cancelUniqueWork(TAG) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt ================================================ package eu.kanade.tachiyomi.data.updater import android.annotation.SuppressLint import android.app.PendingIntent import android.content.Context import android.content.Intent import android.net.Uri import androidx.core.app.NotificationCompat import androidx.core.net.toUri import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.common.i18n.stringResource import tachiyomi.domain.release.model.Release import tachiyomi.i18n.MR internal class AppUpdateNotifier(private val context: Context) { private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_APP_UPDATE) /** * Call to show notification. * * @param id id of the notification channel. */ private fun NotificationCompat.Builder.show(id: Int = Notifications.ID_APP_UPDATER) { context.notify(id, build()) } fun cancel() { NotificationReceiver.dismissNotification(context, Notifications.ID_APP_UPDATER) } @SuppressLint("LaunchActivityFromNotification") fun promptUpdate(release: Release) { val updateIntent = NotificationReceiver.downloadAppUpdatePendingBroadcast( context, release.downloadLink, release.version, ) val releaseIntent = Intent(Intent.ACTION_VIEW, release.releaseLink.toUri()).run { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP PendingIntent.getActivity( context, release.hashCode(), this, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) } with(notificationBuilder) { setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available)) setContentText(release.version) setSmallIcon(android.R.drawable.stat_sys_download_done) setContentIntent(updateIntent) clearActions() addAction( android.R.drawable.stat_sys_download_done, context.stringResource(MR.strings.action_download), updateIntent, ) addAction( R.drawable.ic_info_24dp, context.stringResource(MR.strings.whats_new), releaseIntent, ) } notificationBuilder.show() } /** * Call when apk download starts. * * @param title tile of notification. */ fun onDownloadStarted(title: String? = null): NotificationCompat.Builder { with(notificationBuilder) { title?.let { setContentTitle(title) } setContentText(context.stringResource(MR.strings.update_check_notification_download_in_progress)) setSmallIcon(android.R.drawable.stat_sys_download) setOngoing(true) clearActions() addAction( R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel), NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context), ) } notificationBuilder.show() return notificationBuilder } /** * Call when apk download progress changes. * * @param progress progress of download (xx%/100). */ fun onProgressChange(progress: Int) { with(notificationBuilder) { setProgress(100, progress, false) setOnlyAlertOnce(true) } notificationBuilder.show() } /** * Call when apk download is finished. * * @param uri path location of apk. */ fun promptInstall(uri: Uri) { val installIntent = NotificationHandler.installApkPendingActivity(context, uri) with(notificationBuilder) { setContentText(context.stringResource(MR.strings.update_check_notification_download_complete)) setSmallIcon(android.R.drawable.stat_sys_download_done) setOnlyAlertOnce(false) setProgress(0, 0, false) setContentIntent(installIntent) setOngoing(true) clearActions() addAction( R.drawable.ic_system_update_alt_white_24dp, context.stringResource(MR.strings.action_install), installIntent, ) addAction( R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel), NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_PROMPT), ) } notificationBuilder.show(Notifications.ID_APP_UPDATE_PROMPT) } /** * Call when apk download throws a error * * @param url web location of apk to download. */ fun onDownloadError(url: String) { with(notificationBuilder) { setContentText(context.stringResource(MR.strings.update_check_notification_download_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) setOnlyAlertOnce(false) setProgress(0, 0, false) clearActions() addAction( R.drawable.ic_refresh_24dp, context.stringResource(MR.strings.action_retry), NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url), ) addAction( R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel), NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_ERROR), ) } notificationBuilder.show(Notifications.ID_APP_UPDATE_ERROR) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt ================================================ package eu.kanade.tachiyomi.di import android.app.Application import androidx.core.content.ContextCompat import androidx.sqlite.driver.bundled.BundledSQLiteDriver import app.cash.sqldelight.db.SqlDriver import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDatabaseType import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDriver import com.eygraber.sqldelight.androidx.driver.File import com.eygraber.sqldelight.androidx.driver.FileProvider import eu.kanade.domain.track.store.DelayedTrackingStore import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.data.saver.ImageSaver import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.network.JavaScriptEngine import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.AndroidSourceManager import kotlinx.serialization.json.Json import kotlinx.serialization.protobuf.ProtoBuf import nl.adaptivity.xmlutil.XmlDeclMode import nl.adaptivity.xmlutil.core.XmlVersion import nl.adaptivity.xmlutil.serialization.XML import tachiyomi.core.common.storage.AndroidStorageFolderProvider import tachiyomi.data.AndroidDatabaseHandler import tachiyomi.data.Database import tachiyomi.data.DatabaseHandler import tachiyomi.data.DateColumnAdapter import tachiyomi.data.History import tachiyomi.data.Mangas import tachiyomi.data.StringListColumnAdapter import tachiyomi.data.UpdateStrategyColumnAdapter import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.storage.service.StorageManager import tachiyomi.source.local.image.LocalCoverManager import tachiyomi.source.local.io.LocalSourceFileSystem import uy.kohesive.injekt.api.InjektModule import uy.kohesive.injekt.api.InjektRegistrar import uy.kohesive.injekt.api.addSingleton import uy.kohesive.injekt.api.addSingletonFactory import uy.kohesive.injekt.api.get class AppModule(val app: Application) : InjektModule { override fun InjektRegistrar.registerInjectables() { addSingleton(app) addSingletonFactory { AndroidxSqliteDriver( driver = BundledSQLiteDriver(), databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.db"), schema = Database.Schema, configuration = AndroidxSqliteConfiguration( isForeignKeyConstraintsEnabled = true, ), ) } addSingletonFactory { Database( driver = get(), historyAdapter = History.Adapter( last_readAdapter = DateColumnAdapter, ), mangasAdapter = Mangas.Adapter( genreAdapter = StringListColumnAdapter, update_strategyAdapter = UpdateStrategyColumnAdapter, ), ) } addSingletonFactory { AndroidDatabaseHandler(get(), get()) } addSingletonFactory { Json { ignoreUnknownKeys = true explicitNulls = false } } addSingletonFactory { XML { defaultPolicy { ignoreUnknownChildren() } autoPolymorphic = true xmlDeclMode = XmlDeclMode.Charset indent = 2 xmlVersion = XmlVersion.XML10 } } addSingletonFactory { ProtoBuf } addSingletonFactory { ChapterCache(app, get()) } addSingletonFactory { CoverCache(app) } addSingletonFactory { NetworkHelper(app, get()) } addSingletonFactory { JavaScriptEngine(app) } addSingletonFactory { AndroidSourceManager(app, get(), get()) } addSingletonFactory { ExtensionManager(app) } addSingletonFactory { DownloadProvider(app) } addSingletonFactory { DownloadManager(app) } addSingletonFactory { DownloadCache(app) } addSingletonFactory { TrackerManager() } addSingletonFactory { DelayedTrackingStore(app) } addSingletonFactory { ImageSaver(app) } addSingletonFactory { AndroidStorageFolderProvider(app) } addSingletonFactory { LocalSourceFileSystem(get()) } addSingletonFactory { LocalCoverManager(app, get()) } addSingletonFactory { StorageManager(app, get()) } // Asynchronously init expensive components for a faster cold start ContextCompat.getMainExecutor(app).execute { get() get() get() get() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt ================================================ package eu.kanade.tachiyomi.di import android.app.Application import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.domain.ui.UiPreferences import eu.kanade.tachiyomi.core.security.PrivacyPreferences import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.network.NetworkPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.system.isDebugBuildType import tachiyomi.core.common.preference.AndroidPreferenceStore import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.storage.AndroidStorageFolderProvider import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.storage.service.StoragePreferences import tachiyomi.domain.updates.service.UpdatesPreferences import uy.kohesive.injekt.api.InjektModule import uy.kohesive.injekt.api.InjektRegistrar import uy.kohesive.injekt.api.addSingletonFactory import uy.kohesive.injekt.api.get class PreferenceModule(val app: Application) : InjektModule { override fun InjektRegistrar.registerInjectables() { addSingletonFactory { AndroidPreferenceStore(app) } addSingletonFactory { NetworkPreferences( preferenceStore = get(), verboseLoggingDefault = isDebugBuildType, ) } addSingletonFactory { SourcePreferences(get()) } addSingletonFactory { SecurityPreferences(get()) } addSingletonFactory { PrivacyPreferences(get()) } addSingletonFactory { LibraryPreferences(get()) } addSingletonFactory { UpdatesPreferences(get()) } addSingletonFactory { ReaderPreferences(get()) } addSingletonFactory { TrackPreferences(get()) } addSingletonFactory { DownloadPreferences(get()) } addSingletonFactory { BackupPreferences(get()) } addSingletonFactory { StoragePreferences( folderProvider = get(), preferenceStore = get(), ) } addSingletonFactory { UiPreferences(get()) } addSingletonFactory { BasePreferences(app, get()) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt ================================================ package eu.kanade.tachiyomi.extension import android.content.Context import android.graphics.drawable.Drawable import eu.kanade.domain.extension.interactor.TrustExtension import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.api.ExtensionApi import eu.kanade.tachiyomi.extension.api.ExtensionUpdateNotifier import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.extension.model.LoadResult import eu.kanade.tachiyomi.extension.util.ExtensionInstallReceiver import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.extension.util.ExtensionLoader import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import logcat.LogPriority import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.source.model.StubSource import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.Locale /** * The manager of extensions installed as another apk which extend the available sources. It handles * the retrieval of remotely available extensions as well as installing, updating and removing them. * To avoid malicious distribution, every extension must be signed and it will only be loaded if its * signature is trusted, otherwise the user will be prompted with a warning to trust it before being * loaded. */ class ExtensionManager( private val context: Context, private val preferences: SourcePreferences = Injekt.get(), private val trustExtension: TrustExtension = Injekt.get(), ) { val scope = CoroutineScope(SupervisorJob()) private val _isInitialized = MutableStateFlow(false) val isInitialized: StateFlow = _isInitialized.asStateFlow() /** * API where all the available extensions can be found. */ private val api = ExtensionApi() /** * The installer which installs, updates and uninstalls the extensions. */ private val installer by lazy { ExtensionInstaller(context) } private val iconMap = mutableMapOf() private val installedExtensionMapFlow = MutableStateFlow(emptyMap()) val installedExtensionsFlow = installedExtensionMapFlow.mapExtensions(scope) private val availableExtensionMapFlow = MutableStateFlow(emptyMap()) val availableExtensionsFlow = availableExtensionMapFlow.mapExtensions(scope) private val untrustedExtensionMapFlow = MutableStateFlow(emptyMap()) val untrustedExtensionsFlow = untrustedExtensionMapFlow.mapExtensions(scope) init { initExtensions() ExtensionInstallReceiver(InstallationListener()).register(context) } private var subLanguagesEnabledOnFirstRun = preferences.enabledLanguages.isSet() fun getExtensionPackage(sourceId: Long): String? { return installedExtensionsFlow.value.find { extension -> extension.sources.any { it.id == sourceId } } ?.pkgName } fun getExtensionPackageAsFlow(sourceId: Long): Flow { return installedExtensionsFlow.map { extensions -> extensions.find { extension -> extension.sources.any { it.id == sourceId } } ?.pkgName } } fun getAppIconForSource(sourceId: Long): Drawable? { val pkgName = getExtensionPackage(sourceId) ?: return null return iconMap[pkgName] ?: iconMap.getOrPut(pkgName) { ExtensionLoader.getExtensionPackageInfoFromPkgName(context, pkgName)!!.applicationInfo!! .loadIcon(context.packageManager) } } private var availableExtensionsSourcesData: Map = emptyMap() private fun setupAvailableExtensionsSourcesDataMap(extensions: List) { if (extensions.isEmpty()) return availableExtensionsSourcesData = extensions .flatMap { ext -> ext.sources.map { it.toStubSource() } } .associateBy { it.id } } fun getSourceData(id: Long) = availableExtensionsSourcesData[id] /** * Loads and registers the installed extensions. */ private fun initExtensions() { val extensions = ExtensionLoader.loadExtensions(context) installedExtensionMapFlow.value = extensions .filterIsInstance() .associate { it.extension.pkgName to it.extension } untrustedExtensionMapFlow.value = extensions .filterIsInstance() .associate { it.extension.pkgName to it.extension } _isInitialized.value = true } /** * Finds the available extensions in the [api] and updates [availableExtensionMapFlow]. */ suspend fun findAvailableExtensions() { val extensions: List = try { api.findExtensions() } catch (e: Exception) { logcat(LogPriority.ERROR, e) withUIContext { context.toast(MR.strings.extension_api_error) } return } enableAdditionalSubLanguages(extensions) availableExtensionMapFlow.value = extensions.associateBy { it.pkgName } updatedInstalledExtensionsStatuses(extensions) setupAvailableExtensionsSourcesDataMap(extensions) } /** * Enables the additional sub-languages in the app first run. This addresses * the issue where users still need to enable some specific languages even when * the device language is inside that major group. As an example, if a user * has a zh device language, the app will also enable zh-Hans and zh-Hant. * * If the user have already changed the enabledLanguages preference value once, * the new languages will not be added to respect the user enabled choices. */ private fun enableAdditionalSubLanguages(extensions: List) { if (subLanguagesEnabledOnFirstRun || extensions.isEmpty()) { return } // Use the source lang as some aren't present on the extension level. val availableLanguages = extensions .flatMap(Extension.Available::sources) .distinctBy(Extension.Available.Source::lang) .map(Extension.Available.Source::lang) val deviceLanguage = Locale.getDefault().language val defaultLanguages = preferences.enabledLanguages.defaultValue() val languagesToEnable = availableLanguages.filter { it != deviceLanguage && it.startsWith(deviceLanguage) } preferences.enabledLanguages.set(defaultLanguages + languagesToEnable) subLanguagesEnabledOnFirstRun = true } /** * Sets the update field of the installed extensions with the given [availableExtensions]. * * @param availableExtensions The list of extensions given by the [api]. */ private fun updatedInstalledExtensionsStatuses(availableExtensions: List) { if (availableExtensions.isEmpty()) { preferences.extensionUpdatesCount.set(0) return } val installedExtensionsMap = installedExtensionMapFlow.value.toMutableMap() var changed = false for ((pkgName, extension) in installedExtensionsMap) { val availableExt = availableExtensions.find { it.pkgName == pkgName } if (availableExt == null && !extension.isObsolete) { installedExtensionsMap[pkgName] = extension.copy(isObsolete = true) changed = true } else if (availableExt != null) { val hasUpdate = extension.updateExists(availableExt) if (extension.hasUpdate != hasUpdate) { installedExtensionsMap[pkgName] = extension.copy( hasUpdate = hasUpdate, repoUrl = availableExt.repoUrl, ) } else { installedExtensionsMap[pkgName] = extension.copy( repoUrl = availableExt.repoUrl, ) } changed = true } } if (changed) { installedExtensionMapFlow.value = installedExtensionsMap } updatePendingUpdatesCount() } /** * Returns a flow of the installation process for the given extension. It will complete * once the extension is installed or throws an error. The process will be canceled if * unsubscribed before its completion. * * @param extension The extension to be installed. */ fun installExtension(extension: Extension.Available): Flow { return installer.downloadAndInstall(api.getApkUrl(extension), extension) } /** * Returns a flow of the installation process for the given extension. It will complete * once the extension is updated or throws an error. The process will be canceled if * unsubscribed before its completion. * * @param extension The extension to be updated. */ fun updateExtension(extension: Extension.Installed): Flow { val availableExt = availableExtensionMapFlow.value[extension.pkgName] ?: return emptyFlow() return installExtension(availableExt) } fun cancelInstallUpdateExtension(extension: Extension) { installer.cancelInstall(extension.pkgName) } /** * Sets to "installing" status of an extension installation. * * @param downloadId The id of the download. */ fun setInstalling(downloadId: Long) { installer.updateInstallStep(downloadId, InstallStep.Installing) } fun updateInstallStep(downloadId: Long, step: InstallStep) { installer.updateInstallStep(downloadId, step) } /** * Uninstalls the extension that matches the given package name. * * @param extension The extension to uninstall. */ fun uninstallExtension(extension: Extension) { installer.uninstallApk(extension.pkgName) } /** * Adds the given extension to the list of trusted extensions. It also loads in background the * now trusted extensions. * * @param extension the extension to trust */ suspend fun trust(extension: Extension.Untrusted) { untrustedExtensionMapFlow.value[extension.pkgName] ?: return trustExtension.trust(extension.pkgName, extension.versionCode, extension.signatureHash) untrustedExtensionMapFlow.value -= extension.pkgName ExtensionLoader.loadExtensionFromPkgName(context, extension.pkgName) .let { it as? LoadResult.Success } ?.let { registerNewExtension(it.extension) } } /** * Registers the given extension in this and the source managers. * * @param extension The extension to be registered. */ private fun registerNewExtension(extension: Extension.Installed) { installedExtensionMapFlow.value += extension } /** * Registers the given updated extension in this and the source managers previously removing * the outdated ones. * * @param extension The extension to be registered. */ private fun registerUpdatedExtension(extension: Extension.Installed) { installedExtensionMapFlow.value += extension } /** * Unregisters the extension in this and the source managers given its package name. Note this * method is called for every uninstalled application in the system. * * @param pkgName The package name of the uninstalled application. */ private fun unregisterExtension(pkgName: String) { installedExtensionMapFlow.value -= pkgName untrustedExtensionMapFlow.value -= pkgName } /** * Listener which receives events of the extensions being installed, updated or removed. */ private inner class InstallationListener : ExtensionInstallReceiver.Listener { override fun onExtensionInstalled(extension: Extension.Installed) { registerNewExtension(extension.withUpdateCheck()) updatePendingUpdatesCount() } override fun onExtensionUpdated(extension: Extension.Installed) { registerUpdatedExtension(extension.withUpdateCheck()) updatePendingUpdatesCount() } override fun onExtensionUntrusted(extension: Extension.Untrusted) { installedExtensionMapFlow.value -= extension.pkgName untrustedExtensionMapFlow.value += extension updatePendingUpdatesCount() } override fun onPackageUninstalled(pkgName: String) { ExtensionLoader.uninstallPrivateExtension(context, pkgName) unregisterExtension(pkgName) updatePendingUpdatesCount() } } /** * Extension method to set the update field of an installed extension. */ private fun Extension.Installed.withUpdateCheck(): Extension.Installed { return if (updateExists()) { copy(hasUpdate = true) } else { this } } private fun Extension.Installed.updateExists(availableExtension: Extension.Available? = null): Boolean { val availableExt = availableExtension ?: availableExtensionMapFlow.value[pkgName] ?: return false return (availableExt.versionCode > versionCode || availableExt.libVersion > libVersion) } private fun updatePendingUpdatesCount() { val pendingUpdateCount = installedExtensionMapFlow.value.values.count { it.hasUpdate } preferences.extensionUpdatesCount.set(pendingUpdateCount) if (pendingUpdateCount == 0) { ExtensionUpdateNotifier(context).dismiss() } } private operator fun Map.plus(extension: T) = plus(extension.pkgName to extension) private fun StateFlow>.mapExtensions(scope: CoroutineScope): StateFlow> { return map { it.values.toList() }.stateIn(scope, SharingStarted.Lazily, value.values.toList()) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt ================================================ package eu.kanade.tachiyomi.extension.api import android.content.Context import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.LoadResult import eu.kanade.tachiyomi.extension.util.ExtensionLoader import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import logcat.LogPriority import mihon.domain.extensionrepo.interactor.GetExtensionRepo import mihon.domain.extensionrepo.interactor.UpdateExtensionRepo import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.injectLazy import java.time.Instant import kotlin.time.Duration.Companion.days internal class ExtensionApi { private val networkService: NetworkHelper by injectLazy() private val preferenceStore: PreferenceStore by injectLazy() private val getExtensionRepo: GetExtensionRepo by injectLazy() private val updateExtensionRepo: UpdateExtensionRepo by injectLazy() private val extensionManager: ExtensionManager by injectLazy() private val json: Json by injectLazy() private val lastExtCheck: Preference by lazy { preferenceStore.getLong(Preference.appStateKey("last_ext_check"), 0) } suspend fun findExtensions(): List { return withIOContext { getExtensionRepo.getAll() .map { async { getExtensions(it) } } .awaitAll() .flatten() } } private suspend fun getExtensions(extRepo: ExtensionRepo): List { val repoBaseUrl = extRepo.baseUrl return try { val response = networkService.client .newCall(GET("$repoBaseUrl/index.min.json")) .awaitSuccess() with(json) { response .parseAs>() .toExtensions(repoBaseUrl) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Failed to get extensions from $repoBaseUrl" } emptyList() } } suspend fun checkForUpdates( context: Context, fromAvailableExtensionList: Boolean = false, ): List? { // Limit checks to once a day at most if (!fromAvailableExtensionList && Instant.now().toEpochMilli() < lastExtCheck.get() + 1.days.inWholeMilliseconds ) { return null } // Update extension repo details updateExtensionRepo.awaitAll() val extensions = if (fromAvailableExtensionList) { extensionManager.availableExtensionsFlow.value } else { findExtensions().also { lastExtCheck.set(Instant.now().toEpochMilli()) } } val installedExtensions = ExtensionLoader.loadExtensions(context) .filterIsInstance() .map { it.extension } val extensionsWithUpdate = mutableListOf() for (installedExt in installedExtensions) { val pkgName = installedExt.pkgName val availableExt = extensions.find { it.pkgName == pkgName } ?: continue val hasUpdatedVer = availableExt.versionCode > installedExt.versionCode val hasUpdatedLib = availableExt.libVersion > installedExt.libVersion val hasUpdate = hasUpdatedVer || hasUpdatedLib if (hasUpdate) { extensionsWithUpdate.add(installedExt) } } if (extensionsWithUpdate.isNotEmpty()) { ExtensionUpdateNotifier(context).promptUpdates(extensionsWithUpdate.map { it.name }) } return extensionsWithUpdate } private fun List.toExtensions(repoUrl: String): List { return this .filter { val libVersion = it.extractLibVersion() libVersion >= ExtensionLoader.LIB_VERSION_MIN && libVersion <= ExtensionLoader.LIB_VERSION_MAX } .map { Extension.Available( name = it.name.substringAfter("Tachiyomi: "), pkgName = it.pkg, versionName = it.version, versionCode = it.code, libVersion = it.extractLibVersion(), lang = it.lang, isNsfw = it.nsfw == 1, sources = it.sources?.map(extensionSourceMapper).orEmpty(), apkName = it.apk, iconUrl = "$repoUrl/icon/${it.pkg}.png", repoUrl = repoUrl, ) } } fun getApkUrl(extension: Extension.Available): String { return "${extension.repoUrl}/apk/${extension.apkName}" } private fun ExtensionJsonObject.extractLibVersion(): Double { return version.substringBeforeLast('.').toDouble() } } @Serializable private data class ExtensionJsonObject( val name: String, val pkg: String, val apk: String, val lang: String, val code: Long, val version: String, val nsfw: Int, val sources: List?, ) @Serializable private data class ExtensionSourceJsonObject( val id: Long, val lang: String, val name: String, val baseUrl: String, ) private val extensionSourceMapper: (ExtensionSourceJsonObject) -> Extension.Available.Source = { Extension.Available.Source( id = it.id, lang = it.lang, name = it.name, baseUrl = it.baseUrl, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt ================================================ package eu.kanade.tachiyomi.extension.api import android.content.Context import androidx.core.app.NotificationCompat import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.common.i18n.pluralStringResource import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionUpdateNotifier( private val context: Context, private val securityPreferences: SecurityPreferences = Injekt.get(), ) { fun promptUpdates(names: List) { context.notify( Notifications.ID_UPDATES_TO_EXTS, Notifications.CHANNEL_EXTENSIONS_UPDATE, ) { setContentTitle( context.pluralStringResource( MR.plurals.update_check_notification_ext_updates, names.size, names.size, ), ) if (!securityPreferences.hideNotificationContent.get()) { val extNames = names.joinToString(", ") setContentText(extNames) setStyle(NotificationCompat.BigTextStyle().bigText(extNames)) } setSmallIcon(R.drawable.ic_extension_24dp) setContentIntent(NotificationReceiver.openExtensionsPendingActivity(context)) setAutoCancel(true) } } fun dismiss() { context.cancelNotification(Notifications.ID_UPDATES_TO_EXTS) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/installer/Installer.kt ================================================ package eu.kanade.tachiyomi.extension.installer import android.app.Service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.net.Uri import androidx.annotation.CallSuper import androidx.localbroadcastmanager.content.LocalBroadcastManager import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.model.InstallStep import uy.kohesive.injekt.injectLazy import java.util.Collections import kotlin.concurrent.atomics.AtomicReference import kotlin.concurrent.atomics.ExperimentalAtomicApi /** * Base implementation class for extension installer. To be used inside a foreground [Service]. */ @OptIn(ExperimentalAtomicApi::class) abstract class Installer(private val service: Service) { private val extensionManager: ExtensionManager by injectLazy() private var waitingInstall = AtomicReference(null) private val queue = Collections.synchronizedList(mutableListOf()) private val cancelReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val downloadId = intent.getLongExtra(EXTRA_DOWNLOAD_ID, -1).takeIf { it >= 0 } ?: return cancelQueue(downloadId) } } /** * Installer readiness. If false, queue check will not run. * * @see checkQueue */ abstract var ready: Boolean /** * Add an item to install queue. * * @param downloadId Download ID as known by [ExtensionManager] * @param uri Uri of APK to install */ fun addToQueue(downloadId: Long, uri: Uri) { queue.add(Entry(downloadId, uri)) checkQueue() } /** * Proceeds to install the APK of this entry inside this method. Call [continueQueue] * when the install process for this entry is finished to continue the queue. * * @param entry The [Entry] of item to process * @see continueQueue */ @CallSuper open fun processEntry(entry: Entry) { extensionManager.setInstalling(entry.downloadId) } /** * Called before queue continues. Override this to handle when the removed entry is * currently being processed. * * @return true if this entry can be removed from queue. */ open fun cancelEntry(entry: Entry): Boolean { return true } /** * Tells the queue to continue processing the next entry and updates the install step * of the completed entry ([waitingInstall]) to [ExtensionManager]. * * @param resultStep new install step for the processed entry. * @see waitingInstall */ fun continueQueue(resultStep: InstallStep) { val completedEntry = waitingInstall.exchange(null) if (completedEntry != null) { extensionManager.updateInstallStep(completedEntry.downloadId, resultStep) checkQueue() } } /** * Checks the queue. The provided service will be stopped if the queue is empty. * Will not be run when not ready. * * @see ready */ fun checkQueue() { if (!ready) { return } if (queue.isEmpty()) { service.stopSelf() return } val nextEntry = queue.first() if (waitingInstall.compareAndSet(null, nextEntry)) { queue.removeAt(0) processEntry(nextEntry) } } /** * Call this method when the provided service is destroyed. */ @CallSuper open fun onDestroy() { LocalBroadcastManager.getInstance(service).unregisterReceiver(cancelReceiver) queue.forEach { extensionManager.updateInstallStep(it.downloadId, InstallStep.Error) } queue.clear() waitingInstall.store(null) } protected fun getActiveEntry(): Entry? = waitingInstall.load() /** * Cancels queue for the provided download ID if exists. * * @param downloadId Download ID as known by [ExtensionManager] */ private fun cancelQueue(downloadId: Long) { val waitingInstall = this.waitingInstall.load() val toCancel = queue.find { it.downloadId == downloadId } ?: waitingInstall ?: return if (cancelEntry(toCancel)) { queue.remove(toCancel) if (waitingInstall == toCancel) { // Currently processing removed entry, continue queue this.waitingInstall.store(null) checkQueue() } extensionManager.updateInstallStep(downloadId, InstallStep.Idle) } } /** * Install item to queue. * * @param downloadId Download ID as known by [ExtensionManager] * @param uri Uri of APK to install */ data class Entry(val downloadId: Long, val uri: Uri) init { val filter = IntentFilter(ACTION_CANCEL_QUEUE) LocalBroadcastManager.getInstance(service).registerReceiver(cancelReceiver, filter) } companion object { private const val ACTION_CANCEL_QUEUE = "Installer.action.CANCEL_QUEUE" private const val EXTRA_DOWNLOAD_ID = "Installer.extra.DOWNLOAD_ID" /** * Attempts to cancel the installation entry for the provided download ID. * * @param downloadId Download ID as known by [ExtensionManager] */ fun cancelInstallQueue(context: Context, downloadId: Long) { val intent = Intent(ACTION_CANCEL_QUEUE) intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId) LocalBroadcastManager.getInstance(context).sendBroadcast(intent) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/installer/PackageInstallerInstaller.kt ================================================ package eu.kanade.tachiyomi.extension.installer import android.annotation.SuppressLint import android.app.PendingIntent import android.app.Service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageInstaller import android.os.Build import androidx.core.content.ContextCompat import androidx.core.content.IntentSanitizer import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.util.lang.use import eu.kanade.tachiyomi.util.system.getParcelableExtraCompat import eu.kanade.tachiyomi.util.system.getUriSize import logcat.LogPriority import tachiyomi.core.common.util.system.logcat class PackageInstallerInstaller(private val service: Service) : Installer(service) { private val packageInstaller = service.packageManager.packageInstaller private val packageActionReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE)) { PackageInstaller.STATUS_PENDING_USER_ACTION -> { val userAction = intent.getParcelableExtraCompat(Intent.EXTRA_INTENT) ?.run { // Doesn't actually needed as the receiver is actually not exported // But the warnings can't be suppressed without this IntentSanitizer.Builder() .allowAction(this.action!!) .allowExtra(PackageInstaller.EXTRA_SESSION_ID) { id -> id == activeSession?.second } .allowAnyComponent() .allowPackage { // There is no way to check the actual installer name so allow all. true } .build() .sanitizeByFiltering(this) } if (userAction == null) { logcat(LogPriority.ERROR) { "Fatal error for $intent" } continueQueue(InstallStep.Error) return } userAction.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) service.startActivity(userAction) } PackageInstaller.STATUS_FAILURE_ABORTED -> { continueQueue(InstallStep.Idle) } PackageInstaller.STATUS_SUCCESS -> continueQueue(InstallStep.Installed) else -> continueQueue(InstallStep.Error) } } } private var activeSession: Pair? = null // Always ready override var ready = true override fun processEntry(entry: Entry) { super.processEntry(entry) activeSession = null try { val installParams = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { installParams.setRequireUserAction(PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED) } activeSession = entry to packageInstaller.createSession(installParams) val fileSize = service.getUriSize(entry.uri) ?: throw IllegalStateException() installParams.setSize(fileSize) val inputStream = service.contentResolver.openInputStream(entry.uri) ?: throw IllegalStateException() val session = packageInstaller.openSession(activeSession!!.second) val outputStream = session.openWrite(entry.downloadId.toString(), 0, fileSize) session.use { arrayOf(inputStream, outputStream).use { inputStream.copyTo(outputStream) session.fsync(outputStream) } service.contentResolver.delete(entry.uri, null, null) val intentSender = PendingIntent.getBroadcast( service, activeSession!!.second, Intent(INSTALL_ACTION).setPackage(service.packageName), if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0, ).intentSender @SuppressLint("RequestInstallPackagesPolicy") session.commit(intentSender) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to install extension ${entry.downloadId} ${entry.uri}" } activeSession?.let { (_, sessionId) -> packageInstaller.abandonSession(sessionId) } continueQueue(InstallStep.Error) } } override fun cancelEntry(entry: Entry): Boolean { activeSession?.let { (activeEntry, sessionId) -> if (activeEntry == entry) { packageInstaller.abandonSession(sessionId) return false } } return true } override fun onDestroy() { service.unregisterReceiver(packageActionReceiver) super.onDestroy() } init { ContextCompat.registerReceiver( service, packageActionReceiver, IntentFilter(INSTALL_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED, ) } } private const val INSTALL_ACTION = "PackageInstallerInstaller.INSTALL_ACTION" ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt ================================================ package eu.kanade.tachiyomi.extension.installer import android.app.Service import android.content.BroadcastReceiver import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.ServiceConnection import android.content.pm.PackageInstaller import android.content.pm.PackageManager import android.os.IBinder import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import logcat.LogPriority import mihon.app.shizuku.IShellInterface import mihon.app.shizuku.ShellInterface import rikka.shizuku.Shizuku import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR class ShizukuInstaller(private val service: Service) : Installer(service) { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) private var shellInterface: IShellInterface? = null private val shizukuArgs by lazy { Shizuku.UserServiceArgs( ComponentName(service, ShellInterface::class.java), ) .tag("shizuku_service") .processNameSuffix("shizuku_service") .debuggable(BuildConfig.DEBUG) .daemon(false) } private val connection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName?, service: IBinder?) { shellInterface = IShellInterface.Stub.asInterface(service) ready = true checkQueue() } override fun onServiceDisconnected(name: ComponentName?) { shellInterface = null } } private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, Int.MIN_VALUE) val message = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) val packageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME) if (status == PackageInstaller.STATUS_SUCCESS) { continueQueue(InstallStep.Installed) } else { logcat(LogPriority.ERROR) { "Failed to install extension $packageName: $message" } continueQueue(InstallStep.Error) } } } private val shizukuDeadListener = Shizuku.OnBinderDeadListener { logcat { "Shizuku was killed prematurely" } service.stopSelf() } private val shizukuPermissionListener = object : Shizuku.OnRequestPermissionResultListener { override fun onRequestPermissionResult(requestCode: Int, grantResult: Int) { if (requestCode == SHIZUKU_PERMISSION_REQUEST_CODE) { if (grantResult == PackageManager.PERMISSION_GRANTED) { checkQueue() Shizuku.bindUserService(shizukuArgs, connection) } else { service.stopSelf() } Shizuku.removeRequestPermissionResultListener(this) } } } fun initShizuku() { if (ready) return if (!Shizuku.pingBinder()) { logcat(LogPriority.ERROR) { "Shizuku is not ready to use" } service.toast(MR.strings.ext_installer_shizuku_stopped) service.stopSelf() return } if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { Shizuku.bindUserService(shizukuArgs, connection) } else { Shizuku.addRequestPermissionResultListener(shizukuPermissionListener) Shizuku.requestPermission(SHIZUKU_PERMISSION_REQUEST_CODE) } } override var ready = false override fun processEntry(entry: Entry) { super.processEntry(entry) try { service.contentResolver.openAssetFileDescriptor(entry.uri, "r").use { shellInterface?.install(it) } service.contentResolver.delete(entry.uri, null, null) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to install extension ${entry.downloadId} ${entry.uri}" } continueQueue(InstallStep.Error) } } // Don't cancel if entry is already started installing override fun cancelEntry(entry: Entry): Boolean = getActiveEntry() != entry override fun onDestroy() { Shizuku.removeBinderDeadListener(shizukuDeadListener) Shizuku.removeRequestPermissionResultListener(shizukuPermissionListener) if (Shizuku.pingBinder()) { try { Shizuku.unbindUserService(shizukuArgs, connection, true) } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Failed to unbind shizuku service" } } } service.unregisterReceiver(receiver) logcat { "ShizukuInstaller destroy" } scope.cancel() super.onDestroy() } init { Shizuku.addBinderDeadListener(shizukuDeadListener) ContextCompat.registerReceiver( service, receiver, IntentFilter(ACTION_INSTALL_RESULT), ContextCompat.RECEIVER_EXPORTED, ) initShizuku() } } private const val SHIZUKU_PERMISSION_REQUEST_CODE = 14045 const val ACTION_INSTALL_RESULT = "${BuildConfig.APPLICATION_ID}.ACTION_INSTALL_RESULT" ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt ================================================ package eu.kanade.tachiyomi.extension.model import android.graphics.drawable.Drawable import eu.kanade.tachiyomi.source.Source import tachiyomi.domain.source.model.StubSource sealed class Extension { abstract val name: String abstract val pkgName: String abstract val versionName: String abstract val versionCode: Long abstract val libVersion: Double abstract val lang: String? abstract val isNsfw: Boolean data class Installed( override val name: String, override val pkgName: String, override val versionName: String, override val versionCode: Long, override val libVersion: Double, override val lang: String, override val isNsfw: Boolean, val pkgFactory: String?, val sources: List, val icon: Drawable?, val hasUpdate: Boolean = false, val isObsolete: Boolean = false, val isShared: Boolean, val repoUrl: String? = null, ) : Extension() data class Available( override val name: String, override val pkgName: String, override val versionName: String, override val versionCode: Long, override val libVersion: Double, override val lang: String, override val isNsfw: Boolean, val sources: List, val apkName: String, val iconUrl: String, val repoUrl: String, ) : Extension() { data class Source( val id: Long, val lang: String, val name: String, val baseUrl: String, ) { fun toStubSource(): StubSource { return StubSource( id = this.id, lang = this.lang, name = this.name, ) } } } data class Untrusted( override val name: String, override val pkgName: String, override val versionName: String, override val versionCode: Long, override val libVersion: Double, val signatureHash: String, override val lang: String? = null, override val isNsfw: Boolean = false, ) : Extension() } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/model/InstallStep.kt ================================================ package eu.kanade.tachiyomi.extension.model enum class InstallStep { Idle, Pending, Downloading, Installing, Installed, Error, ; fun isCompleted(): Boolean { return this == Installed || this == Error || this == Idle } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/model/LoadResult.kt ================================================ package eu.kanade.tachiyomi.extension.model sealed interface LoadResult { data class Success(val extension: Extension.Installed) : LoadResult data class Untrusted(val extension: Extension.Untrusted) : LoadResult data object Error : LoadResult } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallActivity.kt ================================================ package eu.kanade.tachiyomi.extension.util import android.app.Activity import android.content.Intent import android.os.Bundle import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.util.system.hasMiuiPackageInstaller import eu.kanade.tachiyomi.util.system.toast import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.seconds /** * Activity used to install extensions, because we can only receive the result of the installation * with [startActivityForResult], which we need to update the UI. */ class ExtensionInstallActivity : Activity() { // MIUI package installer bug workaround private var ignoreUntil = 0L private var ignoreResult = false private var hasIgnoredResult = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @Suppress("DEPRECATION") val installIntent = Intent(Intent.ACTION_INSTALL_PACKAGE) .setDataAndType(intent.data, intent.type) .putExtra(Intent.EXTRA_RETURN_RESULT, true) .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) if (hasMiuiPackageInstaller) { ignoreResult = true ignoreUntil = System.nanoTime() + 1.seconds.inWholeNanoseconds } try { startActivityForResult(installIntent, INSTALL_REQUEST_CODE) } catch (error: Exception) { // Either install package can't be found (probably bots) or there's a security exception // with the download manager. Nothing we can workaround. toast(error.message) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (ignoreResult && System.nanoTime() < ignoreUntil) { hasIgnoredResult = true return } if (requestCode == INSTALL_REQUEST_CODE) { checkInstallationResult(resultCode) } finish() } override fun onStart() { super.onStart() if (hasIgnoredResult) { checkInstallationResult(RESULT_CANCELED) finish() } } override fun onDestroy() { super.onDestroy() intent.data?.let { contentResolver.delete(it, null, null) } } private fun checkInstallationResult(resultCode: Int) { val downloadId = intent.extras!!.getLong(ExtensionInstaller.EXTRA_DOWNLOAD_ID) val extensionManager = Injekt.get() val newStep = when (resultCode) { RESULT_OK -> InstallStep.Installed RESULT_CANCELED -> InstallStep.Idle else -> InstallStep.Error } extensionManager.updateInstallStep(downloadId, newStep) } } private const val INSTALL_REQUEST_CODE = 500 ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver.kt ================================================ package eu.kanade.tachiyomi.extension.util import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import androidx.core.content.ContextCompat import androidx.core.net.toUri import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.LoadResult import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.util.system.logcat /** * Broadcast receiver that listens for the system's packages installed, updated or removed, and only * notifies the given [listener] when the package is an extension. * * @param listener The listener that should be notified of extension installation events. */ internal class ExtensionInstallReceiver(private val listener: Listener) : BroadcastReceiver() { val scope = CoroutineScope(SupervisorJob()) fun register(context: Context) { ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_NOT_EXPORTED) } private val filter = IntentFilter().apply { addAction(Intent.ACTION_PACKAGE_ADDED) addAction(Intent.ACTION_PACKAGE_REPLACED) addAction(Intent.ACTION_PACKAGE_REMOVED) addAction(ACTION_EXTENSION_ADDED) addAction(ACTION_EXTENSION_REPLACED) addAction(ACTION_EXTENSION_REMOVED) addDataScheme("package") } /** * Called when one of the events of the [filter] is received. When the package is an extension, * it's loaded in background and it notifies the [listener] when finished. */ override fun onReceive(context: Context, intent: Intent?) { if (intent == null) return when (intent.action) { Intent.ACTION_PACKAGE_ADDED, ACTION_EXTENSION_ADDED -> { if (isReplacing(intent)) return scope.launch { when (val result = getExtensionFromIntent(context, intent)) { is LoadResult.Success -> listener.onExtensionInstalled(result.extension) is LoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension) else -> {} } } } Intent.ACTION_PACKAGE_REPLACED, ACTION_EXTENSION_REPLACED -> { scope.launch { when (val result = getExtensionFromIntent(context, intent)) { is LoadResult.Success -> listener.onExtensionUpdated(result.extension) is LoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension) else -> {} } } } Intent.ACTION_PACKAGE_REMOVED, ACTION_EXTENSION_REMOVED -> { if (isReplacing(intent)) return val pkgName = getPackageNameFromIntent(intent) if (pkgName != null) { listener.onPackageUninstalled(pkgName) } } } } /** * Returns true if this package is performing an update. * * @param intent The intent that triggered the event. */ private fun isReplacing(intent: Intent): Boolean { return intent.getBooleanExtra(Intent.EXTRA_REPLACING, false) } /** * Returns the extension triggered by the given intent. * * @param context The application context. * @param intent The intent containing the package name of the extension. */ private suspend fun getExtensionFromIntent(context: Context, intent: Intent?): LoadResult { val pkgName = getPackageNameFromIntent(intent) if (pkgName == null) { logcat(LogPriority.WARN) { "Package name not found" } return LoadResult.Error } return ExtensionLoader.loadExtensionFromPkgName(context, pkgName) } /** * Returns the package name of the installed, updated or removed application. */ private fun getPackageNameFromIntent(intent: Intent?): String? { return intent?.data?.encodedSchemeSpecificPart ?: return null } /** * Listener that receives extension installation events. */ interface Listener { fun onExtensionInstalled(extension: Extension.Installed) fun onExtensionUpdated(extension: Extension.Installed) fun onExtensionUntrusted(extension: Extension.Untrusted) fun onPackageUninstalled(pkgName: String) } companion object { private const val ACTION_EXTENSION_ADDED = "${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_ADDED" private const val ACTION_EXTENSION_REPLACED = "${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_REPLACED" private const val ACTION_EXTENSION_REMOVED = "${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_REMOVED" fun notifyAdded(context: Context, pkgName: String) { notify(context, pkgName, ACTION_EXTENSION_ADDED) } fun notifyReplaced(context: Context, pkgName: String) { notify(context, pkgName, ACTION_EXTENSION_REPLACED) } fun notifyRemoved(context: Context, pkgName: String) { notify(context, pkgName, ACTION_EXTENSION_REMOVED) } private fun notify(context: Context, pkgName: String, action: String) { Intent(action).apply { data = "package:$pkgName".toUri() `package` = context.packageName context.sendBroadcast(this) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallService.kt ================================================ package eu.kanade.tachiyomi.extension.util import android.app.Service import android.content.Context import android.content.Intent import android.net.Uri import android.os.IBinder import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.extension.installer.Installer import eu.kanade.tachiyomi.extension.installer.PackageInstallerInstaller import eu.kanade.tachiyomi.extension.installer.ShizukuInstaller import eu.kanade.tachiyomi.extension.util.ExtensionInstaller.Companion.EXTRA_DOWNLOAD_ID import eu.kanade.tachiyomi.util.system.getSerializableExtraCompat import eu.kanade.tachiyomi.util.system.notificationBuilder import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR class ExtensionInstallService : Service() { private var installer: Installer? = null override fun onCreate() { val notification = notificationBuilder(Notifications.CHANNEL_EXTENSIONS_UPDATE) { setSmallIcon(R.drawable.ic_mihon) setAutoCancel(false) setOngoing(true) setShowWhen(false) setContentTitle(stringResource(MR.strings.ext_install_service_notif)) setProgress(100, 100, true) }.build() startForeground(Notifications.ID_EXTENSION_INSTALLER, notification) } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val uri = intent?.data val id = intent?.getLongExtra(EXTRA_DOWNLOAD_ID, -1)?.takeIf { it != -1L } val installerUsed = intent?.getSerializableExtraCompat(EXTRA_INSTALLER) if (uri == null || id == null || installerUsed == null) { stopSelf() return START_NOT_STICKY } if (installer == null) { installer = when (installerUsed) { BasePreferences.ExtensionInstaller.PACKAGEINSTALLER -> PackageInstallerInstaller(this) BasePreferences.ExtensionInstaller.SHIZUKU -> ShizukuInstaller(this) else -> { logcat(LogPriority.ERROR) { "Not implemented for installer $installerUsed" } stopSelf() return START_NOT_STICKY } } } installer!!.addToQueue(id, uri) return START_NOT_STICKY } override fun onDestroy() { installer?.onDestroy() installer = null } override fun onBind(i: Intent?): IBinder? = null companion object { private const val EXTRA_INSTALLER = "EXTRA_INSTALLER" fun getIntent( context: Context, downloadId: Long, uri: Uri, installer: BasePreferences.ExtensionInstaller, ): Intent { return Intent(context, ExtensionInstallService::class.java) .setDataAndType(uri, ExtensionInstaller.APK_MIME) .putExtra(EXTRA_DOWNLOAD_ID, downloadId) .putExtra(EXTRA_INSTALLER, installer) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt ================================================ package eu.kanade.tachiyomi.extension.util import android.content.Context import android.content.Intent import androidx.core.content.ContextCompat import androidx.core.net.toUri import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.extension.installer.Installer import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.isPackageInstalled import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.launch import logcat.LogPriority import okhttp3.OkHttpClient import okhttp3.Request import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File /** * The installer which installs, updates and uninstalls the extensions. * * @param context The application context. */ internal class ExtensionInstaller( private val context: Context, ) { private val scope = CoroutineScope(Dispatchers.IO) private val activeJobs = mutableMapOf() private val activeSteps = mutableMapOf>() private val extensionInstaller = Injekt.get().extensionInstaller private val httpClient: OkHttpClient = Injekt.get().client /** * Adds the given extension to the downloads queue and returns an observable containing its * step in the installation process. * * @param url The url of the apk. * @param extension The extension to install. */ fun downloadAndInstall(url: String, extension: Extension): Flow { val downloadId = extension.pkgName.hashCode().toLong() cancelInstall(extension.pkgName) val step = MutableStateFlow(InstallStep.Pending) activeSteps[downloadId] = step val job = scope.launch { val tmpFile = File(context.cacheDir, "extension_${extension.pkgName}.apk") try { step.value = InstallStep.Downloading val request = Request.Builder().url(url).build() val response = httpClient.newCall(request).execute() if (!response.isSuccessful) { throw Exception("Failed to download extension") } response.body.byteStream().use { input -> tmpFile.outputStream().use { output -> input.copyTo(output) } } step.value = InstallStep.Installing installApk(downloadId, tmpFile) } catch (e: Exception) { if (e is InterruptedException) { // Canceled } else { logcat(LogPriority.ERROR, e) step.value = InstallStep.Error } } } activeJobs[extension.pkgName] = job return step.asStateFlow() .onCompletion { activeJobs.remove(extension.pkgName) activeSteps.remove(downloadId) job.cancel() } } /** * Starts an intent to install the extension at the given uri. * * @param tempFile The file of the extension to install. Delete after use. */ private fun installApk(downloadId: Long, tempFile: File) { when (val installer = extensionInstaller.get()) { BasePreferences.ExtensionInstaller.LEGACY -> { val intent = Intent(context, ExtensionInstallActivity::class.java) .setDataAndType(tempFile.getUriCompat(context), APK_MIME) .putExtra(EXTRA_DOWNLOAD_ID, downloadId) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION) context.startActivity(intent) } BasePreferences.ExtensionInstaller.PRIVATE -> { try { if (ExtensionLoader.installPrivateExtensionFile(context, tempFile)) { updateInstallStep(downloadId, InstallStep.Installed) } else { updateInstallStep(downloadId, InstallStep.Error) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to read downloaded extension file." } updateInstallStep(downloadId, InstallStep.Error) } tempFile.delete() } else -> { val intent = ExtensionInstallService.getIntent( context, downloadId, tempFile.getUriCompat(context), installer, ) ContextCompat.startForegroundService(context, intent) } } } /** * Cancels extension install and remove from download manager and installer. */ fun cancelInstall(pkgName: String) { activeJobs.remove(pkgName)?.cancel() Installer.cancelInstallQueue(context, pkgName.hashCode().toLong()) } /** * Starts an intent to uninstall the extension by the given package name. * * @param pkgName The package name of the extension to uninstall */ fun uninstallApk(pkgName: String) { if (context.isPackageInstalled(pkgName)) { @Suppress("DEPRECATION") val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE, "package:$pkgName".toUri()) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(intent) } else { ExtensionLoader.uninstallPrivateExtension(context, pkgName) ExtensionInstallReceiver.notifyRemoved(context, pkgName) } } /** * Sets the step of the installation of an extension. * * @param downloadId The id of the download. * @param step New install step. */ fun updateInstallStep(downloadId: Long, step: InstallStep) { activeSteps[downloadId]?.let { it.value = step } } companion object { const val APK_MIME = "application/vnd.android.package-archive" const val EXTRA_DOWNLOAD_ID = "ExtensionInstaller.extra.DOWNLOAD_ID" } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt ================================================ package eu.kanade.tachiyomi.extension.util import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Build import androidx.core.content.pm.PackageInfoCompat import eu.kanade.domain.extension.interactor.TrustExtension import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.LoadResult import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.util.lang.Hash import eu.kanade.tachiyomi.util.storage.copyAndSetReadOnlyTo import eu.kanade.tachiyomi.util.system.ChildFirstPathClassLoader import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.runBlocking import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.injectLazy import java.io.File /** * Class that handles the loading of the extensions. Supports two kinds of extensions: * * 1. Shared extension: This extension is installed to the system with package * installer, so other variants of Tachiyomi and its forks can also use this extension. * * 2. Private extension: This extension is put inside private data directory of the * running app, so this extension can only be used by the running app and not shared * with other apps. * * When both kinds of extensions are installed with a same package name, shared * extension will be used unless the version codes are different. In that case the * one with higher version code will be used. */ internal object ExtensionLoader { private val preferences: SourcePreferences by injectLazy() private val trustExtension: TrustExtension by injectLazy() private val loadNsfwSource by lazy { preferences.showNsfwSource.get() } private const val EXTENSION_FEATURE = "tachiyomi.extension" private const val METADATA_SOURCE_CLASS = "tachiyomi.extension.class" private const val METADATA_SOURCE_FACTORY = "tachiyomi.extension.factory" private const val METADATA_NSFW = "tachiyomi.extension.nsfw" const val LIB_VERSION_MIN = 1.4 const val LIB_VERSION_MAX = 1.5 @Suppress("DEPRECATION") private val PACKAGE_FLAGS = PackageManager.GET_CONFIGURATIONS or PackageManager.GET_META_DATA or PackageManager.GET_SIGNATURES or (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) PackageManager.GET_SIGNING_CERTIFICATES else 0) private const val PRIVATE_EXTENSION_EXTENSION = "ext" private fun getPrivateExtensionDir(context: Context) = File(context.filesDir, "exts") fun installPrivateExtensionFile(context: Context, file: File): Boolean { val extension = context.packageManager.getPackageArchiveInfo(file.absolutePath, PACKAGE_FLAGS) ?.takeIf { isPackageAnExtension(it) } ?: return false val currentExtension = getExtensionPackageInfoFromPkgName(context, extension.packageName) if (currentExtension != null) { if (PackageInfoCompat.getLongVersionCode(extension) < PackageInfoCompat.getLongVersionCode(currentExtension) ) { logcat(LogPriority.ERROR) { "Installed extension version is higher. Downgrading is not allowed." } return false } val extensionSignatures = getSignatures(extension) if (extensionSignatures.isNullOrEmpty()) { logcat(LogPriority.ERROR) { "Extension to be installed is not signed." } return false } if (!extensionSignatures.containsAll(getSignatures(currentExtension)!!)) { logcat(LogPriority.ERROR) { "Installed extension signature is not matched." } return false } } val target = File(getPrivateExtensionDir(context), "${extension.packageName}.$PRIVATE_EXTENSION_EXTENSION") return try { target.delete() file.copyAndSetReadOnlyTo(target, overwrite = true) if (currentExtension != null) { ExtensionInstallReceiver.notifyReplaced(context, extension.packageName) } else { ExtensionInstallReceiver.notifyAdded(context, extension.packageName) } true } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to copy extension file." } target.delete() false } } fun uninstallPrivateExtension(context: Context, pkgName: String) { File(getPrivateExtensionDir(context), "$pkgName.$PRIVATE_EXTENSION_EXTENSION").delete() } /** * Return a list of all the available extensions initialized concurrently. * * @param context The application context. */ fun loadExtensions(context: Context): List { val pkgManager = context.packageManager val installedPkgs = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { pkgManager.getInstalledPackages(PackageManager.PackageInfoFlags.of(PACKAGE_FLAGS.toLong())) } else { pkgManager.getInstalledPackages(PACKAGE_FLAGS) } val sharedExtPkgs = installedPkgs .asSequence() .filter { isPackageAnExtension(it) } .map { ExtensionInfo(packageInfo = it, isShared = true) } val privateExtPkgs = getPrivateExtensionDir(context) .listFiles() ?.asSequence() ?.filter { it.isFile && it.extension == PRIVATE_EXTENSION_EXTENSION } ?.mapNotNull { // Just in case, since Android 14+ requires them to be read-only if (it.canWrite()) { it.setReadOnly() } val path = it.absolutePath pkgManager.getPackageArchiveInfo(path, PACKAGE_FLAGS) ?.apply { applicationInfo!!.fixBasePaths(path) } } ?.filter { isPackageAnExtension(it) } ?.map { ExtensionInfo(packageInfo = it, isShared = false) } ?: emptySequence() val extPkgs = (sharedExtPkgs + privateExtPkgs) // Remove duplicates. Shared takes priority than private by default .distinctBy { it.packageInfo.packageName } // Compare version number .mapNotNull { sharedPkg -> val privatePkg = privateExtPkgs .singleOrNull { it.packageInfo.packageName == sharedPkg.packageInfo.packageName } selectExtensionPackage(sharedPkg, privatePkg) } .toList() if (extPkgs.isEmpty()) return emptyList() // Load each extension concurrently and wait for completion return runBlocking { val deferred = extPkgs.map { async { loadExtension(context, it) } } deferred.awaitAll() } } /** * Attempts to load an extension from the given package name. It checks if the extension * contains the required feature flag before trying to load it. */ suspend fun loadExtensionFromPkgName(context: Context, pkgName: String): LoadResult { val extensionPackage = getExtensionInfoFromPkgName(context, pkgName) if (extensionPackage == null) { logcat(LogPriority.ERROR) { "Extension package is not found ($pkgName)" } return LoadResult.Error } return loadExtension(context, extensionPackage) } fun getExtensionPackageInfoFromPkgName(context: Context, pkgName: String): PackageInfo? { return getExtensionInfoFromPkgName(context, pkgName)?.packageInfo } private fun getExtensionInfoFromPkgName(context: Context, pkgName: String): ExtensionInfo? { val privateExtensionFile = File(getPrivateExtensionDir(context), "$pkgName.$PRIVATE_EXTENSION_EXTENSION") val privatePkg = if (privateExtensionFile.isFile) { context.packageManager.getPackageArchiveInfo(privateExtensionFile.absolutePath, PACKAGE_FLAGS) ?.takeIf { isPackageAnExtension(it) } ?.let { it.applicationInfo!!.fixBasePaths(privateExtensionFile.absolutePath) ExtensionInfo( packageInfo = it, isShared = false, ) } } else { null } val sharedPkg = try { context.packageManager.getPackageInfo(pkgName, PACKAGE_FLAGS) .takeIf { isPackageAnExtension(it) } ?.let { ExtensionInfo( packageInfo = it, isShared = true, ) } } catch (error: PackageManager.NameNotFoundException) { null } return selectExtensionPackage(sharedPkg, privatePkg) } /** * Loads an extension * * @param context The application context. * @param extensionInfo The extension to load. */ private suspend fun loadExtension(context: Context, extensionInfo: ExtensionInfo): LoadResult { val pkgManager = context.packageManager val pkgInfo = extensionInfo.packageInfo val appInfo = pkgInfo.applicationInfo!! val pkgName = pkgInfo.packageName val extName = pkgManager.getApplicationLabel(appInfo).toString().substringAfter("Tachiyomi: ") val versionName = pkgInfo.versionName val versionCode = PackageInfoCompat.getLongVersionCode(pkgInfo) if (versionName.isNullOrEmpty()) { logcat(LogPriority.WARN) { "Missing versionName for extension $extName" } return LoadResult.Error } // Validate lib version val libVersion = versionName.substringBeforeLast('.').toDoubleOrNull() if (libVersion == null || libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) { logcat(LogPriority.WARN) { "Lib version is $libVersion, while only versions " + "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed" } return LoadResult.Error } val signatures = getSignatures(pkgInfo) if (signatures.isNullOrEmpty()) { logcat(LogPriority.WARN) { "Package $pkgName isn't signed" } return LoadResult.Error } else if (!trustExtension.isTrusted(pkgInfo, signatures)) { val extension = Extension.Untrusted( extName, pkgName, versionName, versionCode, libVersion, signatures.last(), ) logcat(LogPriority.WARN) { "Extension $pkgName isn't trusted" } return LoadResult.Untrusted(extension) } val isNsfw = appInfo.metaData.getInt(METADATA_NSFW) == 1 if (!loadNsfwSource && isNsfw) { logcat(LogPriority.WARN) { "NSFW extension $pkgName not allowed" } return LoadResult.Error } val classLoader = try { ChildFirstPathClassLoader(appInfo.sourceDir, null, context.classLoader) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($pkgName)" } return LoadResult.Error } val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!! .split(";") .map { val sourceClass = it.trim() if (sourceClass.startsWith(".")) { pkgInfo.packageName + sourceClass } else { sourceClass } } .flatMap { try { when (val obj = Class.forName(it, false, classLoader).getDeclaredConstructor().newInstance()) { is Source -> listOf(obj) is SourceFactory -> obj.createSources() else -> throw Exception("Unknown source class type: ${obj.javaClass}") } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($it)" } return LoadResult.Error } } val langs = sources.filterIsInstance() .map { it.lang } .toSet() val lang = when (langs.size) { 0 -> "" 1 -> langs.first() else -> "all" } val extension = Extension.Installed( name = extName, pkgName = pkgName, versionName = versionName, versionCode = versionCode, libVersion = libVersion, lang = lang, isNsfw = isNsfw, sources = sources, pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY), icon = appInfo.loadIcon(pkgManager), isShared = extensionInfo.isShared, ) return LoadResult.Success(extension) } /** * Choose which extension package to use based on version code * * @param shared extension installed to system * @param private extension installed to data directory */ private fun selectExtensionPackage(shared: ExtensionInfo?, private: ExtensionInfo?): ExtensionInfo? { when { private == null && shared != null -> return shared shared == null && private != null -> return private shared == null && private == null -> return null } return if (PackageInfoCompat.getLongVersionCode(shared!!.packageInfo) >= PackageInfoCompat.getLongVersionCode(private!!.packageInfo) ) { shared } else { private } } /** * Returns true if the given package is an extension. * * @param pkgInfo The package info of the application. */ private fun isPackageAnExtension(pkgInfo: PackageInfo): Boolean { return pkgInfo.reqFeatures.orEmpty().any { it.name == EXTENSION_FEATURE } } /** * Returns the signatures of the package or null if it's not signed. * * @param pkgInfo The package info of the application. * @return List SHA256 digest of the signatures */ private fun getSignatures(pkgInfo: PackageInfo): List? { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { val signingInfo = pkgInfo.signingInfo!! if (signingInfo.hasMultipleSigners()) { signingInfo.apkContentsSigners } else { signingInfo.signingCertificateHistory } } else { @Suppress("DEPRECATION") pkgInfo.signatures } ?.map { Hash.sha256(it.toByteArray()) } ?.toList() } /** * On Android 13+ the ApplicationInfo generated by getPackageArchiveInfo doesn't * have sourceDir which breaks assets loading (used for getting icon here). */ private fun ApplicationInfo.fixBasePaths(apkPath: String) { if (sourceDir == null) { sourceDir = apkPath } if (publicSourceDir == null) { publicSourceDir = apkPath } } private data class ExtensionInfo( val packageInfo: PackageInfo, val isShared: Boolean, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt ================================================ package eu.kanade.tachiyomi.source import android.content.Context import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import tachiyomi.domain.source.model.StubSource import tachiyomi.domain.source.repository.StubSourceRepository import tachiyomi.domain.source.service.SourceManager import tachiyomi.source.local.LocalSource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import java.util.concurrent.ConcurrentHashMap class AndroidSourceManager( private val context: Context, private val extensionManager: ExtensionManager, private val sourceRepository: StubSourceRepository, ) : SourceManager { private val _isInitialized = MutableStateFlow(false) override val isInitialized: StateFlow = _isInitialized.asStateFlow() private val downloadManager: DownloadManager by injectLazy() private val scope = CoroutineScope(Job() + Dispatchers.IO) private val sourcesMapFlow = MutableStateFlow(ConcurrentHashMap()) private val stubSourcesMap = ConcurrentHashMap() override val catalogueSources: Flow> = sourcesMapFlow.map { it.values.filterIsInstance() } init { scope.launch { extensionManager.installedExtensionsFlow .collectLatest { extensions -> val mutableMap = ConcurrentHashMap( mapOf( LocalSource.ID to LocalSource( context, Injekt.get(), Injekt.get(), ), ), ) extensions.forEach { extension -> extension.sources.forEach { mutableMap[it.id] = it registerStubSource(StubSource.from(it)) } } sourcesMapFlow.value = mutableMap _isInitialized.value = true } } scope.launch { sourceRepository.subscribeAll() .collectLatest { sources -> val mutableMap = stubSourcesMap.toMutableMap() sources.forEach { mutableMap[it.id] = it } } } } override fun get(sourceKey: Long): Source? { return sourcesMapFlow.value[sourceKey] } override fun getOrStub(sourceKey: Long): Source { return sourcesMapFlow.value[sourceKey] ?: stubSourcesMap.getOrPut(sourceKey) { runBlocking { createStubSource(sourceKey) } } } override fun getOnlineSources() = sourcesMapFlow.value.values.filterIsInstance() override fun getCatalogueSources() = sourcesMapFlow.value.values.filterIsInstance() override fun getStubSources(): List { val onlineSourceIds = getOnlineSources().map { it.id } return stubSourcesMap.values.filterNot { it.id in onlineSourceIds } } private fun registerStubSource(source: StubSource) { scope.launch { val dbSource = sourceRepository.getStubSource(source.id) if (dbSource == source) return@launch sourceRepository.upsertStubSource(source.id, source.lang, source.name) if (dbSource != null) { downloadManager.renameSource(dbSource, source) } } } private suspend fun createStubSource(id: Long): StubSource { sourceRepository.getStubSource(id)?.let { return it } extensionManager.getSourceData(id)?.let { registerStubSource(it) return it } return StubSource(id = id, lang = "", name = "") } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt ================================================ package eu.kanade.tachiyomi.source import eu.kanade.domain.source.service.SourcePreferences import tachiyomi.domain.source.model.StubSource import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get fun Source.getNameForMangaInfo(): String { val preferences = Injekt.get() val enabledLanguages = preferences.enabledLanguages.get() .filterNot { it in listOf("all", "other") } val hasOneActiveLanguages = enabledLanguages.size == 1 val isInEnabledLanguages = lang in enabledLanguages return when { // For edge cases where user disables a source they got manga of in their library. hasOneActiveLanguages && !isInEnabledLanguages -> toString() // Hide the language tag when only one language is used. hasOneActiveLanguages && isInEnabledLanguages -> name else -> toString() } } fun Source.isLocalOrStub(): Boolean = isLocal() || this is StubSource ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt ================================================ package eu.kanade.tachiyomi.ui.base.activity import android.content.Context import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegateImpl import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegateImpl import eu.kanade.tachiyomi.util.system.prepareTabletUiContext open class BaseActivity : AppCompatActivity(), SecureActivityDelegate by SecureActivityDelegateImpl(), ThemingDelegate by ThemingDelegateImpl() { override fun attachBaseContext(newBase: Context) { super.attachBaseContext(newBase.prepareTabletUiContext()) } override fun onCreate(savedInstanceState: Bundle?) { applyAppTheme(this) super.onCreate(savedInstanceState) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt ================================================ package eu.kanade.tachiyomi.ui.base.delegate import android.app.Activity import android.content.Intent import android.os.Build import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.ui.security.UnlockActivity import eu.kanade.tachiyomi.util.system.AuthenticatorUtil import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported import eu.kanade.tachiyomi.util.view.setSecureScreen import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy interface SecureActivityDelegate { fun registerSecureActivity(activity: AppCompatActivity) companion object { /** * Set to true if we need the first activity to authenticate. * * Always require unlock if app is killed. */ var requireUnlock = true fun onApplicationStopped() { val preferences = Injekt.get() if (!preferences.useAuthenticator.get()) return if (!AuthenticatorUtil.isAuthenticating) { // Return if app is closed in locked state if (requireUnlock) return // Save app close time if lock is delayed if (preferences.lockAppAfter.get() > 0) { preferences.lastAppClosed.set(System.currentTimeMillis()) } } } /** * Checks if unlock is needed when app comes foreground. */ fun onApplicationStart() { val preferences = Injekt.get() if (!preferences.useAuthenticator.get()) return val lastClosedPref = preferences.lastAppClosed // `requireUnlock` can be true on process start or if app was closed in locked state if (!AuthenticatorUtil.isAuthenticating && !requireUnlock) { requireUnlock = when (val lockDelay = preferences.lockAppAfter.get()) { -1 -> false // Never 0 -> true // Always else -> lastClosedPref.get() + lockDelay * 60_000 <= System.currentTimeMillis() } } lastClosedPref.delete() } fun unlock() { requireUnlock = false } } } class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObserver { private lateinit var activity: AppCompatActivity private val preferences: BasePreferences by injectLazy() private val securityPreferences: SecurityPreferences by injectLazy() override fun registerSecureActivity(activity: AppCompatActivity) { this.activity = activity activity.lifecycle.addObserver(this) } override fun onCreate(owner: LifecycleOwner) { setSecureScreen() } override fun onResume(owner: LifecycleOwner) { setAppLock() } private fun setSecureScreen() { val secureScreenFlow = securityPreferences.secureScreen.changes() val incognitoModeFlow = preferences.incognitoMode.changes() combine(secureScreenFlow, incognitoModeFlow) { secureScreen, incognitoMode -> secureScreen == SecurityPreferences.SecureScreenMode.ALWAYS || (secureScreen == SecurityPreferences.SecureScreenMode.INCOGNITO && incognitoMode) } .onEach(activity.window::setSecureScreen) .launchIn(activity.lifecycleScope) } private fun setAppLock() { if (!securityPreferences.useAuthenticator.get()) return if (activity.isAuthenticationSupported()) { if (!SecureActivityDelegate.requireUnlock) return activity.startActivity(Intent(activity, UnlockActivity::class.java)) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { activity.overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, 0, 0) } else { @Suppress("DEPRECATION") activity.overridePendingTransition(0, 0) } } else { securityPreferences.useAuthenticator.set(false) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt ================================================ package eu.kanade.tachiyomi.ui.base.delegate import android.app.Activity import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.AppTheme import eu.kanade.tachiyomi.R import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get interface ThemingDelegate { fun applyAppTheme(activity: Activity) companion object { fun getThemeResIds(appTheme: AppTheme, isAmoled: Boolean): List { return buildList(2) { add(themeResources.getOrDefault(appTheme, R.style.Theme_Tachiyomi)) if (isAmoled) add(R.style.ThemeOverlay_Tachiyomi_Amoled) } } } } class ThemingDelegateImpl : ThemingDelegate { override fun applyAppTheme(activity: Activity) { val uiPreferences = Injekt.get() ThemingDelegate.getThemeResIds(uiPreferences.appTheme.get(), uiPreferences.themeDarkAmoled.get()) .forEach(activity::setTheme) } } private val themeResources: Map = mapOf( AppTheme.MONET to R.style.Theme_Tachiyomi_Monet, AppTheme.CATPPUCCIN to R.style.Theme_Tachiyomi_Catppuccin, AppTheme.GREEN_APPLE to R.style.Theme_Tachiyomi_GreenApple, AppTheme.LAVENDER to R.style.Theme_Tachiyomi_Lavender, AppTheme.MIDNIGHT_DUSK to R.style.Theme_Tachiyomi_MidnightDusk, AppTheme.MONOCHROME to R.style.Theme_Tachiyomi_Monochrome, AppTheme.NORD to R.style.Theme_Tachiyomi_Nord, AppTheme.STRAWBERRY_DAIQUIRI to R.style.Theme_Tachiyomi_StrawberryDaiquiri, AppTheme.TAKO to R.style.Theme_Tachiyomi_Tako, AppTheme.TEALTURQUOISE to R.style.Theme_Tachiyomi_TealTurquoise, AppTheme.YINYANG to R.style.Theme_Tachiyomi_YinYang, AppTheme.YOTSUBA to R.style.Theme_Tachiyomi_Yotsuba, AppTheme.TIDAL_WAVE to R.style.Theme_Tachiyomi_TidalWave, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt ================================================ package eu.kanade.tachiyomi.ui.browse import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.components.TabbedScreen import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.extension.ExtensionsScreenModel import eu.kanade.tachiyomi.ui.browse.extension.extensionsTab import eu.kanade.tachiyomi.ui.browse.migration.sources.migrateSourceTab import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.browse.source.sourcesTab import eu.kanade.tachiyomi.ui.main.MainActivity import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource data object BrowseTab : Tab { override val options: TabOptions @Composable get() { val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_browse_enter) return TabOptions( index = 3u, title = stringResource(MR.strings.browse), icon = rememberAnimatedVectorPainter(image, isSelected), ) } override suspend fun onReselect(navigator: Navigator) { navigator.push(GlobalSearchScreen()) } private val switchToExtensionTabChannel = Channel(1, BufferOverflow.DROP_OLDEST) fun showExtension() { switchToExtensionTabChannel.trySend(Unit) } @Composable override fun Content() { val context = LocalContext.current // Hoisted for extensions tab's search bar val extensionsScreenModel = rememberScreenModel { ExtensionsScreenModel() } val extensionsState by extensionsScreenModel.state.collectAsState() val tabs = persistentListOf( sourcesTab(), extensionsTab(extensionsScreenModel), migrateSourceTab(), ) val state = rememberPagerState { tabs.size } TabbedScreen( titleRes = MR.strings.browse, tabs = tabs, state = state, searchQuery = extensionsState.searchQuery, onChangeSearchQuery = extensionsScreenModel::search, ) LaunchedEffect(Unit) { switchToExtensionTabChannel.receiveAsFlow() .collectLatest { state.scrollToPage(1) } } LaunchedEffect(Unit) { (context as? MainActivity)?.ready = true } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.ExtensionFilterScreen import eu.kanade.presentation.util.Screen import kotlinx.coroutines.flow.collectLatest import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class ExtensionFilterScreen : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { ExtensionFilterScreenModel() } val state by screenModel.state.collectAsState() if (state is ExtensionFilterState.Loading) { LoadingScreen() return } val successState = state as ExtensionFilterState.Success ExtensionFilterScreen( navigateUp = navigator::pop, state = successState, onClickToggle = screenModel::toggle, ) LaunchedEffect(Unit) { screenModel.events.collectLatest { when (it) { ExtensionFilterEvent.FailedFetchingLanguages -> { context.stringResource(MR.strings.internal_error) } } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.extension.interactor.GetExtensionLanguages import eu.kanade.domain.source.interactor.ToggleLanguage import eu.kanade.domain.source.service.SourcePreferences import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionFilterScreenModel( private val preferences: SourcePreferences = Injekt.get(), private val getExtensionLanguages: GetExtensionLanguages = Injekt.get(), private val toggleLanguage: ToggleLanguage = Injekt.get(), ) : StateScreenModel(ExtensionFilterState.Loading) { private val _events: Channel = Channel() val events: Flow = _events.receiveAsFlow() init { screenModelScope.launch { combine( getExtensionLanguages.subscribe(), preferences.enabledLanguages.changes(), ) { a, b -> a to b } .catch { throwable -> logcat(LogPriority.ERROR, throwable) _events.send(ExtensionFilterEvent.FailedFetchingLanguages) } .collectLatest { (extensionLanguages, enabledLanguages) -> mutableState.update { ExtensionFilterState.Success( languages = extensionLanguages.toImmutableList(), enabledLanguages = enabledLanguages.toImmutableSet(), ) } } } } fun toggle(language: String) { toggleLanguage.await(language) } } sealed interface ExtensionFilterEvent { data object FailedFetchingLanguages : ExtensionFilterEvent } sealed interface ExtensionFilterState { @Immutable data object Loading : ExtensionFilterState @Immutable data class Success( val languages: ImmutableList, val enabledLanguages: ImmutableSet = persistentSetOf(), ) : ExtensionFilterState { val isEmpty: Boolean get() = languages.isEmpty() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension import android.app.Application import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import dev.icerock.moko.resources.StringResource import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.extension.interactor.GetExtensionsByType import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.takeWhile import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import tachiyomi.core.common.util.lang.launchIO import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.seconds class ExtensionsScreenModel( preferences: SourcePreferences = Injekt.get(), basePreferences: BasePreferences = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), private val getExtensions: GetExtensionsByType = Injekt.get(), ) : StateScreenModel(State()) { private val currentDownloads = MutableStateFlow>(hashMapOf()) init { val context = Injekt.get() val extensionMapper: (Map) -> ((Extension) -> ExtensionUiModel.Item) = { map -> { ExtensionUiModel.Item(it, map[it.pkgName] ?: InstallStep.Idle) } } screenModelScope.launchIO { combine( state.map { it.searchQuery } .distinctUntilChanged() .debounce(SEARCH_DEBOUNCE_MILLIS) .map { searchQueryPredicate(it ?: "") }, currentDownloads, getExtensions.subscribe(), ) { predicate, downloads, (_updates, _installed, _available, _untrusted) -> buildMap { val updates = _updates.filter(predicate).map(extensionMapper(downloads)) if (updates.isNotEmpty()) { put(ExtensionUiModel.Header.Resource(MR.strings.ext_updates_pending), updates) } val installed = _installed.filter(predicate).map(extensionMapper(downloads)) val untrusted = _untrusted.filter(predicate).map(extensionMapper(downloads)) if (installed.isNotEmpty() || untrusted.isNotEmpty()) { put(ExtensionUiModel.Header.Resource(MR.strings.ext_installed), installed + untrusted) } val languagesWithExtensions = _available .filter(predicate) .groupBy { it.lang } .toSortedMap(LocaleHelper.comparator) .map { (lang, exts) -> ExtensionUiModel.Header.Text(LocaleHelper.getSourceDisplayName(lang, context)) to exts.map(extensionMapper(downloads)) } if (languagesWithExtensions.isNotEmpty()) { putAll(languagesWithExtensions) } } } .collectLatest { items -> mutableState.update { state -> state.copy( isLoading = false, items = items, ) } } } screenModelScope.launchIO { findAvailableExtensions() } preferences.extensionUpdatesCount.changes() .onEach { mutableState.update { state -> state.copy(updates = it) } } .launchIn(screenModelScope) basePreferences.extensionInstaller.changes() .onEach { mutableState.update { state -> state.copy(installer = it) } } .launchIn(screenModelScope) } fun searchQueryPredicate(query: String): (Extension) -> Boolean { val subqueries = query.split(",") .map { it.trim() } .filterNot { it.isBlank() } if (subqueries.isEmpty()) return { true } return { extension -> subqueries.any { subquery -> if (extension.name.contains(subquery, ignoreCase = true)) return@any true when (extension) { is Extension.Installed -> extension.sources.any { source -> source.name.contains(subquery, ignoreCase = true) || (source as? HttpSource)?.baseUrl?.contains(subquery, ignoreCase = true) == true || source.id == subquery.toLongOrNull() } is Extension.Available -> extension.sources.any { it.name.contains(subquery, ignoreCase = true) || it.baseUrl.contains(subquery, ignoreCase = true) || it.id == subquery.toLongOrNull() } else -> false } } } } fun search(query: String?) { mutableState.update { it.copy(searchQuery = query) } } fun updateAllExtensions() { screenModelScope.launchIO { state.value.items.values.flatten() .map { it.extension } .filterIsInstance() .filter { it.hasUpdate } .forEach(::updateExtension) } } fun installExtension(extension: Extension.Available) { screenModelScope.launchIO { extensionManager.installExtension(extension).collectToInstallUpdate(extension) } } fun updateExtension(extension: Extension.Installed) { screenModelScope.launchIO { extensionManager.updateExtension(extension).collectToInstallUpdate(extension) } } fun cancelInstallUpdateExtension(extension: Extension) { extensionManager.cancelInstallUpdateExtension(extension) removeDownloadState(extension) } private fun addDownloadState(extension: Extension, installStep: InstallStep) { currentDownloads.update { it + Pair(extension.pkgName, installStep) } } private fun removeDownloadState(extension: Extension) { currentDownloads.update { it - extension.pkgName } } private suspend fun Flow.collectToInstallUpdate(extension: Extension) = this .onEach { installStep -> addDownloadState(extension, installStep) } .takeWhile { installStep -> installStep != InstallStep.Installed } .onCompletion { removeDownloadState(extension) } .collect() fun uninstallExtension(extension: Extension) { extensionManager.uninstallExtension(extension) } fun findAvailableExtensions() { screenModelScope.launchIO { mutableState.update { it.copy(isRefreshing = true) } extensionManager.findAvailableExtensions() // Fake slower refresh so it doesn't seem like it's not doing anything delay(1.seconds) mutableState.update { it.copy(isRefreshing = false) } } } fun trustExtension(extension: Extension.Untrusted) { screenModelScope.launch { extensionManager.trust(extension) } } @Immutable data class State( val isLoading: Boolean = true, val isRefreshing: Boolean = false, val items: ItemGroups = mutableMapOf(), val updates: Int = 0, val installer: BasePreferences.ExtensionInstaller? = null, val searchQuery: String? = null, ) { val isEmpty = items.isEmpty() } } typealias ItemGroups = Map> object ExtensionUiModel { sealed interface Header { data class Resource(val textRes: StringResource) : Header data class Text(val text: String) : Header } data class Item( val extension: Extension, val installStep: InstallStep, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension import androidx.activity.compose.BackHandler import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.ExtensionScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import eu.kanade.tachiyomi.util.system.isPackageInstalled import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun extensionsTab( extensionsScreenModel: ExtensionsScreenModel, ): TabContent { val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val state by extensionsScreenModel.state.collectAsState() var privateExtensionToUninstall by remember { mutableStateOf(null) } return TabContent( titleRes = MR.strings.label_extensions, badgeNumber = state.updates.takeIf { it > 0 }, searchEnabled = true, actions = persistentListOf( AppBar.OverflowAction( title = stringResource(MR.strings.action_filter), onClick = { navigator.push(ExtensionFilterScreen()) }, ), AppBar.OverflowAction( title = stringResource(MR.strings.label_extension_repos), onClick = { navigator.push(ExtensionReposScreen()) }, ), ), content = { contentPadding, _ -> BackHandler(enabled = state.searchQuery != null) { extensionsScreenModel.search(null) } ExtensionScreen( state = state, contentPadding = contentPadding, searchQuery = state.searchQuery, onLongClickItem = { extension -> when (extension) { is Extension.Available -> extensionsScreenModel.installExtension(extension) else -> { if (context.isPackageInstalled(extension.pkgName)) { extensionsScreenModel.uninstallExtension(extension) } else { privateExtensionToUninstall = extension } } } }, onClickItemCancel = extensionsScreenModel::cancelInstallUpdateExtension, onClickUpdateAll = extensionsScreenModel::updateAllExtensions, onOpenWebView = { extension -> extension.sources.getOrNull(0)?.let { navigator.push( WebViewScreen( url = it.baseUrl, initialTitle = it.name, sourceId = it.id, ), ) } }, onInstallExtension = extensionsScreenModel::installExtension, onOpenExtension = { navigator.push(ExtensionDetailsScreen(it.pkgName)) }, onTrustExtension = { extensionsScreenModel.trustExtension(it) }, onUninstallExtension = { extensionsScreenModel.uninstallExtension(it) }, onUpdateExtension = extensionsScreenModel::updateExtension, onRefresh = extensionsScreenModel::findAvailableExtensions, ) privateExtensionToUninstall?.let { extension -> ExtensionUninstallConfirmation( extensionName = extension.name, onClickConfirm = { extensionsScreenModel.uninstallExtension(extension) }, onDismissRequest = { privateExtensionToUninstall = null }, ) } }, ) } @Composable private fun ExtensionUninstallConfirmation( extensionName: String, onClickConfirm: () -> Unit, onDismissRequest: () -> Unit, ) { AlertDialog( title = { Text(text = stringResource(MR.strings.ext_confirm_remove)) }, text = { Text(text = stringResource(MR.strings.remove_private_extension_message, extensionName)) }, confirmButton = { TextButton( onClick = { onClickConfirm() onDismissRequest() }, ) { Text(text = stringResource(MR.strings.ext_remove)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.action_cancel)) } }, onDismissRequest = onDismissRequest, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension.details import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.ExtensionDetailsScreen import eu.kanade.presentation.util.Screen import kotlinx.coroutines.flow.collectLatest import tachiyomi.presentation.core.screens.LoadingScreen data class ExtensionDetailsScreen( private val pkgName: String, ) : Screen() { @Composable override fun Content() { val context = LocalContext.current val screenModel = rememberScreenModel { ExtensionDetailsScreenModel(pkgName = pkgName, context = context) } val state by screenModel.state.collectAsState() if (state.isLoading) { LoadingScreen() return } val navigator = LocalNavigator.currentOrThrow ExtensionDetailsScreen( navigateUp = navigator::pop, state = state, onClickSourcePreferences = { navigator.push(SourcePreferencesScreen(it)) }, onClickEnableAll = { screenModel.toggleSources(true) }, onClickDisableAll = { screenModel.toggleSources(false) }, onClickClearCookies = screenModel::clearCookies, onClickUninstall = screenModel::uninstallExtension, onClickSource = screenModel::toggleSource, onClickIncognito = screenModel::toggleIncognito, ) LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> if (event is ExtensionDetailsEvent.Uninstalled) { navigator.pop() } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension.details import android.content.Context import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.extension.interactor.ExtensionSourceItem import eu.kanade.domain.extension.interactor.GetExtensionSources import eu.kanade.domain.source.interactor.ToggleIncognito import eu.kanade.domain.source.interactor.ToggleSource import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import okhttp3.HttpUrl.Companion.toHttpUrl import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ExtensionDetailsScreenModel( pkgName: String, context: Context, private val network: NetworkHelper = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), private val getExtensionSources: GetExtensionSources = Injekt.get(), private val toggleSource: ToggleSource = Injekt.get(), private val toggleIncognito: ToggleIncognito = Injekt.get(), private val preferences: SourcePreferences = Injekt.get(), ) : StateScreenModel(State()) { private val _events: Channel = Channel() val events: Flow = _events.receiveAsFlow() init { screenModelScope.launch { launch { extensionManager.installedExtensionsFlow .map { it.firstOrNull { extension -> extension.pkgName == pkgName } } .collectLatest { extension -> if (extension == null) { _events.send(ExtensionDetailsEvent.Uninstalled) return@collectLatest } mutableState.update { state -> state.copy(extension = extension) } } } launch { state.collectLatest { state -> if (state.extension == null) return@collectLatest getExtensionSources.subscribe(state.extension) .map { it.sortedWith( compareBy( { !it.enabled }, { item -> item.source.name.takeIf { item.labelAsName } ?: LocaleHelper.getSourceDisplayName(item.source.lang, context).lowercase() }, ), ) } .catch { throwable -> logcat(LogPriority.ERROR, throwable) mutableState.update { it.copy(_sources = persistentListOf()) } } .collectLatest { sources -> mutableState.update { it.copy(_sources = sources.toImmutableList()) } } } } launch { preferences.incognitoExtensions .changes() .map { pkgName in it } .distinctUntilChanged() .collectLatest { isIncognito -> mutableState.update { it.copy(isIncognito = isIncognito) } } } } } fun clearCookies() { val extension = state.value.extension ?: return val urls = extension.sources .filterIsInstance() .mapNotNull { it.baseUrl.takeUnless { url -> url.isEmpty() } } .distinct() val cleared = urls.sumOf { try { network.cookieJar.remove(it.toHttpUrl()) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to clear cookies for $it" } 0 } } logcat { "Cleared $cleared cookies for: ${urls.joinToString()}" } } fun uninstallExtension() { val extension = state.value.extension ?: return extensionManager.uninstallExtension(extension) } fun toggleSource(sourceId: Long) { toggleSource.await(sourceId) } fun toggleSources(enable: Boolean) { state.value.extension?.sources ?.map { it.id } ?.let { toggleSource.await(it, enable) } } fun toggleIncognito(enable: Boolean) { state.value.extension?.pkgName?.let { packageName -> toggleIncognito.await(packageName, enable) } } @Immutable data class State( val extension: Extension.Installed? = null, val isIncognito: Boolean = false, private val _sources: ImmutableList? = null, ) { val sources: ImmutableList get() = _sources ?: persistentListOf() val isLoading: Boolean get() = extension == null || _sources == null } } sealed interface ExtensionDetailsEvent { data object Uninstalled : ExtensionDetailsEvent } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.extension.details import android.content.Context import android.os.Bundle import android.util.TypedValue import android.view.View import androidx.appcompat.view.ContextThemeWrapper import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentContainerView import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.commit import androidx.lifecycle.lifecycleScope import androidx.preference.DialogPreference import androidx.preference.EditTextPreference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceScreen import androidx.preference.forEach import androidx.preference.getOnBindEditTextListener import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.core.util.ifSourcesLoaded import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.sourcePreferences import eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText.Companion.setIncognito import tachiyomi.domain.source.service.SourceManager import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class SourcePreferencesScreen(val sourceId: Long) : Screen() { @Composable override fun Content() { if (!ifSourcesLoaded()) { LoadingScreen() return } val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow Scaffold( topBar = { AppBar( title = Injekt.get().getOrStub(sourceId).toString(), navigateUp = navigator::pop, scrollBehavior = it, ) }, ) { contentPadding -> FragmentContainer( fragmentManager = (context as FragmentActivity).supportFragmentManager, modifier = Modifier .fillMaxSize() .padding(contentPadding), ) { add(it, SourcePreferencesFragment.getInstance(sourceId), null) } } } /** * From https://stackoverflow.com/questions/60520145/fragment-container-in-jetpack-compose/70817794#70817794 */ @Composable private fun FragmentContainer( fragmentManager: FragmentManager, modifier: Modifier = Modifier, commit: FragmentTransaction.(containerId: Int) -> Unit, ) { val containerId by rememberSaveable { mutableIntStateOf(View.generateViewId()) } var initialized by rememberSaveable { mutableStateOf(false) } AndroidView( modifier = modifier, factory = { context -> FragmentContainerView(context) .apply { id = containerId } }, update = { view -> if (!initialized) { fragmentManager.commit { commit(view.id) } initialized = true } else { fragmentManager.onContainerAvailable(view) } }, ) } /** Access to package-private method in FragmentManager through reflection */ private fun FragmentManager.onContainerAvailable(view: FragmentContainerView) { val method = FragmentManager::class.java.getDeclaredMethod( "onContainerAvailable", FragmentContainerView::class.java, ) method.isAccessible = true method.invoke(this, view) } } class SourcePreferencesFragment : PreferenceFragmentCompat() { override fun getContext(): Context? { val superCtx = super.getContext() ?: return null val tv = TypedValue() superCtx.theme.resolveAttribute(R.attr.preferenceTheme, tv, true) return ContextThemeWrapper(superCtx, tv.resourceId) } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceScreen = populateScreen() } private fun populateScreen(): PreferenceScreen { val sourceId = requireArguments().getLong(SOURCE_ID) val source = Injekt.get().getOrStub(sourceId) val sourceScreen = preferenceManager.createPreferenceScreen(requireContext()) if (source is ConfigurableSource) { val dataStore = SharedPreferencesDataStore(source.sourcePreferences()) preferenceManager.preferenceDataStore = dataStore source.setupPreferenceScreen(sourceScreen) sourceScreen.forEach { pref -> pref.isIconSpaceReserved = false pref.isSingleLineTitle = false if (pref is DialogPreference && pref.dialogTitle.isNullOrEmpty()) { pref.dialogTitle = pref.title } // Apply incognito IME for EditTextPreference if (pref is EditTextPreference) { val setListener = pref.getOnBindEditTextListener() pref.setOnBindEditTextListener { setListener?.onBindEditText(it) it.setIncognito(lifecycleScope) } } } } return sourceScreen } companion object { private const val SOURCE_ID = "source_id" fun getInstance(sourceId: Long): SourcePreferencesFragment { return SourcePreferencesFragment().apply { arguments = Bundle().apply { putLong(SOURCE_ID, sourceId) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MigrateMangaScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.manga import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward import androidx.compose.material3.Icon import androidx.compose.material3.SmallExtendedFloatingActionButton import androidx.compose.material3.Text import androidx.compose.material3.animateFloatingActionButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.manga.components.BaseMangaListItem import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest import mihon.feature.migration.config.MigrationConfigScreen import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.selectedBackground import tachiyomi.presentation.core.util.shouldExpandFAB data class MigrateMangaScreen( private val sourceId: Long, ) : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { MigrateMangaScreenModel(sourceId) } val state by screenModel.state.collectAsState() if (state.isLoading) { LoadingScreen() return } BackHandler(enabled = state.selectionMode) { screenModel.clearSelection() } val lazyListState = rememberLazyListState() Scaffold( topBar = { scrollBehavior -> AppBar( title = state.source!!.name, navigateUp = { if (state.selectionMode) { screenModel.clearSelection() } else { navigator.pop() } }, scrollBehavior = scrollBehavior, ) }, floatingActionButton = { SmallExtendedFloatingActionButton( text = { Text(text = stringResource(MR.strings.migrationConfigScreen_continueButtonText)) }, icon = { Icon(imageVector = Icons.AutoMirrored.Outlined.ArrowForward, contentDescription = null) }, onClick = { val selection = state.selection screenModel.clearSelection() navigator.push(MigrationConfigScreen(selection)) }, expanded = lazyListState.shouldExpandFAB(), modifier = Modifier.animateFloatingActionButton( visible = state.selectionMode, alignment = Alignment.BottomEnd, ), ) }, ) { contentPadding -> if (state.isEmpty) { EmptyScreen( stringRes = MR.strings.empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold } MigrateMangaContent( lazyListState = lazyListState, contentPadding = contentPadding, state = state, onClickItem = screenModel::toggleSelection, onClickCover = { navigator.push(MangaScreen(it.id)) }, ) } LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> when (event) { MigrationMangaEvent.FailedFetchingFavorites -> { context.toast(MR.strings.internal_error) } } } } } @Composable private fun MigrateMangaContent( lazyListState: LazyListState, contentPadding: PaddingValues, state: MigrateMangaScreenModel.State, onClickItem: (Manga) -> Unit, onClickCover: (Manga) -> Unit, ) { FastScrollLazyColumn( state = lazyListState, contentPadding = contentPadding, ) { items(state.titles) { manga -> MigrateMangaItem( manga = manga, isSelected = manga.id in state.selection, onClickItem = onClickItem, onClickCover = onClickCover, ) } } } @Composable private fun MigrateMangaItem( manga: Manga, isSelected: Boolean, onClickItem: (Manga) -> Unit, onClickCover: (Manga) -> Unit, modifier: Modifier = Modifier, ) { BaseMangaListItem( modifier = modifier.selectedBackground(isSelected), manga = manga, onClickItem = { onClickItem(manga) }, onClickCover = { onClickCover(manga) }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MigrateMangaScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.manga import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.tachiyomi.source.Source import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import mihon.core.common.utils.mutate import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MigrateMangaScreenModel( private val sourceId: Long, private val sourceManager: SourceManager = Injekt.get(), private val getFavorites: GetFavorites = Injekt.get(), ) : StateScreenModel(State()) { private val _events: Channel = Channel() val events: Flow = _events.receiveAsFlow() init { screenModelScope.launch { mutableState.update { state -> state.copy(source = sourceManager.getOrStub(sourceId)) } getFavorites.subscribe(sourceId) .catch { logcat(LogPriority.ERROR, it) _events.send(MigrationMangaEvent.FailedFetchingFavorites) mutableState.update { state -> state.copy(titleList = persistentListOf()) } } .map { manga -> manga .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.title }) .toImmutableList() } .collectLatest { list -> mutableState.update { it.copy(titleList = list) } } } } fun toggleSelection(item: Manga) { mutableState.update { state -> val selection = state.selection.mutate { list -> if (!list.remove(item.id)) list.add(item.id) } state.copy(selection = selection) } } fun clearSelection() { mutableState.update { it.copy(selection = emptySet()) } } @Immutable data class State( val source: Source? = null, val selection: Set = emptySet(), private val titleList: ImmutableList? = null, ) { val titles: ImmutableList get() = titleList ?: persistentListOf() val isLoading: Boolean get() = source == null || titleList == null val isEmpty: Boolean get() = titles.isEmpty() val selectionMode = selection.isNotEmpty() } } sealed interface MigrationMangaEvent { data object FailedFetchingFavorites : MigrationMangaEvent } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.search import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.MigrateSearchScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchScreenModel import eu.kanade.tachiyomi.ui.manga.MangaScreen import mihon.feature.migration.dialog.MigrateMangaDialog import mihon.feature.migration.list.MigrationListScreen class MigrateSearchScreen(private val mangaId: Long) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { MigrateSearchScreenModel(mangaId = mangaId) } val state by screenModel.state.collectAsState() MigrateSearchScreen( state = state, fromSourceId = state.from?.source, navigateUp = navigator::pop, onChangeSearchQuery = screenModel::updateSearchQuery, onSearch = { screenModel.search() }, getManga = { screenModel.getManga(it) }, onChangeSearchFilter = screenModel::setSourceFilter, onToggleResults = screenModel::toggleFilterResults, onClickSource = { navigator.push(MigrateSourceSearchScreen(state.from!!, it.id, state.searchQuery)) }, onClickItem = { val migrateListScreen = navigator.items .filterIsInstance() .lastOrNull() if (migrateListScreen == null) { screenModel.setMigrateDialog(mangaId, it) } else { migrateListScreen.addMatchOverride(current = mangaId, target = it.id) navigator.popUntil { screen -> screen is MigrationListScreen } } }, onLongClickItem = { navigator.push(MangaScreen(it.id, true)) }, ) when (val dialog = state.dialog) { is SearchScreenModel.Dialog.Migrate -> { MigrateMangaDialog( current = dialog.current, target = dialog.target, // Initiated from the context of [dialog.current] so we show [dialog.target]. onClickTitle = { navigator.push(MangaScreen(dialog.target.id, true)) }, onDismissRequest = { screenModel.clearDialog() }, onComplete = { if (navigator.lastItem is MangaScreen) { val lastItem = navigator.lastItem navigator.popUntil { navigator.items.contains(lastItem) } navigator.push(MangaScreen(dialog.target.id)) } else { navigator.replace(MangaScreen(dialog.target.id)) } }, ) } else -> {} } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.search import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchItemResult import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchScreenModel import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MigrateSearchScreenModel( val mangaId: Long, getManga: GetManga = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val sourcePreferences: SourcePreferences = Injekt.get(), ) : SearchScreenModel() { private val migrationSources by lazy { sourcePreferences.migrationSources.get() } override val sortComparator = { map: Map -> compareBy( { (map[it] as? SearchItemResult.Success)?.isEmpty ?: true }, { migrationSources.indexOf(it.id) }, ) } init { screenModelScope.launch { val manga = getManga.await(mangaId)!! mutableState.update { it.copy( from = manga, searchQuery = manga.title, ) } search() } } override fun getEnabledSources(): List { return migrationSources.mapNotNull { sourceManager.get(it) as? CatalogueSource } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSourceSearchScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.search import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material3.Icon import androidx.compose.material3.SmallExtendedFloatingActionButton import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.animateFloatingActionButton import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalUriHandler import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.core.util.ifSourcesLoaded import eu.kanade.presentation.browse.BrowseSourceContent import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel import eu.kanade.tachiyomi.ui.browse.source.browse.SourceFilterDialog import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import kotlinx.coroutines.launch import mihon.feature.migration.dialog.MigrateMangaDialog import mihon.feature.migration.list.MigrationListScreen import mihon.presentation.core.util.collectAsLazyPagingItems import tachiyomi.core.common.Constants import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.source.local.LocalSource data class MigrateSourceSearchScreen( private val currentManga: Manga, private val sourceId: Long, private val query: String?, ) : Screen() { @Composable override fun Content() { if (!ifSourcesLoaded()) { LoadingScreen() return } val uriHandler = LocalUriHandler.current val navigator = LocalNavigator.currentOrThrow val scope = rememberCoroutineScope() val screenModel = rememberScreenModel { BrowseSourceScreenModel(sourceId, query) } val state by screenModel.state.collectAsState() val snackbarHostState = remember { SnackbarHostState() } Scaffold( topBar = { scrollBehavior -> SearchToolbar( searchQuery = state.toolbarQuery ?: "", onChangeSearchQuery = screenModel::setToolbarQuery, onClickCloseSearch = navigator::pop, onSearch = screenModel::search, scrollBehavior = scrollBehavior, ) }, floatingActionButton = { SmallExtendedFloatingActionButton( text = { Text(text = stringResource(MR.strings.action_filter)) }, icon = { Icon(Icons.Outlined.FilterList, contentDescription = null) }, onClick = screenModel::openFilterSheet, modifier = Modifier.animateFloatingActionButton( visible = state.filters.isNotEmpty(), alignment = Alignment.BottomEnd, ), ) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { paddingValues -> val openMigrateDialog: (Manga) -> Unit = { val migrateListScreen = navigator.items .filterIsInstance() .lastOrNull() if (migrateListScreen == null) { screenModel.setDialog(BrowseSourceScreenModel.Dialog.Migrate(target = it, current = currentManga)) } else { migrateListScreen.addMatchOverride(current = currentManga.id, target = it.id) navigator.popUntil { screen -> screen is MigrationListScreen } } } BrowseSourceContent( source = screenModel.source, mangaList = screenModel.mangaPagerFlowFlow.collectAsLazyPagingItems(), columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation), displayMode = screenModel.displayMode, snackbarHostState = snackbarHostState, contentPadding = paddingValues, onWebViewClick = { val source = screenModel.source as? HttpSource ?: return@BrowseSourceContent navigator.push( WebViewScreen( url = source.baseUrl, initialTitle = source.name, sourceId = source.id, ), ) }, onHelpClick = { uriHandler.openUri(Constants.URL_HELP) }, onLocalSourceHelpClick = { uriHandler.openUri(LocalSource.HELP_URL) }, onMangaClick = openMigrateDialog, onMangaLongClick = { navigator.push(MangaScreen(it.id, true)) }, ) } val onDismissRequest = { screenModel.setDialog(null) } when (val dialog = state.dialog) { is BrowseSourceScreenModel.Dialog.Filter -> { SourceFilterDialog( onDismissRequest = onDismissRequest, filters = state.filters, onReset = screenModel::resetFilters, onFilter = { screenModel.search(filters = state.filters) }, onUpdate = screenModel::setFilters, ) } is BrowseSourceScreenModel.Dialog.Migrate -> { MigrateMangaDialog( current = currentManga, target = dialog.target, // Initiated from the context of [currentManga] so we show [dialog.target]. onClickTitle = { navigator.push(MangaScreen(dialog.target.id)) }, onDismissRequest = onDismissRequest, onComplete = { scope.launch { navigator.popUntilRoot() HomeScreen.openTab(HomeScreen.Tab.Browse()) navigator.push(MangaScreen(dialog.target.id)) } }, ) } else -> {} } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.sources import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.source.interactor.GetSourcesWithFavoriteCount import eu.kanade.domain.source.interactor.SetMigrateSorting import eu.kanade.domain.source.service.SourcePreferences import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import logcat.LogPriority import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.source.model.Source import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MigrateSourceScreenModel( preferences: SourcePreferences = Injekt.get(), private val getSourcesWithFavoriteCount: GetSourcesWithFavoriteCount = Injekt.get(), private val setMigrateSorting: SetMigrateSorting = Injekt.get(), ) : StateScreenModel(State()) { private val _channel = Channel(Int.MAX_VALUE) val channel = _channel.receiveAsFlow() init { screenModelScope.launchIO { getSourcesWithFavoriteCount.subscribe() .catch { logcat(LogPriority.ERROR, it) _channel.send(Event.FailedFetchingSourcesWithCount) } .collectLatest { sources -> mutableState.update { it.copy( isLoading = false, items = sources.toImmutableList(), ) } } } preferences.migrationSortingDirection.changes() .onEach { mutableState.update { state -> state.copy(sortingDirection = it) } } .launchIn(screenModelScope) preferences.migrationSortingMode.changes() .onEach { mutableState.update { state -> state.copy(sortingMode = it) } } .launchIn(screenModelScope) } fun toggleSortingMode() { with(state.value) { val newMode = when (sortingMode) { SetMigrateSorting.Mode.ALPHABETICAL -> SetMigrateSorting.Mode.TOTAL SetMigrateSorting.Mode.TOTAL -> SetMigrateSorting.Mode.ALPHABETICAL } setMigrateSorting.await(newMode, sortingDirection) } } fun toggleSortingDirection() { with(state.value) { val newDirection = when (sortingDirection) { SetMigrateSorting.Direction.ASCENDING -> SetMigrateSorting.Direction.DESCENDING SetMigrateSorting.Direction.DESCENDING -> SetMigrateSorting.Direction.ASCENDING } setMigrateSorting.await(sortingMode, newDirection) } } @Immutable data class State( val isLoading: Boolean = true, val items: ImmutableList> = persistentListOf(), val sortingMode: SetMigrateSorting.Mode = SetMigrateSorting.Mode.ALPHABETICAL, val sortingDirection: SetMigrateSorting.Direction = SetMigrateSorting.Direction.ASCENDING, ) { val isEmpty = items.isEmpty() } sealed interface Event { data object FailedFetchingSourcesWithCount : Event } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceTab.kt ================================================ package eu.kanade.tachiyomi.ui.browse.migration.sources import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalUriHandler import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.MigrateSourceScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrateMangaScreen import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.migrateSourceTab(): TabContent { val uriHandler = LocalUriHandler.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { MigrateSourceScreenModel() } val state by screenModel.state.collectAsState() return TabContent( titleRes = MR.strings.label_migration, actions = persistentListOf( AppBar.Action( title = stringResource(MR.strings.migration_help_guide), icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = { uriHandler.openUri("https://mihon.app/docs/guides/source-migration") }, ), ), content = { contentPadding, _ -> MigrateSourceScreen( state = state, contentPadding = contentPadding, onClickItem = { source -> navigator.push(MigrateMangaScreen(source.id)) }, onToggleSortingDirection = screenModel::toggleSortingDirection, onToggleSortingMode = screenModel::toggleSortingMode, ) }, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.SourcesFilterScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.toast import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class SourcesFilterScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { SourcesFilterScreenModel() } val state by screenModel.state.collectAsState() if (state is SourcesFilterScreenModel.State.Loading) { LoadingScreen() return } if (state is SourcesFilterScreenModel.State.Error) { val context = LocalContext.current LaunchedEffect(Unit) { context.toast(MR.strings.internal_error) navigator.pop() } return } val successState = state as SourcesFilterScreenModel.State.Success SourcesFilterScreen( navigateUp = navigator::pop, state = successState, onClickLanguage = screenModel::toggleLanguage, onClickSource = screenModel::toggleSource, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.source.interactor.GetLanguagesWithSources import eu.kanade.domain.source.interactor.ToggleLanguage import eu.kanade.domain.source.interactor.ToggleSource import eu.kanade.domain.source.service.SourcePreferences import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import tachiyomi.domain.source.model.Source import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.SortedMap class SourcesFilterScreenModel( private val preferences: SourcePreferences = Injekt.get(), private val getLanguagesWithSources: GetLanguagesWithSources = Injekt.get(), private val toggleSource: ToggleSource = Injekt.get(), private val toggleLanguage: ToggleLanguage = Injekt.get(), ) : StateScreenModel(State.Loading) { init { screenModelScope.launch { combine( getLanguagesWithSources.subscribe(), preferences.enabledLanguages.changes(), preferences.disabledSources.changes(), ) { a, b, c -> Triple(a, b, c) } .catch { throwable -> mutableState.update { State.Error( throwable = throwable, ) } } .collectLatest { (languagesWithSources, enabledLanguages, disabledSources) -> mutableState.update { State.Success( items = languagesWithSources, enabledLanguages = enabledLanguages, disabledSources = disabledSources, ) } } } } fun toggleSource(source: Source) { toggleSource.await(source) } fun toggleLanguage(language: String) { toggleLanguage.await(language) } sealed interface State { @Immutable data object Loading : State @Immutable data class Error( val throwable: Throwable, ) : State @Immutable data class Success( val items: SortedMap>, val enabledLanguages: Set, val disabledSources: Set, ) : State { val isEmpty: Boolean get() = items.isEmpty() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.source.interactor.GetEnabledSources import eu.kanade.domain.source.interactor.ToggleSource import eu.kanade.domain.source.interactor.ToggleSourcePin import eu.kanade.presentation.browse.SourceUiModel import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import logcat.LogPriority import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.source.model.Pin import tachiyomi.domain.source.model.Source import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.TreeMap class SourcesScreenModel( private val getEnabledSources: GetEnabledSources = Injekt.get(), private val toggleSource: ToggleSource = Injekt.get(), private val toggleSourcePin: ToggleSourcePin = Injekt.get(), ) : StateScreenModel(State()) { private val _events = Channel(Int.MAX_VALUE) val events = _events.receiveAsFlow() init { screenModelScope.launchIO { getEnabledSources.subscribe() .catch { logcat(LogPriority.ERROR, it) _events.send(Event.FailedFetchingSources) } .collectLatest(::collectLatestSources) } } private fun collectLatestSources(sources: List) { mutableState.update { state -> val map = TreeMap> { d1, d2 -> // Sources without a lang defined will be placed at the end when { d1 == LAST_USED_KEY && d2 != LAST_USED_KEY -> -1 d2 == LAST_USED_KEY && d1 != LAST_USED_KEY -> 1 d1 == PINNED_KEY && d2 != PINNED_KEY -> -1 d2 == PINNED_KEY && d1 != PINNED_KEY -> 1 d1 == "" && d2 != "" -> 1 d2 == "" && d1 != "" -> -1 else -> d1.compareTo(d2) } } val byLang = sources.groupByTo(map) { when { it.isUsedLast -> LAST_USED_KEY Pin.Actual in it.pin -> PINNED_KEY else -> it.lang } } state.copy( isLoading = false, items = byLang .flatMap { listOf( SourceUiModel.Header(it.key), *it.value.map { source -> SourceUiModel.Item(source) }.toTypedArray(), ) } .toImmutableList(), ) } } fun toggleSource(source: Source) { toggleSource.await(source) } fun togglePin(source: Source) { toggleSourcePin.await(source) } fun showSourceDialog(source: Source) { mutableState.update { it.copy(dialog = Dialog(source)) } } fun closeDialog() { mutableState.update { it.copy(dialog = null) } } sealed interface Event { data object FailedFetchingSources : Event } data class Dialog(val source: Source) @Immutable data class State( val dialog: Dialog? = null, val isLoading: Boolean = true, val items: ImmutableList = persistentListOf(), ) { val isEmpty = items.isEmpty() } companion object { const val PINNED_KEY = "pinned" const val LAST_USED_KEY = "last_used" } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.TravelExplore import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.SourceOptionsDialog import eu.kanade.presentation.browse.SourcesScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.sourcesTab(): TabContent { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { SourcesScreenModel() } val state by screenModel.state.collectAsState() return TabContent( titleRes = MR.strings.label_sources, actions = persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_global_search), icon = Icons.Outlined.TravelExplore, onClick = { navigator.push(GlobalSearchScreen()) }, ), AppBar.Action( title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, onClick = { navigator.push(SourcesFilterScreen()) }, ), ), content = { contentPadding, snackbarHostState -> SourcesScreen( state = state, contentPadding = contentPadding, onClickItem = { source, listing -> navigator.push(BrowseSourceScreen(source.id, listing.query)) }, onClickPin = screenModel::togglePin, onLongClickItem = screenModel::showSourceDialog, ) state.dialog?.let { dialog -> val source = dialog.source SourceOptionsDialog( source = source, onClickPin = { screenModel.togglePin(source) screenModel.closeDialog() }, onClickDisable = { screenModel.toggleSource(source) screenModel.closeDialog() }, onDismiss = screenModel::closeDialog, ) } val internalErrString = stringResource(MR.strings.internal_error) LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> when (event) { SourcesScreenModel.Event.FailedFetchingSources -> { launch { snackbarHostState.showSnackbar(internalErrString) } } } } } }, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source.browse import androidx.compose.foundation.background import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Favorite import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.NewReleases import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.core.util.ifSourcesLoaded import eu.kanade.presentation.browse.BrowseSourceContent import eu.kanade.presentation.browse.MissingSourceScreen import eu.kanade.presentation.browse.components.BrowseSourceToolbar import eu.kanade.presentation.browse.components.RemoveMangaDialog import eu.kanade.presentation.category.components.ChangeCategoryDialog import eu.kanade.presentation.manga.DuplicateMangaDialog import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.browse.extension.details.SourcePreferencesScreen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel.Listing import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import mihon.feature.migration.dialog.MigrateMangaDialog import mihon.presentation.core.util.collectAsLazyPagingItems import tachiyomi.core.common.Constants import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.source.model.StubSource import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.source.local.LocalSource data class BrowseSourceScreen( val sourceId: Long, private val listingQuery: String?, ) : Screen(), AssistContentScreen { private var assistUrl: String? = null override fun onProvideAssistUrl() = assistUrl @Composable override fun Content() { if (!ifSourcesLoaded()) { LoadingScreen() return } val screenModel = rememberScreenModel { BrowseSourceScreenModel(sourceId, listingQuery) } val state by screenModel.state.collectAsState() val navigator = LocalNavigator.currentOrThrow val navigateUp: () -> Unit = { when { !state.isUserQuery && state.toolbarQuery != null -> screenModel.setToolbarQuery(null) else -> navigator.pop() } } if (screenModel.source is StubSource) { MissingSourceScreen( source = screenModel.source, navigateUp = navigateUp, ) return } val scope = rememberCoroutineScope() val haptic = LocalHapticFeedback.current val uriHandler = LocalUriHandler.current val snackbarHostState = remember { SnackbarHostState() } val onHelpClick = { uriHandler.openUri(LocalSource.HELP_URL) } val onWebViewClick = f@{ val source = screenModel.source as? HttpSource ?: return@f navigator.push( WebViewScreen( url = source.baseUrl, initialTitle = source.name, sourceId = source.id, ), ) } LaunchedEffect(screenModel.source) { assistUrl = (screenModel.source as? HttpSource)?.baseUrl } Scaffold( topBar = { Column( modifier = Modifier .background(MaterialTheme.colorScheme.surface) .pointerInput(Unit) {}, ) { BrowseSourceToolbar( searchQuery = state.toolbarQuery, onSearchQueryChange = screenModel::setToolbarQuery, source = screenModel.source, displayMode = screenModel.displayMode, onDisplayModeChange = { screenModel.displayMode = it }, navigateUp = navigateUp, onWebViewClick = onWebViewClick, onHelpClick = onHelpClick, onSettingsClick = { navigator.push(SourcePreferencesScreen(sourceId)) }, onSearch = screenModel::search, ) Row( modifier = Modifier .horizontalScroll(rememberScrollState()) .padding(horizontal = MaterialTheme.padding.small), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { FilterChip( selected = state.listing == Listing.Popular, onClick = { screenModel.resetFilters() screenModel.setListing(Listing.Popular) }, leadingIcon = { Icon( imageVector = Icons.Outlined.Favorite, contentDescription = null, modifier = Modifier .size(FilterChipDefaults.IconSize), ) }, label = { Text(text = stringResource(MR.strings.popular)) }, ) if ((screenModel.source as CatalogueSource).supportsLatest) { FilterChip( selected = state.listing == Listing.Latest, onClick = { screenModel.resetFilters() screenModel.setListing(Listing.Latest) }, leadingIcon = { Icon( imageVector = Icons.Outlined.NewReleases, contentDescription = null, modifier = Modifier .size(FilterChipDefaults.IconSize), ) }, label = { Text(text = stringResource(MR.strings.latest)) }, ) } if (state.filters.isNotEmpty()) { FilterChip( selected = state.listing is Listing.Search, onClick = screenModel::openFilterSheet, leadingIcon = { Icon( imageVector = Icons.Outlined.FilterList, contentDescription = null, modifier = Modifier .size(FilterChipDefaults.IconSize), ) }, label = { Text(text = stringResource(MR.strings.action_filter)) }, ) } } HorizontalDivider() } }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { paddingValues -> BrowseSourceContent( source = screenModel.source, mangaList = screenModel.mangaPagerFlowFlow.collectAsLazyPagingItems(), columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation), displayMode = screenModel.displayMode, snackbarHostState = snackbarHostState, contentPadding = paddingValues, onWebViewClick = onWebViewClick, onHelpClick = { uriHandler.openUri(Constants.URL_HELP) }, onLocalSourceHelpClick = onHelpClick, onMangaClick = { navigator.push((MangaScreen(it.id, true))) }, onMangaLongClick = { manga -> scope.launchIO { val duplicates = screenModel.getDuplicateLibraryManga(manga) when { manga.favorite -> screenModel.setDialog(BrowseSourceScreenModel.Dialog.RemoveManga(manga)) duplicates.isNotEmpty() -> screenModel.setDialog( BrowseSourceScreenModel.Dialog.AddDuplicateManga(manga, duplicates), ) else -> screenModel.addFavorite(manga) } haptic.performHapticFeedback(HapticFeedbackType.LongPress) } }, ) } val onDismissRequest = { screenModel.setDialog(null) } when (val dialog = state.dialog) { is BrowseSourceScreenModel.Dialog.Filter -> { SourceFilterDialog( onDismissRequest = onDismissRequest, filters = state.filters, onReset = screenModel::resetFilters, onFilter = { screenModel.search(filters = state.filters) }, onUpdate = screenModel::setFilters, ) } is BrowseSourceScreenModel.Dialog.AddDuplicateManga -> { DuplicateMangaDialog( duplicates = dialog.duplicates, onDismissRequest = onDismissRequest, onConfirm = { screenModel.addFavorite(dialog.manga) }, onOpenManga = { navigator.push(MangaScreen(it.id)) }, onMigrate = { screenModel.setDialog(BrowseSourceScreenModel.Dialog.Migrate(dialog.manga, it)) }, ) } is BrowseSourceScreenModel.Dialog.Migrate -> { MigrateMangaDialog( current = dialog.current, target = dialog.target, // Initiated from the context of [dialog.target] so we show [dialog.current]. onClickTitle = { navigator.push(MangaScreen(dialog.current.id)) }, onDismissRequest = onDismissRequest, ) } is BrowseSourceScreenModel.Dialog.RemoveManga -> { RemoveMangaDialog( onDismissRequest = onDismissRequest, onConfirm = { screenModel.changeMangaFavorite(dialog.manga) }, mangaToRemove = dialog.manga, ) } is BrowseSourceScreenModel.Dialog.ChangeMangaCategory -> { ChangeCategoryDialog( initialSelection = dialog.initialSelection, onDismissRequest = onDismissRequest, onEditCategories = { navigator.push(CategoryScreen()) }, onConfirm = { include, _ -> screenModel.changeMangaFavorite(dialog.manga) screenModel.moveMangaToCategories(dialog.manga, include) }, ) } else -> {} } LaunchedEffect(Unit) { queryEvent.receiveAsFlow() .collectLatest { when (it) { is SearchType.Genre -> screenModel.searchGenre(it.txt) is SearchType.Text -> screenModel.search(it.txt) } } } } suspend fun search(query: String) = queryEvent.send(SearchType.Text(query)) suspend fun searchGenre(name: String) = queryEvent.send(SearchType.Genre(name)) companion object { private val queryEvent = Channel() } sealed class SearchType(val txt: String) { class Text(txt: String) : SearchType(txt) class Genre(txt: String) : SearchType(txt) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source.browse import android.content.res.Configuration import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.runtime.Immutable import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.unit.dp import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.cachedIn import androidx.paging.filter import androidx.paging.map import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.preference.asState import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.source.interactor.GetIncognitoState import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.presentation.util.ioCoroutineScope import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.util.removeCovers import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import tachiyomi.core.common.preference.CheckboxState import tachiyomi.core.common.preference.mapAsCheckboxState import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.chapter.interactor.SetMangaDefaultChapterFlags import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaWithChapterCount import tachiyomi.domain.manga.model.toMangaUpdate import tachiyomi.domain.source.interactor.GetRemoteManga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import eu.kanade.tachiyomi.source.model.Filter as SourceModelFilter class BrowseSourceScreenModel( private val sourceId: Long, listingQuery: String?, sourceManager: SourceManager = Injekt.get(), sourcePreferences: SourcePreferences = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), private val coverCache: CoverCache = Injekt.get(), private val getRemoteManga: GetRemoteManga = Injekt.get(), private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val setMangaCategories: SetMangaCategories = Injekt.get(), private val setMangaDefaultChapterFlags: SetMangaDefaultChapterFlags = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), private val addTracks: AddTracks = Injekt.get(), private val getIncognitoState: GetIncognitoState = Injekt.get(), ) : StateScreenModel(State(Listing.valueOf(listingQuery))) { var displayMode by sourcePreferences.sourceDisplayMode.asState(screenModelScope) val source = sourceManager.getOrStub(sourceId) init { if (source is CatalogueSource) { mutableState.update { var query: String? = null var listing = it.listing if (listing is Listing.Search) { query = listing.query listing = Listing.Search(query, source.getFilterList()) } it.copy( listing = listing, filters = source.getFilterList(), toolbarQuery = query, ) } } if (!getIncognitoState.await(source.id)) { sourcePreferences.lastUsedSource.set(source.id) } } /** * Flow of Pager flow tied to [State.listing] */ private val hideInLibraryItems = sourcePreferences.hideInLibraryItems.get() val mangaPagerFlowFlow = state.map { it.listing } .distinctUntilChanged() .map { listing -> Pager(PagingConfig(pageSize = 25)) { getRemoteManga(sourceId, listing.query ?: "", listing.filters) }.flow.map { pagingData -> pagingData.map { manga -> getManga.subscribe(manga.url, manga.source) .map { it ?: manga } .stateIn(ioCoroutineScope) } .filter { !hideInLibraryItems || !it.value.favorite } } .cachedIn(ioCoroutineScope) } .stateIn(ioCoroutineScope, SharingStarted.Lazily, emptyFlow()) fun getColumnsPreference(orientation: Int): GridCells { val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE val columns = if (isLandscape) { libraryPreferences.landscapeColumns } else { libraryPreferences.portraitColumns }.get() return if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns) } fun resetFilters() { if (source !is CatalogueSource) return mutableState.update { it.copy(filters = source.getFilterList()) } } fun setListing(listing: Listing) { mutableState.update { it.copy(listing = listing, toolbarQuery = null) } } fun setFilters(filters: FilterList) { if (source !is CatalogueSource) return mutableState.update { it.copy( filters = filters, ) } } fun search(query: String? = null, filters: FilterList? = null) { if (source !is CatalogueSource) return val input = state.value.listing as? Listing.Search ?: Listing.Search(query = null, filters = source.getFilterList()) mutableState.update { it.copy( listing = input.copy( query = query ?: input.query, filters = filters ?: input.filters, ), toolbarQuery = query ?: input.query, ) } } fun searchGenre(genreName: String) { if (source !is CatalogueSource) return val defaultFilters = source.getFilterList() var genreExists = false filter@ for (sourceFilter in defaultFilters) { if (sourceFilter is SourceModelFilter.Group<*>) { for (filter in sourceFilter.state) { if (filter is SourceModelFilter<*> && filter.name.equals(genreName, true)) { when (filter) { is SourceModelFilter.TriState -> filter.state = 1 is SourceModelFilter.CheckBox -> filter.state = true else -> {} } genreExists = true break@filter } } } else if (sourceFilter is SourceModelFilter.Select<*>) { val index = sourceFilter.values.filterIsInstance() .indexOfFirst { it.equals(genreName, true) } if (index != -1) { sourceFilter.state = index genreExists = true break } } } mutableState.update { val listing = if (genreExists) { Listing.Search(query = null, filters = defaultFilters) } else { Listing.Search(query = genreName, filters = defaultFilters) } it.copy( filters = defaultFilters, listing = listing, toolbarQuery = listing.query, ) } } /** * Adds or removes a manga from the library. * * @param manga the manga to update. */ fun changeMangaFavorite(manga: Manga) { screenModelScope.launch { var new = manga.copy( favorite = !manga.favorite, dateAdded = when (manga.favorite) { true -> 0 false -> Instant.now().toEpochMilli() }, ) if (!new.favorite) { new = new.removeCovers(coverCache) } else { setMangaDefaultChapterFlags.await(manga) addTracks.bindEnhancedTrackers(manga, source) } updateManga.await(new.toMangaUpdate()) } } fun addFavorite(manga: Manga) { screenModelScope.launch { val categories = getCategories() val defaultCategoryId = libraryPreferences.defaultCategory.get() val defaultCategory = categories.find { it.id == defaultCategoryId.toLong() } when { // Default category set defaultCategory != null -> { moveMangaToCategories(manga, defaultCategory) changeMangaFavorite(manga) } // Automatic 'Default' or no categories defaultCategoryId == 0 || categories.isEmpty() -> { moveMangaToCategories(manga) changeMangaFavorite(manga) } // Choose a category else -> { val preselectedIds = getCategories.await(manga.id).map { it.id } setDialog( Dialog.ChangeMangaCategory( manga, categories.mapAsCheckboxState { it.id in preselectedIds }.toImmutableList(), ), ) } } } } /** * Get user categories. * * @return List of categories, not including the default category */ suspend fun getCategories(): List { return getCategories.subscribe() .firstOrNull() ?.filterNot { it.isSystemCategory } .orEmpty() } suspend fun getDuplicateLibraryManga(manga: Manga): List { return getDuplicateLibraryManga.invoke(manga) } private fun moveMangaToCategories(manga: Manga, vararg categories: Category) { moveMangaToCategories(manga, categories.filter { it.id != 0L }.map { it.id }) } fun moveMangaToCategories(manga: Manga, categoryIds: List) { screenModelScope.launchIO { setMangaCategories.await( mangaId = manga.id, categoryIds = categoryIds.toList(), ) } } fun openFilterSheet() { setDialog(Dialog.Filter) } fun setDialog(dialog: Dialog?) { mutableState.update { it.copy(dialog = dialog) } } fun setToolbarQuery(query: String?) { mutableState.update { it.copy(toolbarQuery = query) } } sealed class Listing(open val query: String?, open val filters: FilterList) { data object Popular : Listing(query = GetRemoteManga.QUERY_POPULAR, filters = FilterList()) data object Latest : Listing(query = GetRemoteManga.QUERY_LATEST, filters = FilterList()) data class Search( override val query: String?, override val filters: FilterList, ) : Listing(query = query, filters = filters) companion object { fun valueOf(query: String?): Listing { return when (query) { GetRemoteManga.QUERY_POPULAR -> Popular GetRemoteManga.QUERY_LATEST -> Latest else -> Search(query = query, filters = FilterList()) // filters are filled in later } } } } sealed interface Dialog { data object Filter : Dialog data class RemoveManga(val manga: Manga) : Dialog data class AddDuplicateManga(val manga: Manga, val duplicates: List) : Dialog data class ChangeMangaCategory( val manga: Manga, val initialSelection: ImmutableList>, ) : Dialog data class Migrate(val target: Manga, val current: Manga) : Dialog } @Immutable data class State( val listing: Listing, val filters: FilterList = FilterList(), val toolbarQuery: String? = null, val dialog: Dialog? = null, ) { val isUserQuery get() = listing is Listing.Search && !listing.query.isNullOrEmpty() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterDialog.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source.browse import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import tachiyomi.core.common.preference.TriState import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.CollapsibleBox import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SelectItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TextItem import tachiyomi.presentation.core.components.TriStateItem import tachiyomi.presentation.core.components.material.Button import tachiyomi.presentation.core.i18n.stringResource @Composable fun SourceFilterDialog( onDismissRequest: () -> Unit, filters: FilterList, onReset: () -> Unit, onFilter: () -> Unit, onUpdate: (FilterList) -> Unit, ) { val updateFilters = { onUpdate(filters) } AdaptiveSheet(onDismissRequest = onDismissRequest) { LazyColumn { stickyHeader { Row( modifier = Modifier .background(MaterialTheme.colorScheme.background) .padding(8.dp), ) { TextButton(onClick = onReset) { Text( text = stringResource(MR.strings.action_reset), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.primary, ), ) } Spacer(modifier = Modifier.weight(1f)) Button(onClick = { onFilter() onDismissRequest() }) { Text(stringResource(MR.strings.action_filter)) } } HorizontalDivider() } items(filters) { FilterItem(it, updateFilters) } } } } @Composable private fun FilterItem(filter: Filter<*>, onUpdate: () -> Unit) { when (filter) { is Filter.Header -> { HeadingItem(filter.name) } is Filter.Separator -> { HorizontalDivider() } is Filter.CheckBox -> { CheckboxItem( label = filter.name, checked = filter.state, ) { filter.state = !filter.state onUpdate() } } is Filter.TriState -> { TriStateItem( label = filter.name, state = filter.state.toTriStateFilter(), ) { filter.state = filter.state.toTriStateFilter().next().toTriStateInt() onUpdate() } } is Filter.Text -> { TextItem( label = filter.name, value = filter.state, ) { filter.state = it onUpdate() } } is Filter.Select<*> -> { SelectItem( label = filter.name, options = filter.values, selectedIndex = filter.state, ) { filter.state = it onUpdate() } } is Filter.Sort -> { CollapsibleBox( heading = filter.name, ) { Column { filter.values.mapIndexed { index, item -> val sortAscending = filter.state?.ascending ?.takeIf { index == filter.state?.index } SortItem( label = item, sortDescending = if (sortAscending != null) !sortAscending else null, onClick = { val ascending = if (index == filter.state?.index) { !filter.state!!.ascending } else { filter.state?.ascending ?: true } filter.state = Filter.Sort.Selection( index = index, ascending = ascending, ) onUpdate() }, ) } } } } is Filter.Group<*> -> { CollapsibleBox( heading = filter.name, ) { Column { filter.state .filterIsInstance>() .map { FilterItem(filter = it, onUpdate = onUpdate) } } } } } } private fun Int.toTriStateFilter(): TriState { return when (this) { Filter.TriState.STATE_IGNORE -> TriState.DISABLED Filter.TriState.STATE_INCLUDE -> TriState.ENABLED_IS Filter.TriState.STATE_EXCLUDE -> TriState.ENABLED_NOT else -> throw IllegalStateException("Unknown TriState state: $this") } } private fun TriState.toTriStateInt(): Int { return when (this) { TriState.DISABLED -> Filter.TriState.STATE_IGNORE TriState.ENABLED_IS -> Filter.TriState.STATE_INCLUDE TriState.ENABLED_NOT -> Filter.TriState.STATE_EXCLUDE } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreen.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source.globalsearch import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.core.util.ifSourcesLoaded import eu.kanade.presentation.browse.GlobalSearchScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import tachiyomi.presentation.core.screens.LoadingScreen class GlobalSearchScreen( val searchQuery: String = "", private val extensionFilter: String? = null, ) : Screen() { @Composable override fun Content() { if (!ifSourcesLoaded()) { LoadingScreen() return } val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { GlobalSearchScreenModel( initialQuery = searchQuery, initialExtensionFilter = extensionFilter, ) } val state by screenModel.state.collectAsState() var showSingleLoadingScreen by remember { mutableStateOf(searchQuery.isNotEmpty() && !extensionFilter.isNullOrEmpty() && state.total == 1) } if (showSingleLoadingScreen) { LoadingScreen() LaunchedEffect(state.items) { when (val result = state.items.values.singleOrNull()) { SearchItemResult.Loading -> return@LaunchedEffect is SearchItemResult.Success -> { val manga = result.result.singleOrNull() if (manga != null) { navigator.replace(MangaScreen(manga.id, true)) } else { // Backoff to result screen showSingleLoadingScreen = false } } else -> showSingleLoadingScreen = false } } } else { GlobalSearchScreen( state = state, navigateUp = navigator::pop, onChangeSearchQuery = screenModel::updateSearchQuery, onSearch = { screenModel.search() }, getManga = { screenModel.getManga(it) }, onChangeSearchFilter = screenModel::setSourceFilter, onToggleResults = screenModel::toggleFilterResults, onClickSource = { navigator.push(BrowseSourceScreen(it.id, state.searchQuery)) }, onClickItem = { navigator.push(MangaScreen(it.id, true)) }, onLongClickItem = { navigator.push(MangaScreen(it.id, true)) }, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source.globalsearch import eu.kanade.tachiyomi.source.CatalogueSource class GlobalSearchScreenModel( initialQuery: String = "", initialExtensionFilter: String? = null, ) : SearchScreenModel(State(searchQuery = initialQuery)) { init { extensionFilter = initialExtensionFilter if (initialQuery.isNotBlank() || !initialExtensionFilter.isNullOrBlank()) { if (extensionFilter != null) { // we're going to use custom extension filter instead setSourceFilter(SourceFilter.All) } search() } } override fun getEnabledSources(): List { return super.getEnabledSources() .filter { state.value.sourceFilter != SourceFilter.PinnedOnly || "${it.id}" in pinnedSources } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.browse.source.globalsearch import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.produceState import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.util.ioCoroutineScope import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.CatalogueSource import kotlinx.collections.immutable.PersistentMap import kotlinx.collections.immutable.mutate import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toPersistentMap import kotlinx.coroutines.Job import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mihon.domain.manga.model.toDomainManga import tachiyomi.core.common.preference.toggle import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.interactor.NetworkToLocalManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.concurrent.Executors abstract class SearchScreenModel( initialState: State = State(), sourcePreferences: SourcePreferences = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val preferences: SourcePreferences = Injekt.get(), ) : StateScreenModel(initialState) { private val coroutineDispatcher = Executors.newFixedThreadPool(5).asCoroutineDispatcher() private var searchJob: Job? = null private val enabledLanguages = sourcePreferences.enabledLanguages.get() private val disabledSources = sourcePreferences.disabledSources.get() protected val pinnedSources = sourcePreferences.pinnedSources.get() private var lastQuery: String? = null private var lastSourceFilter: SourceFilter? = null protected var extensionFilter: String? = null open val sortComparator = { map: Map -> compareBy( { (map[it] as? SearchItemResult.Success)?.isEmpty ?: true }, { "${it.id}" !in pinnedSources }, { "${it.name.lowercase()} (${it.lang})" }, ) } init { screenModelScope.launch { preferences.globalSearchFilterState.changes().collectLatest { state -> mutableState.update { it.copy(onlyShowHasResults = state) } } } } @Composable fun getManga(initialManga: Manga): androidx.compose.runtime.State { return produceState(initialValue = initialManga) { getManga.subscribe(initialManga.url, initialManga.source) .filterNotNull() .collectLatest { manga -> value = manga } } } open fun getEnabledSources(): List { return sourceManager.getCatalogueSources() .filter { it.lang in enabledLanguages && "${it.id}" !in disabledSources } .sortedWith( compareBy( { "${it.id}" !in pinnedSources }, { "${it.name.lowercase()} (${it.lang})" }, ), ) } private fun getSelectedSources(): List { val enabledSources = getEnabledSources() val filter = extensionFilter if (filter.isNullOrEmpty()) { return enabledSources } return extensionManager.installedExtensionsFlow.value .filter { it.pkgName == filter } .flatMap { it.sources } .filterIsInstance() .filter { it in enabledSources } } fun updateSearchQuery(query: String?) { mutableState.update { it.copy(searchQuery = query) } } fun setSourceFilter(filter: SourceFilter) { mutableState.update { it.copy(sourceFilter = filter) } search() } fun toggleFilterResults() { preferences.globalSearchFilterState.toggle() } fun search() { val query = state.value.searchQuery val sourceFilter = state.value.sourceFilter if (query.isNullOrBlank()) return val sameQuery = this.lastQuery == query if (sameQuery && this.lastSourceFilter == sourceFilter) return this.lastQuery = query this.lastSourceFilter = sourceFilter searchJob?.cancel() val sources = getSelectedSources() // Reuse previous results if possible if (sameQuery) { val existingResults = state.value.items updateItems( sources .associateWith { existingResults[it] ?: SearchItemResult.Loading } .toPersistentMap(), ) } else { updateItems( sources .associateWith { SearchItemResult.Loading } .toPersistentMap(), ) } searchJob = ioCoroutineScope.launch { sources.map { source -> async { if (state.value.items[source] !is SearchItemResult.Loading) { return@async } try { val page = withContext(coroutineDispatcher) { source.getSearchManga(1, query, source.getFilterList()) } val titles = page.mangas .map { it.toDomainManga(source.id) } .distinctBy { it.url } .let { networkToLocalManga(it) } if (isActive) { updateItem(source, SearchItemResult.Success(titles)) } } catch (e: Exception) { if (isActive) { updateItem(source, SearchItemResult.Error(e)) } } } } .awaitAll() } } private fun updateItems(items: PersistentMap) { mutableState.update { it.copy( items = items .toSortedMap(sortComparator(items)) .toPersistentMap(), ) } } private fun updateItem(source: CatalogueSource, result: SearchItemResult) { val newItems = state.value.items.mutate { it[source] = result } updateItems(newItems) } fun setMigrateDialog(currentId: Long, target: Manga) { screenModelScope.launchIO { val current = getManga.await(currentId) ?: return@launchIO mutableState.update { it.copy(dialog = Dialog.Migrate(target, current)) } } } fun clearDialog() { mutableState.update { it.copy(dialog = null) } } @Immutable data class State( val from: Manga? = null, val searchQuery: String? = null, val sourceFilter: SourceFilter = SourceFilter.PinnedOnly, val onlyShowHasResults: Boolean = false, val items: PersistentMap = persistentMapOf(), val dialog: Dialog? = null, ) { val progress: Int = items.count { it.value !is SearchItemResult.Loading } val total: Int = items.size val filteredItems = items.filter { (_, result) -> result.isVisible(onlyShowHasResults) } } sealed interface Dialog { data class Migrate(val target: Manga, val current: Manga) : Dialog } } enum class SourceFilter { All, PinnedOnly, } sealed interface SearchItemResult { data object Loading : SearchItemResult data class Error( val throwable: Throwable, ) : SearchItemResult data class Success( val result: List, ) : SearchItemResult { val isEmpty: Boolean get() = result.isEmpty() } fun isVisible(onlyShowHasResults: Boolean): Boolean { return !onlyShowHasResults || (this is Success && !this.isEmpty) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt ================================================ package eu.kanade.tachiyomi.ui.category import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.util.fastMap import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.category.CategoryScreen import eu.kanade.presentation.category.components.CategoryCreateDialog import eu.kanade.presentation.category.components.CategoryDeleteDialog import eu.kanade.presentation.category.components.CategoryRenameDialog import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.collectLatest import tachiyomi.presentation.core.screens.LoadingScreen class CategoryScreen : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { CategoryScreenModel() } val state by screenModel.state.collectAsState() if (state is CategoryScreenState.Loading) { LoadingScreen() return } val successState = state as CategoryScreenState.Success CategoryScreen( state = successState, onClickCreate = { screenModel.showDialog(CategoryDialog.Create) }, onClickRename = { screenModel.showDialog(CategoryDialog.Rename(it)) }, onClickDelete = { screenModel.showDialog(CategoryDialog.Delete(it)) }, onChangeOrder = screenModel::changeOrder, navigateUp = navigator::pop, ) when (val dialog = successState.dialog) { null -> {} CategoryDialog.Create -> { CategoryCreateDialog( onDismissRequest = screenModel::dismissDialog, onCreate = screenModel::createCategory, categories = successState.categories.fastMap { it.name }.toImmutableList(), ) } is CategoryDialog.Rename -> { CategoryRenameDialog( onDismissRequest = screenModel::dismissDialog, onRename = { screenModel.renameCategory(dialog.category, it) }, categories = successState.categories.fastMap { it.name }.toImmutableList(), category = dialog.category.name, ) } is CategoryDialog.Delete -> { CategoryDeleteDialog( onDismissRequest = screenModel::dismissDialog, onDelete = { screenModel.deleteCategory(dialog.category.id) }, category = dialog.category.name, ) } } LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> if (event is CategoryEvent.LocalizedMessage) { context.toast(event.stringRes) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.category import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import tachiyomi.domain.category.interactor.CreateCategoryWithName import tachiyomi.domain.category.interactor.DeleteCategory import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.RenameCategory import tachiyomi.domain.category.interactor.ReorderCategory import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class CategoryScreenModel( private val getCategories: GetCategories = Injekt.get(), private val createCategoryWithName: CreateCategoryWithName = Injekt.get(), private val deleteCategory: DeleteCategory = Injekt.get(), private val reorderCategory: ReorderCategory = Injekt.get(), private val renameCategory: RenameCategory = Injekt.get(), ) : StateScreenModel(CategoryScreenState.Loading) { private val _events: Channel = Channel() val events = _events.receiveAsFlow() init { screenModelScope.launch { getCategories.subscribe() .collectLatest { categories -> mutableState.update { CategoryScreenState.Success( categories = categories .filterNot(Category::isSystemCategory) .toImmutableList(), ) } } } } fun createCategory(name: String) { screenModelScope.launch { when (createCategoryWithName.await(name)) { is CreateCategoryWithName.Result.InternalError -> _events.send(CategoryEvent.InternalError) else -> {} } } } fun deleteCategory(categoryId: Long) { screenModelScope.launch { when (deleteCategory.await(categoryId = categoryId)) { is DeleteCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError) else -> {} } } } fun changeOrder(category: Category, newIndex: Int) { screenModelScope.launch { when (reorderCategory.await(category, newIndex)) { is ReorderCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError) else -> {} } } } fun renameCategory(category: Category, name: String) { screenModelScope.launch { when (renameCategory.await(category, name)) { is RenameCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError) else -> {} } } } fun showDialog(dialog: CategoryDialog) { mutableState.update { when (it) { CategoryScreenState.Loading -> it is CategoryScreenState.Success -> it.copy(dialog = dialog) } } } fun dismissDialog() { mutableState.update { when (it) { CategoryScreenState.Loading -> it is CategoryScreenState.Success -> it.copy(dialog = null) } } } } sealed interface CategoryDialog { data object Create : CategoryDialog data class Rename(val category: Category) : CategoryDialog data class Delete(val category: Category) : CategoryDialog } sealed interface CategoryEvent { sealed class LocalizedMessage(val stringRes: StringResource) : CategoryEvent data object InternalError : LocalizedMessage(MR.strings.internal_error) } sealed interface CategoryScreenState { @Immutable data object Loading : CategoryScreenState @Immutable data class Success( val categories: ImmutableList, val dialog: CategoryDialog? = null, ) : CategoryScreenState { val isEmpty: Boolean get() = categories.isEmpty() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkActivity.kt ================================================ package eu.kanade.tachiyomi.ui.deeplink import android.app.Activity import android.content.Intent import android.os.Bundle import eu.kanade.tachiyomi.ui.main.MainActivity class DeepLinkActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) intent.apply { flags = flags or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK setClass(applicationContext, MainActivity::class.java) } startActivity(intent) finish() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreen.kt ================================================ package eu.kanade.tachiyomi.ui.deeplink import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class DeepLinkScreen( val query: String = "", ) : Screen() { @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { DeepLinkScreenModel(query = query) } val state by screenModel.state.collectAsState() Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.action_search_hint), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> when (state) { is DeepLinkScreenModel.State.Loading -> { LoadingScreen(Modifier.padding(contentPadding)) } is DeepLinkScreenModel.State.NoResults -> { navigator.replace(GlobalSearchScreen(query)) } is DeepLinkScreenModel.State.Result -> { val resultState = state as DeepLinkScreenModel.State.Result if (resultState.chapterId == null) { navigator.replace( MangaScreen( resultState.manga.id, true, ), ) } else { navigator.pop() ReaderActivity.newIntent( context, resultState.manga.id, resultState.chapterId, ).also(context::startActivity) } } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.deeplink import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.manga.model.toSManga import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.online.ResolvableSource import eu.kanade.tachiyomi.source.online.UriType import kotlinx.coroutines.flow.update import mihon.domain.manga.model.toDomainManga import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.chapter.interactor.GetChapterByUrlAndMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.interactor.NetworkToLocalManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class DeepLinkScreenModel( query: String = "", private val sourceManager: SourceManager = Injekt.get(), private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), private val getChapterByUrlAndMangaId: GetChapterByUrlAndMangaId = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), ) : StateScreenModel(State.Loading) { init { screenModelScope.launchIO { val source = sourceManager.getCatalogueSources() .filterIsInstance() .firstOrNull { it.getUriType(query) != UriType.Unknown } val manga = source?.getManga(query)?.let { networkToLocalManga(it.toDomainManga(source.id)) } val chapter = if (source?.getUriType(query) == UriType.Chapter && manga != null) { source.getChapter(query)?.let { getChapterFromSChapter(it, manga, source) } } else { null } mutableState.update { if (manga == null) { State.NoResults } else { if (chapter == null) { State.Result(manga) } else { State.Result(manga, chapter.id) } } } } } private suspend fun getChapterFromSChapter(sChapter: SChapter, manga: Manga, source: Source): Chapter? { val localChapter = getChapterByUrlAndMangaId.await(sChapter.url, manga.id) return if (localChapter == null) { val sourceChapters = source.getChapterList(manga.toSManga()) val newChapters = syncChaptersWithSource.await(sourceChapters, manga, source, false) newChapters.find { it.url == sChapter.url } } else { localChapter } } sealed interface State { @Immutable data object Loading : State @Immutable data object NoResults : State @Immutable data class Result(val manga: Manga, val chapterId: Long? = null) : State } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadAdapter.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.view.MenuItem import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem /** * Adapter storing a list of downloads. * * @param downloadItemListener Listener called when an item of the list is released. */ class DownloadAdapter(val downloadItemListener: DownloadItemListener) : FlexibleAdapter>( null, downloadItemListener, true, ) { override fun shouldMove(fromPosition: Int, toPosition: Int): Boolean { // Don't let sub-items changing group return getHeaderOf(getItem(fromPosition)) == getHeaderOf(getItem(toPosition)) } interface DownloadItemListener { fun onItemReleased(position: Int) fun onMenuItemClick(position: Int, menuItem: MenuItem) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHeaderHolder.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.annotation.SuppressLint import android.view.View import androidx.recyclerview.widget.ItemTouchHelper import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.viewholders.ExpandableViewHolder import eu.kanade.tachiyomi.databinding.DownloadHeaderBinding class DownloadHeaderHolder(view: View, adapter: FlexibleAdapter<*>) : ExpandableViewHolder(view, adapter) { private val binding = DownloadHeaderBinding.bind(view) @SuppressLint("SetTextI18n") fun bind(item: DownloadHeaderItem) { setDragHandleView(binding.reorder) binding.title.text = "${item.name} (${item.size})" } override fun onActionStateChanged(position: Int, actionState: Int) { super.onActionStateChanged(position, actionState) if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { binding.container.isDragged = true mAdapter.collapseAll() } } override fun onItemReleased(position: Int) { super.onItemReleased(position) binding.container.isDragged = false mAdapter.expandAll() (mAdapter as DownloadAdapter).downloadItemListener.onItemReleased(position) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHeaderItem.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.view.View import androidx.recyclerview.widget.RecyclerView import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R data class DownloadHeaderItem( val id: Long, val name: String, val size: Int, ) : AbstractExpandableHeaderItem() { override fun getLayoutRes(): Int { return R.layout.download_header } override fun createViewHolder( view: View, adapter: FlexibleAdapter>, ): DownloadHeaderHolder { return DownloadHeaderHolder(view, adapter) } override fun bindViewHolder( adapter: FlexibleAdapter>, holder: DownloadHeaderHolder, position: Int, payloads: List?, ) { holder.bind(this) } override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as DownloadHeaderItem if (id != other.id) return false if (name != other.name) return false if (size != other.size) return false if (subItemsCount != other.subItemsCount) return false if (subItems !== other.subItems) return false return true } override fun hashCode(): Int { var result = id.hashCode() result = 31 * result + name.hashCode() result = 31 * result + size result = 31 * result + subItems.hashCode() return result } init { isHidden = false isExpanded = true isSelectable = false } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.view.View import androidx.recyclerview.widget.ItemTouchHelper import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.databinding.DownloadItemBinding import eu.kanade.tachiyomi.util.view.popupMenu /** * Class used to hold the data of a download. * All the elements from the layout file "download_item" are available in this class. * * @param view the inflated view for this holder. * @constructor creates a new download holder. */ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) : FlexibleViewHolder(view, adapter) { private val binding = DownloadItemBinding.bind(view) init { setDragHandleView(binding.reorder) binding.menu.setOnClickListener { it.post { showPopupMenu(it) } } } private lateinit var download: Download /** * Binds this holder with the given category. * * @param category The category to bind. */ fun bind(download: Download) { this.download = download // Update the chapter name. binding.chapterTitle.text = download.chapter.name // Update the manga title binding.mangaFullTitle.text = download.manga.title // Update the progress bar and the number of downloaded pages val pages = download.pages if (pages == null) { binding.downloadProgress.progress = 0 binding.downloadProgress.max = 1 binding.downloadProgressText.text = "" } else { binding.downloadProgress.max = pages.size * 100 notifyProgress() notifyDownloadedPages() } } /** * Updates the progress bar of the download. */ fun notifyProgress() { val pages = download.pages ?: return if (binding.downloadProgress.max == 1) { binding.downloadProgress.max = pages.size * 100 } binding.downloadProgress.setProgressCompat(download.totalProgress, true) } /** * Updates the text field of the number of downloaded pages. */ fun notifyDownloadedPages() { val pages = download.pages ?: return binding.downloadProgressText.text = "${download.downloadedImages}/${pages.size}" } override fun onItemReleased(position: Int) { super.onItemReleased(position) adapter.downloadItemListener.onItemReleased(position) binding.container.isDragged = false } override fun onActionStateChanged(position: Int, actionState: Int) { super.onActionStateChanged(position, actionState) if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { binding.container.isDragged = true } } private fun showPopupMenu(view: View) { view.popupMenu( menuRes = R.menu.download_single, initMenu = { findItem(R.id.move_to_top).isVisible = bindingAdapterPosition > 1 findItem(R.id.move_to_bottom).isVisible = bindingAdapterPosition != adapter.itemCount - 1 }, onMenuItemClick = { adapter.downloadItemListener.onMenuItemClick(bindingAdapterPosition, this) }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadItem.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.view.View import androidx.recyclerview.widget.RecyclerView import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractSectionableItem import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.model.Download class DownloadItem( val download: Download, header: DownloadHeaderItem, ) : AbstractSectionableItem(header) { override fun getLayoutRes(): Int { return R.layout.download_item } /** * Returns a new view holder for this item. * * @param view The view of this item. * @param adapter The adapter of this item. */ override fun createViewHolder( view: View, adapter: FlexibleAdapter>, ): DownloadHolder { return DownloadHolder(view, adapter as DownloadAdapter) } /** * Binds the given view holder with this item. * * @param adapter The adapter of this item. * @param holder The holder to bind. * @param position The position of this item in the adapter. * @param payloads List of partial changes. */ override fun bindViewHolder( adapter: FlexibleAdapter>, holder: DownloadHolder, position: Int, payloads: MutableList, ) { holder.bind(download) } /** * Returns true if this item is draggable. */ override fun isDraggable(): Boolean { return true } override fun equals(other: Any?): Boolean { if (this === other) return true if (other is DownloadItem) { return download.chapter.id == other.download.chapter.id } return false } override fun hashCode(): Int { return download.chapter.id.toInt() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreen.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.view.LayoutInflater import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Sort import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.outlined.Pause import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SmallExtendedFloatingActionButton import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.animateFloatingActionButton import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.ViewCompat import androidx.core.view.updatePadding import androidx.recyclerview.widget.LinearLayoutManager import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.NestedMenuItem import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.databinding.DownloadListBinding import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.common.util.lang.launchUI import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Pill import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import kotlin.math.roundToInt object DownloadQueueScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val scope = rememberCoroutineScope() val screenModel = rememberScreenModel { DownloadQueueScreenModel() } val downloadList by screenModel.state.collectAsState() val downloadCount by remember { derivedStateOf { downloadList.sumOf { it.subItems.size } } } val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) var fabExpanded by remember { mutableStateOf(true) } val nestedScrollConnection = remember { // All this lines just for fab state :/ object : NestedScrollConnection { override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { fabExpanded = available.y >= 0 return scrollBehavior.nestedScrollConnection.onPreScroll(available, source) } override fun onPostScroll(consumed: Offset, available: Offset, source: NestedScrollSource): Offset { return scrollBehavior.nestedScrollConnection.onPostScroll(consumed, available, source) } override suspend fun onPreFling(available: Velocity): Velocity { return scrollBehavior.nestedScrollConnection.onPreFling(available) } override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity { return scrollBehavior.nestedScrollConnection.onPostFling(consumed, available) } } } Scaffold( topBar = { AppBar( titleContent = { Row(verticalAlignment = Alignment.CenterVertically) { Text( text = stringResource(MR.strings.label_download_queue), maxLines = 1, modifier = Modifier.weight(1f, false), overflow = TextOverflow.Ellipsis, ) if (downloadCount > 0) { val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f Pill( text = "$downloadCount", modifier = Modifier.padding(start = 4.dp), color = MaterialTheme.colorScheme.onBackground .copy(alpha = pillAlpha), fontSize = 14.sp, ) } } }, navigateUp = navigator::pop, actions = { if (downloadList.isNotEmpty()) { var sortExpanded by remember { mutableStateOf(false) } val onDismissRequest = { sortExpanded = false } DropdownMenu( expanded = sortExpanded, onDismissRequest = onDismissRequest, ) { NestedMenuItem( text = { Text(text = stringResource(MR.strings.action_order_by_upload_date)) }, children = { closeMenu -> DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_newest)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.dateUpload }, true, ) closeMenu() }, ) DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_oldest)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.dateUpload }, false, ) closeMenu() }, ) }, ) NestedMenuItem( text = { Text(text = stringResource(MR.strings.action_order_by_chapter_number)) }, children = { closeMenu -> DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_asc)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.chapterNumber }, false, ) closeMenu() }, ) DropdownMenuItem( text = { Text(text = stringResource(MR.strings.action_desc)) }, onClick = { screenModel.reorderQueue( { it.download.chapter.chapterNumber }, true, ) closeMenu() }, ) }, ) } AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.action_sort), icon = Icons.AutoMirrored.Outlined.Sort, onClick = { sortExpanded = true }, ), AppBar.OverflowAction( title = stringResource(MR.strings.action_cancel_all), onClick = { screenModel.clearQueue() }, ), ), ) } }, scrollBehavior = scrollBehavior, ) }, floatingActionButton = { val isRunning by screenModel.isDownloaderRunning.collectAsState() SmallExtendedFloatingActionButton( text = { val id = if (isRunning) { MR.strings.action_pause } else { MR.strings.action_resume } Text(text = stringResource(id)) }, icon = { val icon = if (isRunning) { Icons.Outlined.Pause } else { Icons.Filled.PlayArrow } Icon(imageVector = icon, contentDescription = null) }, onClick = { if (isRunning) { screenModel.pauseDownloads() } else { screenModel.startDownloads() } }, expanded = fabExpanded, modifier = Modifier.animateFloatingActionButton( visible = downloadList.isNotEmpty(), alignment = Alignment.BottomEnd, ), ) }, ) { contentPadding -> if (downloadList.isEmpty()) { EmptyScreen( stringRes = MR.strings.information_no_downloads, modifier = Modifier.padding(contentPadding), ) return@Scaffold } val density = LocalDensity.current val layoutDirection = LocalLayoutDirection.current val left = with(density) { contentPadding.calculateLeftPadding(layoutDirection).toPx().roundToInt() } val top = with(density) { contentPadding.calculateTopPadding().toPx().roundToInt() } val right = with(density) { contentPadding.calculateRightPadding(layoutDirection).toPx().roundToInt() } val bottom = with(density) { contentPadding.calculateBottomPadding().toPx().roundToInt() } Box(modifier = Modifier.nestedScroll(nestedScrollConnection)) { AndroidView( modifier = Modifier.fillMaxWidth(), factory = { context -> screenModel.controllerBinding = DownloadListBinding.inflate(LayoutInflater.from(context)) screenModel.adapter = DownloadAdapter(screenModel.listener) screenModel.controllerBinding.root.adapter = screenModel.adapter screenModel.adapter?.isHandleDragEnabled = true screenModel.controllerBinding.root.layoutManager = LinearLayoutManager(context) ViewCompat.setNestedScrollingEnabled(screenModel.controllerBinding.root, true) scope.launchUI { screenModel.getDownloadStatusFlow() .collect(screenModel::onStatusChange) } scope.launchUI { screenModel.getDownloadProgressFlow() .collect(screenModel::onUpdateDownloadedPages) } screenModel.controllerBinding.root }, update = { screenModel.controllerBinding.root .updatePadding( left = left, top = top, right = right, bottom = bottom, ) screenModel.adapter?.updateDataSet(downloadList) }, ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadQueueScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.download import android.view.MenuItem import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.databinding.DownloadListBinding import eu.kanade.tachiyomi.source.model.Page import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class DownloadQueueScreenModel( private val downloadManager: DownloadManager = Injekt.get(), ) : ScreenModel { private val _state = MutableStateFlow(emptyList()) val state = _state.asStateFlow() lateinit var controllerBinding: DownloadListBinding /** * Adapter containing the active downloads. */ var adapter: DownloadAdapter? = null /** * Map of jobs for active downloads. */ private val progressJobs = mutableMapOf() val listener = object : DownloadAdapter.DownloadItemListener { /** * Called when an item is released from a drag. * * @param position The position of the released item. */ override fun onItemReleased(position: Int) { val adapter = adapter ?: return val downloads = adapter.headerItems.flatMap { header -> adapter.getSectionItems(header).map { item -> (item as DownloadItem).download } } reorder(downloads) } /** * Called when the menu item of a download is pressed * * @param position The position of the item * @param menuItem The menu Item pressed */ override fun onMenuItemClick(position: Int, menuItem: MenuItem) { val item = adapter?.getItem(position) ?: return if (item is DownloadItem) { when (menuItem.itemId) { R.id.move_to_top, R.id.move_to_bottom -> { val headerItems = adapter?.headerItems ?: return val newDownloads = mutableListOf() headerItems.forEach { headerItem -> headerItem as DownloadHeaderItem if (headerItem == item.header) { headerItem.removeSubItem(item) if (menuItem.itemId == R.id.move_to_top) { headerItem.addSubItem(0, item) } else { headerItem.addSubItem(item) } } newDownloads.addAll(headerItem.subItems.map { it.download }) } reorder(newDownloads) } R.id.move_to_top_series, R.id.move_to_bottom_series -> { val (selectedSeries, otherSeries) = adapter?.currentItems ?.filterIsInstance() ?.map(DownloadItem::download) ?.partition { item.download.manga.id == it.manga.id } ?: Pair(emptyList(), emptyList()) if (menuItem.itemId == R.id.move_to_top_series) { reorder(selectedSeries + otherSeries) } else { reorder(otherSeries + selectedSeries) } } R.id.cancel_download -> { cancel(listOf(item.download)) } R.id.cancel_series -> { val allDownloadsForSeries = adapter?.currentItems ?.filterIsInstance() ?.filter { item.download.manga.id == it.download.manga.id } ?.map(DownloadItem::download) if (!allDownloadsForSeries.isNullOrEmpty()) { cancel(allDownloadsForSeries) } } } } } } init { screenModelScope.launch { downloadManager.queueState .map { downloads -> downloads .groupBy { it.source } .map { entry -> DownloadHeaderItem(entry.key.id, entry.key.name, entry.value.size).apply { addSubItems(0, entry.value.map { DownloadItem(it, this) }) } } } .collect { newList -> _state.update { newList } } } } override fun onDispose() { for (job in progressJobs.values) { job.cancel() } progressJobs.clear() adapter = null } val isDownloaderRunning = downloadManager.isDownloaderRunning .stateIn(screenModelScope, SharingStarted.WhileSubscribed(5000), false) fun getDownloadStatusFlow() = downloadManager.statusFlow() fun getDownloadProgressFlow() = downloadManager.progressFlow() fun startDownloads() { downloadManager.startDownloads() } fun pauseDownloads() { downloadManager.pauseDownloads() } fun clearQueue() { downloadManager.clearQueue() } fun reorder(downloads: List) { downloadManager.reorderQueue(downloads) } fun cancel(downloads: List) { downloadManager.cancelQueuedDownloads(downloads) } fun > reorderQueue(selector: (DownloadItem) -> R, reverse: Boolean = false) { val adapter = adapter ?: return val newDownloads = mutableListOf() adapter.headerItems.forEach { headerItem -> headerItem as DownloadHeaderItem headerItem.subItems = headerItem.subItems.sortedBy(selector).toMutableList().apply { if (reverse) { reverse() } } newDownloads.addAll(headerItem.subItems.map { it.download }) } reorder(newDownloads) } /** * Called when the status of a download changes. * * @param download the download whose status has changed. */ fun onStatusChange(download: Download) { when (download.status) { Download.State.DOWNLOADING -> { launchProgressJob(download) // Initial update of the downloaded pages onUpdateDownloadedPages(download) } Download.State.DOWNLOADED -> { cancelProgressJob(download) onUpdateProgress(download) onUpdateDownloadedPages(download) } Download.State.ERROR -> cancelProgressJob(download) else -> { /* unused */ } } } /** * Observe the progress of a download and notify the view. * * @param download the download to observe its progress. */ private fun launchProgressJob(download: Download) { val job = screenModelScope.launch { while (download.pages == null) { delay(50) } val progressFlows = download.pages!!.map(Page::progressFlow) combine(progressFlows, Array::sum) .distinctUntilChanged() .debounce(50) .collectLatest { onUpdateProgress(download) } } // Avoid leaking jobs progressJobs.remove(download)?.cancel() progressJobs[download] = job } /** * Unsubscribes the given download from the progress subscriptions. * * @param download the download to unsubscribe. */ private fun cancelProgressJob(download: Download) { progressJobs.remove(download)?.cancel() } /** * Called when the progress of a download changes. * * @param download the download whose progress has changed. */ private fun onUpdateProgress(download: Download) { getHolder(download)?.notifyProgress() } /** * Called when a page of a download is downloaded. * * @param download the download whose page has been downloaded. */ fun onUpdateDownloadedPages(download: Download) { getHolder(download)?.notifyDownloadedPages() } /** * Returns the holder for the given download. * * @param download the download to find. * @return the holder of the download or null if it's not bound. */ private fun getHolder(download: Download): DownloadHolder? { return controllerBinding.root.findViewHolderForItemId(download.chapter.id) as? DownloadHolder } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.history import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.util.insertSeparators import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.presentation.history.HistoryUiModel import eu.kanade.tachiyomi.util.lang.toLocalDate import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.preference.CheckboxState import tachiyomi.core.common.preference.mapAsCheckboxState import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.history.interactor.GetHistory import tachiyomi.domain.history.interactor.GetNextChapters import tachiyomi.domain.history.interactor.RemoveHistory import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaWithChapterCount import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class HistoryScreenModel( private val addTracks: AddTracks = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(), private val getHistory: GetHistory = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val getNextChapters: GetNextChapters = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), private val removeHistory: RemoveHistory = Injekt.get(), private val setMangaCategories: SetMangaCategories = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), val snackbarHostState: SnackbarHostState = SnackbarHostState(), private val sourceManager: SourceManager = Injekt.get(), ) : StateScreenModel(State()) { private val _events: Channel = Channel(Channel.UNLIMITED) val events: Flow = _events.receiveAsFlow() init { screenModelScope.launch { state.map { it.searchQuery } .distinctUntilChanged() .flatMapLatest { query -> getHistory.subscribe(query ?: "") .distinctUntilChanged() .catch { error -> logcat(LogPriority.ERROR, error) _events.send(Event.InternalError) } .map { it.toHistoryUiModels() } .flowOn(Dispatchers.IO) } .collect { newList -> mutableState.update { it.copy(list = newList) } } } } private fun List.toHistoryUiModels(): List { return map { HistoryUiModel.Item(it) } .insertSeparators { before, after -> val beforeDate = before?.item?.readAt?.time?.toLocalDate() val afterDate = after?.item?.readAt?.time?.toLocalDate() when { beforeDate != afterDate && afterDate != null -> HistoryUiModel.Header(afterDate) // Return null to avoid adding a separator between two items. else -> null } } } suspend fun getNextChapter(): Chapter? { return withIOContext { getNextChapters.await(onlyUnread = false).firstOrNull() } } fun getNextChapterForManga(mangaId: Long, chapterId: Long) { screenModelScope.launchIO { sendNextChapterEvent(getNextChapters.await(mangaId, chapterId, onlyUnread = false)) } } private suspend fun sendNextChapterEvent(chapters: List) { val chapter = chapters.firstOrNull() _events.send(Event.OpenChapter(chapter)) } fun removeFromHistory(history: HistoryWithRelations) { screenModelScope.launchIO { removeHistory.await(history) } } fun removeAllFromHistory(mangaId: Long) { screenModelScope.launchIO { removeHistory.await(mangaId) } } fun removeAllHistory() { screenModelScope.launchIO { val result = removeHistory.awaitAll() if (!result) return@launchIO _events.send(Event.HistoryCleared) } } fun updateSearchQuery(query: String?) { mutableState.update { it.copy(searchQuery = query) } } fun setDialog(dialog: Dialog?) { mutableState.update { it.copy(dialog = dialog) } } /** * Get user categories. * * @return List of categories, not including the default category */ suspend fun getCategories(): List { return getCategories.await().filterNot { it.isSystemCategory } } private fun moveMangaToCategory(mangaId: Long, categories: Category?) { val categoryIds = listOfNotNull(categories).map { it.id } moveMangaToCategory(mangaId, categoryIds) } private fun moveMangaToCategory(mangaId: Long, categoryIds: List) { screenModelScope.launchIO { setMangaCategories.await(mangaId, categoryIds) } } fun moveMangaToCategoriesAndAddToLibrary(manga: Manga, categories: List) { moveMangaToCategory(manga.id, categories) if (manga.favorite) return screenModelScope.launchIO { updateManga.awaitUpdateFavorite(manga.id, true) } } private suspend fun getMangaCategoryIds(manga: Manga): List { return getCategories.await(manga.id) .map { it.id } } fun addFavorite(mangaId: Long) { screenModelScope.launchIO { val manga = getManga.await(mangaId) ?: return@launchIO val duplicates = getDuplicateLibraryManga(manga) if (duplicates.isNotEmpty()) { mutableState.update { it.copy(dialog = Dialog.DuplicateManga(manga, duplicates)) } return@launchIO } addFavorite(manga) } } fun addFavorite(manga: Manga) { screenModelScope.launchIO { // Move to default category if applicable val categories = getCategories() val defaultCategoryId = libraryPreferences.defaultCategory.get().toLong() val defaultCategory = categories.find { it.id == defaultCategoryId } when { // Default category set defaultCategory != null -> { val result = updateManga.awaitUpdateFavorite(manga.id, true) if (!result) return@launchIO moveMangaToCategory(manga.id, defaultCategory) } // Automatic 'Default' or no categories defaultCategoryId == 0L || categories.isEmpty() -> { val result = updateManga.awaitUpdateFavorite(manga.id, true) if (!result) return@launchIO moveMangaToCategory(manga.id, null) } // Choose a category else -> showChangeCategoryDialog(manga) } // Sync with tracking services if applicable addTracks.bindEnhancedTrackers(manga, sourceManager.getOrStub(manga.source)) } } fun showMigrateDialog(target: Manga, current: Manga) { mutableState.update { currentState -> currentState.copy(dialog = Dialog.Migrate(target = target, current = current)) } } fun showChangeCategoryDialog(manga: Manga) { screenModelScope.launch { val categories = getCategories() val selection = getMangaCategoryIds(manga) mutableState.update { currentState -> currentState.copy( dialog = Dialog.ChangeCategory( manga = manga, initialSelection = categories.mapAsCheckboxState { it.id in selection }.toImmutableList(), ), ) } } } @Immutable data class State( val searchQuery: String? = null, val list: List? = null, val dialog: Dialog? = null, ) sealed interface Dialog { data object DeleteAll : Dialog data class Delete(val history: HistoryWithRelations) : Dialog data class DuplicateManga(val manga: Manga, val duplicates: List) : Dialog data class ChangeCategory( val manga: Manga, val initialSelection: ImmutableList>, ) : Dialog data class Migrate(val target: Manga, val current: Manga) : Dialog } sealed interface Event { data class OpenChapter(val chapter: Chapter?) : Event data object InternalError : Event data object HistoryCleared : Event } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt ================================================ package eu.kanade.tachiyomi.ui.history import android.content.Context import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.category.components.ChangeCategoryDialog import eu.kanade.presentation.history.HistoryScreen import eu.kanade.presentation.history.components.HistoryDeleteAllDialog import eu.kanade.presentation.history.components.HistoryDeleteDialog import eu.kanade.presentation.manga.DuplicateMangaDialog import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import mihon.feature.migration.dialog.MigrateMangaDialog import tachiyomi.core.common.i18n.stringResource import tachiyomi.domain.chapter.model.Chapter import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource data object HistoryTab : Tab { private val snackbarHostState = SnackbarHostState() private val resumeLastChapterReadEvent = Channel() override val options: TabOptions @Composable get() { val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_history_enter) return TabOptions( index = 2u, title = stringResource(MR.strings.label_recent_manga), icon = rememberAnimatedVectorPainter(image, isSelected), ) } override suspend fun onReselect(navigator: Navigator) { resumeLastChapterReadEvent.send(Unit) } @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val screenModel = rememberScreenModel { HistoryScreenModel() } val state by screenModel.state.collectAsState() HistoryScreen( state = state, snackbarHostState = snackbarHostState, onSearchQueryChange = screenModel::updateSearchQuery, onClickCover = { navigator.push(MangaScreen(it)) }, onClickResume = screenModel::getNextChapterForManga, onDialogChange = screenModel::setDialog, onClickFavorite = screenModel::addFavorite, ) val onDismissRequest = { screenModel.setDialog(null) } when (val dialog = state.dialog) { is HistoryScreenModel.Dialog.Delete -> { HistoryDeleteDialog( onDismissRequest = onDismissRequest, onDelete = { all -> if (all) { screenModel.removeAllFromHistory(dialog.history.mangaId) } else { screenModel.removeFromHistory(dialog.history) } }, ) } is HistoryScreenModel.Dialog.DeleteAll -> { HistoryDeleteAllDialog( onDismissRequest = onDismissRequest, onDelete = screenModel::removeAllHistory, ) } is HistoryScreenModel.Dialog.DuplicateManga -> { DuplicateMangaDialog( duplicates = dialog.duplicates, onDismissRequest = onDismissRequest, onConfirm = { screenModel.addFavorite(dialog.manga) }, onOpenManga = { navigator.push(MangaScreen(it.id)) }, onMigrate = { screenModel.showMigrateDialog(dialog.manga, it) }, ) } is HistoryScreenModel.Dialog.ChangeCategory -> { ChangeCategoryDialog( initialSelection = dialog.initialSelection, onDismissRequest = onDismissRequest, onEditCategories = { navigator.push(CategoryScreen()) }, onConfirm = { include, _ -> screenModel.moveMangaToCategoriesAndAddToLibrary(dialog.manga, include) }, ) } is HistoryScreenModel.Dialog.Migrate -> { MigrateMangaDialog( current = dialog.current, target = dialog.target, // Initiated from the context of [dialog.target] so we show [dialog.current]. onClickTitle = { navigator.push(MangaScreen(dialog.current.id)) }, onDismissRequest = onDismissRequest, ) } null -> {} } LaunchedEffect(state.list) { if (state.list != null) { (context as? MainActivity)?.ready = true } } LaunchedEffect(Unit) { screenModel.events.collectLatest { e -> when (e) { HistoryScreenModel.Event.InternalError -> snackbarHostState.showSnackbar(context.stringResource(MR.strings.internal_error)) HistoryScreenModel.Event.HistoryCleared -> snackbarHostState.showSnackbar(context.stringResource(MR.strings.clear_history_completed)) is HistoryScreenModel.Event.OpenChapter -> openChapter(context, e.chapter) } } } LaunchedEffect(Unit) { resumeLastChapterReadEvent.receiveAsFlow().collectLatest { openChapter(context, screenModel.getNextChapter()) } } } private suspend fun openChapter(context: Context, chapter: Chapter?) { if (chapter != null) { val intent = ReaderActivity.newIntent(context, chapter.mangaId, chapter.id) context.startActivity(intent) } else { snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter)) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt ================================================ package eu.kanade.tachiyomi.ui.home import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.shrinkVertically import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.padding import androidx.compose.material3.Badge import androidx.compose.material3.BadgedBox import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.NavigationRailItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.util.fastForEach import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabNavigator import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.isTabletUi import eu.kanade.tachiyomi.ui.browse.BrowseTab import eu.kanade.tachiyomi.ui.download.DownloadQueueScreen import eu.kanade.tachiyomi.ui.history.HistoryTab import eu.kanade.tachiyomi.ui.library.LibraryTab import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.more.MoreTab import eu.kanade.tachiyomi.ui.updates.UpdatesTab import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch import soup.compose.material.motion.animation.materialFadeThroughIn import soup.compose.material.motion.animation.materialFadeThroughOut import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.NavigationBar import tachiyomi.presentation.core.components.material.NavigationRail import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.pluralStringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object HomeScreen : Screen() { private val librarySearchEvent = Channel() private val openTabEvent = Channel() private val showBottomNavEvent = Channel() @Suppress("ConstPropertyName") private const val TabFadeDuration = 200 @Suppress("ConstPropertyName") private const val TabNavigatorKey = "HomeTabs" private val TABS = listOf( LibraryTab, UpdatesTab, HistoryTab, BrowseTab, MoreTab, ) @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow TabNavigator( tab = LibraryTab, key = TabNavigatorKey, ) { tabNavigator -> // Provide usable navigator to content screen CompositionLocalProvider(LocalNavigator provides navigator) { Scaffold( startBar = { if (isTabletUi()) { NavigationRail { TABS.fastForEach { NavigationRailItem(it) } } } }, bottomBar = { if (!isTabletUi()) { val bottomNavVisible by produceState(initialValue = true) { showBottomNavEvent.receiveAsFlow().collectLatest { value = it } } AnimatedVisibility( visible = bottomNavVisible, enter = expandVertically(), exit = shrinkVertically(), ) { NavigationBar { TABS.fastForEach { NavigationBarItem(it) } } } } }, contentWindowInsets = WindowInsets(0), ) { contentPadding -> Box( modifier = Modifier .padding(contentPadding) .consumeWindowInsets(contentPadding), ) { AnimatedContent( targetState = tabNavigator.current, transitionSpec = { materialFadeThroughIn(initialScale = 1f, durationMillis = TabFadeDuration) togetherWith materialFadeThroughOut(durationMillis = TabFadeDuration) }, label = "tabContent", ) { tabNavigator.saveableState(key = "currentTab", it) { it.Content() } } } } } val goToLibraryTab = { tabNavigator.current = LibraryTab } BackHandler(enabled = tabNavigator.current != LibraryTab, onBack = goToLibraryTab) LaunchedEffect(Unit) { launch { librarySearchEvent.receiveAsFlow().collectLatest { goToLibraryTab() LibraryTab.search(it) } } launch { openTabEvent.receiveAsFlow().collectLatest { tabNavigator.current = when (it) { is Tab.Library -> LibraryTab Tab.Updates -> UpdatesTab Tab.History -> HistoryTab is Tab.Browse -> { if (it.toExtensions) { BrowseTab.showExtension() } BrowseTab } is Tab.More -> MoreTab } if (it is Tab.Library && it.mangaIdToOpen != null) { navigator.push(MangaScreen(it.mangaIdToOpen)) } if (it is Tab.More && it.toDownloads) { navigator.push(DownloadQueueScreen) } } } } } } @Composable private fun RowScope.NavigationBarItem(tab: eu.kanade.presentation.util.Tab) { val tabNavigator = LocalTabNavigator.current val navigator = LocalNavigator.currentOrThrow val scope = rememberCoroutineScope() val selected = tabNavigator.current::class == tab::class NavigationBarItem( selected = selected, onClick = { if (!selected) { tabNavigator.current = tab } else { scope.launch { tab.onReselect(navigator) } } }, icon = { NavigationIconItem(tab) }, label = { Text( text = tab.options.title, style = MaterialTheme.typography.labelLarge, maxLines = 1, overflow = TextOverflow.Ellipsis, ) }, alwaysShowLabel = true, ) } @Composable fun NavigationRailItem(tab: eu.kanade.presentation.util.Tab) { val tabNavigator = LocalTabNavigator.current val navigator = LocalNavigator.currentOrThrow val scope = rememberCoroutineScope() val selected = tabNavigator.current::class == tab::class NavigationRailItem( selected = selected, onClick = { if (!selected) { tabNavigator.current = tab } else { scope.launch { tab.onReselect(navigator) } } }, icon = { NavigationIconItem(tab) }, label = { Text( text = tab.options.title, style = MaterialTheme.typography.labelLarge, maxLines = 1, overflow = TextOverflow.Ellipsis, ) }, alwaysShowLabel = true, ) } @Composable private fun NavigationIconItem(tab: eu.kanade.presentation.util.Tab) { BadgedBox( badge = { when { tab is UpdatesTab -> { val count by produceState(initialValue = 0) { val pref = Injekt.get() combine( pref.newShowUpdatesCount.changes(), pref.newUpdatesCount.changes(), ) { show, count -> if (show) count else 0 } .collectLatest { value = it } } if (count > 0) { Badge { val desc = pluralStringResource( MR.plurals.notification_chapters_generic, count = count, count, ) Text( text = count.toString(), modifier = Modifier.semantics { contentDescription = desc }, ) } } } BrowseTab::class.isInstance(tab) -> { val count by produceState(initialValue = 0) { Injekt.get().extensionUpdatesCount.changes() .collectLatest { value = it } } if (count > 0) { Badge { val desc = pluralStringResource( MR.plurals.update_check_notification_ext_updates, count = count, count, ) Text( text = count.toString(), modifier = Modifier.semantics { contentDescription = desc }, ) } } } } }, ) { Icon( painter = tab.options.icon!!, contentDescription = tab.options.title, ) } } suspend fun search(query: String) { librarySearchEvent.send(query) } suspend fun openTab(tab: Tab) { openTabEvent.send(tab) } suspend fun showBottomNav(show: Boolean) { showBottomNavEvent.send(show) } sealed interface Tab { data class Library(val mangaIdToOpen: Long? = null) : Tab data object Updates : Tab data object History : Tab data class Browse(val toExtensions: Boolean = false) : Tab data class More(val toDownloads: Boolean) : Tab } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt ================================================ package eu.kanade.tachiyomi.ui.library import eu.kanade.tachiyomi.source.getNameForMangaInfo import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.source.service.SourceManager import tachiyomi.source.local.LocalSource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get private const val LOCAL_SOURCE_ID_ALIAS = "local" data class LibraryItem( val libraryManga: LibraryManga, val downloadCount: Long = -1, val unreadCount: Long = -1, val isLocal: Boolean = false, val sourceLanguage: String = "", private val sourceManager: SourceManager = Injekt.get(), ) { val id: Long = libraryManga.id /** * Checks if a query matches the manga * * @param constraint the query to check. * @return true if the manga matches the query, false otherwise. */ fun matches(constraint: String): Boolean { val source = sourceManager.getOrStub(libraryManga.manga.source) val sourceName by lazy { source.getNameForMangaInfo() } if (constraint.startsWith("id:", true)) { return id == constraint.substringAfter("id:").toLongOrNull() } else if (constraint.startsWith("src:", true)) { val querySource = constraint.substringAfter("src:") return if (querySource.equals(LOCAL_SOURCE_ID_ALIAS, ignoreCase = true)) { source.id == LocalSource.ID } else { source.id == querySource.toLongOrNull() } } return libraryManga.manga.title.contains(constraint, true) || (libraryManga.manga.author?.contains(constraint, true) ?: false) || (libraryManga.manga.artist?.contains(constraint, true) ?: false) || (libraryManga.manga.description?.contains(constraint, true) ?: false) || constraint.split(",").map { it.trim() }.all { subconstraint -> checkNegatableConstraint(subconstraint) { sourceName.contains(it, true) || (libraryManga.manga.genre?.any { genre -> genre.equals(it, true) } ?: false) } } } /** * Checks a predicate on a negatable constraint. If the constraint starts with a minus character, * the minus is stripped and the result of the predicate is inverted. * * @param constraint the argument to the predicate. Inverts the predicate if it starts with '-'. * @param predicate the check to be run against the constraint. * @return !predicate(x) if constraint = "-x", otherwise predicate(constraint) */ private fun checkNegatableConstraint( constraint: String, predicate: (String) -> Boolean, ): Boolean { return if (constraint.startsWith("-")) { !predicate(constraint.substringAfter("-").trimStart()) } else { predicate(constraint) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.library import androidx.compose.runtime.Immutable import androidx.compose.ui.util.fastAny import androidx.compose.ui.util.fastFilter import androidx.compose.ui.util.fastMap import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.preference.PreferenceMutableState import eu.kanade.core.preference.asState import eu.kanade.core.util.fastFilterNot import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS import eu.kanade.presentation.library.components.LibraryToolbarTitle import eu.kanade.presentation.manga.DownloadAction import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.chapter.getNextUnread import eu.kanade.tachiyomi.util.removeCovers import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.dropWhile import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.updateAndGet import mihon.core.common.utils.mutate import tachiyomi.core.common.preference.CheckboxState import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.util.lang.compareToWithCollator import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.chapter.interactor.GetBookmarkedChaptersByMangaId import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.history.interactor.GetNextChapters import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.library.model.LibrarySort import tachiyomi.domain.library.model.sort import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetLibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.model.applyFilter import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.track.interactor.GetTracksPerManga import tachiyomi.domain.track.model.Track import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.random.Random class LibraryScreenModel( private val getLibraryManga: GetLibraryManga = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val getTracksPerManga: GetTracksPerManga = Injekt.get(), private val getNextChapters: GetNextChapters = Injekt.get(), private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(), private val getBookmarkedChaptersByMangaId: GetBookmarkedChaptersByMangaId = Injekt.get(), private val setReadStatus: SetReadStatus = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), private val setMangaCategories: SetMangaCategories = Injekt.get(), private val preferences: BasePreferences = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), private val coverCache: CoverCache = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val downloadManager: DownloadManager = Injekt.get(), private val downloadCache: DownloadCache = Injekt.get(), private val trackerManager: TrackerManager = Injekt.get(), ) : StateScreenModel(State()) { init { mutableState.update { state -> state.copy(activeCategoryIndex = libraryPreferences.lastUsedCategory.get()) } screenModelScope.launchIO { combine( state.map { it.searchQuery }.distinctUntilChanged().debounce(SEARCH_DEBOUNCE_MILLIS), getCategories.subscribe(), getFavoritesFlow(), combine(getTracksPerManga.subscribe(), getTrackingFiltersFlow(), ::Pair), getLibraryItemPreferencesFlow(), ) { searchQuery, categories, favorites, (tracksMap, trackingFilters), itemPreferences -> val showSystemCategory = favorites.any { it.libraryManga.categories.contains(0) } val filteredFavorites = favorites .applyFilters(tracksMap, trackingFilters, itemPreferences) .let { if (searchQuery == null) it else it.filter { m -> m.matches(searchQuery) } } LibraryData( isInitialized = true, showSystemCategory = showSystemCategory, categories = categories, favorites = filteredFavorites, tracksMap = tracksMap, loggedInTrackerIds = trackingFilters.keys, ) } .distinctUntilChanged() .collectLatest { libraryData -> mutableState.update { state -> state.copy(libraryData = libraryData) } } } screenModelScope.launchIO { state .dropWhile { !it.libraryData.isInitialized } .map { it.libraryData } .distinctUntilChanged() .map { data -> data.favorites .applyGrouping(data.categories, data.showSystemCategory) .applySort(data.favoritesById, data.tracksMap, data.loggedInTrackerIds) } .collectLatest { mutableState.update { state -> state.copy( isLoading = false, groupedFavorites = it, ) } } } combine( libraryPreferences.categoryTabs.changes(), libraryPreferences.categoryNumberOfItems.changes(), libraryPreferences.showContinueReadingButton.changes(), ) { a, b, c -> arrayOf(a, b, c) } .onEach { (showCategoryTabs, showMangaCount, showMangaContinueButton) -> mutableState.update { state -> state.copy( showCategoryTabs = showCategoryTabs, showMangaCount = showMangaCount, showMangaContinueButton = showMangaContinueButton, ) } } .launchIn(screenModelScope) combine( getLibraryItemPreferencesFlow(), getTrackingFiltersFlow(), ) { prefs, trackFilters -> listOf( prefs.filterDownloaded, prefs.filterUnread, prefs.filterStarted, prefs.filterBookmarked, prefs.filterCompleted, prefs.filterIntervalCustom, *trackFilters.values.toTypedArray(), ) .any { it != TriState.DISABLED } } .distinctUntilChanged() .onEach { mutableState.update { state -> state.copy(hasActiveFilters = it) } } .launchIn(screenModelScope) } private fun List.applyFilters( trackMap: Map>, trackingFilter: Map, preferences: ItemPreferences, ): List { val downloadedOnly = preferences.globalFilterDownloaded val skipOutsideReleasePeriod = preferences.skipOutsideReleasePeriod val filterDownloaded = if (downloadedOnly) TriState.ENABLED_IS else preferences.filterDownloaded val filterUnread = preferences.filterUnread val filterStarted = preferences.filterStarted val filterBookmarked = preferences.filterBookmarked val filterCompleted = preferences.filterCompleted val filterIntervalCustom = preferences.filterIntervalCustom val isNotLoggedInAnyTrack = trackingFilter.isEmpty() val excludedTracks = trackingFilter.mapNotNull { if (it.value == TriState.ENABLED_NOT) it.key else null } val includedTracks = trackingFilter.mapNotNull { if (it.value == TriState.ENABLED_IS) it.key else null } val trackFiltersIsIgnored = includedTracks.isEmpty() && excludedTracks.isEmpty() val filterFnDownloaded: (LibraryItem) -> Boolean = { applyFilter(filterDownloaded) { it.libraryManga.manga.isLocal() || it.downloadCount > 0 || downloadManager.getDownloadCount(it.libraryManga.manga) > 0 } } val filterFnUnread: (LibraryItem) -> Boolean = { applyFilter(filterUnread) { it.libraryManga.unreadCount > 0 } } val filterFnStarted: (LibraryItem) -> Boolean = { applyFilter(filterStarted) { it.libraryManga.hasStarted } } val filterFnBookmarked: (LibraryItem) -> Boolean = { applyFilter(filterBookmarked) { it.libraryManga.hasBookmarks } } val filterFnCompleted: (LibraryItem) -> Boolean = { applyFilter(filterCompleted) { it.libraryManga.manga.status.toInt() == SManga.COMPLETED } } val filterFnIntervalCustom: (LibraryItem) -> Boolean = { if (skipOutsideReleasePeriod) { applyFilter(filterIntervalCustom) { it.libraryManga.manga.fetchInterval < 0 } } else { true } } val filterFnTracking: (LibraryItem) -> Boolean = tracking@{ item -> if (isNotLoggedInAnyTrack || trackFiltersIsIgnored) return@tracking true val mangaTracks = trackMap[item.id].orEmpty().map { it.trackerId } val isExcluded = excludedTracks.isNotEmpty() && mangaTracks.fastAny { it in excludedTracks } val isIncluded = includedTracks.isEmpty() || mangaTracks.fastAny { it in includedTracks } !isExcluded && isIncluded } return fastFilter { filterFnDownloaded(it) && filterFnUnread(it) && filterFnStarted(it) && filterFnBookmarked(it) && filterFnCompleted(it) && filterFnIntervalCustom(it) && filterFnTracking(it) } } private fun List.applyGrouping( categories: List, showSystemCategory: Boolean, ): Map> { val groupCache = mutableMapOf>() forEach { item -> item.libraryManga.categories.forEach { categoryId -> groupCache.getOrPut(categoryId) { mutableListOf() }.add(item.id) } } return categories.filter { showSystemCategory || !it.isSystemCategory } .associateWith { groupCache[it.id]?.toList().orEmpty() } } private fun Map>.applySort( favoritesById: Map, trackMap: Map>, loggedInTrackerIds: Set, ): Map> { val sortAlphabetically: (LibraryItem, LibraryItem) -> Int = { manga1, manga2 -> val title1 = manga1.libraryManga.manga.title.lowercase() val title2 = manga2.libraryManga.manga.title.lowercase() title1.compareToWithCollator(title2) } val defaultTrackerScoreSortValue = -1.0 val trackerScores by lazy { val trackerMap = trackerManager.getAll(loggedInTrackerIds).associateBy { e -> e.id } trackMap.mapValues { entry -> when { entry.value.isEmpty() -> null else -> entry.value .mapNotNull { trackerMap[it.trackerId]?.get10PointScore(it) } .average() } } } fun LibrarySort.comparator(): Comparator = Comparator { manga1, manga2 -> when (this.type) { LibrarySort.Type.Alphabetical -> { sortAlphabetically(manga1, manga2) } LibrarySort.Type.LastRead -> { manga1.libraryManga.lastRead.compareTo(manga2.libraryManga.lastRead) } LibrarySort.Type.LastUpdate -> { manga1.libraryManga.manga.lastUpdate.compareTo(manga2.libraryManga.manga.lastUpdate) } LibrarySort.Type.UnreadCount -> when { // Ensure unread content comes first manga1.libraryManga.unreadCount == manga2.libraryManga.unreadCount -> 0 manga1.libraryManga.unreadCount == 0L -> if (this.isAscending) 1 else -1 manga2.libraryManga.unreadCount == 0L -> if (this.isAscending) -1 else 1 else -> manga1.libraryManga.unreadCount.compareTo(manga2.libraryManga.unreadCount) } LibrarySort.Type.TotalChapters -> { manga1.libraryManga.totalChapters.compareTo(manga2.libraryManga.totalChapters) } LibrarySort.Type.LatestChapter -> { manga1.libraryManga.latestUpload.compareTo(manga2.libraryManga.latestUpload) } LibrarySort.Type.ChapterFetchDate -> { manga1.libraryManga.chapterFetchedAt.compareTo(manga2.libraryManga.chapterFetchedAt) } LibrarySort.Type.DateAdded -> { manga1.libraryManga.manga.dateAdded.compareTo(manga2.libraryManga.manga.dateAdded) } LibrarySort.Type.TrackerMean -> { val item1Score = trackerScores[manga1.id] ?: defaultTrackerScoreSortValue val item2Score = trackerScores[manga2.id] ?: defaultTrackerScoreSortValue item1Score.compareTo(item2Score) } LibrarySort.Type.Random -> { error("Why Are We Still Here? Just To Suffer?") } } } return mapValues { (key, value) -> if (key.sort.type == LibrarySort.Type.Random) { return@mapValues value.shuffled(Random(libraryPreferences.randomSortSeed.get())) } val manga = value.mapNotNull { favoritesById[it] } val comparator = key.sort.comparator() .let { if (key.sort.isAscending) it else it.reversed() } .thenComparator(sortAlphabetically) manga.sortedWith(comparator).map { it.id } } } private fun getLibraryItemPreferencesFlow(): Flow { return combine( libraryPreferences.downloadBadge.changes(), libraryPreferences.unreadBadge.changes(), libraryPreferences.localBadge.changes(), libraryPreferences.languageBadge.changes(), libraryPreferences.autoUpdateMangaRestrictions.changes(), preferences.downloadedOnly.changes(), libraryPreferences.filterDownloaded.changes(), libraryPreferences.filterUnread.changes(), libraryPreferences.filterStarted.changes(), libraryPreferences.filterBookmarked.changes(), libraryPreferences.filterCompleted.changes(), libraryPreferences.filterIntervalCustom.changes(), ) { ItemPreferences( downloadBadge = it[0] as Boolean, unreadBadge = it[1] as Boolean, localBadge = it[2] as Boolean, languageBadge = it[3] as Boolean, skipOutsideReleasePeriod = LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in (it[4] as Set<*>), globalFilterDownloaded = it[5] as Boolean, filterDownloaded = it[6] as TriState, filterUnread = it[7] as TriState, filterStarted = it[8] as TriState, filterBookmarked = it[9] as TriState, filterCompleted = it[10] as TriState, filterIntervalCustom = it[11] as TriState, ) } } private fun getFavoritesFlow(): Flow> { return combine( getLibraryManga.subscribe(), getLibraryItemPreferencesFlow(), downloadCache.changes, ) { libraryManga, preferences, _ -> libraryManga.map { manga -> LibraryItem( libraryManga = manga, downloadCount = if (preferences.downloadBadge) { downloadManager.getDownloadCount(manga.manga).toLong() } else { 0 }, unreadCount = if (preferences.unreadBadge) { manga.unreadCount } else { 0 }, isLocal = if (preferences.localBadge) { manga.manga.isLocal() } else { false }, sourceLanguage = if (preferences.languageBadge) { sourceManager.getOrStub(manga.manga.source).lang } else { "" }, ) } } } /** * Flow of tracking filter preferences * * @return map of track id with the filter value */ private fun getTrackingFiltersFlow(): Flow> { return trackerManager.loggedInTrackersFlow().flatMapLatest { loggedInTrackers -> if (loggedInTrackers.isEmpty()) { flowOf(emptyMap()) } else { val filterFlows = loggedInTrackers.map { tracker -> libraryPreferences.filterTracking(tracker.id.toInt()).changes().map { tracker.id to it } } combine(filterFlows) { it.toMap() } } } } /** * Returns the common categories for the given list of manga. * * @param mangas the list of manga. */ private suspend fun getCommonCategories(mangas: List): Collection { if (mangas.isEmpty()) return emptyList() return mangas .map { getCategories.await(it.id).toSet() } .reduce { set1, set2 -> set1.intersect(set2) } } suspend fun getNextUnreadChapter(manga: Manga): Chapter? { return getChaptersByMangaId.await(manga.id, applyScanlatorFilter = true).getNextUnread(manga, downloadManager) } /** * Returns the mix (non-common) categories for the given list of manga. * * @param mangas the list of manga. */ private suspend fun getMixCategories(mangas: List): Collection { if (mangas.isEmpty()) return emptyList() val mangaCategories = mangas.map { getCategories.await(it.id).toSet() } val common = mangaCategories.reduce { set1, set2 -> set1.intersect(set2) } return mangaCategories.flatten().distinct().subtract(common) } /** * Queues the amount specified of unread chapters from the list of selected manga */ fun performDownloadAction(action: DownloadAction) { when (action) { DownloadAction.NEXT_1_CHAPTER -> downloadNextChapters(1) DownloadAction.NEXT_5_CHAPTERS -> downloadNextChapters(5) DownloadAction.NEXT_10_CHAPTERS -> downloadNextChapters(10) DownloadAction.NEXT_25_CHAPTERS -> downloadNextChapters(25) DownloadAction.UNREAD_CHAPTERS -> downloadNextChapters(null) DownloadAction.BOOKMARKED_CHAPTERS -> downloadBookmarkedChapters() } clearSelection() } private fun downloadNextChapters(amount: Int?) { val mangas = state.value.selectedManga screenModelScope.launchNonCancellable { mangas.forEach { manga -> val chapters = getNextChapters.await(manga.id) .fastFilterNot { chapter -> downloadManager.getQueuedDownloadOrNull(chapter.id) != null || downloadManager.isChapterDownloaded( chapter.name, chapter.scanlator, chapter.url, manga.title, manga.source, ) } .let { if (amount != null) it.take(amount) else it } downloadManager.downloadChapters(manga, chapters) } } } private fun downloadBookmarkedChapters() { val mangas = state.value.selectedManga screenModelScope.launchNonCancellable { mangas.forEach { manga -> val chapters = getBookmarkedChaptersByMangaId.await(manga.id) .fastFilterNot { chapter -> downloadManager.getQueuedDownloadOrNull(chapter.id) != null || downloadManager.isChapterDownloaded( chapter.name, chapter.scanlator, chapter.url, manga.title, manga.source, ) } downloadManager.downloadChapters(manga, chapters) } } } /** * Marks mangas' chapters read status. */ fun markReadSelection(read: Boolean) { val selection = state.value.selectedManga screenModelScope.launchNonCancellable { selection.forEach { manga -> setReadStatus.await( manga = manga, read = read, ) } } clearSelection() } /** * Remove the selected manga. * * @param mangas the list of manga to delete. * @param deleteFromLibrary whether to delete manga from library. * @param deleteChapters whether to delete downloaded chapters. */ fun removeMangas(mangas: List, deleteFromLibrary: Boolean, deleteChapters: Boolean) { screenModelScope.launchNonCancellable { if (deleteFromLibrary) { val toDelete = mangas.map { it.removeCovers(coverCache) MangaUpdate( favorite = false, id = it.id, ) } updateManga.awaitAll(toDelete) } if (deleteChapters) { mangas.forEach { manga -> val source = sourceManager.get(manga.source) as? HttpSource if (source != null) { downloadManager.deleteManga(manga, source) } } } } } /** * Bulk update categories of manga using old and new common categories. * * @param mangaList the list of manga to move. * @param addCategories the categories to add for all mangas. * @param removeCategories the categories to remove in all mangas. */ fun setMangaCategories(mangaList: List, addCategories: List, removeCategories: List) { screenModelScope.launchNonCancellable { mangaList.forEach { manga -> val categoryIds = getCategories.await(manga.id) .map { it.id } .subtract(removeCategories.toSet()) .plus(addCategories) .toList() setMangaCategories.await(manga.id, categoryIds) } } } fun getDisplayMode(): PreferenceMutableState { return libraryPreferences.displayMode.asState(screenModelScope) } fun getColumnsForOrientation(isLandscape: Boolean): PreferenceMutableState { return (if (isLandscape) libraryPreferences.landscapeColumns else libraryPreferences.portraitColumns) .asState(screenModelScope) } fun getRandomLibraryItemForCurrentCategory(): LibraryItem? { val state = state.value return state.getItemsForCategoryId(state.activeCategory?.id).randomOrNull() } fun showSettingsDialog() { mutableState.update { it.copy(dialog = Dialog.SettingsSheet) } } private var lastSelectionCategory: Long? = null fun clearSelection() { lastSelectionCategory = null mutableState.update { it.copy(selection = setOf()) } } fun toggleSelection(category: Category, manga: LibraryManga) { mutableState.update { state -> val newSelection = state.selection.mutate { set -> if (!set.remove(manga.id)) set.add(manga.id) } lastSelectionCategory = category.id.takeIf { newSelection.isNotEmpty() } state.copy(selection = newSelection) } } /** * Selects all mangas between and including the given manga and the last pressed manga from the * same category as the given manga */ fun toggleRangeSelection(category: Category, manga: LibraryManga) { mutableState.update { state -> val newSelection = state.selection.mutate { list -> val lastSelected = list.lastOrNull() if (lastSelectionCategory != category.id) { list.add(manga.id) return@mutate } val items = state.getItemsForCategoryId(category.id).fastMap { it.id } val lastMangaIndex = items.indexOf(lastSelected) val curMangaIndex = items.indexOf(manga.id) val selectionRange = when { lastMangaIndex < curMangaIndex -> lastMangaIndex..curMangaIndex curMangaIndex < lastMangaIndex -> curMangaIndex..lastMangaIndex // We shouldn't reach this point else -> return@mutate } selectionRange.mapNotNull { items[it] }.let(list::addAll) } lastSelectionCategory = category.id state.copy(selection = newSelection) } } fun selectAll() { lastSelectionCategory = null mutableState.update { state -> val newSelection = state.selection.mutate { list -> state.getItemsForCategoryId(state.activeCategory?.id).map { it.id }.let(list::addAll) } state.copy(selection = newSelection) } } fun invertSelection() { lastSelectionCategory = null mutableState.update { state -> val newSelection = state.selection.mutate { list -> val itemIds = state.getItemsForCategoryId(state.activeCategory?.id).fastMap { it.id } val (toRemove, toAdd) = itemIds.partition { it in list } list.removeAll(toRemove) list.addAll(toAdd) } state.copy(selection = newSelection) } } fun search(query: String?) { mutableState.update { it.copy(searchQuery = query) } } fun updateActiveCategoryIndex(index: Int) { val newIndex = mutableState.updateAndGet { state -> state.copy(activeCategoryIndex = index) } .coercedActiveCategoryIndex libraryPreferences.lastUsedCategory.set(newIndex) } fun openChangeCategoryDialog() { screenModelScope.launchIO { // Create a copy of selected manga val mangaList = state.value.selectedManga // Hide the default category because it has a different behavior than the ones from db. val categories = state.value.displayedCategories.filter { it.id != 0L } // Get indexes of the common categories to preselect. val common = getCommonCategories(mangaList) // Get indexes of the mix categories to preselect. val mix = getMixCategories(mangaList) val preselected = categories .map { when (it) { in common -> CheckboxState.State.Checked(it) in mix -> CheckboxState.TriState.Exclude(it) else -> CheckboxState.State.None(it) } } .toImmutableList() mutableState.update { it.copy(dialog = Dialog.ChangeCategory(mangaList, preselected)) } } } fun openDeleteMangaDialog() { mutableState.update { it.copy(dialog = Dialog.DeleteManga(state.value.selectedManga)) } } fun closeDialog() { mutableState.update { it.copy(dialog = null) } } sealed interface Dialog { data object SettingsSheet : Dialog data class ChangeCategory( val manga: List, val initialSelection: ImmutableList>, ) : Dialog data class DeleteManga(val manga: List) : Dialog } @Immutable private data class ItemPreferences( val downloadBadge: Boolean, val unreadBadge: Boolean, val localBadge: Boolean, val languageBadge: Boolean, val skipOutsideReleasePeriod: Boolean, val globalFilterDownloaded: Boolean, val filterDownloaded: TriState, val filterUnread: TriState, val filterStarted: TriState, val filterBookmarked: TriState, val filterCompleted: TriState, val filterIntervalCustom: TriState, ) @Immutable data class LibraryData( val isInitialized: Boolean = false, val showSystemCategory: Boolean = false, val categories: List = emptyList(), val favorites: List = emptyList(), val tracksMap: Map> = emptyMap(), val loggedInTrackerIds: Set = emptySet(), ) { val favoritesById by lazy { favorites.associateBy { it.id } } } @Immutable data class State( val isInitialized: Boolean = false, val isLoading: Boolean = true, val searchQuery: String? = null, val selection: Set = setOf(), val hasActiveFilters: Boolean = false, val showCategoryTabs: Boolean = false, val showMangaCount: Boolean = false, val showMangaContinueButton: Boolean = false, val dialog: Dialog? = null, val libraryData: LibraryData = LibraryData(), private val activeCategoryIndex: Int = 0, private val groupedFavorites: Map> = emptyMap(), ) { val displayedCategories: List = groupedFavorites.keys.toList() val coercedActiveCategoryIndex = activeCategoryIndex.coerceIn( minimumValue = 0, maximumValue = displayedCategories.lastIndex.coerceAtLeast(0), ) val activeCategory: Category? = displayedCategories.getOrNull(coercedActiveCategoryIndex) val isLibraryEmpty = libraryData.favorites.isEmpty() val selectionMode = selection.isNotEmpty() val selectedManga by lazy { selection.mapNotNull { libraryData.favoritesById[it]?.libraryManga?.manga } } fun getItemsForCategoryId(categoryId: Long?): List { if (categoryId == null) return emptyList() val category = displayedCategories.find { it.id == categoryId } ?: return emptyList() return getItemsForCategory(category) } fun getItemsForCategory(category: Category): List { return groupedFavorites[category].orEmpty().mapNotNull { libraryData.favoritesById[it] } } fun getItemCountForCategory(category: Category): Int? { return if (showMangaCount || !searchQuery.isNullOrEmpty()) groupedFavorites[category]?.size else null } fun getToolbarTitle( defaultTitle: String, defaultCategoryTitle: String, page: Int, ): LibraryToolbarTitle { val category = displayedCategories.getOrNull(page) ?: return LibraryToolbarTitle(defaultTitle) val categoryName = category.let { if (it.isSystemCategory) defaultCategoryTitle else it.name } val title = if (showCategoryTabs) defaultTitle else categoryName val count = when { !showMangaCount -> null !showCategoryTabs -> getItemCountForCategory(category) // Whole library count else -> libraryData.favorites.size } return LibraryToolbarTitle(title, count) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.library import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.data.track.TrackerManager import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.getAndSet import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.category.interactor.SetDisplayMode import tachiyomi.domain.category.interactor.SetSortModeForCategory import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibrarySort import tachiyomi.domain.library.service.LibraryPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.seconds class LibrarySettingsScreenModel( val preferences: BasePreferences = Injekt.get(), val libraryPreferences: LibraryPreferences = Injekt.get(), private val setDisplayMode: SetDisplayMode = Injekt.get(), private val setSortModeForCategory: SetSortModeForCategory = Injekt.get(), trackerManager: TrackerManager = Injekt.get(), ) : ScreenModel { val trackersFlow = trackerManager.loggedInTrackersFlow() .stateIn( scope = screenModelScope, started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds), initialValue = trackerManager.loggedInTrackers(), ) fun toggleFilter(preference: (LibraryPreferences) -> Preference) { preference(libraryPreferences).getAndSet { it.next() } } fun toggleTracker(id: Int) { toggleFilter { libraryPreferences.filterTracking(id) } } fun setDisplayMode(mode: LibraryDisplayMode) { setDisplayMode.await(mode) } fun setSort(category: Category?, mode: LibrarySort.Type, direction: LibrarySort.Direction) { screenModelScope.launchIO { setSortModeForCategory.await(category, mode, direction) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt ================================================ package eu.kanade.tachiyomi.ui.library import androidx.activity.compose.BackHandler import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.util.fastAll import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.category.components.ChangeCategoryDialog import eu.kanade.presentation.library.DeleteLibraryMangaDialog import eu.kanade.presentation.library.LibrarySettingsDialog import eu.kanade.presentation.library.components.LibraryContent import eu.kanade.presentation.library.components.LibraryToolbar import eu.kanade.presentation.manga.components.LibraryBottomActionMenu import eu.kanade.presentation.more.onboarding.GETTING_STARTED_URL import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch import mihon.feature.migration.config.MigrationConfigScreen import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.source.local.isLocal data object LibraryTab : Tab { override val options: TabOptions @Composable get() { val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter) return TabOptions( index = 0u, title = stringResource(MR.strings.label_library), icon = rememberAnimatedVectorPainter(image, isSelected), ) } override suspend fun onReselect(navigator: Navigator) { requestOpenSettingsSheet() } @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val scope = rememberCoroutineScope() val haptic = LocalHapticFeedback.current val screenModel = rememberScreenModel { LibraryScreenModel() } val settingsScreenModel = rememberScreenModel { LibrarySettingsScreenModel() } val state by screenModel.state.collectAsState() val snackbarHostState = remember { SnackbarHostState() } val onClickRefresh: (Category?) -> Boolean = { category -> val started = LibraryUpdateJob.startNow(context, category) scope.launch { val msgRes = when { !started -> MR.strings.update_already_running category != null -> MR.strings.updating_category else -> MR.strings.updating_library } snackbarHostState.showSnackbar(context.stringResource(msgRes)) } started } Scaffold( topBar = { scrollBehavior -> val title = state.getToolbarTitle( defaultTitle = stringResource(MR.strings.label_library), defaultCategoryTitle = stringResource(MR.strings.label_default), page = state.coercedActiveCategoryIndex, ) LibraryToolbar( hasActiveFilters = state.hasActiveFilters, selectedCount = state.selection.size, title = title, onClickUnselectAll = screenModel::clearSelection, onClickSelectAll = screenModel::selectAll, onClickInvertSelection = screenModel::invertSelection, onClickFilter = screenModel::showSettingsDialog, onClickRefresh = { onClickRefresh(state.activeCategory) }, onClickGlobalUpdate = { onClickRefresh(null) }, onClickOpenRandomManga = { scope.launch { val randomItem = screenModel.getRandomLibraryItemForCurrentCategory() if (randomItem != null) { navigator.push(MangaScreen(randomItem.libraryManga.manga.id)) } else { snackbarHostState.showSnackbar( context.stringResource(MR.strings.information_no_entries_found), ) } } }, searchQuery = state.searchQuery, onSearchQueryChange = screenModel::search, // For scroll overlay when no tab scrollBehavior = scrollBehavior.takeIf { !state.showCategoryTabs }, ) }, bottomBar = { LibraryBottomActionMenu( visible = state.selectionMode, onChangeCategoryClicked = screenModel::openChangeCategoryDialog, onMarkAsReadClicked = { screenModel.markReadSelection(true) }, onMarkAsUnreadClicked = { screenModel.markReadSelection(false) }, onDownloadClicked = screenModel::performDownloadAction .takeIf { state.selectedManga.fastAll { !it.isLocal() } }, onDeleteClicked = screenModel::openDeleteMangaDialog, onMigrateClicked = { val selection = state.selection screenModel.clearSelection() navigator.push(MigrationConfigScreen(selection)) }, ) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { contentPadding -> when { state.isLoading -> { LoadingScreen(Modifier.padding(contentPadding)) } state.searchQuery.isNullOrEmpty() && !state.hasActiveFilters && state.isLibraryEmpty -> { val handler = LocalUriHandler.current EmptyScreen( stringRes = MR.strings.information_empty_library, modifier = Modifier.padding(contentPadding), actions = persistentListOf( EmptyScreenAction( stringRes = MR.strings.getting_started_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = { handler.openUri(GETTING_STARTED_URL) }, ), ), ) } else -> { LibraryContent( categories = state.displayedCategories, searchQuery = state.searchQuery, selection = state.selection, contentPadding = contentPadding, currentPage = state.coercedActiveCategoryIndex, hasActiveFilters = state.hasActiveFilters, showPageTabs = state.showCategoryTabs || !state.searchQuery.isNullOrEmpty(), onChangeCurrentPage = screenModel::updateActiveCategoryIndex, onClickManga = { navigator.push(MangaScreen(it)) }, onContinueReadingClicked = { it: LibraryManga -> scope.launchIO { val chapter = screenModel.getNextUnreadChapter(it.manga) if (chapter != null) { context.startActivity( ReaderActivity.newIntent(context, chapter.mangaId, chapter.id), ) } else { snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter)) } } Unit }.takeIf { state.showMangaContinueButton }, onToggleSelection = screenModel::toggleSelection, onToggleRangeSelection = { category, manga -> screenModel.toggleRangeSelection(category, manga) haptic.performHapticFeedback(HapticFeedbackType.LongPress) }, onRefresh = { onClickRefresh(state.activeCategory) }, onGlobalSearchClicked = { navigator.push(GlobalSearchScreen(screenModel.state.value.searchQuery ?: "")) }, getItemCountForCategory = { state.getItemCountForCategory(it) }, getDisplayMode = { screenModel.getDisplayMode() }, getColumnsForOrientation = { screenModel.getColumnsForOrientation(it) }, getItemsForCategory = { state.getItemsForCategory(it) }, ) } } } val onDismissRequest = screenModel::closeDialog when (val dialog = state.dialog) { is LibraryScreenModel.Dialog.SettingsSheet -> run { LibrarySettingsDialog( onDismissRequest = onDismissRequest, screenModel = settingsScreenModel, category = state.activeCategory, ) } is LibraryScreenModel.Dialog.ChangeCategory -> { ChangeCategoryDialog( initialSelection = dialog.initialSelection, onDismissRequest = onDismissRequest, onEditCategories = { screenModel.clearSelection() navigator.push(CategoryScreen()) }, onConfirm = { include, exclude -> screenModel.clearSelection() screenModel.setMangaCategories(dialog.manga, include, exclude) }, ) } is LibraryScreenModel.Dialog.DeleteManga -> { DeleteLibraryMangaDialog( containsLocalManga = dialog.manga.any(Manga::isLocal), onDismissRequest = onDismissRequest, onConfirm = { deleteManga, deleteChapter -> screenModel.removeMangas(dialog.manga, deleteManga, deleteChapter) screenModel.clearSelection() }, ) } null -> {} } BackHandler(enabled = state.selectionMode || state.searchQuery != null) { when { state.selectionMode -> screenModel.clearSelection() state.searchQuery != null -> screenModel.search(null) } } LaunchedEffect(state.selectionMode, state.dialog) { HomeScreen.showBottomNav(!state.selectionMode) } LaunchedEffect(state.isLoading) { if (!state.isLoading) { (context as? MainActivity)?.ready = true } } LaunchedEffect(Unit) { launch { queryEvent.receiveAsFlow().collect(screenModel::search) } launch { requestSettingsSheetEvent.receiveAsFlow().collectLatest { screenModel.showSettingsDialog() } } } } // For invoking search from other screen private val queryEvent = Channel() suspend fun search(query: String) = queryEvent.send(query) // For opening settings sheet in LibraryController private val requestSettingsSheetEvent = Channel() private suspend fun requestOpenSettingsSheet() = requestSettingsSheetEvent.send(Unit) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt ================================================ package eu.kanade.tachiyomi.ui.main import android.animation.ValueAnimator import android.app.SearchManager import android.app.assist.AssistContent import android.content.Context import android.content.Intent import android.graphics.Color import android.os.Build import android.os.Bundle import android.view.View import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material3.AlertDialog import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.luminance import androidx.compose.ui.platform.LocalContext import androidx.core.animation.doOnEnd import androidx.core.net.toUri import androidx.core.splashscreen.SplashScreen import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.util.Consumer import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.interpolator.view.animation.LinearOutSlowInInterpolator import androidx.lifecycle.lifecycleScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.NavigatorDisposeBehavior import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.source.interactor.GetIncognitoState import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.DownloadedOnlyBannerBackgroundColor import eu.kanade.presentation.components.IncognitoModeBannerBackgroundColor import eu.kanade.presentation.components.IndexingBannerBackgroundColor import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.presentation.more.settings.screen.data.RestoreBackupScreen import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.DefaultNavigatorScreenTransition import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.updater.AppUpdateChecker import eu.kanade.tachiyomi.data.updater.RELEASE_URL import eu.kanade.tachiyomi.extension.api.ExtensionApi import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.deeplink.DeepLinkScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.more.NewUpdateScreen import eu.kanade.tachiyomi.ui.more.OnboardingScreen import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.isNavigationBarNeedsScrim import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.updaterEnabled import eu.kanade.tachiyomi.util.view.setComposeContent import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import logcat.LogPriority import mihon.core.migration.Migrator import tachiyomi.core.common.Constants import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.release.interactor.GetApplicationRelease import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.injectLazy class MainActivity : BaseActivity() { private val libraryPreferences: LibraryPreferences by injectLazy() private val preferences: BasePreferences by injectLazy() private val downloadCache: DownloadCache by injectLazy() private val chapterCache: ChapterCache by injectLazy() private val getIncognitoState: GetIncognitoState by injectLazy() // To be checked by splash screen. If true then splash screen will be removed. var ready = false private var navigator: Navigator? = null init { registerSecureActivity(this) } override fun onCreate(savedInstanceState: Bundle?) { val isLaunch = savedInstanceState == null // Prevent splash screen showing up on configuration changes val splashScreen = if (isLaunch) installSplashScreen() else null super.onCreate(savedInstanceState) val didMigration = Migrator.awaitAndRelease() // Do not let the launcher create a new activity http://stackoverflow.com/questions/16283079 if (!isTaskRoot) { finish() return } setComposeContent { val context = LocalContext.current var incognito by remember { mutableStateOf(getIncognitoState.await(null)) } val downloadOnly by preferences.downloadedOnly.collectAsState() val indexing by downloadCache.isInitializing.collectAsState() val isSystemInDarkTheme = isSystemInDarkTheme() val statusBarBackgroundColor = when { indexing -> IndexingBannerBackgroundColor downloadOnly -> DownloadedOnlyBannerBackgroundColor incognito -> IncognitoModeBannerBackgroundColor else -> MaterialTheme.colorScheme.surface } LaunchedEffect(isSystemInDarkTheme, statusBarBackgroundColor) { // Draw edge-to-edge and set system bars color to transparent val lightStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.BLACK) val darkStyle = SystemBarStyle.dark(Color.TRANSPARENT) enableEdgeToEdge( statusBarStyle = if (statusBarBackgroundColor.luminance() > 0.5) lightStyle else darkStyle, navigationBarStyle = if (isSystemInDarkTheme) darkStyle else lightStyle, ) } Navigator( screen = HomeScreen, disposeBehavior = NavigatorDisposeBehavior(disposeNestedNavigators = false, disposeSteps = true), ) { navigator -> LaunchedEffect(navigator) { this@MainActivity.navigator = navigator if (isLaunch) { // Set start screen handleIntentAction(intent, navigator) // Reset Incognito Mode on relaunch preferences.incognitoMode.set(false) } } LaunchedEffect(navigator.lastItem) { (navigator.lastItem as? BrowseSourceScreen)?.sourceId .let(getIncognitoState::subscribe) .collectLatest { incognito = it } } val scaffoldInsets = WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal) Scaffold( topBar = { AppStateBanners( downloadedOnlyMode = downloadOnly, incognitoMode = incognito, indexing = indexing, modifier = Modifier.windowInsetsPadding(scaffoldInsets), ) }, contentWindowInsets = scaffoldInsets, ) { contentPadding -> // Consume insets already used by app state banners Box { // Shows current screen DefaultNavigatorScreenTransition( navigator = navigator, modifier = Modifier .padding(contentPadding) .consumeWindowInsets(contentPadding), ) // Draw navigation bar scrim when needed if (remember { isNavigationBarNeedsScrim() }) { Spacer( modifier = Modifier .align(Alignment.BottomCenter) .fillMaxWidth() .windowInsetsBottomHeight(WindowInsets.navigationBars) .alpha(0.8f) .background(MaterialTheme.colorScheme.surfaceContainer), ) } } } // Pop source-related screens when incognito mode is turned off LaunchedEffect(Unit) { preferences.incognitoMode.changes() .drop(1) .filter { !it } .onEach { val currentScreen = navigator.lastItem if (currentScreen is BrowseSourceScreen || (currentScreen is MangaScreen && currentScreen.fromSource) ) { navigator.popUntilRoot() } } .launchIn(this) } HandleOnNewIntent(context = context, navigator = navigator) CheckForUpdates() ShowOnboarding() } var showChangelog by remember { mutableStateOf(didMigration && !BuildConfig.DEBUG) } if (showChangelog) { AlertDialog( onDismissRequest = { showChangelog = false }, title = { Text(text = stringResource(MR.strings.updated_version, BuildConfig.VERSION_NAME)) }, dismissButton = { TextButton(onClick = { openInBrowser(RELEASE_URL) }) { Text(text = stringResource(MR.strings.whats_new)) } }, confirmButton = { TextButton(onClick = { showChangelog = false }) { Text(text = stringResource(MR.strings.action_ok)) } }, ) } } val startTime = System.currentTimeMillis() splashScreen?.setKeepOnScreenCondition { val elapsed = System.currentTimeMillis() - startTime elapsed <= SPLASH_MIN_DURATION || (!ready && elapsed <= SPLASH_MAX_DURATION) } setSplashScreenExitAnimation(splashScreen) if (isLaunch && libraryPreferences.autoClearChapterCache.get()) { lifecycleScope.launchIO { chapterCache.clear() } } } override fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) when (val screen = navigator?.lastItem) { is AssistContentScreen -> { screen.onProvideAssistUrl()?.let { outContent.webUri = it.toUri() } } } } @Composable private fun HandleOnNewIntent(context: Context, navigator: Navigator) { LaunchedEffect(Unit) { callbackFlow { val componentActivity = context as ComponentActivity val consumer = Consumer { trySend(it) } componentActivity.addOnNewIntentListener(consumer) awaitClose { componentActivity.removeOnNewIntentListener(consumer) } } .collectLatest { handleIntentAction(it, navigator) } } } @Composable private fun CheckForUpdates() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow // App updates LaunchedEffect(Unit) { if (updaterEnabled) { try { val result = AppUpdateChecker().checkForUpdate(context) if (result is GetApplicationRelease.Result.NewUpdate) { val updateScreen = NewUpdateScreen( versionName = result.release.version, changelogInfo = result.release.info, releaseLink = result.release.releaseLink, downloadLink = result.release.downloadLink, ) navigator.push(updateScreen) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } } // Extensions updates LaunchedEffect(Unit) { try { ExtensionApi().checkForUpdates(context) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } } @Composable private fun ShowOnboarding() { val navigator = LocalNavigator.currentOrThrow LaunchedEffect(Unit) { if (!preferences.shownOnboardingFlow.get() && navigator.lastItem !is OnboardingScreen) { navigator.push(OnboardingScreen()) } } } /** * Sets custom splash screen exit animation on devices prior to Android 12. * * When custom animation is used, status and navigation bar color will be set to transparent and will be restored * after the animation is finished. */ @Suppress("Deprecation") private fun setSplashScreenExitAnimation(splashScreen: SplashScreen?) { val root = findViewById(android.R.id.content) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S && splashScreen != null) { window.statusBarColor = Color.TRANSPARENT window.navigationBarColor = Color.TRANSPARENT splashScreen.setOnExitAnimationListener { splashProvider -> // For some reason the SplashScreen applies (incorrect) Y translation to the iconView splashProvider.iconView.translationY = 0F val activityAnim = ValueAnimator.ofFloat(1F, 0F).apply { interpolator = LinearOutSlowInInterpolator() duration = SPLASH_EXIT_ANIM_DURATION addUpdateListener { va -> val value = va.animatedValue as Float root.translationY = value * 16.dpToPx } } val splashAnim = ValueAnimator.ofFloat(1F, 0F).apply { interpolator = FastOutSlowInInterpolator() duration = SPLASH_EXIT_ANIM_DURATION addUpdateListener { va -> val value = va.animatedValue as Float splashProvider.view.alpha = value } doOnEnd { splashProvider.remove() } } activityAnim.start() splashAnim.start() } } } private fun handleIntentAction(intent: Intent, navigator: Navigator): Boolean { val notificationId = intent.getIntExtra("notificationId", -1) if (notificationId > -1) { NotificationReceiver.dismissNotification( applicationContext, notificationId, intent.getIntExtra("groupId", 0), ) } val tabToOpen = when (intent.action) { Constants.SHORTCUT_LIBRARY -> HomeScreen.Tab.Library() Constants.SHORTCUT_MANGA -> { val idToOpen = intent.extras?.getLong(Constants.MANGA_EXTRA) ?: return false navigator.popUntilRoot() HomeScreen.Tab.Library(idToOpen) } Constants.SHORTCUT_UPDATES -> HomeScreen.Tab.Updates Constants.SHORTCUT_HISTORY -> HomeScreen.Tab.History Constants.SHORTCUT_SOURCES -> HomeScreen.Tab.Browse(false) Constants.SHORTCUT_EXTENSIONS -> HomeScreen.Tab.Browse(true) Constants.SHORTCUT_DOWNLOADS -> { navigator.popUntilRoot() HomeScreen.Tab.More(toDownloads = true) } Intent.ACTION_SEARCH, Intent.ACTION_SEND, "com.google.android.gms.actions.SEARCH_ACTION" -> { // If the intent match the "standard" Android search intent // or the Google-specific search intent (triggered by saying or typing "search *query* on *Tachiyomi*" in Google Search/Google Assistant) // Get the search query provided in extras, and if not null, perform a global search with it. val query = intent.getStringExtra(SearchManager.QUERY) ?: intent.getStringExtra(Intent.EXTRA_TEXT) if (!query.isNullOrEmpty()) { navigator.popUntilRoot() navigator.push(DeepLinkScreen(query)) } null } INTENT_SEARCH -> { val query = intent.getStringExtra(INTENT_SEARCH_QUERY) if (!query.isNullOrEmpty()) { val filter = intent.getStringExtra(INTENT_SEARCH_FILTER) navigator.popUntilRoot() navigator.push(GlobalSearchScreen(query, filter)) } null } Intent.ACTION_VIEW -> { // Handling opening of backup files if (intent.data.toString().endsWith(".tachibk")) { navigator.popUntilRoot() navigator.push(RestoreBackupScreen(intent.data.toString())) } // Deep link to add extension repo else if (intent.scheme == "tachiyomi" && intent.data?.host == "add-repo") { intent.data?.getQueryParameter("url")?.let { repoUrl -> navigator.popUntilRoot() navigator.push(ExtensionReposScreen(repoUrl)) } } null } else -> return false } if (tabToOpen != null) { lifecycleScope.launch { HomeScreen.openTab(tabToOpen) } } ready = true return true } companion object { const val INTENT_SEARCH = "eu.kanade.tachiyomi.SEARCH" const val INTENT_SEARCH_QUERY = "query" const val INTENT_SEARCH_FILTER = "filter" } } // Splash screen private const val SPLASH_MIN_DURATION = 500 // ms private const val SPLASH_MAX_DURATION = 5000 // ms private const val SPLASH_EXIT_ANIM_DURATION = 400L // ms ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaCoverScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.manga import android.content.Context import android.net.Uri import androidx.compose.material3.SnackbarHostState import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import coil3.asDrawable import coil3.imageLoader import coil3.request.ImageRequest import coil3.size.Size import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.saver.Image import eu.kanade.tachiyomi.data.saver.ImageSaver import eu.kanade.tachiyomi.data.saver.Location import eu.kanade.tachiyomi.util.editCover import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.toShareIntent import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MangaCoverScreenModel( private val mangaId: Long, private val getManga: GetManga = Injekt.get(), private val imageSaver: ImageSaver = Injekt.get(), private val coverCache: CoverCache = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), val snackbarHostState: SnackbarHostState = SnackbarHostState(), ) : StateScreenModel(null) { init { screenModelScope.launchIO { getManga.subscribe(mangaId) .collect { newManga -> mutableState.update { newManga } } } } fun saveCover(context: Context) { screenModelScope.launch { try { saveCoverInternal(context, temp = false) snackbarHostState.showSnackbar( context.stringResource(MR.strings.cover_saved), withDismissAction = true, ) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( context.stringResource(MR.strings.error_saving_cover), withDismissAction = true, ) } } } fun shareCover(context: Context) { screenModelScope.launch { try { val uri = saveCoverInternal(context, temp = true) ?: return@launch withUIContext { context.startActivity(uri.toShareIntent(context)) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( context.stringResource(MR.strings.error_sharing_cover), withDismissAction = true, ) } } } /** * Save manga cover Bitmap to picture or temporary share directory. * * @param context The context for building and executing the ImageRequest * @return the uri to saved file */ private suspend fun saveCoverInternal(context: Context, temp: Boolean): Uri? { val manga = state.value ?: return null val req = ImageRequest.Builder(context) .data(manga) .size(Size.ORIGINAL) .build() return withIOContext { val result = context.imageLoader.execute(req).image?.asDrawable(context.resources) // TODO: Handle animated cover val bitmap = result?.getBitmapOrNull() ?: return@withIOContext null imageSaver.save( Image.Cover( bitmap = bitmap, name = manga.title, location = if (temp) Location.Cache else Location.Pictures.create(), ), ) } } /** * Update cover with local file. * * @param context Context. * @param data uri of the cover resource. */ fun editCover(context: Context, data: Uri) { val manga = state.value ?: return screenModelScope.launchIO { context.contentResolver.openInputStream(data)?.use { try { manga.editCover(Injekt.get(), it, updateManga, coverCache) notifyCoverUpdated(context) } catch (e: Exception) { notifyFailedCoverUpdate(context, e) } } } } fun deleteCustomCover(context: Context) { val mangaId = state.value?.id ?: return screenModelScope.launchIO { try { coverCache.deleteCustomCover(mangaId) updateManga.awaitUpdateCoverLastModified(mangaId) notifyCoverUpdated(context) } catch (e: Exception) { notifyFailedCoverUpdate(context, e) } } } private fun notifyCoverUpdated(context: Context) { screenModelScope.launch { snackbarHostState.showSnackbar( context.stringResource(MR.strings.cover_updated), withDismissAction = true, ) } } private fun notifyFailedCoverUpdate(context: Context, e: Throwable) { screenModelScope.launch { snackbarHostState.showSnackbar( context.stringResource(MR.strings.notification_cover_update_failed), withDismissAction = true, ) logcat(LogPriority.ERROR, e) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt ================================================ package eu.kanade.tachiyomi.ui.manga import android.content.Context import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.core.net.toUri import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.core.util.ifSourcesLoaded import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.domain.manga.model.toSManga import eu.kanade.presentation.category.components.ChangeCategoryDialog import eu.kanade.presentation.components.NavigatorAdaptiveSheet import eu.kanade.presentation.manga.ChapterSettingsDialog import eu.kanade.presentation.manga.DuplicateMangaDialog import eu.kanade.presentation.manga.EditCoverAction import eu.kanade.presentation.manga.MangaScreen import eu.kanade.presentation.manga.components.DeleteChaptersDialog import eu.kanade.presentation.manga.components.MangaCoverDialog import eu.kanade.presentation.manga.components.ScanlatorFilterDialog import eu.kanade.presentation.manga.components.SetIntervalDialog import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.isTabletUi import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.isLocalOrStub import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.manga.notes.MangaNotesScreen import eu.kanade.tachiyomi.ui.manga.track.TrackInfoDialogHomeScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.setting.SettingsScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.launch import logcat.LogPriority import mihon.feature.migration.config.MigrationConfigScreen import mihon.feature.migration.dialog.MigrateMangaDialog import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.screens.LoadingScreen class MangaScreen( private val mangaId: Long, val fromSource: Boolean = false, ) : Screen(), AssistContentScreen { private var assistUrl: String? = null override fun onProvideAssistUrl() = assistUrl @Composable override fun Content() { if (!ifSourcesLoaded()) { LoadingScreen() return } val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val haptic = LocalHapticFeedback.current val scope = rememberCoroutineScope() val lifecycleOwner = LocalLifecycleOwner.current val screenModel = rememberScreenModel { MangaScreenModel(context, lifecycleOwner.lifecycle, mangaId, fromSource) } val state by screenModel.state.collectAsStateWithLifecycle() if (state is MangaScreenModel.State.Loading) { LoadingScreen() return } val successState = state as MangaScreenModel.State.Success val isHttpSource = remember { successState.source is HttpSource } LaunchedEffect(successState.manga, screenModel.source) { if (isHttpSource) { try { withIOContext { assistUrl = getMangaUrl(screenModel.manga, screenModel.source) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to get manga URL" } } } } MangaScreen( state = successState, snackbarHostState = screenModel.snackbarHostState, nextUpdate = successState.manga.expectedNextUpdate, isTabletUi = isTabletUi(), chapterSwipeStartAction = screenModel.chapterSwipeStartAction, chapterSwipeEndAction = screenModel.chapterSwipeEndAction, navigateUp = navigator::pop, onChapterClicked = { openChapter(context, it) }, onDownloadChapter = screenModel::runChapterDownloadActions.takeIf { !successState.source.isLocalOrStub() }, onAddToLibraryClicked = { screenModel.toggleFavorite() haptic.performHapticFeedback(HapticFeedbackType.LongPress) }, onWebViewClicked = { openMangaInWebView( navigator, screenModel.manga, screenModel.source, ) }.takeIf { isHttpSource }, onWebViewLongClicked = { copyMangaUrl( context, screenModel.manga, screenModel.source, ) }.takeIf { isHttpSource }, onTrackingClicked = { if (!successState.hasLoggedInTrackers) { navigator.push(SettingsScreen(SettingsScreen.Destination.Tracking)) } else { screenModel.showTrackDialog() } }, onTagSearch = { scope.launch { performGenreSearch(navigator, it, screenModel.source!!) } }, onFilterButtonClicked = screenModel::showSettingsDialog, onRefresh = screenModel::fetchAllFromSource, onContinueReading = { continueReading(context, screenModel.getNextUnreadChapter()) }, onSearch = { query, global -> scope.launch { performSearch(navigator, query, global) } }, onCoverClicked = screenModel::showCoverDialog, onShareClicked = { shareManga(context, screenModel.manga, screenModel.source) }.takeIf { isHttpSource }, onDownloadActionClicked = screenModel::runDownloadAction.takeIf { !successState.source.isLocalOrStub() }, onEditCategoryClicked = screenModel::showChangeCategoryDialog.takeIf { successState.manga.favorite }, onEditFetchIntervalClicked = screenModel::showSetFetchIntervalDialog.takeIf { successState.manga.favorite }, onMigrateClicked = { navigator.push(MigrationConfigScreen(successState.manga.id)) }.takeIf { successState.manga.favorite }, onEditNotesClicked = { navigator.push(MangaNotesScreen(manga = successState.manga)) }, onMultiBookmarkClicked = screenModel::bookmarkChapters, onMultiMarkAsReadClicked = screenModel::markChaptersRead, onMarkPreviousAsReadClicked = screenModel::markPreviousChapterRead, onMultiDeleteClicked = screenModel::showDeleteChapterDialog, onChapterSwipe = screenModel::chapterSwipe, onChapterSelected = screenModel::toggleSelection, onAllChapterSelected = screenModel::toggleAllSelection, onInvertSelection = screenModel::invertSelection, ) var showScanlatorsDialog by remember { mutableStateOf(false) } val onDismissRequest = { screenModel.dismissDialog() } when (val dialog = successState.dialog) { null -> {} is MangaScreenModel.Dialog.ChangeCategory -> { ChangeCategoryDialog( initialSelection = dialog.initialSelection, onDismissRequest = onDismissRequest, onEditCategories = { navigator.push(CategoryScreen()) }, onConfirm = { include, _ -> screenModel.moveMangaToCategoriesAndAddToLibrary(dialog.manga, include) }, ) } is MangaScreenModel.Dialog.DeleteChapters -> { DeleteChaptersDialog( onDismissRequest = onDismissRequest, onConfirm = { screenModel.toggleAllSelection(false) screenModel.deleteChapters(dialog.chapters) }, ) } is MangaScreenModel.Dialog.DuplicateManga -> { DuplicateMangaDialog( duplicates = dialog.duplicates, onDismissRequest = onDismissRequest, onConfirm = { screenModel.toggleFavorite(onRemoved = {}, checkDuplicate = false) }, onOpenManga = { navigator.push(MangaScreen(it.id)) }, onMigrate = { screenModel.showMigrateDialog(it) }, ) } is MangaScreenModel.Dialog.Migrate -> { MigrateMangaDialog( current = dialog.current, target = dialog.target, // Initiated from the context of [dialog.target] so we show [dialog.current]. onClickTitle = { navigator.push(MangaScreen(dialog.current.id)) }, onDismissRequest = onDismissRequest, ) } MangaScreenModel.Dialog.SettingsSheet -> ChapterSettingsDialog( onDismissRequest = onDismissRequest, manga = successState.manga, onDownloadFilterChanged = screenModel::setDownloadedFilter, onUnreadFilterChanged = screenModel::setUnreadFilter, onBookmarkedFilterChanged = screenModel::setBookmarkedFilter, onSortModeChanged = screenModel::setSorting, onDisplayModeChanged = screenModel::setDisplayMode, onSetAsDefault = screenModel::setCurrentSettingsAsDefault, onResetToDefault = screenModel::resetToDefaultSettings, scanlatorFilterActive = successState.scanlatorFilterActive, onScanlatorFilterClicked = { showScanlatorsDialog = true }, ) MangaScreenModel.Dialog.TrackSheet -> { NavigatorAdaptiveSheet( screen = TrackInfoDialogHomeScreen( mangaId = successState.manga.id, mangaTitle = successState.manga.title, sourceId = successState.source.id, ), enableSwipeDismiss = { it.lastItem is TrackInfoDialogHomeScreen }, onDismissRequest = onDismissRequest, ) } MangaScreenModel.Dialog.FullCover -> { val sm = rememberScreenModel { MangaCoverScreenModel(successState.manga.id) } val manga by sm.state.collectAsState() if (manga != null) { val getContent = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { if (it == null) return@rememberLauncherForActivityResult sm.editCover(context, it) } MangaCoverDialog( manga = manga!!, snackbarHostState = sm.snackbarHostState, isCustomCover = remember(manga) { manga!!.hasCustomCover() }, onShareClick = { sm.shareCover(context) }, onSaveClick = { sm.saveCover(context) }, onEditClick = { when (it) { EditCoverAction.EDIT -> getContent.launch("image/*") EditCoverAction.DELETE -> sm.deleteCustomCover(context) } }, onDismissRequest = onDismissRequest, ) } else { LoadingScreen(Modifier.systemBarsPadding()) } } is MangaScreenModel.Dialog.SetFetchInterval -> { SetIntervalDialog( interval = dialog.manga.fetchInterval, nextUpdate = dialog.manga.expectedNextUpdate, onDismissRequest = onDismissRequest, onValueChanged = { interval: Int -> screenModel.setFetchInterval(dialog.manga, interval) } .takeIf { screenModel.isUpdateIntervalEnabled }, ) } } if (showScanlatorsDialog) { ScanlatorFilterDialog( availableScanlators = successState.availableScanlators, excludedScanlators = successState.excludedScanlators, onDismissRequest = { showScanlatorsDialog = false }, onConfirm = screenModel::setExcludedScanlators, ) } } private fun continueReading(context: Context, unreadChapter: Chapter?) { if (unreadChapter != null) openChapter(context, unreadChapter) } private fun openChapter(context: Context, chapter: Chapter) { context.startActivity(ReaderActivity.newIntent(context, chapter.mangaId, chapter.id)) } private fun getMangaUrl(manga_: Manga?, source_: Source?): String? { val manga = manga_ ?: return null val source = source_ as? HttpSource ?: return null return try { source.getMangaUrl(manga.toSManga()) } catch (e: Exception) { null } } private fun openMangaInWebView(navigator: Navigator, manga_: Manga?, source_: Source?) { getMangaUrl(manga_, source_)?.let { url -> navigator.push( WebViewScreen( url = url, initialTitle = manga_?.title, sourceId = source_?.id, ), ) } } private fun shareManga(context: Context, manga_: Manga?, source_: Source?) { try { getMangaUrl(manga_, source_)?.let { url -> val intent = url.toUri().toShareIntent(context, type = "text/plain") context.startActivity(intent) } } catch (e: Exception) { context.toast(e.message) } } /** * Perform a search using the provided query. * * @param query the search query to the parent controller */ private suspend fun performSearch(navigator: Navigator, query: String, global: Boolean) { if (global) { navigator.push(GlobalSearchScreen(query)) return } if (navigator.size < 2) { return } when (val previousController = navigator.items[navigator.size - 2]) { is HomeScreen -> { navigator.pop() previousController.search(query) } is BrowseSourceScreen -> { navigator.pop() previousController.search(query) } } } /** * Performs a genre search using the provided genre name. * * @param genreName the search genre to the parent controller */ private suspend fun performGenreSearch(navigator: Navigator, genreName: String, source: Source) { if (navigator.size < 2) { return } val previousController = navigator.items[navigator.size - 2] if (previousController is BrowseSourceScreen && source is HttpSource) { navigator.pop() previousController.searchGenre(genreName) } else { performSearch(navigator, genreName, global = false) } } /** * Copy Manga URL to Clipboard */ private fun copyMangaUrl(context: Context, manga_: Manga?, source_: Source?) { val manga = manga_ ?: return val source = source_ as? HttpSource ?: return val url = source.getMangaUrl(manga.toSManga()) context.copyToClipboard(url, url) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.manga import android.content.Context import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.runtime.Immutable import androidx.compose.runtime.getValue import androidx.compose.ui.util.fastAny import androidx.lifecycle.Lifecycle import androidx.lifecycle.flowWithLifecycle import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.preference.asState import eu.kanade.core.util.addOrRemove import eu.kanade.core.util.insertSeparators import eu.kanade.domain.chapter.interactor.GetAvailableScanlators import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.manga.interactor.GetExcludedScanlators import eu.kanade.domain.manga.interactor.SetExcludedScanlators import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.chaptersFiltered import eu.kanade.domain.manga.model.downloadedFilter import eu.kanade.domain.manga.model.toSManga import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.domain.track.interactor.RefreshTracks import eu.kanade.domain.track.interactor.TrackChapter import eu.kanade.domain.track.model.AutoTrackState import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.presentation.manga.DownloadAction import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.util.formattedMessage import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.network.HttpException import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.chapter.getNextUnread import eu.kanade.tachiyomi.util.removeCovers import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import logcat.LogPriority import mihon.domain.chapter.interactor.FilterChaptersForDownload import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.preference.CheckboxState import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.mapAsCheckboxState import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.chapter.interactor.SetMangaDefaultChapterFlags import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.ChapterUpdate import tachiyomi.domain.chapter.model.NoChaptersException import tachiyomi.domain.chapter.service.calculateChapterGap import tachiyomi.domain.chapter.service.getChapterSort import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga import tachiyomi.domain.manga.interactor.GetMangaWithChapters import tachiyomi.domain.manga.interactor.SetMangaChapterFlags import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaWithChapterCount import tachiyomi.domain.manga.model.applyFilter import tachiyomi.domain.manga.repository.MangaRepository import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.i18n.MR import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.math.floor class MangaScreenModel( private val context: Context, private val lifecycle: Lifecycle, private val mangaId: Long, private val isFromSource: Boolean, private val libraryPreferences: LibraryPreferences = Injekt.get(), private val trackPreferences: TrackPreferences = Injekt.get(), readerPreferences: ReaderPreferences = Injekt.get(), private val trackerManager: TrackerManager = Injekt.get(), private val trackChapter: TrackChapter = Injekt.get(), private val downloadManager: DownloadManager = Injekt.get(), private val downloadCache: DownloadCache = Injekt.get(), private val getMangaAndChapters: GetMangaWithChapters = Injekt.get(), private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(), private val getAvailableScanlators: GetAvailableScanlators = Injekt.get(), private val getExcludedScanlators: GetExcludedScanlators = Injekt.get(), private val setExcludedScanlators: SetExcludedScanlators = Injekt.get(), private val setMangaChapterFlags: SetMangaChapterFlags = Injekt.get(), private val setMangaDefaultChapterFlags: SetMangaDefaultChapterFlags = Injekt.get(), private val setReadStatus: SetReadStatus = Injekt.get(), private val updateChapter: UpdateChapter = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), private val getCategories: GetCategories = Injekt.get(), private val getTracks: GetTracks = Injekt.get(), private val addTracks: AddTracks = Injekt.get(), private val setMangaCategories: SetMangaCategories = Injekt.get(), private val mangaRepository: MangaRepository = Injekt.get(), private val filterChaptersForDownload: FilterChaptersForDownload = Injekt.get(), val snackbarHostState: SnackbarHostState = SnackbarHostState(), ) : StateScreenModel(State.Loading) { private val successState: State.Success? get() = state.value as? State.Success val manga: Manga? get() = successState?.manga val source: Source? get() = successState?.source private val isFavorited: Boolean get() = manga?.favorite ?: false private val allChapters: List? get() = successState?.chapters private val filteredChapters: List? get() = successState?.processedChapters val chapterSwipeStartAction = libraryPreferences.swipeToEndAction.get() val chapterSwipeEndAction = libraryPreferences.swipeToStartAction.get() var autoTrackState = trackPreferences.autoUpdateTrackOnMarkRead.get() private val skipFiltered by readerPreferences.skipFiltered.asState(screenModelScope) val isUpdateIntervalEnabled = LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in libraryPreferences.autoUpdateMangaRestrictions.get() private val selectedPositions: Array = arrayOf(-1, -1) // first and last selected index in list private val selectedChapterIds: HashSet = HashSet() /** * Helper function to update the UI state only if it's currently in success state */ private inline fun updateSuccessState(func: (State.Success) -> State.Success) { mutableState.update { when (it) { State.Loading -> it is State.Success -> func(it) } } } init { screenModelScope.launchIO { combine( getMangaAndChapters.subscribe(mangaId, applyScanlatorFilter = true).distinctUntilChanged(), downloadCache.changes, downloadManager.queueState, ) { mangaAndChapters, _, _ -> mangaAndChapters } .flowWithLifecycle(lifecycle) .collectLatest { (manga, chapters) -> updateSuccessState { it.copy( manga = manga, chapters = chapters.toChapterListItems(manga), ) } } } screenModelScope.launchIO { getExcludedScanlators.subscribe(mangaId) .flowWithLifecycle(lifecycle) .distinctUntilChanged() .collectLatest { excludedScanlators -> updateSuccessState { it.copy(excludedScanlators = excludedScanlators) } } } screenModelScope.launchIO { getAvailableScanlators.subscribe(mangaId) .flowWithLifecycle(lifecycle) .distinctUntilChanged() .collectLatest { availableScanlators -> updateSuccessState { it.copy(availableScanlators = availableScanlators) } } } observeDownloads() screenModelScope.launchIO { val manga = getMangaAndChapters.awaitManga(mangaId) val chapters = getMangaAndChapters.awaitChapters(mangaId, applyScanlatorFilter = true) .toChapterListItems(manga) if (!manga.favorite) { setMangaDefaultChapterFlags.await(manga) } val needRefreshInfo = !manga.initialized val needRefreshChapter = chapters.isEmpty() // Show what we have earlier mutableState.update { State.Success( manga = manga, source = Injekt.get().getOrStub(manga.source), isFromSource = isFromSource, chapters = chapters, availableScanlators = getAvailableScanlators.await(mangaId), excludedScanlators = getExcludedScanlators.await(mangaId), isRefreshingData = needRefreshInfo || needRefreshChapter, dialog = null, hideMissingChapters = libraryPreferences.hideMissingChapters.get(), ) } // Start observe tracking since it only needs mangaId observeTrackers() // Fetch info-chapters when needed if (screenModelScope.isActive) { val fetchFromSourceTasks = listOf( async { if (needRefreshInfo) fetchMangaFromSource() }, async { if (needRefreshChapter) fetchChaptersFromSource() }, ) fetchFromSourceTasks.awaitAll() } // Initial loading finished updateSuccessState { it.copy(isRefreshingData = false) } } } fun fetchAllFromSource(manualFetch: Boolean = true) { screenModelScope.launch { updateSuccessState { it.copy(isRefreshingData = true) } val fetchFromSourceTasks = listOf( async { fetchMangaFromSource(manualFetch) }, async { fetchChaptersFromSource(manualFetch) }, ) fetchFromSourceTasks.awaitAll() updateSuccessState { it.copy(isRefreshingData = false) } } } // Manga info - start /** * Fetch manga information from source. */ private suspend fun fetchMangaFromSource(manualFetch: Boolean = false) { val state = successState ?: return try { withIOContext { val networkManga = state.source.getMangaDetails(state.manga.toSManga()) updateManga.awaitUpdateFromSource(state.manga, networkManga, manualFetch) } } catch (e: Throwable) { // Ignore early hints "errors" that aren't handled by OkHttp if (e is HttpException && e.code == 103) return logcat(LogPriority.ERROR, e) screenModelScope.launch { snackbarHostState.showSnackbar(message = with(context) { e.formattedMessage }) } } } fun toggleFavorite() { toggleFavorite( onRemoved = { screenModelScope.launch { if (!hasDownloads()) return@launch val result = snackbarHostState.showSnackbar( message = context.stringResource(MR.strings.delete_downloads_for_manga), actionLabel = context.stringResource(MR.strings.action_delete), withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed) { deleteDownloads() } } }, ) } /** * Update favorite status of manga, (removes / adds) manga (to / from) library. */ fun toggleFavorite( onRemoved: () -> Unit, checkDuplicate: Boolean = true, ) { val state = successState ?: return screenModelScope.launchIO { val manga = state.manga if (isFavorited) { // Remove from library if (updateManga.awaitUpdateFavorite(manga.id, false)) { // Remove covers and update last modified in db if (manga.removeCovers() != manga) { updateManga.awaitUpdateCoverLastModified(manga.id) } withUIContext { onRemoved() } } } else { // Add to library // First, check if duplicate exists if callback is provided if (checkDuplicate) { val duplicates = getDuplicateLibraryManga(manga) if (duplicates.isNotEmpty()) { updateSuccessState { it.copy(dialog = Dialog.DuplicateManga(manga, duplicates)) } return@launchIO } } // Now check if user previously set categories, when available val categories = getCategories() val defaultCategoryId = libraryPreferences.defaultCategory.get().toLong() val defaultCategory = categories.find { it.id == defaultCategoryId } when { // Default category set defaultCategory != null -> { val result = updateManga.awaitUpdateFavorite(manga.id, true) if (!result) return@launchIO moveMangaToCategory(defaultCategory) } // Automatic 'Default' or no categories defaultCategoryId == 0L || categories.isEmpty() -> { val result = updateManga.awaitUpdateFavorite(manga.id, true) if (!result) return@launchIO moveMangaToCategory(null) } // Choose a category else -> showChangeCategoryDialog() } // Finally match with enhanced tracking when available addTracks.bindEnhancedTrackers(manga, state.source) } } } fun showChangeCategoryDialog() { val manga = successState?.manga ?: return screenModelScope.launch { val categories = getCategories() val selection = getMangaCategoryIds(manga) updateSuccessState { successState -> successState.copy( dialog = Dialog.ChangeCategory( manga = manga, initialSelection = categories.mapAsCheckboxState { it.id in selection }.toImmutableList(), ), ) } } } fun showSetFetchIntervalDialog() { val manga = successState?.manga ?: return updateSuccessState { it.copy(dialog = Dialog.SetFetchInterval(manga)) } } fun setFetchInterval(manga: Manga, interval: Int) { screenModelScope.launchIO { if ( updateManga.awaitUpdateFetchInterval( // Custom intervals are negative manga.copy(fetchInterval = -interval), ) ) { val updatedManga = mangaRepository.getMangaById(manga.id) updateSuccessState { it.copy(manga = updatedManga) } } } } /** * Returns true if the manga has any downloads. */ private fun hasDownloads(): Boolean { val manga = successState?.manga ?: return false return downloadManager.getDownloadCount(manga) > 0 } /** * Deletes all the downloads for the manga. */ private fun deleteDownloads() { val state = successState ?: return downloadManager.deleteManga(state.manga, state.source) } /** * Get user categories. * * @return List of categories, not including the default category */ suspend fun getCategories(): List { return getCategories.await().filterNot { it.isSystemCategory } } /** * Gets the category id's the manga is in, if the manga is not in a category, returns the default id. * * @param manga the manga to get categories from. * @return Array of category ids the manga is in, if none returns default id */ private suspend fun getMangaCategoryIds(manga: Manga): List { return getCategories.await(manga.id) .map { it.id } } fun moveMangaToCategoriesAndAddToLibrary(manga: Manga, categories: List) { moveMangaToCategory(categories) if (manga.favorite) return screenModelScope.launchIO { updateManga.awaitUpdateFavorite(manga.id, true) } } /** * Move the given manga to categories. * * @param categories the selected categories. */ private fun moveMangaToCategories(categories: List) { val categoryIds = categories.map { it.id } moveMangaToCategory(categoryIds) } private fun moveMangaToCategory(categoryIds: List) { screenModelScope.launchIO { setMangaCategories.await(mangaId, categoryIds) } } /** * Move the given manga to the category. * * @param category the selected category, or null for default category. */ private fun moveMangaToCategory(category: Category?) { moveMangaToCategories(listOfNotNull(category)) } // Manga info - end // Chapters list - start private fun observeDownloads() { screenModelScope.launchIO { downloadManager.statusFlow() .filter { it.manga.id == successState?.manga?.id } .catch { error -> logcat(LogPriority.ERROR, error) } .flowWithLifecycle(lifecycle) .collect { withUIContext { updateDownloadState(it) } } } screenModelScope.launchIO { downloadManager.progressFlow() .filter { it.manga.id == successState?.manga?.id } .catch { error -> logcat(LogPriority.ERROR, error) } .flowWithLifecycle(lifecycle) .collect { withUIContext { updateDownloadState(it) } } } } private fun updateDownloadState(download: Download) { updateSuccessState { successState -> val modifiedIndex = successState.chapters.indexOfFirst { it.id == download.chapter.id } if (modifiedIndex < 0) return@updateSuccessState successState val newChapters = successState.chapters.toMutableList().apply { val item = removeAt(modifiedIndex) .copy(downloadState = download.status, downloadProgress = download.progress) add(modifiedIndex, item) } successState.copy(chapters = newChapters) } } private fun List.toChapterListItems(manga: Manga): List { val isLocal = manga.isLocal() return map { chapter -> val activeDownload = if (isLocal) { null } else { downloadManager.getQueuedDownloadOrNull(chapter.id) } val downloaded = if (isLocal) { true } else { downloadManager.isChapterDownloaded( chapter.name, chapter.scanlator, chapter.url, manga.title, manga.source, ) } val downloadState = when { activeDownload != null -> activeDownload.status downloaded -> Download.State.DOWNLOADED else -> Download.State.NOT_DOWNLOADED } ChapterList.Item( chapter = chapter, downloadState = downloadState, downloadProgress = activeDownload?.progress ?: 0, selected = chapter.id in selectedChapterIds, ) } } /** * Requests an updated list of chapters from the source. */ private suspend fun fetchChaptersFromSource(manualFetch: Boolean = false) { val state = successState ?: return try { withIOContext { val chapters = state.source.getChapterList(state.manga.toSManga()) val newChapters = syncChaptersWithSource.await( chapters, state.manga, state.source, manualFetch, ) if (manualFetch) { downloadNewChapters(newChapters) } } } catch (e: Throwable) { val message = if (e is NoChaptersException) { context.stringResource(MR.strings.no_chapters_error) } else { logcat(LogPriority.ERROR, e) with(context) { e.formattedMessage } } screenModelScope.launch { snackbarHostState.showSnackbar(message = message) } val newManga = mangaRepository.getMangaById(mangaId) updateSuccessState { it.copy(manga = newManga, isRefreshingData = false) } } } /** * @throws IllegalStateException if the swipe action is [LibraryPreferences.ChapterSwipeAction.Disabled] */ fun chapterSwipe(chapterItem: ChapterList.Item, swipeAction: LibraryPreferences.ChapterSwipeAction) { screenModelScope.launch { executeChapterSwipeAction(chapterItem, swipeAction) } } /** * @throws IllegalStateException if the swipe action is [LibraryPreferences.ChapterSwipeAction.Disabled] */ private fun executeChapterSwipeAction( chapterItem: ChapterList.Item, swipeAction: LibraryPreferences.ChapterSwipeAction, ) { val chapter = chapterItem.chapter when (swipeAction) { LibraryPreferences.ChapterSwipeAction.ToggleRead -> { markChaptersRead(listOf(chapter), !chapter.read) } LibraryPreferences.ChapterSwipeAction.ToggleBookmark -> { bookmarkChapters(listOf(chapter), !chapter.bookmark) } LibraryPreferences.ChapterSwipeAction.Download -> { val downloadAction: ChapterDownloadAction = when (chapterItem.downloadState) { Download.State.ERROR, Download.State.NOT_DOWNLOADED, -> ChapterDownloadAction.START_NOW Download.State.QUEUE, Download.State.DOWNLOADING, -> ChapterDownloadAction.CANCEL Download.State.DOWNLOADED -> ChapterDownloadAction.DELETE } runChapterDownloadActions( items = listOf(chapterItem), action = downloadAction, ) } LibraryPreferences.ChapterSwipeAction.Disabled -> throw IllegalStateException() } } /** * Returns the next unread chapter or null if everything is read. */ fun getNextUnreadChapter(): Chapter? { val successState = successState ?: return null return successState.chapters.getNextUnread(successState.manga) } private fun getUnreadChapters(): List { val chapterItems = if (skipFiltered) filteredChapters.orEmpty() else allChapters.orEmpty() return chapterItems .filter { (chapter, dlStatus) -> !chapter.read && dlStatus == Download.State.NOT_DOWNLOADED } .map { it.chapter } } private fun getUnreadChaptersSorted(): List { val manga = successState?.manga ?: return emptyList() val chaptersSorted = getUnreadChapters().sortedWith(getChapterSort(manga)) return if (manga.sortDescending()) chaptersSorted.reversed() else chaptersSorted } private fun getBookmarkedChapters(): List { val chapterItems = if (skipFiltered) filteredChapters.orEmpty() else allChapters.orEmpty() return chapterItems .filter { (chapter, dlStatus) -> chapter.bookmark && dlStatus == Download.State.NOT_DOWNLOADED } .map { it.chapter } } private fun startDownload( chapters: List, startNow: Boolean, ) { val successState = successState ?: return screenModelScope.launchNonCancellable { if (startNow) { val chapterId = chapters.singleOrNull()?.id ?: return@launchNonCancellable downloadManager.startDownloadNow(chapterId) } else { downloadChapters(chapters) } if (!isFavorited && !successState.hasPromptedToAddBefore) { updateSuccessState { state -> state.copy(hasPromptedToAddBefore = true) } val result = snackbarHostState.showSnackbar( message = context.stringResource(MR.strings.snack_add_to_library), actionLabel = context.stringResource(MR.strings.action_add), withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed && !isFavorited) { toggleFavorite() } } } } fun runChapterDownloadActions( items: List, action: ChapterDownloadAction, ) { when (action) { ChapterDownloadAction.START -> { startDownload(items.map { it.chapter }, false) if (items.any { it.downloadState == Download.State.ERROR }) { downloadManager.startDownloads() } } ChapterDownloadAction.START_NOW -> { val chapter = items.singleOrNull()?.chapter ?: return startDownload(listOf(chapter), true) } ChapterDownloadAction.CANCEL -> { val chapterId = items.singleOrNull()?.id ?: return cancelDownload(chapterId) } ChapterDownloadAction.DELETE -> { deleteChapters(items.map { it.chapter }) } } } fun runDownloadAction(action: DownloadAction) { val chaptersToDownload = when (action) { DownloadAction.NEXT_1_CHAPTER -> getUnreadChaptersSorted().take(1) DownloadAction.NEXT_5_CHAPTERS -> getUnreadChaptersSorted().take(5) DownloadAction.NEXT_10_CHAPTERS -> getUnreadChaptersSorted().take(10) DownloadAction.NEXT_25_CHAPTERS -> getUnreadChaptersSorted().take(25) DownloadAction.UNREAD_CHAPTERS -> getUnreadChapters() DownloadAction.BOOKMARKED_CHAPTERS -> getBookmarkedChapters() } if (chaptersToDownload.isNotEmpty()) { startDownload(chaptersToDownload, false) } } private fun cancelDownload(chapterId: Long) { val activeDownload = downloadManager.getQueuedDownloadOrNull(chapterId) ?: return downloadManager.cancelQueuedDownloads(listOf(activeDownload)) updateDownloadState(activeDownload.apply { status = Download.State.NOT_DOWNLOADED }) } fun markPreviousChapterRead(pointer: Chapter) { val manga = successState?.manga ?: return val chapters = filteredChapters.orEmpty().map { it.chapter } val prevChapters = if (manga.sortDescending()) chapters.asReversed() else chapters val pointerPos = prevChapters.indexOf(pointer) if (pointerPos != -1) markChaptersRead(prevChapters.take(pointerPos), true) } /** * Mark the selected chapter list as read/unread. * @param chapters the list of selected chapters. * @param read whether to mark chapters as read or unread. */ fun markChaptersRead(chapters: List, read: Boolean) { toggleAllSelection(false) if (chapters.isEmpty()) return screenModelScope.launchIO { setReadStatus.await( read = read, chapters = chapters.toTypedArray(), ) if (!read || successState?.hasLoggedInTrackers == false || autoTrackState == AutoTrackState.NEVER) { return@launchIO } refreshTrackers() val tracks = getTracks.await(mangaId) val maxChapterNumber = chapters.maxOf { it.chapterNumber } val shouldPromptTrackingUpdate = tracks.any { track -> maxChapterNumber > track.lastChapterRead } if (!shouldPromptTrackingUpdate) return@launchIO if (autoTrackState == AutoTrackState.ALWAYS) { trackChapter.await(context, mangaId, maxChapterNumber) withUIContext { context.toast(context.stringResource(MR.strings.trackers_updated_summary, maxChapterNumber.toInt())) } return@launchIO } val result = snackbarHostState.showSnackbar( message = context.stringResource(MR.strings.confirm_tracker_update, maxChapterNumber.toInt()), actionLabel = context.stringResource(MR.strings.action_ok), duration = SnackbarDuration.Short, withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed) { trackChapter.await(context, mangaId, maxChapterNumber) } } } private suspend fun refreshTrackers( refreshTracks: RefreshTracks = Injekt.get(), ) { refreshTracks.await(mangaId) .filter { it.first != null } .forEach { (track, e) -> logcat(LogPriority.ERROR, e) { "Failed to refresh track data mangaId=$mangaId for service ${track!!.id}" } withUIContext { context.toast( context.stringResource( MR.strings.track_error, track!!.name, e.message ?: "", ), ) } } } /** * Downloads the given list of chapters with the manager. * @param chapters the list of chapters to download. */ private fun downloadChapters(chapters: List) { val manga = successState?.manga ?: return downloadManager.downloadChapters(manga, chapters) toggleAllSelection(false) } /** * Bookmarks the given list of chapters. * @param chapters the list of chapters to bookmark. */ fun bookmarkChapters(chapters: List, bookmarked: Boolean) { screenModelScope.launchIO { chapters .filterNot { it.bookmark == bookmarked } .map { ChapterUpdate(id = it.id, bookmark = bookmarked) } .let { updateChapter.awaitAll(it) } } toggleAllSelection(false) } /** * Deletes the given list of chapter. * * @param chapters the list of chapters to delete. */ fun deleteChapters(chapters: List) { screenModelScope.launchNonCancellable { try { successState?.let { state -> downloadManager.deleteChapters( chapters, state.manga, state.source, ) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) } } } private fun downloadNewChapters(chapters: List) { screenModelScope.launchNonCancellable { val manga = successState?.manga ?: return@launchNonCancellable val chaptersToDownload = filterChaptersForDownload.await(manga, chapters) if (chaptersToDownload.isNotEmpty()) { downloadChapters(chaptersToDownload) } } } /** * Sets the read filter and requests an UI update. * @param state whether to display only unread chapters or all chapters. */ fun setUnreadFilter(state: TriState) { val manga = successState?.manga ?: return val flag = when (state) { TriState.DISABLED -> Manga.SHOW_ALL TriState.ENABLED_IS -> Manga.CHAPTER_SHOW_UNREAD TriState.ENABLED_NOT -> Manga.CHAPTER_SHOW_READ } screenModelScope.launchNonCancellable { setMangaChapterFlags.awaitSetUnreadFilter(manga, flag) } } /** * Sets the download filter and requests an UI update. * @param state whether to display only downloaded chapters or all chapters. */ fun setDownloadedFilter(state: TriState) { val manga = successState?.manga ?: return val flag = when (state) { TriState.DISABLED -> Manga.SHOW_ALL TriState.ENABLED_IS -> Manga.CHAPTER_SHOW_DOWNLOADED TriState.ENABLED_NOT -> Manga.CHAPTER_SHOW_NOT_DOWNLOADED } screenModelScope.launchNonCancellable { setMangaChapterFlags.awaitSetDownloadedFilter(manga, flag) } } /** * Sets the bookmark filter and requests an UI update. * @param state whether to display only bookmarked chapters or all chapters. */ fun setBookmarkedFilter(state: TriState) { val manga = successState?.manga ?: return val flag = when (state) { TriState.DISABLED -> Manga.SHOW_ALL TriState.ENABLED_IS -> Manga.CHAPTER_SHOW_BOOKMARKED TriState.ENABLED_NOT -> Manga.CHAPTER_SHOW_NOT_BOOKMARKED } screenModelScope.launchNonCancellable { setMangaChapterFlags.awaitSetBookmarkFilter(manga, flag) } } /** * Sets the active display mode. * @param mode the mode to set. */ fun setDisplayMode(mode: Long) { val manga = successState?.manga ?: return screenModelScope.launchNonCancellable { setMangaChapterFlags.awaitSetDisplayMode(manga, mode) } } /** * Sets the sorting method and requests an UI update. * @param sort the sorting mode. */ fun setSorting(sort: Long) { val manga = successState?.manga ?: return screenModelScope.launchNonCancellable { setMangaChapterFlags.awaitSetSortingModeOrFlipOrder(manga, sort) } } fun setCurrentSettingsAsDefault(applyToExisting: Boolean) { val manga = successState?.manga ?: return screenModelScope.launchNonCancellable { libraryPreferences.setChapterSettingsDefault(manga) if (applyToExisting) { setMangaDefaultChapterFlags.awaitAll() } snackbarHostState.showSnackbar(message = context.stringResource(MR.strings.chapter_settings_updated)) } } fun resetToDefaultSettings() { val manga = successState?.manga ?: return screenModelScope.launchNonCancellable { setMangaDefaultChapterFlags.await(manga) } } fun toggleSelection( item: ChapterList.Item, selected: Boolean, fromLongPress: Boolean = false, ) { updateSuccessState { successState -> val newChapters = successState.processedChapters.toMutableList().apply { val selectedIndex = successState.processedChapters.indexOfFirst { it.id == item.chapter.id } if (selectedIndex < 0) return@apply val selectedItem = get(selectedIndex) if ((selectedItem.selected && selected) || (!selectedItem.selected && !selected)) return@apply val firstSelection = none { it.selected } set(selectedIndex, selectedItem.copy(selected = selected)) selectedChapterIds.addOrRemove(item.id, selected) if (selected && fromLongPress) { if (firstSelection) { selectedPositions[0] = selectedIndex selectedPositions[1] = selectedIndex } else { // Try to select the items in-between when possible val range: IntRange if (selectedIndex < selectedPositions[0]) { range = selectedIndex + 1.. selectedPositions[1]) { range = (selectedPositions[1] + 1).. selectedPositions[1]) { selectedPositions[1] = selectedIndex } } } } successState.copy(chapters = newChapters) } } fun toggleAllSelection(selected: Boolean) { updateSuccessState { successState -> val newChapters = successState.chapters.map { selectedChapterIds.addOrRemove(it.id, selected) it.copy(selected = selected) } selectedPositions[0] = -1 selectedPositions[1] = -1 successState.copy(chapters = newChapters) } } fun invertSelection() { updateSuccessState { successState -> val newChapters = successState.chapters.map { selectedChapterIds.addOrRemove(it.id, !it.selected) it.copy(selected = !it.selected) } selectedPositions[0] = -1 selectedPositions[1] = -1 successState.copy(chapters = newChapters) } } // Chapters list - end // Track sheet - start private fun observeTrackers() { val manga = successState?.manga ?: return screenModelScope.launchIO { combine( getTracks.subscribe(manga.id).catch { logcat(LogPriority.ERROR, it) }, trackerManager.loggedInTrackersFlow(), ) { mangaTracks, loggedInTrackers -> // Show only if the service supports this manga's source val supportedTrackers = loggedInTrackers.filter { (it as? EnhancedTracker)?.accept(source!!) ?: true } val supportedTrackerIds = supportedTrackers.map { it.id }.toHashSet() val supportedTrackerTracks = mangaTracks.filter { it.trackerId in supportedTrackerIds } supportedTrackerTracks.size to supportedTrackers.isNotEmpty() } .flowWithLifecycle(lifecycle) .distinctUntilChanged() .collectLatest { (trackingCount, hasLoggedInTrackers) -> updateSuccessState { it.copy( trackingCount = trackingCount, hasLoggedInTrackers = hasLoggedInTrackers, ) } } } } // Track sheet - end sealed interface Dialog { data class ChangeCategory( val manga: Manga, val initialSelection: ImmutableList>, ) : Dialog data class DeleteChapters(val chapters: List) : Dialog data class DuplicateManga(val manga: Manga, val duplicates: List) : Dialog data class Migrate(val target: Manga, val current: Manga) : Dialog data class SetFetchInterval(val manga: Manga) : Dialog data object SettingsSheet : Dialog data object TrackSheet : Dialog data object FullCover : Dialog } fun dismissDialog() { updateSuccessState { it.copy(dialog = null) } } fun showDeleteChapterDialog(chapters: List) { updateSuccessState { it.copy(dialog = Dialog.DeleteChapters(chapters)) } } fun showSettingsDialog() { updateSuccessState { it.copy(dialog = Dialog.SettingsSheet) } } fun showTrackDialog() { updateSuccessState { it.copy(dialog = Dialog.TrackSheet) } } fun showCoverDialog() { updateSuccessState { it.copy(dialog = Dialog.FullCover) } } fun showMigrateDialog(duplicate: Manga) { val manga = successState?.manga ?: return updateSuccessState { it.copy(dialog = Dialog.Migrate(target = manga, current = duplicate)) } } fun setExcludedScanlators(excludedScanlators: Set) { screenModelScope.launchIO { setExcludedScanlators.await(mangaId, excludedScanlators) } } sealed interface State { @Immutable data object Loading : State @Immutable data class Success( val manga: Manga, val source: Source, val isFromSource: Boolean, val chapters: List, val availableScanlators: Set, val excludedScanlators: Set, val trackingCount: Int = 0, val hasLoggedInTrackers: Boolean = false, val isRefreshingData: Boolean = false, val dialog: Dialog? = null, val hasPromptedToAddBefore: Boolean = false, val hideMissingChapters: Boolean = false, ) : State { val processedChapters by lazy { chapters.applyFilters(manga).toList() } val isAnySelected by lazy { chapters.fastAny { it.selected } } val chapterListItems by lazy { if (hideMissingChapters) { return@lazy processedChapters } processedChapters.insertSeparators { before, after -> val (lowerChapter, higherChapter) = if (manga.sortDescending()) { after to before } else { before to after } if (higherChapter == null) return@insertSeparators null if (lowerChapter == null) { floor(higherChapter.chapter.chapterNumber) .toInt() .minus(1) .coerceAtLeast(0) } else { calculateChapterGap(higherChapter.chapter, lowerChapter.chapter) } .takeIf { it > 0 } ?.let { missingCount -> ChapterList.MissingCount( id = "${lowerChapter?.id}-${higherChapter.id}", count = missingCount, ) } } } val scanlatorFilterActive: Boolean get() = excludedScanlators.intersect(availableScanlators).isNotEmpty() val filterActive: Boolean get() = scanlatorFilterActive || manga.chaptersFiltered() /** * Applies the view filters to the list of chapters obtained from the database. * @return an observable of the list of chapters filtered and sorted. */ private fun List.applyFilters(manga: Manga): Sequence { val isLocalManga = manga.isLocal() val unreadFilter = manga.unreadFilter val downloadedFilter = manga.downloadedFilter val bookmarkedFilter = manga.bookmarkedFilter return asSequence() .filter { (chapter) -> applyFilter(unreadFilter) { !chapter.read } } .filter { (chapter) -> applyFilter(bookmarkedFilter) { chapter.bookmark } } .filter { applyFilter(downloadedFilter) { it.isDownloaded || isLocalManga } } .sortedWith { (chapter1), (chapter2) -> getChapterSort(manga).invoke(chapter1, chapter2) } } } } } @Immutable sealed class ChapterList { @Immutable data class MissingCount( val id: String, val count: Int, ) : ChapterList() @Immutable data class Item( val chapter: Chapter, val downloadState: Download.State, val downloadProgress: Int, val selected: Boolean = false, ) : ChapterList() { val id = chapter.id val isDownloaded = downloadState == Download.State.DOWNLOADED } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/manga/notes/MangaNotesScreen.kt ================================================ package eu.kanade.tachiyomi.ui.manga.notes import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.manga.MangaNotesScreen import eu.kanade.presentation.util.Screen import kotlinx.coroutines.flow.update import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.domain.manga.interactor.UpdateMangaNotes import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MangaNotesScreen( private val manga: Manga, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model(manga) } val state by screenModel.state.collectAsState() MangaNotesScreen( state = state, navigateUp = navigator::pop, onUpdate = screenModel::updateNotes, ) } private class Model( private val manga: Manga, private val updateMangaNotes: UpdateMangaNotes = Injekt.get(), ) : StateScreenModel(State(manga, manga.notes)) { fun updateNotes(content: String) { if (content == state.value.notes) return mutableState.update { it.copy(notes = content) } screenModelScope.launchNonCancellable { updateMangaNotes(manga.id, content) } } } @Immutable data class State( val manga: Manga, val notes: String, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackInfoDialog.kt ================================================ package eu.kanade.tachiyomi.ui.manga.track import android.app.Application import android.content.Context import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Delete import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SelectableDates import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextAlign import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.interactor.RefreshTracks import eu.kanade.domain.track.model.toDbTrack import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.track.TrackChapterSelector import eu.kanade.presentation.track.TrackDateSelector import eu.kanade.presentation.track.TrackInfoDialogHome import eu.kanade.presentation.track.TrackScoreSelector import eu.kanade.presentation.track.TrackStatusSelector import eu.kanade.presentation.track.TrackerSearch import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.util.lang.convertEpochMillisZone import eu.kanade.tachiyomi.util.lang.toLocalDate import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.track.interactor.DeleteTrack import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.model.Track import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.LocalDate import java.time.ZoneOffset data class TrackInfoDialogHomeScreen( private val mangaId: Long, private val mangaTitle: String, private val sourceId: Long, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val screenModel = rememberScreenModel { Model(mangaId, sourceId) } val dateFormat = remember { UiPreferences.dateFormat(Injekt.get().dateFormat.get()) } val state by screenModel.state.collectAsState() TrackInfoDialogHome( trackItems = state.trackItems, dateFormat = dateFormat, onStatusClick = { navigator.push( TrackStatusSelectorScreen( track = it.track!!, serviceId = it.tracker.id, ), ) }, onChapterClick = { navigator.push( TrackChapterSelectorScreen( track = it.track!!, serviceId = it.tracker.id, ), ) }, onScoreClick = { navigator.push( TrackScoreSelectorScreen( track = it.track!!, serviceId = it.tracker.id, ), ) }, onStartDateEdit = { navigator.push( TrackDateSelectorScreen( track = it.track!!, serviceId = it.tracker.id, start = true, ), ) }, onEndDateEdit = { navigator.push( TrackDateSelectorScreen( track = it.track!!, serviceId = it.tracker.id, start = false, ), ) }, onNewSearch = { if (it.tracker is EnhancedTracker) { screenModel.registerEnhancedTracking(it) } else { navigator.push( TrackerSearchScreen( mangaId = mangaId, initialQuery = it.track?.title ?: mangaTitle, currentUrl = it.track?.remoteUrl, serviceId = it.tracker.id, ), ) } }, onOpenInBrowser = { openTrackerInBrowser(context, it) }, onRemoved = { navigator.push( TrackerRemoveScreen( mangaId = mangaId, track = it.track!!, serviceId = it.tracker.id, ), ) }, onCopyLink = { context.copyTrackerLink(it) }, onTogglePrivate = screenModel::togglePrivate, ) } /** * Opens registered tracker url in browser */ private fun openTrackerInBrowser(context: Context, trackItem: TrackItem) { val url = trackItem.track?.remoteUrl ?: return if (url.isNotBlank()) { context.openInBrowser(url) } } private fun Context.copyTrackerLink(trackItem: TrackItem) { val url = trackItem.track?.remoteUrl ?: return if (url.isNotBlank()) { copyToClipboard(url, url) } } private class Model( private val mangaId: Long, private val sourceId: Long, private val getTracks: GetTracks = Injekt.get(), ) : StateScreenModel(State()) { init { screenModelScope.launch { refreshTrackers() } screenModelScope.launch { getTracks.subscribe(mangaId) .catch { logcat(LogPriority.ERROR, it) } .distinctUntilChanged() .map { it.mapToTrackItem() } .collectLatest { trackItems -> mutableState.update { it.copy(trackItems = trackItems) } } } } fun registerEnhancedTracking(item: TrackItem) { item.tracker as EnhancedTracker screenModelScope.launchNonCancellable { val manga = Injekt.get().await(mangaId) ?: return@launchNonCancellable try { val matchResult = item.tracker.match(manga) ?: throw Exception() item.tracker.register(matchResult, mangaId) } catch (_: Exception) { withUIContext { Injekt.get().toast(MR.strings.error_no_match) } } } } private suspend fun refreshTrackers() { val refreshTracks = Injekt.get() val context = Injekt.get() refreshTracks.await(mangaId) .filter { it.first != null } .forEach { (track, e) -> logcat(LogPriority.ERROR, e) { "Failed to refresh track data mangaId=$mangaId for service ${track!!.id}" } withUIContext { context.toast( context.stringResource( MR.strings.track_error, track!!.name, e.message ?: "", ), ) } } } fun togglePrivate(item: TrackItem) { screenModelScope.launchNonCancellable { item.tracker.setRemotePrivate(item.track!!.toDbTrack(), !item.track.private) } } private fun List.mapToTrackItem(): List { val loggedInTrackers = Injekt.get().loggedInTrackers() val source = Injekt.get().getOrStub(sourceId) return loggedInTrackers // Map to TrackItem .map { service -> TrackItem(find { it.trackerId == service.id }, service) } // Show only if the service supports this manga's source .filter { (it.tracker as? EnhancedTracker)?.accept(source) ?: true } } @Immutable data class State( val trackItems: List = emptyList(), ) } } private data class TrackStatusSelectorScreen( private val track: Track, private val serviceId: Long, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( track = track, tracker = Injekt.get().get(serviceId)!!, ) } val state by screenModel.state.collectAsState() TrackStatusSelector( selection = state.selection, onSelectionChange = screenModel::setSelection, selections = remember { screenModel.getSelections() }, onConfirm = { screenModel.setStatus() navigator.pop() }, onDismissRequest = navigator::pop, ) } private class Model( private val track: Track, private val tracker: Tracker, ) : StateScreenModel(State(track.status)) { fun getSelections(): Map { return tracker.getStatusList().associateWith { tracker.getStatus(it) } } fun setSelection(selection: Long) { mutableState.update { it.copy(selection = selection) } } fun setStatus() { screenModelScope.launchNonCancellable { tracker.setRemoteStatus(track.toDbTrack(), state.value.selection) } } @Immutable data class State( val selection: Long, ) } } private data class TrackChapterSelectorScreen( private val track: Track, private val serviceId: Long, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( track = track, tracker = Injekt.get().get(serviceId)!!, ) } val state by screenModel.state.collectAsState() TrackChapterSelector( selection = state.selection, onSelectionChange = screenModel::setSelection, range = remember { screenModel.getRange() }, onConfirm = { screenModel.setChapter() navigator.pop() }, onDismissRequest = navigator::pop, ) } private class Model( private val track: Track, private val tracker: Tracker, ) : StateScreenModel(State(track.lastChapterRead.toInt())) { fun getRange(): Iterable { val endRange = if (track.totalChapters > 0) { track.totalChapters } else { 10000 } return 0..endRange.toInt() } fun setSelection(selection: Int) { mutableState.update { it.copy(selection = selection) } } fun setChapter() { screenModelScope.launchNonCancellable { tracker.setRemoteLastChapterRead(track.toDbTrack(), state.value.selection) } } @Immutable data class State( val selection: Int, ) } } private data class TrackScoreSelectorScreen( private val track: Track, private val serviceId: Long, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( track = track, tracker = Injekt.get().get(serviceId)!!, ) } val state by screenModel.state.collectAsState() TrackScoreSelector( selection = state.selection, onSelectionChange = screenModel::setSelection, selections = remember { screenModel.getSelections() }, onConfirm = { screenModel.setScore() navigator.pop() }, onDismissRequest = navigator::pop, ) } private class Model( private val track: Track, private val tracker: Tracker, ) : StateScreenModel(State(tracker.displayScore(track))) { fun getSelections(): ImmutableList { return tracker.getScoreList() } fun setSelection(selection: String) { mutableState.update { it.copy(selection = selection) } } fun setScore() { screenModelScope.launchNonCancellable { tracker.setRemoteScore(track.toDbTrack(), state.value.selection) } } @Immutable data class State( val selection: String, ) } } private data class TrackDateSelectorScreen( private val track: Track, private val serviceId: Long, private val start: Boolean, ) : Screen() { @Transient private val selectableDates = object : SelectableDates { override fun isSelectableDate(utcTimeMillis: Long): Boolean { val targetDate = Instant.ofEpochMilli(utcTimeMillis).toLocalDate(ZoneOffset.UTC) // Disallow future dates if (targetDate > LocalDate.now(ZoneOffset.UTC)) return false return when { // Disallow setting start date after finish date start && track.finishDate > 0 -> { val finishDate = Instant.ofEpochMilli(track.finishDate).toLocalDate(ZoneOffset.UTC) targetDate <= finishDate } // Disallow setting finish date before start date !start && track.startDate > 0 -> { val startDate = Instant.ofEpochMilli(track.startDate).toLocalDate(ZoneOffset.UTC) startDate <= targetDate } else -> { true } } } override fun isSelectableYear(year: Int): Boolean { // Disallow future years if (year > LocalDate.now(ZoneOffset.UTC).year) return false return when { // Disallow setting start year after finish year start && track.finishDate > 0 -> { val finishDate = Instant.ofEpochMilli(track.finishDate).toLocalDate(ZoneOffset.UTC) year <= finishDate.year } // Disallow setting finish year before start year !start && track.startDate > 0 -> { val startDate = Instant.ofEpochMilli(track.startDate).toLocalDate(ZoneOffset.UTC) startDate.year <= year } else -> { true } } } } @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( track = track, tracker = Injekt.get().get(serviceId)!!, start = start, ) } val canRemove = if (start) { track.startDate > 0 } else { track.finishDate > 0 } TrackDateSelector( title = if (start) { stringResource(MR.strings.track_started_reading_date) } else { stringResource(MR.strings.track_finished_reading_date) }, initialSelectedDateMillis = screenModel.initialSelection, selectableDates = selectableDates, onConfirm = { screenModel.setDate(it) navigator.pop() }, onRemove = { screenModel.confirmRemoveDate(navigator) }.takeIf { canRemove }, onDismissRequest = navigator::pop, ) } private class Model( private val track: Track, private val tracker: Tracker, private val start: Boolean, ) : ScreenModel { // In UTC val initialSelection: Long get() { val millis = (if (start) track.startDate else track.finishDate) .takeIf { it != 0L } ?: Instant.now().toEpochMilli() return millis.convertEpochMillisZone(ZoneOffset.systemDefault(), ZoneOffset.UTC) } // In UTC fun setDate(millis: Long) { // Convert to local time val localMillis = millis.convertEpochMillisZone(ZoneOffset.UTC, ZoneOffset.systemDefault()) screenModelScope.launchNonCancellable { if (start) { tracker.setRemoteStartDate(track.toDbTrack(), localMillis) } else { tracker.setRemoteFinishDate(track.toDbTrack(), localMillis) } } } fun confirmRemoveDate(navigator: Navigator) { navigator.push(TrackDateRemoverScreen(track, tracker.id, start)) } } } private data class TrackDateRemoverScreen( private val track: Track, private val serviceId: Long, private val start: Boolean, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( track = track, tracker = Injekt.get().get(serviceId)!!, start = start, ) } AlertDialogContent( modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars), icon = { Icon( imageVector = Icons.Default.Delete, contentDescription = null, ) }, title = { Text( text = stringResource(MR.strings.track_remove_date_conf_title), textAlign = TextAlign.Center, ) }, text = { val serviceName = screenModel.getServiceName() Text( text = if (start) { stringResource(MR.strings.track_remove_start_date_conf_text, serviceName) } else { stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName) }, ) }, buttons = { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small, Alignment.End), ) { TextButton(onClick = navigator::pop) { Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { screenModel.removeDate() navigator.popUntil { it is TrackInfoDialogHomeScreen } }, colors = ButtonDefaults.filledTonalButtonColors( containerColor = MaterialTheme.colorScheme.errorContainer, contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { Text(text = stringResource(MR.strings.action_remove)) } } }, ) } private class Model( private val track: Track, private val tracker: Tracker, private val start: Boolean, ) : ScreenModel { fun getServiceName() = tracker.name fun removeDate() { screenModelScope.launchNonCancellable { if (start) { tracker.setRemoteStartDate(track.toDbTrack(), 0) } else { tracker.setRemoteFinishDate(track.toDbTrack(), 0) } } } } } data class TrackerSearchScreen( private val mangaId: Long, private val initialQuery: String, private val currentUrl: String?, private val serviceId: Long, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( mangaId = mangaId, currentUrl = currentUrl, initialQuery = initialQuery, tracker = Injekt.get().get(serviceId)!!, ) } val state by screenModel.state.collectAsState() val textFieldState = rememberTextFieldState(initialQuery) TrackerSearch( state = textFieldState, onDispatchQuery = { screenModel.trackingSearch(textFieldState.text.toString()) }, queryResult = state.queryResult, selected = state.selected, onSelectedChange = screenModel::updateSelection, onConfirmSelection = f@{ private: Boolean -> val selected = state.selected ?: return@f selected.private = private screenModel.registerTracking(selected) navigator.pop() }, onDismissRequest = navigator::pop, supportsPrivateTracking = screenModel.supportsPrivateTracking, ) } private class Model( private val mangaId: Long, private val currentUrl: String? = null, initialQuery: String, private val tracker: Tracker, ) : StateScreenModel(State()) { val supportsPrivateTracking = tracker.supportsPrivateTracking init { // Run search on first launch if (initialQuery.isNotBlank()) { trackingSearch(initialQuery) } } fun trackingSearch(query: String) { screenModelScope.launch { // To show loading state mutableState.update { it.copy(queryResult = null, selected = null) } val result = withIOContext { try { val results = tracker.search(query) Result.success(results) } catch (e: Throwable) { Result.failure(e) } } mutableState.update { oldState -> oldState.copy( queryResult = result, selected = result.getOrNull()?.find { it.tracking_url == currentUrl }, ) } } } fun registerTracking(item: TrackSearch) { screenModelScope.launchNonCancellable { tracker.register(item, mangaId) } } fun updateSelection(selected: TrackSearch) { mutableState.update { it.copy(selected = selected) } } @Immutable data class State( val queryResult: Result>? = null, val selected: TrackSearch? = null, ) } } private data class TrackerRemoveScreen( private val mangaId: Long, private val track: Track, private val serviceId: Long, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { Model( mangaId = mangaId, track = track, tracker = Injekt.get().get(serviceId)!!, ) } val serviceName = screenModel.getName() var removeRemoteTrack by remember { mutableStateOf(false) } AlertDialogContent( modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars), icon = { Icon( imageVector = Icons.Default.Delete, contentDescription = null, ) }, title = { Text( text = stringResource(MR.strings.track_delete_title, serviceName), textAlign = TextAlign.Center, ) }, text = { Column( verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Text( text = stringResource(MR.strings.track_delete_text, serviceName), ) if (screenModel.isDeletable()) { LabeledCheckbox( label = stringResource(MR.strings.track_delete_remote_text, serviceName), checked = removeRemoteTrack, onCheckedChange = { removeRemoteTrack = it }, ) } } }, buttons = { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy( MaterialTheme.padding.small, Alignment.End, ), ) { TextButton(onClick = navigator::pop) { Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { screenModel.unregisterTracking(serviceId) if (removeRemoteTrack) screenModel.deleteMangaFromService() navigator.pop() }, colors = ButtonDefaults.filledTonalButtonColors( containerColor = MaterialTheme.colorScheme.errorContainer, contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { Text(text = stringResource(MR.strings.action_ok)) } } }, ) } private class Model( private val mangaId: Long, private val track: Track, private val tracker: Tracker, private val deleteTrack: DeleteTrack = Injekt.get(), ) : ScreenModel { fun getName() = tracker.name fun isDeletable() = tracker is DeletableTracker fun deleteMangaFromService() { screenModelScope.launchNonCancellable { try { (tracker as DeletableTracker).delete(track) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to delete entry from service" } } } } fun unregisterTracking(serviceId: Long) { screenModelScope.launchNonCancellable { deleteTrack.await(mangaId, serviceId) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackItem.kt ================================================ package eu.kanade.tachiyomi.ui.manga.track import eu.kanade.tachiyomi.data.track.Tracker import tachiyomi.domain.track.model.Track data class TrackItem(val track: Track?, val tracker: Tracker) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt ================================================ package eu.kanade.tachiyomi.ui.more import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.core.preference.asState import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.more.MoreScreen import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.download.DownloadQueueScreen import eu.kanade.tachiyomi.ui.setting.SettingsScreen import eu.kanade.tachiyomi.ui.stats.StatsScreen import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import tachiyomi.core.common.util.lang.launchIO import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get data object MoreTab : Tab { override val options: TabOptions @Composable get() { val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter) return TabOptions( index = 4u, title = stringResource(MR.strings.label_more), icon = rememberAnimatedVectorPainter(image, isSelected), ) } override suspend fun onReselect(navigator: Navigator) { navigator.push(SettingsScreen()) } @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { MoreScreenModel() } val downloadQueueState by screenModel.downloadQueueState.collectAsState() MoreScreen( downloadQueueStateProvider = { downloadQueueState }, downloadedOnly = screenModel.downloadedOnly, onDownloadedOnlyChange = { screenModel.downloadedOnly = it }, incognitoMode = screenModel.incognitoMode, onIncognitoModeChange = { screenModel.incognitoMode = it }, onClickDownloadQueue = { navigator.push(DownloadQueueScreen) }, onClickCategories = { navigator.push(CategoryScreen()) }, onClickStats = { navigator.push(StatsScreen()) }, onClickDataAndStorage = { navigator.push(SettingsScreen(SettingsScreen.Destination.DataAndStorage)) }, onClickSettings = { navigator.push(SettingsScreen()) }, onClickAbout = { navigator.push(SettingsScreen(SettingsScreen.Destination.About)) }, ) } } private class MoreScreenModel( private val downloadManager: DownloadManager = Injekt.get(), preferences: BasePreferences = Injekt.get(), ) : ScreenModel { var downloadedOnly by preferences.downloadedOnly.asState(screenModelScope) var incognitoMode by preferences.incognitoMode.asState(screenModelScope) private var _downloadQueueState: MutableStateFlow = MutableStateFlow(DownloadQueueState.Stopped) val downloadQueueState: StateFlow = _downloadQueueState.asStateFlow() init { // Handle running/paused status change and queue progress updating screenModelScope.launchIO { combine( downloadManager.isDownloaderRunning, downloadManager.queueState, ) { isRunning, downloadQueue -> Pair(isRunning, downloadQueue.size) } .collectLatest { (isDownloading, downloadQueueSize) -> val pendingDownloadExists = downloadQueueSize != 0 _downloadQueueState.value = when { !pendingDownloadExists -> DownloadQueueState.Stopped !isDownloading -> DownloadQueueState.Paused(downloadQueueSize) else -> DownloadQueueState.Downloading(downloadQueueSize) } } } } } sealed interface DownloadQueueState { data object Stopped : DownloadQueueState data class Paused(val pending: Int) : DownloadQueueState data class Downloading(val pending: Int) : DownloadQueueState } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/more/NewUpdateScreen.kt ================================================ package eu.kanade.tachiyomi.ui.more import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.more.NewUpdateScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.data.updater.AppUpdateDownloadJob import eu.kanade.tachiyomi.util.system.openInBrowser class NewUpdateScreen( private val versionName: String, private val changelogInfo: String, private val releaseLink: String, private val downloadLink: String, ) : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val changelogInfoNoChecksum = remember { changelogInfo.replace("""---(\R|.)*Checksums(\R|.)*""".toRegex(), "") } NewUpdateScreen( versionName = versionName, changelogInfo = changelogInfoNoChecksum, onOpenInBrowser = { context.openInBrowser(releaseLink) }, onRejectUpdate = navigator::pop, onAcceptUpdate = { AppUpdateDownloadJob.start( context = context, url = downloadLink, title = versionName, ) navigator.pop() }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/more/OnboardingScreen.kt ================================================ package eu.kanade.tachiyomi.ui.more import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.more.onboarding.OnboardingScreen import eu.kanade.presentation.more.settings.screen.SearchableSettings import eu.kanade.presentation.more.settings.screen.SettingsDataScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.setting.SettingsScreen import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class OnboardingScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val basePreferences = remember { Injekt.get() } val shownOnboardingFlow by basePreferences.shownOnboardingFlow.collectAsState() val finishOnboarding: () -> Unit = { basePreferences.shownOnboardingFlow.set(true) navigator.pop() } val restoreSettingKey = stringResource(SettingsDataScreen.restorePreferenceKeyString) BackHandler(enabled = !shownOnboardingFlow) { // Prevent exiting if onboarding hasn't been completed } OnboardingScreen( onComplete = finishOnboarding, onRestoreBackup = { finishOnboarding() SearchableSettings.highlightKey = restoreSettingKey navigator.push(SettingsScreen(SettingsScreen.Destination.DataAndStorage)) }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt ================================================ package eu.kanade.tachiyomi.ui.reader import android.annotation.SuppressLint import android.app.assist.AssistContent import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.graphics.Color import android.graphics.ColorMatrix import android.graphics.ColorMatrixColorFilter import android.graphics.Paint import android.net.Uri import android.os.Build import android.os.Bundle import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.View.LAYER_TYPE_HARDWARE import android.view.WindowManager import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.material3.AlertDialog import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.core.content.getSystemService import androidx.core.graphics.Insets import androidx.core.net.toUri import androidx.core.transition.doOnEnd import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.lifecycle.lifecycleScope import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import com.google.android.material.transition.platform.MaterialContainerTransform import com.hippo.unifile.UniFile import eu.kanade.core.util.ifSourcesLoaded import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.reader.DisplayRefreshHost import eu.kanade.presentation.reader.OrientationSelectDialog import eu.kanade.presentation.reader.ReaderContentOverlay import eu.kanade.presentation.reader.ReaderPageActionsDialog import eu.kanade.presentation.reader.ReaderPageIndicator import eu.kanade.presentation.reader.ReadingModeSelectDialog import eu.kanade.presentation.reader.appbars.ReaderAppBars import eu.kanade.presentation.reader.settings.ReaderSettingsDialog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.coil.TachiyomiImageDecoder import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.databinding.ReaderActivityBinding import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.reader.ReaderViewModel.SetAsCoverResult.AddToLibraryFirst import eu.kanade.tachiyomi.ui.reader.ReaderViewModel.SetAsCoverResult.Error import eu.kanade.tachiyomi.ui.reader.ReaderViewModel.SetAsCoverResult.Success import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator import eu.kanade.tachiyomi.ui.webview.WebViewActivity import eu.kanade.tachiyomi.util.system.isNightMode import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.setComposeContent import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.sample import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.Constants import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.ByteArrayOutputStream class ReaderActivity : BaseActivity() { companion object { fun newIntent(context: Context, mangaId: Long?, chapterId: Long?): Intent { return Intent(context, ReaderActivity::class.java).apply { putExtra("manga", mangaId) putExtra("chapter", chapterId) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) } } } private val readerPreferences = Injekt.get() private val preferences = Injekt.get() lateinit var binding: ReaderActivityBinding val viewModel by viewModels() private var assistUrl: String? = null /** * Configuration at reader level, like background color or forced orientation. */ private var config: ReaderConfig? = null private var menuToggleToast: Toast? = null private var readingModeToast: Toast? = null private val displayRefreshHost = DisplayRefreshHost() private val windowInsetsController by lazy { WindowInsetsControllerCompat(window, window.decorView) } private var loadingIndicator: ReaderProgressIndicator? = null var isScrollingThroughPages = false private set /** * Called when the activity is created. Initializes the presenter and configuration. */ override fun onCreate(savedInstanceState: Bundle?) { registerSecureActivity(this) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { overrideActivityTransition( OVERRIDE_TRANSITION_OPEN, R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit, ) } else { @Suppress("DEPRECATION") overridePendingTransition(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit) } enableEdgeToEdge() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { window.isNavigationBarContrastEnforced = false } windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE super.onCreate(savedInstanceState) binding = ReaderActivityBinding.inflate(layoutInflater) setContentView(binding.root) binding.setComposeOverlay() if (viewModel.needsInit()) { val manga = intent.extras?.getLong("manga", -1) ?: -1L val chapter = intent.extras?.getLong("chapter", -1) ?: -1L if (manga == -1L || chapter == -1L) { finish() return } NotificationReceiver.dismissNotification(this, manga.hashCode(), Notifications.ID_NEW_CHAPTERS) lifecycleScope.launchNonCancellable { val initResult = viewModel.init(manga, chapter) if (!initResult.getOrDefault(false)) { val exception = initResult.exceptionOrNull() ?: IllegalStateException("Unknown err") withUIContext { setInitialChapterError(exception) } } } } config = ReaderConfig() setMenuVisibility(viewModel.state.value.menuVisible) // Finish when incognito mode is disabled preferences.incognitoMode.changes() .drop(1) .onEach { if (!it) finish() } .launchIn(lifecycleScope) viewModel.state .map { it.isLoadingAdjacentChapter } .distinctUntilChanged() .onEach(::setProgressDialog) .launchIn(lifecycleScope) viewModel.state .map { it.manga } .distinctUntilChanged() .filterNotNull() .onEach { updateViewer() } .launchIn(lifecycleScope) viewModel.state .map { it.viewerChapters } .distinctUntilChanged() .filterNotNull() .onEach(::setChapters) .launchIn(lifecycleScope) viewModel.eventFlow .onEach { event -> when (event) { ReaderViewModel.Event.ReloadViewerChapters -> { viewModel.state.value.viewerChapters?.let(::setChapters) } ReaderViewModel.Event.PageChanged -> { displayRefreshHost.flash() } is ReaderViewModel.Event.SetOrientation -> { setOrientation(event.orientation) } is ReaderViewModel.Event.SavedImage -> { onSaveImageResult(event.result) } is ReaderViewModel.Event.ShareImage -> { onShareImageResult(event.uri, event.page) } is ReaderViewModel.Event.CopyImage -> { onCopyImageResult(event.uri) } is ReaderViewModel.Event.SetCoverResult -> { onSetAsCoverResult(event.result) } } } .launchIn(lifecycleScope) } private fun ReaderActivityBinding.setComposeOverlay(): Unit = composeOverlay.setComposeContent { val state by viewModel.state.collectAsState() val showPageNumber by readerPreferences.showPageNumber.collectAsState() val settingsScreenModel = remember { ReaderSettingsScreenModel( readerState = viewModel.state, onChangeReadingMode = viewModel::setMangaReadingMode, onChangeOrientation = viewModel::setMangaOrientationType, ) } Box(modifier = Modifier.fillMaxSize()) { if (!state.menuVisible && showPageNumber) { ReaderPageIndicator( currentPage = state.currentPage, totalPages = state.totalPages, modifier = Modifier .align(Alignment.BottomCenter) .navigationBarsPadding(), ) } ContentOverlay(state = state) AppBars(state = state) } val onDismissRequest = viewModel::closeDialog when (state.dialog) { is ReaderViewModel.Dialog.Loading -> { AlertDialog( onDismissRequest = {}, confirmButton = {}, text = { Row( horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically, ) { CircularProgressIndicator() Text(stringResource(MR.strings.loading)) } }, ) } is ReaderViewModel.Dialog.Settings -> { ReaderSettingsDialog( onDismissRequest = onDismissRequest, onShowMenus = { setMenuVisibility(true) }, onHideMenus = { setMenuVisibility(false) }, screenModel = settingsScreenModel, ) } is ReaderViewModel.Dialog.ReadingModeSelect -> { ReadingModeSelectDialog( onDismissRequest = onDismissRequest, screenModel = settingsScreenModel, onChange = { stringRes -> menuToggleToast?.cancel() if (!readerPreferences.showReadingMode.get()) { menuToggleToast = toast(stringRes) } }, ) } is ReaderViewModel.Dialog.OrientationModeSelect -> { OrientationSelectDialog( onDismissRequest = onDismissRequest, screenModel = settingsScreenModel, onChange = { stringRes -> menuToggleToast?.cancel() menuToggleToast = toast(stringRes) }, ) } is ReaderViewModel.Dialog.PageActions -> { ReaderPageActionsDialog( onDismissRequest = onDismissRequest, onSetAsCover = viewModel::setAsCover, onShare = viewModel::shareImage, onSave = viewModel::saveImage, ) } null -> {} } } /** * Called when the activity is destroyed. Cleans up the viewer, configuration and any view. */ override fun onDestroy() { super.onDestroy() viewModel.state.value.viewer?.destroy() config = null menuToggleToast?.cancel() readingModeToast?.cancel() } override fun onPause() { lifecycleScope.launchNonCancellable { viewModel.updateHistory() } super.onPause() } /** * Set menu visibility again on activity resume to apply immersive mode again if needed. * Helps with rotations. */ override fun onResume() { super.onResume() viewModel.restartReadTimer() setMenuVisibility(viewModel.state.value.menuVisible) } /** * Called when the window focus changes. It sets the menu visibility to the last known state * to apply immersive mode again if needed. */ override fun onWindowFocusChanged(hasFocus: Boolean) { super.onWindowFocusChanged(hasFocus) if (hasFocus) { setMenuVisibility(viewModel.state.value.menuVisible) } } override fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) assistUrl?.let { outContent.webUri = it.toUri() } } /** * Called when the user clicks the back key or the button on the toolbar. The call is * delegated to the presenter. */ override fun finish() { viewModel.onActivityFinish() super.finish() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { overrideActivityTransition( OVERRIDE_TRANSITION_CLOSE, R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit, ) } else { @Suppress("DEPRECATION") overridePendingTransition(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit) } } override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_N) { loadNextChapter() return true } else if (keyCode == KeyEvent.KEYCODE_P) { loadPreviousChapter() return true } return super.onKeyUp(keyCode, event) } /** * Dispatches a key event. If the viewer doesn't handle it, call the default implementation. */ override fun dispatchKeyEvent(event: KeyEvent): Boolean { val handled = viewModel.state.value.viewer?.handleKeyEvent(event) ?: false return handled || super.dispatchKeyEvent(event) } /** * Dispatches a generic motion event. If the viewer doesn't handle it, call the default * implementation. */ override fun dispatchGenericMotionEvent(event: MotionEvent): Boolean { val handled = viewModel.state.value.viewer?.handleGenericMotionEvent(event) ?: false return handled || super.dispatchGenericMotionEvent(event) } @Composable private fun ContentOverlay(state: ReaderViewModel.State) { val flashOnPageChange by readerPreferences.flashOnPageChange.collectAsState() val colorOverlayEnabled by readerPreferences.colorFilter.collectAsState() val colorOverlay by readerPreferences.colorFilterValue.collectAsState() val colorOverlayMode by readerPreferences.colorFilterMode.collectAsState() val colorOverlayBlendMode = remember(colorOverlayMode) { ReaderPreferences.ColorFilterMode.getOrNull(colorOverlayMode)?.second } ReaderContentOverlay( brightness = state.brightnessOverlayValue, color = colorOverlay.takeIf { colorOverlayEnabled }, colorBlendMode = colorOverlayBlendMode, ) if (flashOnPageChange) { DisplayRefreshHost(hostState = displayRefreshHost) } } @Composable fun AppBars(state: ReaderViewModel.State) { if (!ifSourcesLoaded()) { return } val isHttpSource = viewModel.getSource() is HttpSource val cropBorderPaged by readerPreferences.cropBorders.collectAsState() val cropBorderWebtoon by readerPreferences.cropBordersWebtoon.collectAsState() val isPagerType = ReadingMode.isPagerType(viewModel.getMangaReadingMode()) val cropEnabled = if (isPagerType) cropBorderPaged else cropBorderWebtoon ReaderAppBars( visible = state.menuVisible, mangaTitle = state.manga?.title, chapterTitle = state.currentChapter?.chapter?.name, navigateUp = onBackPressedDispatcher::onBackPressed, onClickTopAppBar = ::openMangaScreen, bookmarked = state.bookmarked, onToggleBookmarked = viewModel::toggleChapterBookmark, onOpenInWebView = ::openChapterInWebView.takeIf { isHttpSource }, onOpenInBrowser = ::openChapterInBrowser.takeIf { isHttpSource }, onShare = ::shareChapter.takeIf { isHttpSource }, viewer = state.viewer, onNextChapter = ::loadNextChapter, enabledNext = state.viewerChapters?.nextChapter != null, onPreviousChapter = ::loadPreviousChapter, enabledPrevious = state.viewerChapters?.prevChapter != null, currentPage = state.currentPage, totalPages = state.totalPages, onPageIndexChange = { isScrollingThroughPages = true moveToPageIndex(it) }, readingMode = ReadingMode.fromPreference( viewModel.getMangaReadingMode(resolveDefault = false), ), onClickReadingMode = viewModel::openReadingModeSelectDialog, orientation = ReaderOrientation.fromPreference( viewModel.getMangaOrientation(resolveDefault = false), ), onClickOrientation = viewModel::openOrientationModeSelectDialog, cropEnabled = cropEnabled, onClickCropBorder = { val enabled = viewModel.toggleCropBorders() menuToggleToast?.cancel() menuToggleToast = toast(if (enabled) MR.strings.on else MR.strings.off) }, onClickSettings = viewModel::openSettingsDialog, ) } /** * Sets the visibility of the menu according to [visible]. */ private fun setMenuVisibility(visible: Boolean) { viewModel.showMenus(visible) if (visible) { windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) } else if (readerPreferences.fullscreen.get()) { windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) } } /** * Called from the presenter when a manga is ready. Used to instantiate the appropriate viewer. */ private fun updateViewer() { val prevViewer = viewModel.state.value.viewer val newViewer = ReadingMode.toViewer(viewModel.getMangaReadingMode(), this) if (window.sharedElementEnterTransition is MaterialContainerTransform) { // Wait until transition is complete to avoid crash on API 26 window.sharedElementEnterTransition.doOnEnd { setOrientation(viewModel.getMangaOrientation()) } } else { setOrientation(viewModel.getMangaOrientation()) } // Destroy previous viewer if there was one if (prevViewer != null) { prevViewer.destroy() binding.viewerContainer.removeAllViews() } viewModel.onViewerLoaded(newViewer) updateViewerInset(readerPreferences.fullscreen.get(), readerPreferences.drawUnderCutout.get()) binding.viewerContainer.addView(newViewer.getView()) if (readerPreferences.showReadingMode.get()) { showReadingModeToast(viewModel.getMangaReadingMode()) } loadingIndicator = ReaderProgressIndicator(this) binding.readerContainer.addView(loadingIndicator) startPostponedEnterTransition() } private fun openMangaScreen() { viewModel.manga?.id?.let { id -> startActivity( Intent(this, MainActivity::class.java).apply { action = Constants.SHORTCUT_MANGA putExtra(Constants.MANGA_EXTRA, id) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) }, ) } } private fun openChapterInWebView() { val manga = viewModel.manga ?: return val source = viewModel.getSource() ?: return assistUrl?.let { val intent = WebViewActivity.newIntent(this@ReaderActivity, it, source.id, manga.title) startActivity(intent) } } private fun openChapterInBrowser() { assistUrl?.let { openInBrowser(it.toUri(), forceDefaultBrowser = false) } } private fun shareChapter() { assistUrl?.let { val intent = it.toUri().toShareIntent(this, type = "text/plain") startActivity(intent) } } private fun showReadingModeToast(mode: Int) { try { readingModeToast?.cancel() readingModeToast = toast(ReadingMode.fromPreference(mode).stringRes) } catch (_: ArrayIndexOutOfBoundsException) { logcat(LogPriority.ERROR) { "Unknown reading mode: $mode" } } } /** * Called from the presenter whenever a new [viewerChapters] have been set. It delegates the * method to the current viewer, but also set the subtitle on the toolbar, and * hides or disables the reader prev/next buttons if there's a prev or next chapter */ @SuppressLint("RestrictedApi") private fun setChapters(viewerChapters: ViewerChapters) { binding.readerContainer.removeView(loadingIndicator) viewModel.state.value.viewer?.setChapters(viewerChapters) lifecycleScope.launchIO { viewModel.getChapterUrl()?.let { url -> assistUrl = url } } } /** * Called from the presenter if the initial load couldn't load the pages of the chapter. In * this case the activity is closed and a toast is shown to the user. */ private fun setInitialChapterError(error: Throwable) { logcat(LogPriority.ERROR, error) finish() toast(error.message) } /** * Called from the presenter whenever it's loading the next or previous chapter. It shows or * dismisses a non-cancellable dialog to prevent user interaction according to the value of * [show]. This is only used when the next/previous buttons on the toolbar are clicked; the * other cases are handled with chapter transitions on the viewers and chapter preloading. */ private fun setProgressDialog(show: Boolean) { if (show) { viewModel.showLoadingDialog() } else { viewModel.closeDialog() } } /** * Moves the viewer to the given page [index]. It does nothing if the viewer is null or the * page is not found. */ private fun moveToPageIndex(index: Int) { val viewer = viewModel.state.value.viewer ?: return val currentChapter = viewModel.state.value.currentChapter ?: return val page = currentChapter.pages?.getOrNull(index) ?: return viewer.moveToPage(page) } /** * Tells the presenter to load the next chapter and mark it as active. The progress dialog * should be automatically shown. */ private fun loadNextChapter() { lifecycleScope.launch { viewModel.loadNextChapter() moveToPageIndex(0) } } /** * Tells the presenter to load the previous chapter and mark it as active. The progress dialog * should be automatically shown. */ private fun loadPreviousChapter() { lifecycleScope.launch { viewModel.loadPreviousChapter() moveToPageIndex(0) } } /** * Called from the viewer whenever a [page] is marked as active. It updates the values of the * bottom menu and delegates the change to the presenter. */ fun onPageSelected(page: ReaderPage) { viewModel.onPageSelected(page) } /** * Called from the viewer whenever a [page] is long clicked. A bottom sheet with a list of * actions to perform is shown. */ fun onPageLongTap(page: ReaderPage) { viewModel.openPageDialog(page) } /** * Called from the viewer when the given [chapter] should be preloaded. It should be called when * the viewer is reaching the beginning or end of a chapter or the transition page is active. */ fun requestPreloadChapter(chapter: ReaderChapter) { lifecycleScope.launchIO { viewModel.preload(chapter) } } /** * Called from the viewer to toggle the visibility of the menu. It's implemented on the * viewer because each one implements its own touch and key events. */ fun toggleMenu() { setMenuVisibility(!viewModel.state.value.menuVisible) } /** * Called from the viewer to show the menu. */ fun showMenu() { if (!viewModel.state.value.menuVisible) { setMenuVisibility(true) } } /** * Called from the viewer to hide the menu. */ fun hideMenu() { if (viewModel.state.value.menuVisible) { setMenuVisibility(false) } } /** * Called from the presenter when a page is ready to be shared. It shows Android's default * sharing tool. */ private fun onShareImageResult(uri: Uri, page: ReaderPage) { val manga = viewModel.manga ?: return val chapter = page.chapter.chapter val intent = uri.toShareIntent( context = applicationContext, message = stringResource(MR.strings.share_page_info, manga.title, chapter.name, page.number), ) startActivity(intent) } private fun onCopyImageResult(uri: Uri) { val clipboardManager = applicationContext.getSystemService() ?: return val clipData = ClipData.newUri(applicationContext.contentResolver, "", uri) clipboardManager.setPrimaryClip(clipData) } /** * Called from the presenter when a page is saved or fails. It shows a message or logs the * event depending on the [result]. */ private fun onSaveImageResult(result: ReaderViewModel.SaveImageResult) { when (result) { is ReaderViewModel.SaveImageResult.Success -> { toast(MR.strings.picture_saved) } is ReaderViewModel.SaveImageResult.Error -> { logcat(LogPriority.ERROR, result.error) } } } /** * Called from the presenter when a page is set as cover or fails. It shows a different message * depending on the [result]. */ private fun onSetAsCoverResult(result: ReaderViewModel.SetAsCoverResult) { toast( when (result) { Success -> MR.strings.cover_updated AddToLibraryFirst -> MR.strings.notification_first_add_to_library Error -> MR.strings.notification_cover_update_failed }, ) } /** * Forces the user preferred [orientation] on the activity. */ private fun setOrientation(orientation: Int) { val newOrientation = ReaderOrientation.fromPreference(orientation) if (newOrientation.flag != requestedOrientation) { requestedOrientation = newOrientation.flag } } /** * Updates viewer inset depending on fullscreen reader preferences. */ private fun updateViewerInset(fullscreen: Boolean, drawUnderCutout: Boolean) { if (!::binding.isInitialized) return val view = binding.viewerContainer view.applyInsetsPadding(ViewCompat.getRootWindowInsets(view), fullscreen, drawUnderCutout) ViewCompat.setOnApplyWindowInsetsListener(view) { view, windowInsets -> view.applyInsetsPadding(windowInsets, fullscreen, drawUnderCutout) windowInsets } } private fun View.applyInsetsPadding( windowInsets: WindowInsetsCompat?, fullscreen: Boolean, drawUnderCutout: Boolean, ) { val insets = when { !fullscreen -> windowInsets?.getInsets(WindowInsetsCompat.Type.systemBars()) !drawUnderCutout -> windowInsets?.getInsets(WindowInsetsCompat.Type.displayCutout()) else -> null } ?: Insets.NONE setPadding(insets.left, insets.top, insets.right, insets.bottom) } /** * Class that handles the user preferences of the reader. */ private inner class ReaderConfig { private fun getCombinedPaint(grayscale: Boolean, invertedColors: Boolean): Paint { return Paint().apply { colorFilter = ColorMatrixColorFilter( ColorMatrix().apply { if (grayscale) { setSaturation(0f) } if (invertedColors) { postConcat( ColorMatrix( floatArrayOf( -1f, 0f, 0f, 0f, 255f, 0f, -1f, 0f, 0f, 255f, 0f, 0f, -1f, 0f, 255f, 0f, 0f, 0f, 1f, 0f, ), ), ) } }, ) } } private val grayBackgroundColor = Color.rgb(0x20, 0x21, 0x25) /* * Initializes the reader subscriptions. */ init { readerPreferences.readerTheme.changes() .onEach { theme -> binding.readerContainer.setBackgroundColor( when (theme) { 0 -> Color.WHITE 2 -> grayBackgroundColor 3 -> automaticBackgroundColor() else -> Color.BLACK }, ) } .launchIn(lifecycleScope) preferences.displayProfile.changes() .onEach { setDisplayProfile(it) } .launchIn(lifecycleScope) readerPreferences.keepScreenOn.changes() .onEach(::setKeepScreenOn) .launchIn(lifecycleScope) readerPreferences.customBrightness.changes() .onEach(::setCustomBrightness) .launchIn(lifecycleScope) combine( readerPreferences.grayscale.changes(), readerPreferences.invertedColors.changes(), ) { grayscale, invertedColors -> grayscale to invertedColors } .onEach { (grayscale, invertedColors) -> setLayerPaint(grayscale, invertedColors) } .launchIn(lifecycleScope) combine( readerPreferences.fullscreen.changes(), readerPreferences.drawUnderCutout.changes(), ) { fullscreen, drawUnderCutout -> fullscreen to drawUnderCutout } .onEach { (fullscreen, drawUnderCutout) -> updateViewerInset(fullscreen, drawUnderCutout) } .launchIn(lifecycleScope) } /** * Picks background color for [ReaderActivity] based on light/dark theme preference */ private fun automaticBackgroundColor(): Int { return if (baseContext.isNightMode()) { grayBackgroundColor } else { Color.WHITE } } /** * Sets the display profile to [path]. */ private fun setDisplayProfile(path: String) { val file = UniFile.fromUri(baseContext, path.toUri()) if (file != null && file.exists()) { val inputStream = file.openInputStream() val outputStream = ByteArrayOutputStream() inputStream.use { input -> outputStream.use { output -> input.copyTo(output) } } val data = outputStream.toByteArray() SubsamplingScaleImageView.setDisplayProfile(data) TachiyomiImageDecoder.displayProfile = data } } /** * Sets the keep screen on mode according to [enabled]. */ private fun setKeepScreenOn(enabled: Boolean) { if (enabled) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } else { window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } } /** * Sets the custom brightness overlay according to [enabled]. */ private fun setCustomBrightness(enabled: Boolean) { if (enabled) { readerPreferences.customBrightnessValue.changes() .sample(100) .onEach(::setCustomBrightnessValue) .launchIn(lifecycleScope) } else { setCustomBrightnessValue(0) } } /** * Sets the brightness of the screen. Range is [-75, 100]. * From -75 to -1 a semi-transparent black view is overlaid with the minimum brightness. * From 1 to 100 it sets that value as brightness. * 0 sets system brightness and hides the overlay. */ private fun setCustomBrightnessValue(value: Int) { // Calculate and set reader brightness. val readerBrightness = when { value > 0 -> { value / 100f } value < 0 -> { 0.01f } else -> WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE } window.attributes = window.attributes.apply { screenBrightness = readerBrightness } viewModel.setBrightnessOverlayValue(value) } private fun setLayerPaint(grayscale: Boolean, invertedColors: Boolean) { val paint = if (grayscale || invertedColors) getCombinedPaint(grayscale, invertedColors) else null binding.viewerContainer.setLayerType(LAYER_TYPE_HARDWARE, paint) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt ================================================ package eu.kanade.tachiyomi.ui.reader import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.util.AttributeSet import android.view.MotionEvent import android.view.View import android.view.ViewPropertyAnimator import androidx.core.graphics.withScale import androidx.core.graphics.withTranslation import androidx.core.view.isVisible import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation import tachiyomi.core.common.i18n.stringResource import kotlin.math.abs class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) : View(context, attributeSet) { private var viewPropertyAnimator: ViewPropertyAnimator? = null private var navigation: ViewerNavigation? = null fun setNavigation(navigation: ViewerNavigation, showOnStart: Boolean) { val firstLaunch = this.navigation == null this.navigation = navigation invalidate() if (isVisible || (!showOnStart && firstLaunch) || navigation is DisabledNavigation) { return } viewPropertyAnimator = animate() .alpha(1f) .setDuration(FADE_DURATION) .withStartAction { isVisible = true } .withEndAction { viewPropertyAnimator = null } viewPropertyAnimator?.start() } private val regionPaint = Paint() private val textPaint = Paint().apply { textAlign = Paint.Align.CENTER color = Color.WHITE textSize = 64f } private val textBorderPaint = Paint().apply { textAlign = Paint.Align.CENTER color = Color.BLACK textSize = 64f style = Paint.Style.STROKE strokeWidth = 8f } override fun onDraw(canvas: Canvas) { if (navigation == null) return navigation?.getRegions()?.forEach { region -> val rect = region.rectF // Scale rect from 1f,1f to screen width and height canvas.withScale(width.toFloat(), height.toFloat()) { regionPaint.color = region.type.color drawRect(rect, regionPaint) } // Don't want scale anymore because it messes with drawText // Translate origin to rect start (left, top) canvas.withTranslation(x = (width * rect.left), y = (height * rect.top)) { // Calculate center of rect width on screen val x = width * (abs(rect.left - rect.right) / 2) // Calculate center of rect height on screen val y = height * (abs(rect.top - rect.bottom) / 2) drawText(context.stringResource(region.type.nameRes), x, y, textBorderPaint) drawText(context.stringResource(region.type.nameRes), x, y, textPaint) } } } override fun performClick(): Boolean { super.performClick() if (viewPropertyAnimator == null && isVisible) { viewPropertyAnimator = animate() .alpha(0f) .setDuration(FADE_DURATION) .withEndAction { isVisible = false viewPropertyAnimator = null } viewPropertyAnimator?.start() } return true } override fun onTouchEvent(event: MotionEvent?): Boolean { // Hide overlay if user start tapping or swiping performClick() return super.onTouchEvent(event) } } private const val FADE_DURATION = 1000L ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt ================================================ package eu.kanade.tachiyomi.ui.reader import android.app.Application import android.net.Uri import androidx.annotation.IntRange import androidx.compose.runtime.Immutable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.manga.interactor.SetMangaViewerFlags import eu.kanade.domain.manga.model.readerOrientation import eu.kanade.domain.manga.model.readingMode import eu.kanade.domain.source.interactor.GetIncognitoState import eu.kanade.domain.track.interactor.TrackChapter import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.saver.Image import eu.kanade.tachiyomi.data.saver.ImageSaver import eu.kanade.tachiyomi.data.saver.Location import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader import eu.kanade.tachiyomi.ui.reader.model.InsertPage import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.util.chapter.filterDownloaded import eu.kanade.tachiyomi.util.chapter.removeDuplicates import eu.kanade.tachiyomi.util.editCover import eu.kanade.tachiyomi.util.lang.byteSize import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.cacheImageDir import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.runBlocking import logcat.LogPriority import tachiyomi.core.common.preference.toggle import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.ChapterUpdate import tachiyomi.domain.chapter.service.getChapterSort import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.history.interactor.GetNextChapters import tachiyomi.domain.history.interactor.UpsertHistory import tachiyomi.domain.history.model.HistoryUpdate import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.util.Date /** * Presenter used by the activity to perform background operations. */ class ReaderViewModel @JvmOverloads constructor( private val savedState: SavedStateHandle, private val sourceManager: SourceManager = Injekt.get(), private val downloadManager: DownloadManager = Injekt.get(), private val downloadProvider: DownloadProvider = Injekt.get(), private val imageSaver: ImageSaver = Injekt.get(), val readerPreferences: ReaderPreferences = Injekt.get(), private val basePreferences: BasePreferences = Injekt.get(), private val downloadPreferences: DownloadPreferences = Injekt.get(), private val trackPreferences: TrackPreferences = Injekt.get(), private val trackChapter: TrackChapter = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(), private val getNextChapters: GetNextChapters = Injekt.get(), private val upsertHistory: UpsertHistory = Injekt.get(), private val updateChapter: UpdateChapter = Injekt.get(), private val setMangaViewerFlags: SetMangaViewerFlags = Injekt.get(), private val getIncognitoState: GetIncognitoState = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), ) : ViewModel() { private val mutableState = MutableStateFlow(State()) val state = mutableState.asStateFlow() private val eventChannel = Channel() val eventFlow = eventChannel.receiveAsFlow() /** * The manga loaded in the reader. It can be null when instantiated for a short time. */ val manga: Manga? get() = state.value.manga /** * The chapter id of the currently loaded chapter. Used to restore from process kill. */ private var chapterId = savedState.get("chapter_id") ?: -1L set(value) { savedState["chapter_id"] = value field = value } /** * The visible page index of the currently loaded chapter. Used to restore from process kill. */ private var chapterPageIndex = savedState.get("page_index") ?: -1 set(value) { savedState["page_index"] = value field = value } /** * The chapter loader for the loaded manga. It'll be null until [manga] is set. */ private var loader: ChapterLoader? = null /** * The time the chapter was started reading */ private var chapterReadStartTime: Long? = null private var chapterToDownload: Download? = null private val unfilteredChapterList by lazy { val manga = manga!! runBlocking { getChaptersByMangaId.await(manga.id, applyScanlatorFilter = false) } } /** * Chapter list for the active manga. It's retrieved lazily and should be accessed for the first * time in a background thread to avoid blocking the UI. */ private val chapterList by lazy { val manga = manga!! val chapters = runBlocking { getChaptersByMangaId.await(manga.id, applyScanlatorFilter = true) } val selectedChapter = chapters.find { it.id == chapterId } ?: error("Requested chapter of id $chapterId not found in chapter list") val chaptersForReader = when { (readerPreferences.skipRead.get() || readerPreferences.skipFiltered.get()) -> { val filteredChapters = chapters.filterNot { when { readerPreferences.skipRead.get() && it.read -> true readerPreferences.skipFiltered.get() -> { (manga.unreadFilterRaw == Manga.CHAPTER_SHOW_READ && !it.read) || (manga.unreadFilterRaw == Manga.CHAPTER_SHOW_UNREAD && it.read) || ( manga.downloadedFilterRaw == Manga.CHAPTER_SHOW_DOWNLOADED && !downloadManager.isChapterDownloaded( it.name, it.scanlator, it.url, manga.title, manga.source, ) ) || ( manga.downloadedFilterRaw == Manga.CHAPTER_SHOW_NOT_DOWNLOADED && downloadManager.isChapterDownloaded( it.name, it.scanlator, it.url, manga.title, manga.source, ) ) || (manga.bookmarkedFilterRaw == Manga.CHAPTER_SHOW_BOOKMARKED && !it.bookmark) || (manga.bookmarkedFilterRaw == Manga.CHAPTER_SHOW_NOT_BOOKMARKED && it.bookmark) } else -> false } } if (filteredChapters.any { it.id == chapterId }) { filteredChapters } else { filteredChapters + listOf(selectedChapter) } } else -> chapters } chaptersForReader .sortedWith(getChapterSort(manga, sortDescending = false)) .run { if (readerPreferences.skipDupe.get()) { removeDuplicates(selectedChapter) } else { this } } .run { if (basePreferences.downloadedOnly.get()) { filterDownloaded(manga) } else { this } } .map { it.toDbChapter() } .map(::ReaderChapter) } private val incognitoMode: Boolean by lazy { getIncognitoState.await(manga?.source) } private val downloadAheadAmount = downloadPreferences.autoDownloadWhileReading.get() init { // To save state state.map { it.viewerChapters?.currChapter } .distinctUntilChanged() .filterNotNull() .onEach { currentChapter -> if (chapterPageIndex >= 0) { // Restore from SavedState currentChapter.requestedPage = chapterPageIndex } else if (!currentChapter.chapter.read) { currentChapter.requestedPage = currentChapter.chapter.last_page_read } chapterId = currentChapter.chapter.id!! } .launchIn(viewModelScope) } override fun onCleared() { val currentChapters = state.value.viewerChapters if (currentChapters != null) { currentChapters.unref() chapterToDownload?.let { downloadManager.addDownloadsToStartOfQueue(listOf(it)) } } } /** * Called when the user pressed the back button and is going to leave the reader. Used to * trigger deletion of the downloaded chapters. */ fun onActivityFinish() { deletePendingChapters() } /** * Whether this presenter is initialized yet. */ fun needsInit(): Boolean { return manga == null } /** * Initializes this presenter with the given [mangaId] and [initialChapterId]. This method will * fetch the manga from the database and initialize the initial chapter. */ suspend fun init(mangaId: Long, initialChapterId: Long): Result { if (!needsInit()) return Result.success(true) return withIOContext { try { val manga = getManga.await(mangaId) if (manga != null) { sourceManager.isInitialized.first { it } mutableState.update { it.copy(manga = manga) } if (chapterId == -1L) chapterId = initialChapterId val context = Injekt.get() val source = sourceManager.getOrStub(manga.source) loader = ChapterLoader(context, downloadManager, downloadProvider, manga, source) loadChapter(loader!!, chapterList.first { chapterId == it.chapter.id }) Result.success(true) } else { // Unlikely but okay Result.success(false) } } catch (e: Throwable) { if (e is CancellationException) { throw e } Result.failure(e) } } } /** * Loads the given [chapter] with this [loader] and updates the currently active chapters. * Callers must handle errors. */ private suspend fun loadChapter( loader: ChapterLoader, chapter: ReaderChapter, ): ViewerChapters { loader.loadChapter(chapter) val chapterPos = chapterList.indexOf(chapter) val newChapters = ViewerChapters( chapter, chapterList.getOrNull(chapterPos - 1), chapterList.getOrNull(chapterPos + 1), ) withUIContext { mutableState.update { // Add new references first to avoid unnecessary recycling newChapters.ref() it.viewerChapters?.unref() chapterToDownload = cancelQueuedDownloads(newChapters.currChapter) it.copy( viewerChapters = newChapters, bookmarked = newChapters.currChapter.chapter.bookmark, ) } } return newChapters } /** * Called when the user changed to the given [chapter] when changing pages from the viewer. * It's used only to set this chapter as active. */ private fun loadNewChapter(chapter: ReaderChapter) { val loader = loader ?: return viewModelScope.launchIO { logcat { "Loading ${chapter.chapter.url}" } updateHistory() restartReadTimer() try { loadChapter(loader, chapter) } catch (e: Throwable) { if (e is CancellationException) { throw e } logcat(LogPriority.ERROR, e) } } } /** * Called when the user is going to load the prev/next chapter through the toolbar buttons. */ private suspend fun loadAdjacent(chapter: ReaderChapter) { val loader = loader ?: return logcat { "Loading adjacent ${chapter.chapter.url}" } mutableState.update { it.copy(isLoadingAdjacentChapter = true) } try { withIOContext { loadChapter(loader, chapter) } } catch (e: Throwable) { if (e is CancellationException) { throw e } logcat(LogPriority.ERROR, e) } finally { mutableState.update { it.copy(isLoadingAdjacentChapter = false) } } } /** * Called when the viewers decide it's a good time to preload a [chapter] and improve the UX so * that the user doesn't have to wait too long to continue reading. */ suspend fun preload(chapter: ReaderChapter) { if (chapter.state is ReaderChapter.State.Loaded || chapter.state == ReaderChapter.State.Loading) { return } if (chapter.pageLoader?.isLocal == false) { val manga = manga ?: return val dbChapter = chapter.chapter val isDownloaded = downloadManager.isChapterDownloaded( dbChapter.name, dbChapter.scanlator, dbChapter.url, manga.title, manga.source, skipCache = true, ) if (isDownloaded) { chapter.state = ReaderChapter.State.Wait } } if (chapter.state != ReaderChapter.State.Wait && chapter.state !is ReaderChapter.State.Error) { return } val loader = loader ?: return try { logcat { "Preloading ${chapter.chapter.url}" } loader.loadChapter(chapter) } catch (e: Throwable) { if (e is CancellationException) { throw e } return } eventChannel.trySend(Event.ReloadViewerChapters) } fun onViewerLoaded(viewer: Viewer?) { mutableState.update { it.copy(viewer = viewer) } } /** * Called every time a page changes on the reader. Used to mark the flag of chapters being * read, update tracking services, enqueue downloaded chapter deletion, and updating the active chapter if this * [page]'s chapter is different from the currently active. */ fun onPageSelected(page: ReaderPage) { // InsertPage doesn't change page progress if (page is InsertPage) { return } val selectedChapter = page.chapter val pages = selectedChapter.pages ?: return // Save last page read and mark as read if needed viewModelScope.launchNonCancellable { updateChapterProgress(selectedChapter, page) } if (selectedChapter != getCurrentChapter()) { logcat { "Setting ${selectedChapter.chapter.url} as active" } loadNewChapter(selectedChapter) } val inDownloadRange = page.number.toDouble() / pages.size > 0.25 if (inDownloadRange) { downloadNextChapters() } eventChannel.trySend(Event.PageChanged) } private fun downloadNextChapters() { if (downloadAheadAmount == 0) return val manga = manga ?: return // Only download ahead if current + next chapter is already downloaded too to avoid jank if (getCurrentChapter()?.pageLoader !is DownloadPageLoader) return val nextChapter = state.value.viewerChapters?.nextChapter?.chapter ?: return viewModelScope.launchIO { val isNextChapterDownloaded = downloadManager.isChapterDownloaded( nextChapter.name, nextChapter.scanlator, nextChapter.url, manga.title, manga.source, ) if (!isNextChapterDownloaded) return@launchIO val chaptersToDownload = getNextChapters.await(manga.id, nextChapter.id!!).run { if (readerPreferences.skipDupe.get()) { removeDuplicates(nextChapter.toDomainChapter()!!) } else { this } }.take(downloadAheadAmount) downloadManager.downloadChapters( manga, chaptersToDownload, ) } } /** * Removes [currentChapter] from download queue * if setting is enabled and [currentChapter] is queued for download */ private fun cancelQueuedDownloads(currentChapter: ReaderChapter): Download? { return downloadManager.getQueuedDownloadOrNull(currentChapter.chapter.id!!)?.also { downloadManager.cancelQueuedDownloads(listOf(it)) } } /** * Determines if deleting option is enabled and nth to last chapter actually exists. * If both conditions are satisfied enqueues chapter for delete * @param currentChapter current chapter, which is going to be marked as read. */ private fun deleteChapterIfNeeded(currentChapter: ReaderChapter) { val removeAfterReadSlots = downloadPreferences.removeAfterReadSlots.get() if (removeAfterReadSlots == -1) return // Determine which chapter should be deleted and enqueue val currentChapterPosition = chapterList.indexOf(currentChapter) val chapterToDelete = chapterList.getOrNull(currentChapterPosition - removeAfterReadSlots) // If chapter is completely read, no need to download it chapterToDownload = null if (chapterToDelete != null) { enqueueDeleteReadChapters(chapterToDelete) } } /** * Saves the chapter progress (last read page and whether it's read) * if incognito mode isn't on. */ private suspend fun updateChapterProgress(readerChapter: ReaderChapter, page: Page) { val pageIndex = page.index mutableState.update { it.copy(currentPage = pageIndex + 1) } readerChapter.requestedPage = pageIndex chapterPageIndex = pageIndex if (!incognitoMode && page.status !is Page.State.Error) { readerChapter.chapter.last_page_read = pageIndex if (readerChapter.pages?.lastIndex == pageIndex) { updateChapterProgressOnComplete(readerChapter) } updateChapter.await( ChapterUpdate( id = readerChapter.chapter.id!!, read = readerChapter.chapter.read, lastPageRead = readerChapter.chapter.last_page_read.toLong(), ), ) } } private suspend fun updateChapterProgressOnComplete(readerChapter: ReaderChapter) { readerChapter.chapter.read = true updateTrackChapterRead(readerChapter) deleteChapterIfNeeded(readerChapter) val markDuplicateAsRead = libraryPreferences.markDuplicateReadChapterAsRead.get() .contains(LibraryPreferences.MARK_DUPLICATE_CHAPTER_READ_EXISTING) if (!markDuplicateAsRead) return val duplicateUnreadChapters = unfilteredChapterList .mapNotNull { chapter -> if ( !chapter.read && chapter.isRecognizedNumber && chapter.chapterNumber.toFloat() == readerChapter.chapter.chapter_number ) { ChapterUpdate(id = chapter.id, read = true) } else { null } } updateChapter.awaitAll(duplicateUnreadChapters) } fun restartReadTimer() { chapterReadStartTime = Instant.now().toEpochMilli() } /** * Saves the chapter last read history if incognito mode isn't on. */ suspend fun updateHistory() { getCurrentChapter()?.let { readerChapter -> if (incognitoMode) return@let val chapterId = readerChapter.chapter.id!! val endTime = Date() val sessionReadDuration = chapterReadStartTime?.let { endTime.time - it } ?: 0 upsertHistory.await(HistoryUpdate(chapterId, endTime, sessionReadDuration)) chapterReadStartTime = null } } /** * Called from the activity to load and set the next chapter as active. */ suspend fun loadNextChapter() { val nextChapter = state.value.viewerChapters?.nextChapter ?: return loadAdjacent(nextChapter) } /** * Called from the activity to load and set the previous chapter as active. */ suspend fun loadPreviousChapter() { val prevChapter = state.value.viewerChapters?.prevChapter ?: return loadAdjacent(prevChapter) } /** * Returns the currently active chapter. */ private fun getCurrentChapter(): ReaderChapter? { return state.value.currentChapter } fun getSource() = manga?.source?.let { sourceManager.getOrStub(it) } as? HttpSource fun getChapterUrl(): String? { val sChapter = getCurrentChapter()?.chapter ?: return null val source = getSource() ?: return null return try { source.getChapterUrl(sChapter) } catch (e: Exception) { logcat(LogPriority.ERROR, e) null } } /** * Bookmarks the currently active chapter. */ fun toggleChapterBookmark() { val chapter = getCurrentChapter()?.chapter ?: return val bookmarked = !chapter.bookmark chapter.bookmark = bookmarked viewModelScope.launchNonCancellable { updateChapter.await( ChapterUpdate( id = chapter.id!!, bookmark = bookmarked, ), ) } mutableState.update { it.copy( bookmarked = bookmarked, ) } } /** * Returns the viewer position used by this manga or the default one. */ fun getMangaReadingMode(resolveDefault: Boolean = true): Int { val default = readerPreferences.defaultReadingMode.get() val readingMode = ReadingMode.fromPreference(manga?.readingMode?.toInt()) return when { resolveDefault && readingMode == ReadingMode.DEFAULT -> default else -> manga?.readingMode?.toInt() ?: default } } /** * Updates the viewer position for the open manga. */ fun setMangaReadingMode(readingMode: ReadingMode) { val manga = manga ?: return runBlocking(Dispatchers.IO) { setMangaViewerFlags.awaitSetReadingMode(manga.id, readingMode.flagValue.toLong()) val currChapters = state.value.viewerChapters if (currChapters != null) { // Save current page val currChapter = currChapters.currChapter currChapter.requestedPage = currChapter.chapter.last_page_read mutableState.update { it.copy( manga = getManga.await(manga.id), viewerChapters = currChapters, ) } eventChannel.send(Event.ReloadViewerChapters) } } } /** * Returns the orientation type used by this manga or the default one. */ fun getMangaOrientation(resolveDefault: Boolean = true): Int { val default = readerPreferences.defaultOrientationType.get() val orientation = ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt()) return when { resolveDefault && orientation == ReaderOrientation.DEFAULT -> default else -> manga?.readerOrientation?.toInt() ?: default } } /** * Updates the orientation type for the open manga. */ fun setMangaOrientationType(orientation: ReaderOrientation) { val manga = manga ?: return viewModelScope.launchIO { setMangaViewerFlags.awaitSetOrientation(manga.id, orientation.flagValue.toLong()) val currChapters = state.value.viewerChapters if (currChapters != null) { // Save current page val currChapter = currChapters.currChapter currChapter.requestedPage = currChapter.chapter.last_page_read mutableState.update { it.copy( manga = getManga.await(manga.id), viewerChapters = currChapters, ) } eventChannel.send(Event.SetOrientation(getMangaOrientation())) eventChannel.send(Event.ReloadViewerChapters) } } } fun toggleCropBorders(): Boolean { val isPagerType = ReadingMode.isPagerType(getMangaReadingMode()) return if (isPagerType) { readerPreferences.cropBorders.toggle() } else { readerPreferences.cropBordersWebtoon.toggle() } } /** * Generate a filename for the given [manga] and [page] */ private fun generateFilename( manga: Manga, page: ReaderPage, ): String { val chapter = page.chapter.chapter val filenameSuffix = " - ${page.number}" return DiskUtil.buildValidFilename( "${manga.title} - ${chapter.name}", DiskUtil.MAX_FILE_NAME_BYTES - filenameSuffix.byteSize(), ) + filenameSuffix } fun showMenus(visible: Boolean) { mutableState.update { it.copy(menuVisible = visible) } } fun showLoadingDialog() { mutableState.update { it.copy(dialog = Dialog.Loading) } } fun openReadingModeSelectDialog() { mutableState.update { it.copy(dialog = Dialog.ReadingModeSelect) } } fun openOrientationModeSelectDialog() { mutableState.update { it.copy(dialog = Dialog.OrientationModeSelect) } } fun openPageDialog(page: ReaderPage) { mutableState.update { it.copy(dialog = Dialog.PageActions(page)) } } fun openSettingsDialog() { mutableState.update { it.copy(dialog = Dialog.Settings) } } fun closeDialog() { mutableState.update { it.copy(dialog = null) } } fun setBrightnessOverlayValue(value: Int) { mutableState.update { it.copy(brightnessOverlayValue = value) } } /** * Saves the image of the selected page on the pictures directory and notifies the UI of the result. * There's also a notification to allow sharing the image somewhere else or deleting it. */ fun saveImage() { val page = (state.value.dialog as? Dialog.PageActions)?.page if (page?.status != Page.State.Ready) return val manga = manga ?: return val context = Injekt.get() val notifier = SaveImageNotifier(context) notifier.onClear() val filename = generateFilename(manga, page) // Pictures directory. val relativePath = if (readerPreferences.folderPerManga.get()) { DiskUtil.buildValidFilename( manga.title, ) } else { "" } // Copy file in background. viewModelScope.launchNonCancellable { try { val uri = imageSaver.save( image = Image.Page( inputStream = page.stream!!, name = filename, location = Location.Pictures.create(relativePath), ), ) withUIContext { notifier.onComplete(uri) eventChannel.send(Event.SavedImage(SaveImageResult.Success(uri))) } } catch (e: Throwable) { notifier.onError(e.message) eventChannel.send(Event.SavedImage(SaveImageResult.Error(e))) } } } /** * Shares the image of the selected page and notifies the UI with the path of the file to share. * The image must be first copied to the internal partition because there are many possible * formats it can come from, like a zipped chapter, in which case it's not possible to directly * get a path to the file and it has to be decompressed somewhere first. Only the last shared * image will be kept so it won't be taking lots of internal disk space. */ fun shareImage(copyToClipboard: Boolean) { val page = (state.value.dialog as? Dialog.PageActions)?.page if (page?.status != Page.State.Ready) return val manga = manga ?: return val context = Injekt.get() val destDir = context.cacheImageDir val filename = generateFilename(manga, page) try { viewModelScope.launchNonCancellable { destDir.deleteRecursively() val uri = imageSaver.save( image = Image.Page( inputStream = page.stream!!, name = filename, location = Location.Cache, ), ) eventChannel.send(if (copyToClipboard) Event.CopyImage(uri) else Event.ShareImage(uri, page)) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) } } /** * Sets the image of the selected page as cover and notifies the UI of the result. */ fun setAsCover() { val page = (state.value.dialog as? Dialog.PageActions)?.page if (page?.status != Page.State.Ready) return val manga = manga ?: return val stream = page.stream ?: return viewModelScope.launchNonCancellable { val result = try { manga.editCover(Injekt.get(), stream()) if (manga.isLocal() || manga.favorite) { SetAsCoverResult.Success } else { SetAsCoverResult.AddToLibraryFirst } } catch (e: Exception) { SetAsCoverResult.Error } eventChannel.send(Event.SetCoverResult(result)) } } enum class SetAsCoverResult { Success, AddToLibraryFirst, Error, } sealed interface SaveImageResult { class Success(val uri: Uri) : SaveImageResult class Error(val error: Throwable) : SaveImageResult } /** * Starts the service that updates the last chapter read in sync services. This operation * will run in a background thread and errors are ignored. */ private fun updateTrackChapterRead(readerChapter: ReaderChapter) { if (incognitoMode) return if (!trackPreferences.autoUpdateTrack.get()) return val manga = manga ?: return val context = Injekt.get() viewModelScope.launchNonCancellable { trackChapter.await(context, manga.id, readerChapter.chapter.chapter_number.toDouble()) } } /** * Enqueues this [chapter] to be deleted when [deletePendingChapters] is called. The download * manager handles persisting it across process deaths. */ private fun enqueueDeleteReadChapters(chapter: ReaderChapter) { if (!chapter.chapter.read) return val manga = manga ?: return viewModelScope.launchNonCancellable { downloadManager.enqueueChaptersToDelete(listOf(chapter.chapter.toDomainChapter()!!), manga) } } /** * Deletes all the pending chapters. This operation will run in a background thread and errors * are ignored. */ private fun deletePendingChapters() { viewModelScope.launchNonCancellable { downloadManager.deletePendingChapters() } } @Immutable data class State( val manga: Manga? = null, val viewerChapters: ViewerChapters? = null, val bookmarked: Boolean = false, val isLoadingAdjacentChapter: Boolean = false, val currentPage: Int = -1, /** * Viewer used to display the pages (pager, webtoon, ...). */ val viewer: Viewer? = null, val dialog: Dialog? = null, val menuVisible: Boolean = false, @IntRange(from = -100, to = 100) val brightnessOverlayValue: Int = 0, ) { val currentChapter: ReaderChapter? get() = viewerChapters?.currChapter val totalPages: Int get() = currentChapter?.pages?.size ?: -1 } sealed interface Dialog { data object Loading : Dialog data object Settings : Dialog data object ReadingModeSelect : Dialog data object OrientationModeSelect : Dialog data class PageActions(val page: ReaderPage) : Dialog } sealed interface Event { data object ReloadViewerChapters : Event data object PageChanged : Event data class SetOrientation(val orientation: Int) : Event data class SetCoverResult(val result: SetAsCoverResult) : Event data class SavedImage(val result: SaveImageResult) : Event data class ShareImage(val uri: Uri, val page: ReaderPage) : Event data class CopyImage(val uri: Uri) : Event } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt ================================================ package eu.kanade.tachiyomi.ui.reader import android.content.Context import android.graphics.Bitmap import android.net.Uri import androidx.core.app.NotificationCompat import coil3.asDrawable import coil3.imageLoader import coil3.request.CachePolicy import coil3.request.ImageRequest import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR /** * Class used to show BigPictureStyle notifications */ class SaveImageNotifier(private val context: Context) { private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_COMMON) private val notificationId: Int = Notifications.ID_DOWNLOAD_IMAGE /** * Called when image download/copy is complete. * * @param uri image file containing downloaded page image. */ fun onComplete(uri: Uri) { val request = ImageRequest.Builder(context) .data(uri) .memoryCachePolicy(CachePolicy.DISABLED) .size(720, 1280) .target( onSuccess = { showCompleteNotification(uri, it.asDrawable(context.resources).getBitmapOrNull()) }, onError = { onError(null) }, ) .build() context.imageLoader.enqueue(request) } /** * Clears the notification message. */ fun onClear() { context.cancelNotification(notificationId) } /** * Called on error while downloading image. * @param error string containing error information. */ fun onError(error: String?) { // Create notification with(notificationBuilder) { setContentTitle(context.stringResource(MR.strings.download_notifier_title_error)) setContentText(error ?: context.stringResource(MR.strings.unknown_error)) setSmallIcon(android.R.drawable.ic_menu_report_image) } updateNotification() } private fun showCompleteNotification(uri: Uri, image: Bitmap?) { with(notificationBuilder) { setContentTitle(context.stringResource(MR.strings.picture_saved)) setSmallIcon(R.drawable.ic_photo_24dp) image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) } setLargeIcon(image) setAutoCancel(true) // Clear old actions if they exist clearActions() setContentIntent(NotificationHandler.openImagePendingActivity(context, uri)) // Share action addAction( R.drawable.ic_share_24dp, context.stringResource(MR.strings.action_share), NotificationReceiver.shareImagePendingBroadcast(context, uri), ) updateNotification() } } private fun updateNotification() { // Displays the progress bar on notification context.notify(notificationId, notificationBuilder.build()) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ArchivePageLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder import mihon.core.archive.ArchiveReader import tachiyomi.core.common.util.system.ImageUtil /** * Loader used to load a chapter from an archive file. */ internal class ArchivePageLoader(private val reader: ArchiveReader) : PageLoader() { override var isLocal: Boolean = true override suspend fun getPages(): List = reader.useEntries { entries -> entries .filter { it.isFile && ImageUtil.isImage(it.name) { reader.getInputStream(it.name)!! } } .sortedWith { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) } .mapIndexed { i, entry -> ReaderPage(i).apply { stream = { reader.getInputStream(entry.name)!! } status = Page.State.Ready } } .toList() } override suspend fun loadPage(page: ReaderPage) { check(!isRecycled) } override fun recycle() { super.recycle() reader.close() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import android.content.Context import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import mihon.core.archive.archiveReader import mihon.core.archive.epubReader import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.model.StubSource import tachiyomi.i18n.MR import tachiyomi.source.local.LocalSource import tachiyomi.source.local.io.Format /** * Loader used to retrieve the [PageLoader] for a given chapter. */ class ChapterLoader( private val context: Context, private val downloadManager: DownloadManager, private val downloadProvider: DownloadProvider, private val manga: Manga, private val source: Source, ) { /** * Assigns the chapter's page loader and loads the its pages. Returns immediately if the chapter * is already loaded. */ suspend fun loadChapter(chapter: ReaderChapter) { if (chapterIsReady(chapter)) { return } chapter.state = ReaderChapter.State.Loading withIOContext { logcat { "Loading pages for ${chapter.chapter.name}" } try { val loader = getPageLoader(chapter) chapter.pageLoader = loader val pages = loader.getPages() .onEach { it.chapter = chapter } if (pages.isEmpty()) { throw Exception(context.stringResource(MR.strings.page_list_empty_error)) } // If the chapter is partially read, set the starting page to the last the user read // otherwise use the requested page. if (!chapter.chapter.read) { chapter.requestedPage = chapter.chapter.last_page_read } chapter.state = ReaderChapter.State.Loaded(pages) } catch (e: Throwable) { chapter.state = ReaderChapter.State.Error(e) throw e } } } /** * Checks [chapter] to be loaded based on present pages and loader in addition to state. */ private fun chapterIsReady(chapter: ReaderChapter): Boolean { return chapter.state is ReaderChapter.State.Loaded && chapter.pageLoader != null } /** * Returns the page loader to use for this [chapter]. */ private fun getPageLoader(chapter: ReaderChapter): PageLoader { val dbChapter = chapter.chapter val isDownloaded = downloadManager.isChapterDownloaded( dbChapter.name, dbChapter.scanlator, dbChapter.url, manga.title, manga.source, skipCache = true, ) return when { isDownloaded -> DownloadPageLoader( chapter, manga, source, downloadManager, downloadProvider, ) source is LocalSource -> source.getFormat(chapter.chapter).let { format -> when (format) { is Format.Directory -> DirectoryPageLoader(format.file) is Format.Archive -> ArchivePageLoader(format.file.archiveReader(context)) is Format.Epub -> EpubPageLoader(format.file.epubReader(context)) } } source is HttpSource -> HttpPageLoader(chapter, source) source is StubSource -> error(context.stringResource(MR.strings.source_not_installed, source.toString())) else -> error(context.stringResource(MR.strings.loader_not_implemented_error)) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DirectoryPageLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder import tachiyomi.core.common.util.system.ImageUtil /** * Loader used to load a chapter from a directory given on [file]. */ internal class DirectoryPageLoader(val file: UniFile) : PageLoader() { override var isLocal: Boolean = true override suspend fun getPages(): List { return file.listFiles() ?.filter { !it.isDirectory && ImageUtil.isImage(it.name) { it.openInputStream() } } ?.sortedWith { f1, f2 -> f1.name.orEmpty().compareToCaseInsensitiveNaturalOrder(f2.name.orEmpty()) } ?.mapIndexed { i, file -> val streamFn = { file.openInputStream() } ReaderPage(i).apply { stream = streamFn status = Page.State.Ready } } .orEmpty() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import android.app.Application import android.net.Uri import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import mihon.core.archive.archiveReader import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.injectLazy /** * Loader used to load a chapter from the downloaded chapters. */ internal class DownloadPageLoader( private val chapter: ReaderChapter, private val manga: Manga, private val source: Source, private val downloadManager: DownloadManager, private val downloadProvider: DownloadProvider, ) : PageLoader() { private val context: Application by injectLazy() private var archivePageLoader: ArchivePageLoader? = null override var isLocal: Boolean = true override suspend fun getPages(): List { val dbChapter = chapter.chapter val chapterPath = downloadProvider.findChapterDir( dbChapter.name, dbChapter.scanlator, dbChapter.url, manga.title, source, ) return if (chapterPath?.isFile == true) { getPagesFromArchive(chapterPath) } else { getPagesFromDirectory() } } override fun recycle() { super.recycle() archivePageLoader?.recycle() } private suspend fun getPagesFromArchive(file: UniFile): List { val loader = ArchivePageLoader(file.archiveReader(context)).also { archivePageLoader = it } return loader.getPages() } private fun getPagesFromDirectory(): List { val pages = downloadManager.buildPageList(source, manga, chapter.chapter.toDomainChapter()!!) return pages.map { page -> ReaderPage(page.index, page.url, page.imageUrl) { context.contentResolver.openInputStream(page.uri ?: Uri.EMPTY)!! }.apply { status = Page.State.Ready } } } override suspend fun loadPage(page: ReaderPage) { archivePageLoader?.loadPage(page) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/EpubPageLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import mihon.core.archive.EpubReader /** * Loader used to load a chapter from a .epub file. */ internal class EpubPageLoader(private val reader: EpubReader) : PageLoader() { override var isLocal: Boolean = true override suspend fun getPages(): List { return reader.getImagesFromPages().mapIndexed { i, path -> ReaderPage(i).apply { stream = { reader.getInputStream(path)!! } status = Page.State.Ready } } } override suspend fun loadPage(page: ReaderPage) { check(!isRecycled) } override fun recycle() { super.recycle() reader.close() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runInterruptible import kotlinx.coroutines.suspendCancellableCoroutine import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withIOContext import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.concurrent.PriorityBlockingQueue import kotlin.concurrent.atomics.AtomicInt import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.concurrent.atomics.incrementAndFetch import kotlin.math.min /** * Loader used to load chapters from an online source. */ internal class HttpPageLoader( private val chapter: ReaderChapter, private val source: HttpSource, private val chapterCache: ChapterCache = Injekt.get(), ) : PageLoader() { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) /** * A queue used to manage requests one by one while allowing priorities. */ private val queue = PriorityBlockingQueue() private val preloadSize = 4 init { scope.launchIO { flow { while (true) { emit(runInterruptible { queue.take() }) } } .filter { it.page.status == Page.State.Queue } .collect { internalLoadPage( page = it.page, force = it.priority == PriorityPage.RETRY, ) } } } override var isLocal: Boolean = false /** * Returns the page list for a chapter. It tries to return the page list from the local cache, * otherwise fallbacks to network. */ override suspend fun getPages(): List { val pages = try { chapterCache.getPageListFromCache(chapter.chapter.toDomainChapter()!!) } catch (e: Throwable) { if (e is CancellationException) { throw e } source.getPageList(chapter.chapter) } return pages.mapIndexed { index, page -> // Don't trust sources and use our own indexing ReaderPage(index, page.url, page.imageUrl) } } /** * Loads a page through the queue. Handles re-enqueueing pages if they were evicted from the cache. */ override suspend fun loadPage(page: ReaderPage) = withIOContext { val imageUrl = page.imageUrl // Check if the image has been deleted if (page.status == Page.State.Ready && imageUrl != null && !chapterCache.isImageInCache(imageUrl)) { page.status = Page.State.Queue } // Automatically retry failed pages when subscribed to this page if (page.status is Page.State.Error) { page.status = Page.State.Queue } val queuedPages = mutableListOf() if (page.status == Page.State.Queue) { queuedPages += PriorityPage(page, PriorityPage.DEFAULT).also { queue.offer(it) } } queuedPages += preloadNextPages(page, preloadSize) suspendCancellableCoroutine { continuation -> continuation.invokeOnCancellation { queuedPages.forEach { if (it.page.status == Page.State.Queue) { queue.remove(it) } } } } } /** * Retries a page. This method is only called from user interaction on the viewer. */ override fun retryPage(page: ReaderPage) { if (page.status is Page.State.Error) { page.status = Page.State.Queue } queue.offer(PriorityPage(page, PriorityPage.RETRY)) } override fun recycle() { super.recycle() scope.cancel() queue.clear() // Cache current page list progress for online chapters to allow a faster reopen chapter.pages?.let { pages -> launchIO { try { // Convert to pages without reader information val pagesToSave = pages.map { Page(it.index, it.url, it.imageUrl) } chapterCache.putPageListToCache(chapter.chapter.toDomainChapter()!!, pagesToSave) } catch (e: Throwable) { if (e is CancellationException) { throw e } } } } } /** * Preloads the given [amount] of pages after the [currentPage] with a lower priority. * * @return a list of [PriorityPage] that were added to the [queue] */ private fun preloadNextPages(currentPage: ReaderPage, amount: Int): List { val pageIndex = currentPage.index val pages = currentPage.chapter.pages ?: return emptyList() if (pageIndex == pages.lastIndex) return emptyList() return pages .subList(pageIndex + 1, min(pageIndex + 1 + amount, pages.size)) .mapNotNull { if (it.status == Page.State.Queue) { PriorityPage(it, PriorityPage.ADJACENT).apply { queue.offer(this) } } else { null } } } /** * Loads the page, retrieving the image URL and downloading the image if necessary. * Downloaded images are stored in the chapter cache. * * @param page the page whose source image has to be downloaded. */ private suspend fun internalLoadPage(page: ReaderPage, force: Boolean) { try { if (page.imageUrl.isNullOrEmpty()) { page.status = Page.State.LoadPage page.imageUrl = source.getImageUrl(page) } val imageUrl = page.imageUrl!! if (force || !chapterCache.isImageInCache(imageUrl)) { page.status = Page.State.DownloadImage val imageResponse = source.getImage(page) chapterCache.putImageToCache(imageUrl, imageResponse) } page.stream = { chapterCache.getImageFile(imageUrl).inputStream() } page.status = Page.State.Ready } catch (e: Throwable) { page.status = Page.State.Error(e) if (e is CancellationException) { throw e } } } } /** * Data class used to keep ordering of pages in order to maintain priority. */ @OptIn(ExperimentalAtomicApi::class) private class PriorityPage( val page: ReaderPage, val priority: Int, ) : Comparable { companion object { private val idGenerator = AtomicInt(0) const val RETRY = 2 const val DEFAULT = 1 const val ADJACENT = 0 } private val identifier = idGenerator.incrementAndFetch() override fun compareTo(other: PriorityPage): Int { val p = other.priority.compareTo(priority) return if (p != 0) p else identifier.compareTo(other.identifier) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt ================================================ package eu.kanade.tachiyomi.ui.reader.loader import androidx.annotation.CallSuper import eu.kanade.tachiyomi.ui.reader.model.ReaderPage /** * A loader used to load pages into the reader. Any open resources must be cleaned up when the * method [recycle] is called. */ abstract class PageLoader { /** * Whether this loader has been already recycled. */ var isRecycled = false private set abstract var isLocal: Boolean /** * Returns the list of pages of a chapter. */ abstract suspend fun getPages(): List /** * Loads the page. May also preload other pages. * Progress of the page loading should be followed via [page.statusFlow]. * [loadPage] is not currently guaranteed to complete, so it should be launched asynchronously. */ open suspend fun loadPage(page: ReaderPage) {} /** * Retries the given [page] in case it failed to load. This method only makes sense when an * online source is used. */ open fun retryPage(page: ReaderPage) {} /** * Recycles this loader. Implementations must override this method to clean up any active * resources. */ @CallSuper open fun recycle() { isRecycled = true } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ChapterTransition.kt ================================================ package eu.kanade.tachiyomi.ui.reader.model sealed class ChapterTransition { abstract val from: ReaderChapter abstract val to: ReaderChapter? class Prev( override val from: ReaderChapter, override val to: ReaderChapter?, ) : ChapterTransition() class Next( override val from: ReaderChapter, override val to: ReaderChapter?, ) : ChapterTransition() override fun equals(other: Any?): Boolean { if (this === other) return true if (other !is ChapterTransition) return false if (from == other.from && to == other.to) return true if (from == other.to && to == other.from) return true return false } override fun hashCode(): Int { var result = from.hashCode() result = 31 * result + (to?.hashCode() ?: 0) return result } override fun toString(): String { return "${javaClass.simpleName}(from=${from.chapter.url}, to=${to?.chapter?.url})" } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/InsertPage.kt ================================================ package eu.kanade.tachiyomi.ui.reader.model class InsertPage(val parent: ReaderPage) : ReaderPage(parent.index, parent.url, parent.imageUrl) { override var chapter: ReaderChapter = parent.chapter init { status = State.Ready stream = parent.stream } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ReaderChapter.kt ================================================ package eu.kanade.tachiyomi.ui.reader.model import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.ui.reader.loader.PageLoader import kotlinx.coroutines.flow.MutableStateFlow import tachiyomi.core.common.util.system.logcat data class ReaderChapter(val chapter: Chapter) { val stateFlow = MutableStateFlow(State.Wait) var state: State get() = stateFlow.value set(value) { stateFlow.value = value } val pages: List? get() = (state as? State.Loaded)?.pages var pageLoader: PageLoader? = null var requestedPage: Int = 0 private var references = 0 constructor(chapter: tachiyomi.domain.chapter.model.Chapter) : this(chapter.toDbChapter()) fun ref() { references++ } fun unref() { references-- if (references == 0) { if (pageLoader != null) { logcat { "Recycling chapter ${chapter.name}" } } pageLoader?.recycle() pageLoader = null state = State.Wait } } sealed interface State { data object Wait : State data object Loading : State data class Error(val error: Throwable) : State data class Loaded(val pages: List) : State } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ReaderPage.kt ================================================ package eu.kanade.tachiyomi.ui.reader.model import eu.kanade.tachiyomi.source.model.Page import java.io.InputStream open class ReaderPage( index: Int, url: String = "", imageUrl: String? = null, var stream: (() -> InputStream)? = null, ) : Page(index, url, imageUrl, null) { open lateinit var chapter: ReaderChapter } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ViewerChapters.kt ================================================ package eu.kanade.tachiyomi.ui.reader.model data class ViewerChapters( val currChapter: ReaderChapter, val prevChapter: ReaderChapter?, val nextChapter: ReaderChapter?, ) { fun ref() { currChapter.ref() prevChapter?.ref() nextChapter?.ref() } fun unref() { currChapter.unref() prevChapter?.unref() nextChapter?.unref() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.setting import android.content.pm.ActivityInfo import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ScreenLockLandscape import androidx.compose.material.icons.filled.ScreenLockPortrait import androidx.compose.material.icons.filled.ScreenRotation import androidx.compose.material.icons.filled.StayCurrentLandscape import androidx.compose.material.icons.filled.StayCurrentPortrait import androidx.compose.ui.graphics.vector.ImageVector import dev.icerock.moko.resources.StringResource import tachiyomi.i18n.MR enum class ReaderOrientation( val flag: Int, val stringRes: StringResource, val icon: ImageVector, val flagValue: Int, ) { DEFAULT( ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, MR.strings.label_default, Icons.Default.ScreenRotation, 0x00000000, ), FREE( ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, MR.strings.rotation_free, Icons.Default.ScreenRotation, 0x00000008, ), PORTRAIT( ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT, MR.strings.rotation_portrait, Icons.Default.StayCurrentPortrait, 0x00000010, ), LANDSCAPE( ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, MR.strings.rotation_landscape, Icons.Default.StayCurrentLandscape, 0x00000018, ), LOCKED_PORTRAIT( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, MR.strings.rotation_force_portrait, Icons.Default.ScreenLockPortrait, 0x00000020, ), LOCKED_LANDSCAPE( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, MR.strings.rotation_force_landscape, Icons.Default.ScreenLockLandscape, 0x00000028, ), REVERSE_PORTRAIT( ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT, MR.strings.rotation_reverse_portrait, Icons.Default.StayCurrentPortrait, 0x00000030, ), ; companion object { const val MASK = 0x00000038 fun fromPreference(preference: Int?): ReaderOrientation = entries.find { it.flagValue == preference } ?: DEFAULT } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt ================================================ package eu.kanade.tachiyomi.ui.reader.setting import android.os.Build import androidx.compose.ui.graphics.BlendMode import dev.icerock.moko.resources.StringResource import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import tachiyomi.i18n.MR class ReaderPreferences( preferenceStore: PreferenceStore, ) { // region General val pageTransitions: Preference = preferenceStore.getBoolean("pref_enable_transitions_key", true) val flashOnPageChange: Preference = preferenceStore.getBoolean("pref_reader_flash", false) val flashDurationMillis: Preference = preferenceStore.getInt("pref_reader_flash_duration", MILLI_CONVERSION) val flashPageInterval: Preference = preferenceStore.getInt("pref_reader_flash_interval", 1) val flashColor: Preference = preferenceStore.getEnum("pref_reader_flash_mode", FlashColor.BLACK) val doubleTapAnimSpeed: Preference = preferenceStore.getInt("pref_double_tap_anim_speed", 500) val showPageNumber: Preference = preferenceStore.getBoolean("pref_show_page_number_key", true) val showReadingMode: Preference = preferenceStore.getBoolean("pref_show_reading_mode", true) val fullscreen: Preference = preferenceStore.getBoolean("fullscreen", true) val drawUnderCutout: Preference = preferenceStore.getBoolean("cutout_short", true) val keepScreenOn: Preference = preferenceStore.getBoolean("pref_keep_screen_on_key", false) val defaultReadingMode: Preference = preferenceStore.getInt( "pref_default_reading_mode_key", ReadingMode.RIGHT_TO_LEFT.flagValue, ) val defaultOrientationType: Preference = preferenceStore.getInt( "pref_default_orientation_type_key", ReaderOrientation.FREE.flagValue, ) val webtoonDoubleTapZoomEnabled: Preference = preferenceStore.getBoolean( "pref_enable_double_tap_zoom_webtoon", true, ) val imageScaleType: Preference = preferenceStore.getInt("pref_image_scale_type_key", 1) val zoomStart: Preference = preferenceStore.getInt("pref_zoom_start_key", 1) val readerTheme: Preference = preferenceStore.getInt("pref_reader_theme_key", 1) val alwaysShowChapterTransition: Preference = preferenceStore.getBoolean( "always_show_chapter_transition", true, ) val cropBorders: Preference = preferenceStore.getBoolean("crop_borders", false) val navigateToPan: Preference = preferenceStore.getBoolean("navigate_pan", true) val landscapeZoom: Preference = preferenceStore.getBoolean("landscape_zoom", true) val cropBordersWebtoon: Preference = preferenceStore.getBoolean("crop_borders_webtoon", false) val webtoonSidePadding: Preference = preferenceStore.getInt("webtoon_side_padding", WEBTOON_PADDING_MIN) val readerHideThreshold: Preference = preferenceStore.getEnum( "reader_hide_threshold", ReaderHideThreshold.LOW, ) val folderPerManga: Preference = preferenceStore.getBoolean("create_folder_per_manga", false) val skipRead: Preference = preferenceStore.getBoolean("skip_read", false) val skipFiltered: Preference = preferenceStore.getBoolean("skip_filtered", true) val skipDupe: Preference = preferenceStore.getBoolean("skip_dupe", false) val webtoonDisableZoomOut: Preference = preferenceStore.getBoolean("webtoon_disable_zoom_out", false) // endregion // region Split two-page spread val dualPageSplitPaged: Preference = preferenceStore.getBoolean("pref_dual_page_split", false) val dualPageInvertPaged: Preference = preferenceStore.getBoolean("pref_dual_page_invert", false) val dualPageSplitWebtoon: Preference = preferenceStore.getBoolean("pref_dual_page_split_webtoon", false) val dualPageInvertWebtoon: Preference = preferenceStore.getBoolean("pref_dual_page_invert_webtoon", false) val dualPageRotateToFit: Preference = preferenceStore.getBoolean("pref_dual_page_rotate", false) val dualPageRotateToFitInvert: Preference = preferenceStore.getBoolean( "pref_dual_page_rotate_invert", false, ) val dualPageRotateToFitWebtoon: Preference = preferenceStore.getBoolean( "pref_dual_page_rotate_webtoon", false, ) val dualPageRotateToFitInvertWebtoon: Preference = preferenceStore.getBoolean( "pref_dual_page_rotate_invert_webtoon", false, ) // endregion // region Color filter val customBrightness: Preference = preferenceStore.getBoolean("pref_custom_brightness_key", false) val customBrightnessValue: Preference = preferenceStore.getInt("custom_brightness_value", 0) val colorFilter: Preference = preferenceStore.getBoolean("pref_color_filter_key", false) val colorFilterValue: Preference = preferenceStore.getInt("color_filter_value", 0) val colorFilterMode: Preference = preferenceStore.getInt("color_filter_mode", 0) val grayscale: Preference = preferenceStore.getBoolean("pref_grayscale", false) val invertedColors: Preference = preferenceStore.getBoolean("pref_inverted_colors", false) // endregion // region Controls val readWithLongTap: Preference = preferenceStore.getBoolean("reader_long_tap", true) val readWithVolumeKeys: Preference = preferenceStore.getBoolean("reader_volume_keys", false) val readWithVolumeKeysInverted: Preference = preferenceStore.getBoolean( "reader_volume_keys_inverted", false, ) val navigationModePager: Preference = preferenceStore.getInt("reader_navigation_mode_pager", 0) val navigationModeWebtoon: Preference = preferenceStore.getInt("reader_navigation_mode_webtoon", 0) val pagerNavInverted: Preference = preferenceStore.getEnum( "reader_tapping_inverted", TappingInvertMode.NONE, ) val webtoonNavInverted: Preference = preferenceStore.getEnum( "reader_tapping_inverted_webtoon", TappingInvertMode.NONE, ) val showNavigationOverlayNewUser: Preference = preferenceStore.getBoolean( "reader_navigation_overlay_new_user", true, ) val showNavigationOverlayOnStart: Preference = preferenceStore.getBoolean( "reader_navigation_overlay_on_start", false, ) // endregion enum class FlashColor { BLACK, WHITE, WHITE_BLACK, } enum class TappingInvertMode( val titleRes: StringResource, val shouldInvertHorizontal: Boolean = false, val shouldInvertVertical: Boolean = false, ) { NONE(MR.strings.tapping_inverted_none), HORIZONTAL(MR.strings.tapping_inverted_horizontal, shouldInvertHorizontal = true), VERTICAL(MR.strings.tapping_inverted_vertical, shouldInvertVertical = true), BOTH(MR.strings.tapping_inverted_both, shouldInvertHorizontal = true, shouldInvertVertical = true), } enum class ReaderHideThreshold(val threshold: Int) { HIGHEST(5), HIGH(13), LOW(31), LOWEST(47), } companion object { const val WEBTOON_PADDING_MIN = 0 const val WEBTOON_PADDING_MAX = 25 const val MILLI_CONVERSION = 100 val TapZones = listOf( MR.strings.label_default, MR.strings.l_nav, MR.strings.kindlish_nav, MR.strings.edge_nav, MR.strings.right_and_left_nav, MR.strings.disabled_nav, ) val ImageScaleType = listOf( MR.strings.scale_type_fit_screen, MR.strings.scale_type_stretch, MR.strings.scale_type_fit_width, MR.strings.scale_type_fit_height, MR.strings.scale_type_original_size, MR.strings.scale_type_smart_fit, ) val ZoomStart = listOf( MR.strings.zoom_start_automatic, MR.strings.zoom_start_left, MR.strings.zoom_start_right, MR.strings.zoom_start_center, ) val ColorFilterMode = buildList { addAll( listOf( MR.strings.label_default to BlendMode.SrcOver, MR.strings.filter_mode_multiply to BlendMode.Modulate, MR.strings.filter_mode_screen to BlendMode.Screen, ), ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { addAll( listOf( MR.strings.filter_mode_overlay to BlendMode.Overlay, MR.strings.filter_mode_lighten to BlendMode.Lighten, MR.strings.filter_mode_darken to BlendMode.Darken, ), ) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.reader.setting import cafe.adriel.voyager.core.model.ScreenModel import eu.kanade.presentation.util.ioCoroutineScope import eu.kanade.tachiyomi.ui.reader.ReaderViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class ReaderSettingsScreenModel( readerState: StateFlow, val onChangeReadingMode: (ReadingMode) -> Unit, val onChangeOrientation: (ReaderOrientation) -> Unit, val preferences: ReaderPreferences = Injekt.get(), ) : ScreenModel { val viewerFlow = readerState .map { it.viewer } .distinctUntilChanged() .stateIn(ioCoroutineScope, SharingStarted.Lazily, null) val mangaFlow = readerState .map { it.manga } .distinctUntilChanged() .stateIn(ioCoroutineScope, SharingStarted.Lazily, null) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingMode.kt ================================================ package eu.kanade.tachiyomi.ui.reader.setting import androidx.annotation.DrawableRes import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.L2RPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer import tachiyomi.i18n.MR enum class ReadingMode( val stringRes: StringResource, @DrawableRes val iconRes: Int, val flagValue: Int, val direction: Direction? = null, val type: ViewerType? = null, ) { DEFAULT(MR.strings.label_default, R.drawable.ic_reader_default_24dp, 0x00000000), LEFT_TO_RIGHT( MR.strings.left_to_right_viewer, R.drawable.ic_reader_ltr_24dp, 0x00000001, Direction.Horizontal, ViewerType.Pager, ), RIGHT_TO_LEFT( MR.strings.right_to_left_viewer, R.drawable.ic_reader_rtl_24dp, 0x00000002, Direction.Horizontal, ViewerType.Pager, ), VERTICAL( MR.strings.vertical_viewer, R.drawable.ic_reader_vertical_24dp, 0x00000003, Direction.Vertical, ViewerType.Pager, ), WEBTOON( MR.strings.webtoon_viewer, R.drawable.ic_reader_webtoon_24dp, 0x00000004, Direction.Vertical, ViewerType.Webtoon, ), CONTINUOUS_VERTICAL( MR.strings.vertical_plus_viewer, R.drawable.ic_reader_continuous_vertical_24dp, 0x00000005, Direction.Vertical, ViewerType.Webtoon, ), ; companion object { const val MASK = 0x00000007 fun fromPreference(preference: Int?): ReadingMode = entries.find { it.flagValue == preference } ?: DEFAULT fun isPagerType(preference: Int): Boolean { val mode = fromPreference(preference) return mode.type is ViewerType.Pager } fun toViewer(preference: Int?, activity: ReaderActivity): Viewer { return when (fromPreference(preference)) { LEFT_TO_RIGHT -> L2RPagerViewer(activity) RIGHT_TO_LEFT -> R2LPagerViewer(activity) VERTICAL -> VerticalPagerViewer(activity) WEBTOON -> WebtoonViewer(activity) CONTINUOUS_VERTICAL -> WebtoonViewer(activity, isContinuous = false) DEFAULT -> throw IllegalStateException("Preference value must be resolved: $preference") } } } sealed interface Direction { data object Horizontal : Direction data object Vertical : Direction } sealed interface ViewerType { data object Pager : ViewerType data object Webtoon : ViewerType } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/GestureDetectorWithLongTap.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.content.Context import android.os.Handler import android.os.Looper import android.view.GestureDetector import android.view.MotionEvent import android.view.ViewConfiguration import kotlin.math.abs /** * A custom gesture detector that also implements an on long tap confirmed, because the built-in * one conflicts with the quick scale feature. */ open class GestureDetectorWithLongTap( context: Context, listener: Listener, ) : GestureDetector(context, listener) { private val handler = Handler(Looper.getMainLooper()) private val slop = ViewConfiguration.get(context).scaledTouchSlop private val longTapTime = ViewConfiguration.getLongPressTimeout().toLong() private val doubleTapTime = ViewConfiguration.getDoubleTapTimeout().toLong() private var downX = 0f private var downY = 0f private var lastUp = 0L private var lastDownEvent: MotionEvent? = null /** * Runnable to execute when a long tap is confirmed. */ private val longTapFn = Runnable { listener.onLongTapConfirmed(lastDownEvent!!) } override fun onTouchEvent(ev: MotionEvent): Boolean { when (ev.actionMasked) { MotionEvent.ACTION_DOWN -> { lastDownEvent?.recycle() lastDownEvent = MotionEvent.obtain(ev) // This is the key difference with the built-in detector. We have to ignore the // event if the last up and current down are too close in time (double tap). if (ev.downTime - lastUp > doubleTapTime) { downX = ev.x downY = ev.y handler.postDelayed(longTapFn, longTapTime) } } MotionEvent.ACTION_MOVE -> { if (abs(ev.x - downX) > slop || abs(ev.y - downY) > slop) { handler.removeCallbacks(longTapFn) } } MotionEvent.ACTION_UP -> { lastUp = ev.eventTime handler.removeCallbacks(longTapFn) } MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_POINTER_DOWN -> { handler.removeCallbacks(longTapFn) } } return super.onTouchEvent(ev) } /** * Custom listener to also include a long tap confirmed */ open class Listener : SimpleOnGestureListener() { /** * Notified when a long tap occurs with the initial on down [ev] that triggered it. */ open fun onLongTapConfirmed(ev: MotionEvent) { } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/MissingChapters.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import tachiyomi.domain.chapter.service.calculateChapterGap as domainCalculateChapterGap fun calculateChapterGap(higherReaderChapter: ReaderChapter?, lowerReaderChapter: ReaderChapter?): Int { return domainCalculateChapterGap( higherReaderChapter?.chapter?.toDomainChapter(), lowerReaderChapter?.chapter?.toDomainChapter(), ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderButton.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import com.google.android.material.button.MaterialButton import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer /** * A button class to be used by child views of the pager viewer. All tap gestures are handled by * the pager, but this class disables that behavior to allow clickable buttons. */ class ReaderButton @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.materialButtonStyle, ) : MaterialButton(context, attrs, defStyleAttr) { var viewer: PagerViewer? = null override fun onTouchEvent(event: MotionEvent): Boolean { viewer?.pager?.setGestureDetectorEnabled(false) if (event.actionMasked == MotionEvent.ACTION_UP) { viewer?.pager?.setGestureDetectorEnabled(true) } return super.onTouchEvent(event) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.content.Context import android.graphics.PointF import android.graphics.RectF import android.graphics.drawable.Animatable import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.util.AttributeSet import android.view.GestureDetector import android.view.MotionEvent import android.view.View import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.widget.FrameLayout import androidx.annotation.AttrRes import androidx.annotation.CallSuper import androidx.annotation.StyleRes import androidx.appcompat.widget.AppCompatImageView import androidx.core.os.postDelayed import androidx.core.view.isVisible import coil3.BitmapImage import coil3.asDrawable import coil3.dispose import coil3.imageLoader import coil3.request.CachePolicy import coil3.request.ImageRequest import coil3.request.crossfade import coil3.size.Precision import coil3.size.ViewSizeResolver import com.davemorrissey.labs.subscaleview.ImageSource import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.EASE_IN_OUT_QUAD import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.EASE_OUT_QUAD import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE import com.github.chrisbanes.photoview.PhotoView import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.data.coil.cropBorders import eu.kanade.tachiyomi.data.coil.customDecoder import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonSubsamplingImageView import eu.kanade.tachiyomi.util.system.animatorDurationScale import eu.kanade.tachiyomi.util.view.isVisibleOnScreen import okio.BufferedSource import tachiyomi.core.common.util.system.ImageUtil import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * A wrapper view for showing page image. * * Animated image will be drawn by [PhotoView] while [SubsamplingScaleImageView] will take non-animated image. * * @param isWebtoon if true, [WebtoonSubsamplingImageView] will be used instead of [SubsamplingScaleImageView] * and [AppCompatImageView] will be used instead of [PhotoView] */ open class ReaderPageImageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttrs: Int = 0, @StyleRes defStyleRes: Int = 0, private val isWebtoon: Boolean = false, ) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes) { private val alwaysDecodeLongStripWithSSIV by lazy { Injekt.get().alwaysDecodeLongStripWithSSIV.get() } private var pageView: View? = null private var config: Config? = null var onImageLoaded: (() -> Unit)? = null var onImageLoadError: ((Throwable?) -> Unit)? = null var onScaleChanged: ((newScale: Float) -> Unit)? = null var onViewClicked: (() -> Unit)? = null /** * For automatic background. Will be set as background color when [onImageLoaded] is called. */ var pageBackground: Drawable? = null @CallSuper open fun onImageLoaded() { onImageLoaded?.invoke() background = pageBackground } @CallSuper open fun onImageLoadError(error: Throwable?) { onImageLoadError?.invoke(error) } @CallSuper open fun onScaleChanged(newScale: Float) { onScaleChanged?.invoke(newScale) } @CallSuper open fun onViewClicked() { onViewClicked?.invoke() } open fun onPageSelected(forward: Boolean) { with(pageView as? SubsamplingScaleImageView) { if (this == null) return if (isReady) { landscapeZoom(forward) } else { setOnImageEventListener( object : SubsamplingScaleImageView.DefaultOnImageEventListener() { override fun onReady() { setupZoom(config) landscapeZoom(forward) this@ReaderPageImageView.onImageLoaded() } override fun onImageLoadError(e: Exception) { onImageLoadError(e) } }, ) } } } private fun SubsamplingScaleImageView.landscapeZoom(forward: Boolean) { if ( config != null && config!!.landscapeZoom && config!!.minimumScaleType == SCALE_TYPE_CENTER_INSIDE && sWidth > sHeight && scale == minScale ) { handler?.postDelayed(500) { val point = when (config!!.zoomStartPosition) { ZoomStartPosition.LEFT -> if (forward) PointF(0F, 0F) else PointF(sWidth.toFloat(), 0F) ZoomStartPosition.RIGHT -> if (forward) PointF(sWidth.toFloat(), 0F) else PointF(0F, 0F) ZoomStartPosition.CENTER -> center } val targetScale = height.toFloat() / sHeight.toFloat() animateScaleAndCenter(targetScale, point)!! .withDuration(500) .withEasing(EASE_IN_OUT_QUAD) .withInterruptible(true) .start() } } } fun setImage(drawable: Drawable, config: Config) { this.config = config if (drawable is Animatable) { prepareAnimatedImageView() setAnimatedImage(drawable, config) } else { prepareNonAnimatedImageView() setNonAnimatedImage(drawable, config) } } fun setImage(source: BufferedSource, isAnimated: Boolean, config: Config) { this.config = config if (isAnimated) { prepareAnimatedImageView() setAnimatedImage(source, config) } else { prepareNonAnimatedImageView() setNonAnimatedImage(source, config) } } fun recycle() = pageView?.let { when (it) { is SubsamplingScaleImageView -> it.recycle() is AppCompatImageView -> it.dispose() } it.isVisible = false } /** * Check if the image can be panned to the left */ fun canPanLeft(): Boolean = canPan { it.left } /** * Check if the image can be panned to the right */ fun canPanRight(): Boolean = canPan { it.right } /** * Check whether the image can be panned. * @param fn a function that returns the direction to check for */ private fun canPan(fn: (RectF) -> Float): Boolean { (pageView as? SubsamplingScaleImageView)?.let { view -> RectF().let { view.getPanRemaining(it) return fn(it) > 1 } } return false } /** * Pans the image to the left by a screen's width worth. */ fun panLeft() { pan { center, view -> center.also { it.x -= view.width / view.scale } } } /** * Pans the image to the right by a screen's width worth. */ fun panRight() { pan { center, view -> center.also { it.x += view.width / view.scale } } } /** * Pans the image. * @param fn a function that computes the new center of the image */ private fun pan(fn: (PointF, SubsamplingScaleImageView) -> PointF) { (pageView as? SubsamplingScaleImageView)?.let { view -> val target = fn(view.center ?: return, view) view.animateCenter(target)!! .withEasing(EASE_OUT_QUAD) .withDuration(250) .withInterruptible(true) .start() } } private fun prepareNonAnimatedImageView() { if (pageView is SubsamplingScaleImageView) return removeView(pageView) pageView = if (isWebtoon) { WebtoonSubsamplingImageView(context) } else { SubsamplingScaleImageView(context) }.apply { setMaxTileSize(ImageUtil.hardwareBitmapThreshold) setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER) setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE) setMinimumTileDpi(180) setOnStateChangedListener( object : SubsamplingScaleImageView.OnStateChangedListener { override fun onScaleChanged(newScale: Float, origin: Int) { this@ReaderPageImageView.onScaleChanged(newScale) } override fun onCenterChanged(newCenter: PointF?, origin: Int) { // Not used } }, ) setOnClickListener { this@ReaderPageImageView.onViewClicked() } } addView(pageView, MATCH_PARENT, MATCH_PARENT) } private fun SubsamplingScaleImageView.setupZoom(config: Config?) { // 5x zoom maxScale = scale * MAX_ZOOM_SCALE setDoubleTapZoomScale(scale * 2) when (config?.zoomStartPosition) { ZoomStartPosition.LEFT -> setScaleAndCenter(scale, PointF(0F, 0F)) ZoomStartPosition.RIGHT -> setScaleAndCenter(scale, PointF(sWidth.toFloat(), 0F)) ZoomStartPosition.CENTER -> setScaleAndCenter(scale, center) null -> {} } } private fun setNonAnimatedImage( data: Any, config: Config, ) = (pageView as? SubsamplingScaleImageView)?.apply { setDoubleTapZoomDuration(config.zoomDuration.getSystemScaledDuration()) setMinimumScaleType(config.minimumScaleType) setMinimumDpi(1) // Just so that very small image will be fit for initial load setCropBorders(config.cropBorders) setOnImageEventListener( object : SubsamplingScaleImageView.DefaultOnImageEventListener() { override fun onReady() { setupZoom(config) if (isVisibleOnScreen()) landscapeZoom(true) this@ReaderPageImageView.onImageLoaded() } override fun onImageLoadError(e: Exception) { this@ReaderPageImageView.onImageLoadError(e) } }, ) when (data) { is BitmapDrawable -> { setImage(ImageSource.bitmap(data.bitmap)) isVisible = true } is BufferedSource -> { if (!isWebtoon || alwaysDecodeLongStripWithSSIV) { setHardwareConfig(ImageUtil.canUseHardwareBitmap(data)) setImage(ImageSource.inputStream(data.inputStream())) isVisible = true return@apply } ImageRequest.Builder(context) .data(data) .memoryCachePolicy(CachePolicy.DISABLED) .diskCachePolicy(CachePolicy.DISABLED) .target( onSuccess = { result -> val image = result as BitmapImage setImage(ImageSource.bitmap(image.bitmap)) isVisible = true }, ) .listener( onError = { _, result -> onImageLoadError(result.throwable) }, ) .size(ViewSizeResolver(this@ReaderPageImageView)) .precision(Precision.INEXACT) .cropBorders(config.cropBorders) .customDecoder(true) .crossfade(false) .build() .let(context.imageLoader::enqueue) } else -> { throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}") } } } private fun prepareAnimatedImageView() { if (pageView is AppCompatImageView) return removeView(pageView) pageView = if (isWebtoon) { AppCompatImageView(context) } else { PhotoView(context) }.apply { adjustViewBounds = true if (this is PhotoView) { setScaleLevels(1F, 2F, MAX_ZOOM_SCALE) // Force 2 scale levels on double tap setOnDoubleTapListener( object : GestureDetector.SimpleOnGestureListener() { override fun onDoubleTap(e: MotionEvent): Boolean { if (scale > 1F) { setScale(1F, e.x, e.y, true) } else { setScale(2F, e.x, e.y, true) } return true } override fun onSingleTapConfirmed(e: MotionEvent): Boolean { this@ReaderPageImageView.onViewClicked() return super.onSingleTapConfirmed(e) } }, ) setOnScaleChangeListener { _, _, _ -> this@ReaderPageImageView.onScaleChanged(scale) } } } addView(pageView, MATCH_PARENT, MATCH_PARENT) } private fun setAnimatedImage( data: Any, config: Config, ) = (pageView as? AppCompatImageView)?.apply { if (this is PhotoView) { setZoomTransitionDuration(config.zoomDuration.getSystemScaledDuration()) } val request = ImageRequest.Builder(context) .data(data) .memoryCachePolicy(CachePolicy.DISABLED) .diskCachePolicy(CachePolicy.DISABLED) .target( onSuccess = { result -> val drawable = result.asDrawable(context.resources) setImageDrawable(drawable) (drawable as? Animatable)?.start() isVisible = true this@ReaderPageImageView.onImageLoaded() }, ) .listener( onError = { _, result -> onImageLoadError(result.throwable) }, ) .crossfade(false) .build() context.imageLoader.enqueue(request) } private fun Int.getSystemScaledDuration(): Int { return (this * context.animatorDurationScale).toInt().coerceAtLeast(1) } /** * All of the config except [zoomDuration] will only be used for non-animated image. */ data class Config( val zoomDuration: Int, val minimumScaleType: Int = SCALE_TYPE_CENTER_INSIDE, val cropBorders: Boolean = false, val zoomStartPosition: ZoomStartPosition = ZoomStartPosition.CENTER, val landscapeZoom: Boolean = false, ) enum class ZoomStartPosition { LEFT, CENTER, RIGHT, } } private const val MAX_ZOOM_SCALE = 5F ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderProgressIndicator.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.content.Context import android.util.AttributeSet import android.view.Gravity import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.FrameLayout import androidx.annotation.IntRange import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.platform.AbstractComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.core.view.isVisible import com.google.android.material.progressindicator.CircularProgressIndicator import eu.kanade.presentation.theme.TachiyomiTheme import tachiyomi.presentation.core.components.CombinedCircularProgressIndicator /** * A wrapper for [CircularProgressIndicator] that always rotates. * * By always rotating we give the feedback to the user that the application isn't 'stuck'. */ class ReaderProgressIndicator @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, ) : AbstractComposeView(context, attrs, defStyleAttr) { init { layoutParams = FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER) setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool) } private var progress by mutableFloatStateOf(0f) @Composable override fun Content() { TachiyomiTheme { CombinedCircularProgressIndicator(progress = { progress }) } } fun show() { isVisible = true } fun hide() { isVisible = false } fun setProgress(@IntRange(from = 0, to = 100) progress: Int) { this.progress = progress / 100f } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.content.Context import android.util.AttributeSet import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.platform.AbstractComposeView import eu.kanade.presentation.reader.ChapterTransition import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import tachiyomi.domain.manga.model.Manga import tachiyomi.source.local.isLocal class ReaderTransitionView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : AbstractComposeView(context, attrs) { private var data: Data? by mutableStateOf(null) init { layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) } fun bind(transition: ChapterTransition, downloadManager: DownloadManager, manga: Manga?) { data = if (manga != null) { Data( transition = transition, currChapterDownloaded = transition.from.pageLoader?.isLocal == true, goingToChapterDownloaded = manga.isLocal() || transition.to?.chapter?.let { goingToChapter -> downloadManager.isChapterDownloaded( chapterName = goingToChapter.name, chapterScanlator = goingToChapter.scanlator, chapterUrl = goingToChapter.url, mangaTitle = manga.title, sourceId = manga.source, skipCache = true, ) } ?: false, ) } else { null } } @Composable override fun Content() { data?.let { TachiyomiTheme { CompositionLocalProvider( LocalTextStyle provides MaterialTheme.typography.bodySmall, LocalContentColor provides MaterialTheme.colorScheme.onBackground, ) { ChapterTransition( transition = it.transition, currChapterDownloaded = it.currChapterDownloaded, goingToChapterDownloaded = it.goingToChapterDownloaded, ) } } } } private data class Data( val transition: ChapterTransition, val currChapterDownloaded: Boolean, val goingToChapterDownloaded: Boolean, ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/Viewer.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.view.KeyEvent import android.view.MotionEvent import android.view.View import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters /** * Interface for implementing a viewer. */ interface Viewer { /** * Returns the view this viewer uses. */ fun getView(): View /** * Destroys this viewer. Called when leaving the reader or swapping viewers. */ fun destroy() {} /** * Tells this viewer to set the given [chapters] as active. */ fun setChapters(chapters: ViewerChapters) /** * Tells this viewer to move to the given [page]. */ fun moveToPage(page: ReaderPage) /** * Called from the containing activity when a key [event] is received. It should return true * if the event was handled, false otherwise. */ fun handleKeyEvent(event: KeyEvent): Boolean /** * Called from the containing activity when a generic motion [event] is received. It should * return true if the event was handled, false otherwise. */ fun handleGenericMotionEvent(event: MotionEvent): Boolean } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import tachiyomi.core.common.preference.Preference /** * Common configuration for all viewers. */ abstract class ViewerConfig(readerPreferences: ReaderPreferences, private val scope: CoroutineScope) { var imagePropertyChangedListener: (() -> Unit)? = null var navigationModeChangedListener: (() -> Unit)? = null var tappingInverted = ReaderPreferences.TappingInvertMode.NONE var longTapEnabled = true var usePageTransitions = false var doubleTapAnimDuration = 500 var volumeKeysEnabled = false var volumeKeysInverted = false var alwaysShowChapterTransition = true var navigationMode = 0 protected set var forceNavigationOverlay = false var navigationOverlayOnStart = false var dualPageSplit = false protected set var dualPageInvert = false protected set var dualPageRotateToFit = false protected set var dualPageRotateToFitInvert = false protected set abstract var navigator: ViewerNavigation protected set init { readerPreferences.readWithLongTap .register({ longTapEnabled = it }) readerPreferences.pageTransitions .register({ usePageTransitions = it }) readerPreferences.doubleTapAnimSpeed .register({ doubleTapAnimDuration = it }) readerPreferences.readWithVolumeKeys .register({ volumeKeysEnabled = it }) readerPreferences.readWithVolumeKeysInverted .register({ volumeKeysInverted = it }) readerPreferences.alwaysShowChapterTransition .register({ alwaysShowChapterTransition = it }) forceNavigationOverlay = readerPreferences.showNavigationOverlayNewUser.get() if (forceNavigationOverlay) { readerPreferences.showNavigationOverlayNewUser.set(false) } readerPreferences.showNavigationOverlayOnStart .register({ navigationOverlayOnStart = it }) } protected abstract fun defaultNavigation(): ViewerNavigation abstract fun updateNavigation(navigationMode: Int) fun Preference.register( valueAssignment: (T) -> Unit, onChanged: (T) -> Unit = {}, ) { changes() .onEach { valueAssignment(it) } .distinctUntilChanged() .onEach { onChanged(it) } .launchIn(scope) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerNavigation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer import android.graphics.Color import android.graphics.PointF import android.graphics.RectF import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.lang.invert import tachiyomi.i18n.MR abstract class ViewerNavigation { sealed class NavigationRegion(val nameRes: StringResource, val color: Int) { data object MENU : NavigationRegion(MR.strings.action_menu, Color.argb(0xCC, 0x95, 0x81, 0x8D)) data object PREV : NavigationRegion(MR.strings.nav_zone_prev, Color.argb(0xCC, 0xFF, 0x77, 0x33)) data object NEXT : NavigationRegion(MR.strings.nav_zone_next, Color.argb(0xCC, 0x84, 0xE2, 0x96)) data object LEFT : NavigationRegion(MR.strings.nav_zone_left, Color.argb(0xCC, 0x7D, 0x11, 0x28)) data object RIGHT : NavigationRegion(MR.strings.nav_zone_right, Color.argb(0xCC, 0xA6, 0xCF, 0xD5)) } data class Region( val rectF: RectF, val type: NavigationRegion, ) { fun invert(invertMode: ReaderPreferences.TappingInvertMode): Region { if (invertMode == ReaderPreferences.TappingInvertMode.NONE) return this return this.copy( rectF = this.rectF.invert(invertMode), ) } } private var constantMenuRegion: RectF = RectF(0f, 0f, 1f, 0.05f) var invertMode: ReaderPreferences.TappingInvertMode = ReaderPreferences.TappingInvertMode.NONE protected abstract var regionList: List /** Returns regions with applied inversion. */ fun getRegions(): List { return regionList.map { it.invert(invertMode) } } fun getAction(pos: PointF): NavigationRegion { val x = pos.x val y = pos.y val region = getRegions().find { it.rectF.contains(x, y) } return when { region != null -> region.type constantMenuRegion.contains(x, y) -> NavigationRegion.MENU else -> NavigationRegion.MENU } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/DisabledNavigation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.navigation import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation /** * Visualization of default state without any inversion * +---+---+---+ * | M | M | M | P: Previous * +---+---+---+ * | M | M | M | M: Menu * +---+---+---+ * | M | M | M | N: Next * +---+---+---+ */ class DisabledNavigation : ViewerNavigation() { override var regionList: List = emptyList() } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/EdgeNavigation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.navigation import android.graphics.RectF import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation /** * Visualization of default state without any inversion * +---+---+---+ * | N | N | N | P: Previous * +---+---+---+ * | N | M | N | M: Menu * +---+---+---+ * | N | P | N | N: Next * +---+---+---+ */ class EdgeNavigation : ViewerNavigation() { override var regionList: List = listOf( Region( rectF = RectF(0f, 0f, 0.33f, 1f), type = NavigationRegion.NEXT, ), Region( rectF = RectF(0.33f, 0.66f, 0.66f, 1f), type = NavigationRegion.PREV, ), Region( rectF = RectF(0.66f, 0f, 1f, 1f), type = NavigationRegion.NEXT, ), ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/KindlishNavigation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.navigation import android.graphics.RectF import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation /** * Visualization of default state without any inversion * +---+---+---+ * | M | M | M | P: Previous * +---+---+---+ * | P | N | N | M: Menu * +---+---+---+ * | P | N | N | N: Next * +---+---+---+ */ class KindlishNavigation : ViewerNavigation() { override var regionList: List = listOf( Region( rectF = RectF(0.33f, 0.33f, 1f, 1f), type = NavigationRegion.NEXT, ), Region( rectF = RectF(0f, 0.33f, 0.33f, 1f), type = NavigationRegion.PREV, ), ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/LNavigation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.navigation import android.graphics.RectF import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation /** * Visualization of default state without any inversion * +---+---+---+ * | P | P | P | P: Previous * +---+---+---+ * | P | M | N | M: Menu * +---+---+---+ * | N | N | N | N: Next * +---+---+---+ */ open class LNavigation : ViewerNavigation() { override var regionList: List = listOf( Region( rectF = RectF(0f, 0.33f, 0.33f, 0.66f), type = NavigationRegion.PREV, ), Region( rectF = RectF(0f, 0f, 1f, 0.33f), type = NavigationRegion.PREV, ), Region( rectF = RectF(0.66f, 0.33f, 1f, 0.66f), type = NavigationRegion.NEXT, ), Region( rectF = RectF(0f, 0.66f, 1f, 1f), type = NavigationRegion.NEXT, ), ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/RightAndLeftNavigation.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.navigation import android.graphics.RectF import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation /** * Visualization of default state without any inversion * +---+---+---+ * | N | M | P | P: Move Right * +---+---+---+ * | N | M | P | M: Menu * +---+---+---+ * | N | M | P | N: Move Left * +---+---+---+ */ class RightAndLeftNavigation : ViewerNavigation() { override var regionList: List = listOf( Region( rectF = RectF(0f, 0f, 0.33f, 1f), type = NavigationRegion.LEFT, ), Region( rectF = RectF(0.66f, 0f, 1f, 1f), type = NavigationRegion.RIGHT, ), ) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/Pager.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import android.content.Context import android.view.HapticFeedbackConstants import android.view.KeyEvent import android.view.MotionEvent import androidx.viewpager.widget.DirectionalViewPager import eu.kanade.tachiyomi.ui.reader.viewer.GestureDetectorWithLongTap /** * Pager implementation that listens for tap and long tap and allows temporarily disabling touch * events in order to work with child views that need to disable touch events on this parent. The * pager can also be declared to be vertical by creating it with [isHorizontal] to false. */ open class Pager( context: Context, isHorizontal: Boolean = true, ) : DirectionalViewPager(context, isHorizontal) { /** * Tap listener function to execute when a tap is detected. */ var tapListener: ((MotionEvent) -> Unit)? = null /** * Long tap listener function to execute when a long tap is detected. */ var longTapListener: ((MotionEvent) -> Boolean)? = null /** * Gesture listener that implements tap and long tap events. */ private val gestureListener = object : GestureDetectorWithLongTap.Listener() { override fun onSingleTapConfirmed(ev: MotionEvent): Boolean { tapListener?.invoke(ev) return true } override fun onLongTapConfirmed(ev: MotionEvent) { val listener = longTapListener if (listener != null && listener.invoke(ev)) { performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) } } } /** * Gesture detector which handles motion events. */ private val gestureDetector = GestureDetectorWithLongTap(context, gestureListener) /** * Whether the gesture detector is currently enabled. */ private var isGestureDetectorEnabled = true /** * Dispatches a touch event. */ override fun dispatchTouchEvent(ev: MotionEvent): Boolean { val handled = super.dispatchTouchEvent(ev) if (isGestureDetectorEnabled) { gestureDetector.onTouchEvent(ev) } return handled } /** * Whether the given [ev] should be intercepted. Only used to prevent crashes when child * views manipulate [requestDisallowInterceptTouchEvent]. */ override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { return try { super.onInterceptTouchEvent(ev) } catch (e: IllegalArgumentException) { false } } /** * Handles a touch event. Only used to prevent crashes when child views manipulate * [requestDisallowInterceptTouchEvent]. */ override fun onTouchEvent(ev: MotionEvent): Boolean { return try { super.onTouchEvent(ev) } catch (e: NullPointerException) { false } catch (e: IndexOutOfBoundsException) { false } catch (e: IllegalArgumentException) { false } } /** * Executes the given key event when this pager has focus. Just do nothing because the reader * already dispatches key events to the viewer and has more control than this method. */ override fun executeKeyEvent(event: KeyEvent): Boolean { // Disable viewpager's default key event handling return false } /** * Enables or disables the gesture detector. */ fun setGestureDetectorEnabled(enabled: Boolean) { isGestureDetectorEnabled = enabled } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.EdgeNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.KindlishNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.LNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.RightAndLeftNavigation import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * Configuration used by pager viewers. */ class PagerConfig( private val viewer: PagerViewer, scope: CoroutineScope, readerPreferences: ReaderPreferences = Injekt.get(), ) : ViewerConfig(readerPreferences, scope) { var theme = readerPreferences.readerTheme.get() private set var automaticBackground = false private set var dualPageSplitChangedListener: ((Boolean) -> Unit)? = null var imageScaleType = 1 private set var imageZoomType = ReaderPageImageView.ZoomStartPosition.LEFT private set var imageCropBorders = false private set var navigateToPan = false private set var landscapeZoom = false private set init { readerPreferences.readerTheme .register( { theme = it automaticBackground = it == 3 }, { imagePropertyChangedListener?.invoke() }, ) readerPreferences.imageScaleType .register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.zoomStart .register({ zoomTypeFromPreference(it) }, { imagePropertyChangedListener?.invoke() }) readerPreferences.cropBorders .register({ imageCropBorders = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.navigateToPan .register({ navigateToPan = it }) readerPreferences.landscapeZoom .register({ landscapeZoom = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.navigationModePager .register({ navigationMode = it }, { updateNavigation(navigationMode) }) readerPreferences.pagerNavInverted .register({ tappingInverted = it }, { navigator.invertMode = it }) readerPreferences.pagerNavInverted.changes() .drop(1) .onEach { navigationModeChangedListener?.invoke() } .launchIn(scope) readerPreferences.dualPageSplitPaged .register( { dualPageSplit = it }, { imagePropertyChangedListener?.invoke() dualPageSplitChangedListener?.invoke(it) }, ) readerPreferences.dualPageInvertPaged .register({ dualPageInvert = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.dualPageRotateToFit .register( { dualPageRotateToFit = it }, { imagePropertyChangedListener?.invoke() }, ) readerPreferences.dualPageRotateToFitInvert .register( { dualPageRotateToFitInvert = it }, { imagePropertyChangedListener?.invoke() }, ) } private fun zoomTypeFromPreference(value: Int) { imageZoomType = when (value) { // Auto 1 -> when (viewer) { is L2RPagerViewer -> ReaderPageImageView.ZoomStartPosition.LEFT is R2LPagerViewer -> ReaderPageImageView.ZoomStartPosition.RIGHT else -> ReaderPageImageView.ZoomStartPosition.CENTER } // Left 2 -> ReaderPageImageView.ZoomStartPosition.LEFT // Right 3 -> ReaderPageImageView.ZoomStartPosition.RIGHT // Center else -> ReaderPageImageView.ZoomStartPosition.CENTER } } override var navigator: ViewerNavigation = defaultNavigation() set(value) { field = value.also { it.invertMode = this.tappingInverted } } override fun defaultNavigation(): ViewerNavigation { return when (viewer) { is VerticalPagerViewer -> LNavigation() else -> RightAndLeftNavigation() } } override fun updateNavigation(navigationMode: Int) { navigator = when (navigationMode) { 0 -> defaultNavigation() 1 -> LNavigation() 2 -> KindlishNavigation() 3 -> EdgeNavigation() 4 -> RightAndLeftNavigation() 5 -> DisabledNavigation() else -> defaultNavigation() } navigationModeChangedListener?.invoke() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import androidx.core.view.isVisible import eu.kanade.presentation.util.formattedMessage import eu.kanade.tachiyomi.databinding.ReaderErrorBinding import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.InsertPage import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator import eu.kanade.tachiyomi.ui.webview.WebViewActivity import eu.kanade.tachiyomi.widget.ViewPagerAdapter import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope import logcat.LogPriority import okio.Buffer import okio.BufferedSource import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR /** * View of the ViewPager that contains a page of a chapter. */ @SuppressLint("ViewConstructor") class PagerPageHolder( readerThemedContext: Context, val viewer: PagerViewer, val page: ReaderPage, ) : ReaderPageImageView(readerThemedContext), ViewPagerAdapter.PositionableView { /** * Item that identifies this view. Needed by the adapter to not recreate views. */ override val item get() = page /** * Loading progress bar to indicate the current progress. */ private var progressIndicator: ReaderProgressIndicator? = null // = ReaderProgressIndicator(readerThemedContext) /** * Error layout to show when the image fails to load. */ private var errorLayout: ReaderErrorBinding? = null private val scope = MainScope() /** * Job for loading the page and processing changes to the page's status. */ private var loadJob: Job? = null init { loadJob = scope.launch { loadPageAndProcessStatus() } } /** * Called when this view is detached from the window. Unsubscribes any active subscription. */ @SuppressLint("ClickableViewAccessibility") override fun onDetachedFromWindow() { super.onDetachedFromWindow() loadJob?.cancel() loadJob = null } private fun initProgressIndicator() { if (progressIndicator == null) { progressIndicator = ReaderProgressIndicator(context) addView(progressIndicator) } } /** * Loads the page and processes changes to the page's status. * * Returns immediately if the page has no PageLoader. * Otherwise, this function does not return. It will continue to process status changes until * the Job is cancelled. */ private suspend fun loadPageAndProcessStatus() { val loader = page.chapter.pageLoader ?: return supervisorScope { launchIO { loader.loadPage(page) } page.statusFlow.collectLatest { state -> when (state) { Page.State.Queue -> setQueued() Page.State.LoadPage -> setLoading() Page.State.DownloadImage -> { setDownloading() page.progressFlow.collectLatest { value -> progressIndicator?.setProgress(value) } } Page.State.Ready -> setImage() is Page.State.Error -> setError(state.error) } } } } /** * Called when the page is queued. */ private fun setQueued() { initProgressIndicator() progressIndicator?.show() removeErrorLayout() } /** * Called when the page is loading. */ private fun setLoading() { initProgressIndicator() progressIndicator?.show() removeErrorLayout() } /** * Called when the page is downloading. */ private fun setDownloading() { initProgressIndicator() progressIndicator?.show() removeErrorLayout() } /** * Called when the page is ready. */ private suspend fun setImage() { progressIndicator?.setProgress(0) val streamFn = page.stream ?: return try { val (source, isAnimated, background) = withIOContext { val source = streamFn().use { process(item, Buffer().readFrom(it)) } val isAnimated = ImageUtil.isAnimatedAndSupported(source) val background = if (!isAnimated && viewer.config.automaticBackground) { ImageUtil.chooseBackground(context, source.peek().inputStream()) } else { null } Triple(source, isAnimated, background) } withUIContext { setImage( source, isAnimated, Config( zoomDuration = viewer.config.doubleTapAnimDuration, minimumScaleType = viewer.config.imageScaleType, cropBorders = viewer.config.imageCropBorders, zoomStartPosition = viewer.config.imageZoomType, landscapeZoom = viewer.config.landscapeZoom, ), ) if (!isAnimated) { pageBackground = background } removeErrorLayout() } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) withUIContext { setError(e) } } } private fun process(page: ReaderPage, imageSource: BufferedSource): BufferedSource { if (viewer.config.dualPageRotateToFit) { return rotateDualPage(imageSource) } if (!viewer.config.dualPageSplit) { return imageSource } if (page is InsertPage) { return splitInHalf(imageSource) } val isDoublePage = ImageUtil.isWideImage(imageSource) if (!isDoublePage) { return imageSource } onPageSplit(page) return splitInHalf(imageSource) } private fun rotateDualPage(imageSource: BufferedSource): BufferedSource { val isDoublePage = ImageUtil.isWideImage(imageSource) return if (isDoublePage) { val rotation = if (viewer.config.dualPageRotateToFitInvert) -90f else 90f ImageUtil.rotateImage(imageSource, rotation) } else { imageSource } } private fun splitInHalf(imageSource: BufferedSource): BufferedSource { var side = when { viewer is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.RIGHT viewer !is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.LEFT viewer is L2RPagerViewer && page !is InsertPage -> ImageUtil.Side.LEFT viewer !is L2RPagerViewer && page !is InsertPage -> ImageUtil.Side.RIGHT else -> error("We should choose a side!") } if (viewer.config.dualPageInvert) { side = when (side) { ImageUtil.Side.RIGHT -> ImageUtil.Side.LEFT ImageUtil.Side.LEFT -> ImageUtil.Side.RIGHT } } return ImageUtil.splitInHalf(imageSource, side) } private fun onPageSplit(page: ReaderPage) { val newPage = InsertPage(page) viewer.onPageSplit(page, newPage) } /** * Called when the page has an error. */ private fun setError(error: Throwable?) { progressIndicator?.hide() showErrorLayout(error) } override fun onImageLoaded() { super.onImageLoaded() progressIndicator?.hide() } /** * Called when an image fails to decode. */ override fun onImageLoadError(error: Throwable?) { super.onImageLoadError(error) setError(error) } /** * Called when an image is zoomed in/out. */ override fun onScaleChanged(newScale: Float) { super.onScaleChanged(newScale) viewer.activity.hideMenu() } private fun showErrorLayout(error: Throwable?): ReaderErrorBinding { if (errorLayout == null) { errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), this, true) errorLayout?.actionRetry?.viewer = viewer errorLayout?.actionRetry?.setOnClickListener { page.chapter.pageLoader?.retryPage(page) } } val imageUrl = page.imageUrl errorLayout?.actionOpenInWebView?.isVisible = imageUrl != null if (imageUrl != null) { if (imageUrl.startsWith("http", true)) { errorLayout?.actionOpenInWebView?.viewer = viewer errorLayout?.actionOpenInWebView?.setOnClickListener { val sourceId = viewer.activity.viewModel.manga?.source val intent = WebViewActivity.newIntent(context, imageUrl, sourceId) context.startActivity(intent) } } } errorLayout?.errorMessage?.text = with(context) { error?.formattedMessage } ?: context.stringResource(MR.strings.decode_image_error) errorLayout?.root?.isVisible = true return errorLayout!! } /** * Removes the decode error layout from the holder, if found. */ private fun removeErrorLayout() { errorLayout?.root?.isVisible = false errorLayout = null } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import android.annotation.SuppressLint import android.content.Context import android.view.Gravity import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.LinearLayout import androidx.appcompat.widget.AppCompatTextView import com.google.android.material.progressindicator.CircularProgressIndicator import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.viewer.ReaderButton import eu.kanade.tachiyomi.ui.reader.viewer.ReaderTransitionView import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.widget.ViewPagerAdapter import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR /** * View of the ViewPager that contains a chapter transition. */ @SuppressLint("ViewConstructor") class PagerTransitionHolder( readerThemedContext: Context, val viewer: PagerViewer, val transition: ChapterTransition, ) : LinearLayout(readerThemedContext), ViewPagerAdapter.PositionableView { private val scope = MainScope() private var stateJob: Job? = null /** * Item that identifies this view. Needed by the adapter to not recreate views. */ override val item: Any get() = transition /** * View container of the current status of the transition page. Child views will be added * dynamically. */ private var pagesContainer = LinearLayout(context).apply { layoutParams = LayoutParams(MATCH_PARENT, WRAP_CONTENT) orientation = VERTICAL gravity = Gravity.CENTER } init { orientation = VERTICAL gravity = Gravity.CENTER val sidePadding = 64.dpToPx setPadding(sidePadding, 0, sidePadding, 0) val transitionView = ReaderTransitionView(context) addView(transitionView) addView(pagesContainer) transitionView.bind(transition, viewer.downloadManager, viewer.activity.viewModel.manga) transition.to?.let(::observeStatus) } /** * Called when this view is detached from the window. Unsubscribes any active subscription. */ override fun onDetachedFromWindow() { super.onDetachedFromWindow() stateJob?.cancel() } /** * Observes the status of the page list of the next/previous chapter. Whenever there's a new * state, the pages container is cleaned up before setting the new state. */ private fun observeStatus(chapter: ReaderChapter) { stateJob?.cancel() stateJob = scope.launch { chapter.stateFlow .collectLatest { state -> pagesContainer.removeAllViews() when (state) { is ReaderChapter.State.Loading -> setLoading() is ReaderChapter.State.Error -> setError(state.error) is ReaderChapter.State.Wait, is ReaderChapter.State.Loaded -> { // No additional view is added } } } } } /** * Sets the loading state on the pages container. */ private fun setLoading() { val progress = CircularProgressIndicator(context) progress.isIndeterminate = true val textView = AppCompatTextView(context).apply { wrapContent() text = context.stringResource(MR.strings.transition_pages_loading) } pagesContainer.addView(progress) pagesContainer.addView(textView) } /** * Sets the error state on the pages container. */ private fun setError(error: Throwable) { val textView = AppCompatTextView(context).apply { wrapContent() text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "") } val retryBtn = ReaderButton(context).apply { viewer = this@PagerTransitionHolder.viewer wrapContent() text = context.stringResource(MR.strings.action_retry) setOnClickListener { val toChapter = transition.to if (toChapter != null) { this@PagerTransitionHolder.viewer.activity.requestPreloadChapter(toChapter) } } } pagesContainer.addView(textView) pagesContainer.addView(retryBtn) } /** * Extension method to set layout params to wrap content on this view. */ private fun View.wrapContent() { layoutParams = ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import android.graphics.PointF import android.view.InputDevice import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.ViewGroup.LayoutParams import androidx.core.view.children import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.viewpager.widget.ViewPager import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.InsertPage import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation.NavigationRegion import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.injectLazy import kotlin.math.min /** * Implementation of a [Viewer] to display pages with a [ViewPager]. */ @Suppress("LeakingThis") abstract class PagerViewer(val activity: ReaderActivity) : Viewer { val downloadManager: DownloadManager by injectLazy() private val scope = MainScope() /** * View pager used by this viewer. It's abstract to implement L2R, R2L and vertical pagers on * top of this class. */ val pager = createPager() /** * Configuration used by the pager, like allow taps, scale mode on images, page transitions... */ val config = PagerConfig(this, scope) /** * Adapter of the pager. */ private val adapter = PagerViewerAdapter(this) /** * Currently active item. It can be a chapter page or a chapter transition. */ private var currentPage: Any? = null /** * Viewer chapters to set when the pager enters idle mode. Otherwise, if the view was settling * or dragging, there'd be a noticeable and annoying jump. */ private var awaitingIdleViewerChapters: ViewerChapters? = null /** * Whether the view pager is currently in idle mode. It sets the awaiting chapters if setting * this field to true. */ private var isIdle = true set(value) { field = value if (value) { awaitingIdleViewerChapters?.let { viewerChapters -> setChaptersInternal(viewerChapters) awaitingIdleViewerChapters = null if (viewerChapters.currChapter.pages?.size == 1) { adapter.nextTransition?.to?.let(activity::requestPreloadChapter) } } } } private val pagerListener = object : ViewPager.SimpleOnPageChangeListener() { override fun onPageSelected(position: Int) { if (!activity.isScrollingThroughPages) { activity.hideMenu() } onPageChange(position) } override fun onPageScrollStateChanged(state: Int) { isIdle = state == ViewPager.SCROLL_STATE_IDLE } } init { pager.isVisible = false // Don't layout the pager yet pager.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT) pager.isFocusable = false pager.offscreenPageLimit = 1 pager.id = R.id.reader_pager pager.adapter = adapter pager.addOnPageChangeListener(pagerListener) pager.tapListener = { event -> val viewPosition = IntArray(2) pager.getLocationOnScreen(viewPosition) val viewPositionRelativeToWindow = IntArray(2) pager.getLocationInWindow(viewPositionRelativeToWindow) val pos = PointF( (event.rawX - viewPosition[0] + viewPositionRelativeToWindow[0]) / pager.width, (event.rawY - viewPosition[1] + viewPositionRelativeToWindow[1]) / pager.height, ) when (config.navigator.getAction(pos)) { NavigationRegion.MENU -> activity.toggleMenu() NavigationRegion.NEXT -> moveToNext() NavigationRegion.PREV -> moveToPrevious() NavigationRegion.RIGHT -> moveRight() NavigationRegion.LEFT -> moveLeft() } } pager.longTapListener = f@{ if (activity.viewModel.state.value.menuVisible || config.longTapEnabled) { val item = adapter.items.getOrNull(pager.currentItem) if (item is ReaderPage) { activity.onPageLongTap(item) return@f true } } false } config.dualPageSplitChangedListener = { enabled -> if (!enabled) { cleanupPageSplit() } } config.imagePropertyChangedListener = { refreshAdapter() } config.navigationModeChangedListener = { val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart) } } override fun destroy() { super.destroy() scope.cancel() } /** * Creates a new ViewPager. */ abstract fun createPager(): Pager /** * Returns the view this viewer uses. */ override fun getView(): View { return pager } /** * Returns the PagerPageHolder for the provided page */ private fun getPageHolder(page: ReaderPage): PagerPageHolder? = pager.children .filterIsInstance(PagerPageHolder::class.java) .firstOrNull { it.item == page } /** * Called when a new page (either a [ReaderPage] or [ChapterTransition]) is marked as active */ private fun onPageChange(position: Int) { val page = adapter.items.getOrNull(position) if (page != null && currentPage != page) { val allowPreload = checkAllowPreload(page as? ReaderPage) val forward = when { currentPage is ReaderPage && page is ReaderPage -> { // if both pages have the same number, it's a split page with an InsertPage if (page.number == (currentPage as ReaderPage).number) { // the InsertPage is always the second in the reading direction page is InsertPage } else { page.number > (currentPage as ReaderPage).number } } currentPage is ChapterTransition.Prev && page is ReaderPage -> false else -> true } currentPage = page when (page) { is ReaderPage -> onReaderPageSelected(page, allowPreload, forward) is ChapterTransition -> onTransitionSelected(page) } } } private fun checkAllowPreload(page: ReaderPage?): Boolean { // Page is transition page - preload allowed page ?: return true // Initial opening - preload allowed currentPage ?: return true // Allow preload for // 1. Going to next chapter from chapter transition // 2. Going between pages of same chapter // 3. Next chapter page return when (page.chapter) { (currentPage as? ChapterTransition.Next)?.to -> true (currentPage as? ReaderPage)?.chapter -> true adapter.nextTransition?.to -> true else -> false } } /** * Called when a [ReaderPage] is marked as active. It notifies the * activity of the change and requests the preload of the next chapter if this is the last page. */ private fun onReaderPageSelected(page: ReaderPage, allowPreload: Boolean, forward: Boolean) { val pages = page.chapter.pages ?: return logcat { "onReaderPageSelected: ${page.number}/${pages.size}" } activity.onPageSelected(page) // Notify holder of page change getPageHolder(page)?.onPageSelected(forward) // Skip preload on inserts it causes unwanted page jumping if (page is InsertPage) { return } // Preload next chapter once we're within the last 5 pages of the current chapter val inPreloadRange = pages.size - page.number < 5 if (inPreloadRange && allowPreload && page.chapter == adapter.currentChapter) { logcat { "Request preload next chapter because we're at page ${page.number} of ${pages.size}" } adapter.nextTransition?.to?.let(activity::requestPreloadChapter) } } /** * Called when a [ChapterTransition] is marked as active. It request the * preload of the destination chapter of the transition. */ private fun onTransitionSelected(transition: ChapterTransition) { logcat { "onTransitionSelected: $transition" } val toChapter = transition.to if (toChapter != null) { logcat { "Request preload destination chapter because we're on the transition" } activity.requestPreloadChapter(toChapter) } else if (transition is ChapterTransition.Next) { // No more chapters, show menu because the user is probably going to close the reader activity.showMenu() } } /** * Tells this viewer to set the given [chapters] as active. If the pager is currently idle, * it sets the chapters immediately, otherwise they are saved and set when it becomes idle. */ override fun setChapters(chapters: ViewerChapters) { if (isIdle) { setChaptersInternal(chapters) } else { awaitingIdleViewerChapters = chapters } } /** * Sets the active [chapters] on this pager. */ private fun setChaptersInternal(chapters: ViewerChapters) { // Remove listener so the change in item doesn't trigger it pager.removeOnPageChangeListener(pagerListener) val forceTransition = config.alwaysShowChapterTransition || adapter.items.getOrNull(pager.currentItem) is ChapterTransition adapter.setChapters(chapters, forceTransition) // Layout the pager once a chapter is being set if (pager.isGone) { logcat { "Pager first layout" } val pages = chapters.currChapter.pages ?: return moveToPage(pages[min(chapters.currChapter.requestedPage, pages.lastIndex)]) pager.isVisible = true } pager.addOnPageChangeListener(pagerListener) // Manually call onPageChange to update the UI onPageChange(pager.currentItem) } /** * Tells this viewer to move to the given [page]. */ override fun moveToPage(page: ReaderPage) { val position = adapter.items.indexOf(page) if (position != -1) { val currentPosition = pager.currentItem pager.setCurrentItem(position, true) // manually call onPageChange since ViewPager listener is not triggered in this case if (currentPosition == position) { onPageChange(position) } } else { logcat { "Page $page not found in adapter" } } } /** * Moves to the next page. */ open fun moveToNext() { moveRight() } /** * Moves to the previous page. */ open fun moveToPrevious() { moveLeft() } /** * Moves to the page at the right. */ protected open fun moveRight() { if (pager.currentItem != adapter.count - 1) { val holder = (currentPage as? ReaderPage)?.let(::getPageHolder) if (holder != null && config.navigateToPan && holder.canPanRight()) { holder.panRight() } else { pager.setCurrentItem(pager.currentItem + 1, config.usePageTransitions) } } } /** * Moves to the page at the left. */ protected open fun moveLeft() { if (pager.currentItem != 0) { val holder = (currentPage as? ReaderPage)?.let(::getPageHolder) if (holder != null && config.navigateToPan && holder.canPanLeft()) { holder.panLeft() } else { pager.setCurrentItem(pager.currentItem - 1, config.usePageTransitions) } } } /** * Moves to the page at the top (or previous). */ protected open fun moveUp() { moveToPrevious() } /** * Moves to the page at the bottom (or next). */ protected open fun moveDown() { moveToNext() } /** * Resets the adapter in order to recreate all the views. Used when a image configuration is * changed. */ private fun refreshAdapter() { val currentItem = pager.currentItem adapter.refresh() pager.adapter = adapter pager.setCurrentItem(currentItem, false) } /** * Called from the containing activity when a key [event] is received. It should return true * if the event was handled, false otherwise. */ override fun handleKeyEvent(event: KeyEvent): Boolean { val isUp = event.action == KeyEvent.ACTION_UP val ctrlPressed = event.metaState.and(KeyEvent.META_CTRL_ON) > 0 when (event.keyCode) { KeyEvent.KEYCODE_VOLUME_DOWN -> { if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) { return false } else if (isUp) { if (!config.volumeKeysInverted) moveDown() else moveUp() } } KeyEvent.KEYCODE_VOLUME_UP -> { if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) { return false } else if (isUp) { if (!config.volumeKeysInverted) moveUp() else moveDown() } } KeyEvent.KEYCODE_DPAD_RIGHT -> { if (isUp) { if (ctrlPressed) moveToNext() else moveRight() } } KeyEvent.KEYCODE_DPAD_LEFT -> { if (isUp) { if (ctrlPressed) moveToPrevious() else moveLeft() } } KeyEvent.KEYCODE_DPAD_DOWN -> if (isUp) moveDown() KeyEvent.KEYCODE_DPAD_UP -> if (isUp) moveUp() KeyEvent.KEYCODE_PAGE_DOWN -> if (isUp) moveDown() KeyEvent.KEYCODE_PAGE_UP -> if (isUp) moveUp() KeyEvent.KEYCODE_MENU -> if (isUp) activity.toggleMenu() else -> return false } return true } /** * Called from the containing activity when a generic motion [event] is received. It should * return true if the event was handled, false otherwise. */ override fun handleGenericMotionEvent(event: MotionEvent): Boolean { if (event.source and InputDevice.SOURCE_CLASS_POINTER != 0) { when (event.action) { MotionEvent.ACTION_SCROLL -> { if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f) { moveDown() } else { moveUp() } return true } } } return false } fun onPageSplit(currentPage: ReaderPage, newPage: InsertPage) { activity.runOnUiThread { // Need to insert on UI thread else images will go blank adapter.onPageSplit(currentPage, newPage) } } private fun cleanupPageSplit() { adapter.cleanupPageSplit() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import android.view.View import android.view.ViewGroup import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.InsertPage import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.viewer.calculateChapterGap import eu.kanade.tachiyomi.util.system.createReaderThemeContext import eu.kanade.tachiyomi.widget.ViewPagerAdapter import tachiyomi.core.common.util.system.logcat /** * Pager adapter used by this [viewer] to where [ViewerChapters] updates are posted. */ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() { /** * List of currently set items. */ var items: MutableList = mutableListOf() private set /** * Holds preprocessed items so they don't get removed when changing chapter */ private var preprocessed: MutableMap = mutableMapOf() var nextTransition: ChapterTransition.Next? = null private set var currentChapter: ReaderChapter? = null /** * Context that has been wrapped to use the correct theme values based on the * current app theme and reader background color */ private var readerThemedContext = viewer.activity.createReaderThemeContext() /** * Updates this adapter with the given [chapters]. It handles setting a few pages of the * next/previous chapter to allow seamless transitions and inverting the pages if the viewer * has R2L direction. */ fun setChapters(chapters: ViewerChapters, forceTransition: Boolean) { val newItems = mutableListOf() // Forces chapter transition if there is missing chapters val prevHasMissingChapters = calculateChapterGap(chapters.currChapter, chapters.prevChapter) > 0 val nextHasMissingChapters = calculateChapterGap(chapters.nextChapter, chapters.currChapter) > 0 // Add previous chapter pages and transition chapters.prevChapter?.pages?.let(newItems::addAll) // Skip transition page if the chapter is loaded & current page is not a transition page if (prevHasMissingChapters || forceTransition || chapters.prevChapter?.state !is ReaderChapter.State.Loaded) { newItems.add(ChapterTransition.Prev(chapters.currChapter, chapters.prevChapter)) } var insertPageLastPage: InsertPage? = null // Add current chapter. val currPages = chapters.currChapter.pages if (currPages != null) { val pages = currPages.toMutableList() val lastPage = pages.last() // Insert preprocessed pages into current page list preprocessed.keys.sortedDescending() .forEach { key -> if (lastPage.index == key) { insertPageLastPage = preprocessed[key] } preprocessed[key]?.let { pages.add(key + 1, it) } } newItems.addAll(pages) } currentChapter = chapters.currChapter // Add next chapter transition and pages. nextTransition = ChapterTransition.Next(chapters.currChapter, chapters.nextChapter) .also { if ( nextHasMissingChapters || forceTransition || chapters.nextChapter?.state !is ReaderChapter.State.Loaded ) { newItems.add(it) } } chapters.nextChapter?.pages?.let(newItems::addAll) // Resets double-page splits, else insert pages get misplaced items.filterIsInstance().also { items.removeAll(it) } if (viewer is R2LPagerViewer) { newItems.reverse() } preprocessed = mutableMapOf() items = newItems notifyDataSetChanged() // Will skip insert page otherwise if (insertPageLastPage != null) { viewer.moveToPage(insertPageLastPage) } } /** * Returns the amount of items of the adapter. */ override fun getCount(): Int { return items.size } /** * Creates a new view for the item at the given [position]. */ override fun createView(container: ViewGroup, position: Int): View { return when (val item = items[position]) { is ReaderPage -> PagerPageHolder(readerThemedContext, viewer, item) is ChapterTransition -> PagerTransitionHolder(readerThemedContext, viewer, item) else -> throw NotImplementedError("Holder for ${item.javaClass} not implemented") } } /** * Returns the current position of the given [view] on the adapter. */ override fun getItemPosition(view: Any): Int { if (view is PositionableView) { val position = items.indexOf(view.item) if (position != -1) { return position } else { logcat { "Position for ${view.item} not found" } } } return POSITION_NONE } fun onPageSplit(currentPage: Any?, newPage: InsertPage) { if (currentPage !is ReaderPage) return val currentIndex = items.indexOf(currentPage) // Put aside preprocessed pages for next chapter so they don't get removed when changing chapter if (currentPage.chapter.chapter.id != currentChapter?.chapter?.id) { preprocessed[newPage.index] = newPage return } val placeAtIndex = when (viewer) { is L2RPagerViewer, is VerticalPagerViewer, -> currentIndex + 1 else -> currentIndex } // It will enter a endless cycle of insert pages if (viewer is R2LPagerViewer && placeAtIndex - 1 >= 0 && items[placeAtIndex - 1] is InsertPage) { return } // Same here it will enter a endless cycle of insert pages if (items[placeAtIndex] is InsertPage) { return } items.add(placeAtIndex, newPage) notifyDataSetChanged() } fun cleanupPageSplit() { val insertPages = items.filterIsInstance() items.removeAll(insertPages) notifyDataSetChanged() } fun refresh() { readerThemedContext = viewer.activity.createReaderThemeContext() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewers.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.pager import eu.kanade.tachiyomi.ui.reader.ReaderActivity /** * Implementation of a left to right PagerViewer. */ class L2RPagerViewer(activity: ReaderActivity) : PagerViewer(activity) { /** * Creates a new left to right pager. */ override fun createPager(): Pager { return Pager(activity) } } /** * Implementation of a right to left PagerViewer. */ class R2LPagerViewer(activity: ReaderActivity) : PagerViewer(activity) { /** * Creates a new right to left pager. */ override fun createPager(): Pager { return Pager(activity) } /** * Moves to the next page. On a R2L pager the next page is the one at the left. */ override fun moveToNext() { moveLeft() } /** * Moves to the previous page. On a R2L pager the previous page is the one at the right. */ override fun moveToPrevious() { moveRight() } } /** * Implementation of a vertical (top to bottom) PagerViewer. */ class VerticalPagerViewer(activity: ReaderActivity) : PagerViewer(activity) { /** * Creates a new vertical pager. */ override fun createPager(): Pager { return Pager(activity, isHorizontal = false) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonAdapter.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.view.ViewGroup import android.widget.LinearLayout import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import eu.kanade.tachiyomi.ui.reader.viewer.calculateChapterGap import eu.kanade.tachiyomi.util.system.createReaderThemeContext /** * RecyclerView Adapter used by this [viewer] to where [ViewerChapters] updates are posted. */ class WebtoonAdapter(val viewer: WebtoonViewer) : RecyclerView.Adapter() { /** * List of currently set items. */ var items: List = emptyList() private set var currentChapter: ReaderChapter? = null /** * Context that has been wrapped to use the correct theme values based on the * current app theme and reader background color */ private var readerThemedContext = viewer.activity.createReaderThemeContext() /** * Updates this adapter with the given [chapters]. It handles setting a few pages of the * next/previous chapter to allow seamless transitions. */ fun setChapters(chapters: ViewerChapters, forceTransition: Boolean) { val newItems = mutableListOf() // Forces chapter transition if there is missing chapters val prevHasMissingChapters = calculateChapterGap(chapters.currChapter, chapters.prevChapter) > 0 val nextHasMissingChapters = calculateChapterGap(chapters.nextChapter, chapters.currChapter) > 0 // Add previous chapter pages and transition. chapters.prevChapter?.pages?.let(newItems::addAll) // Skip transition page if the chapter is loaded & current page is not a transition page if (prevHasMissingChapters || forceTransition || chapters.prevChapter?.state !is ReaderChapter.State.Loaded) { newItems.add(ChapterTransition.Prev(chapters.currChapter, chapters.prevChapter)) } // Add current chapter. val currPages = chapters.currChapter.pages if (currPages != null) { newItems.addAll(currPages) } currentChapter = chapters.currChapter // Add next chapter transition and pages. if (nextHasMissingChapters || forceTransition || chapters.nextChapter?.state !is ReaderChapter.State.Loaded) { newItems.add(ChapterTransition.Next(chapters.currChapter, chapters.nextChapter)) } chapters.nextChapter?.pages?.let(newItems::addAll) updateItems(newItems) } private fun updateItems(newItems: List) { val result = DiffUtil.calculateDiff(Callback(items, newItems)) items = newItems result.dispatchUpdatesTo(this) } fun refresh() { readerThemedContext = viewer.activity.createReaderThemeContext() } /** * Returns the amount of items of the adapter. */ override fun getItemCount(): Int { return items.size } /** * Returns the view type for the item at the given [position]. */ override fun getItemViewType(position: Int): Int { return when (val item = items[position]) { is ReaderPage -> PAGE_VIEW is ChapterTransition -> TRANSITION_VIEW else -> error("Unknown view type for ${item.javaClass}") } } /** * Creates a new view holder for an item with the given [viewType]. */ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { PAGE_VIEW -> { val view = ReaderPageImageView(readerThemedContext, isWebtoon = true) WebtoonPageHolder(view, viewer) } TRANSITION_VIEW -> { val view = LinearLayout(readerThemedContext) WebtoonTransitionHolder(view, viewer) } else -> error("Unknown view type") } } /** * Binds an existing view [holder] with the item at the given [position]. */ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val item = items[position] when (holder) { is WebtoonPageHolder -> holder.bind(item as ReaderPage) is WebtoonTransitionHolder -> holder.bind(item as ChapterTransition) } } /** * Recycles an existing view [holder] before adding it to the view pool. */ override fun onViewRecycled(holder: RecyclerView.ViewHolder) { when (holder) { is WebtoonPageHolder -> holder.recycle() is WebtoonTransitionHolder -> holder.recycle() } } /** * Diff util callback used to dispatch delta updates instead of full dataset changes. */ private class Callback( private val oldItems: List, private val newItems: List, ) : DiffUtil.Callback() { /** * Returns true if these two items are the same. */ override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { val oldItem = oldItems[oldItemPosition] val newItem = newItems[newItemPosition] return oldItem == newItem } /** * Returns true if the contents of the items are the same. */ override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { return true } /** * Returns the size of the old list. */ override fun getOldListSize(): Int { return oldItems.size } /** * Returns the size of the new list. */ override fun getNewListSize(): Int { return newItems.size } } } /** * View holder type of a chapter page view. */ private const val PAGE_VIEW = 0 /** * View holder type of a chapter transition view. */ private const val TRANSITION_VIEW = 1 ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonBaseHolder.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.content.Context import android.view.View import android.view.ViewGroup.LayoutParams import androidx.recyclerview.widget.RecyclerView abstract class WebtoonBaseHolder( view: View, protected val viewer: WebtoonViewer, ) : RecyclerView.ViewHolder(view) { /** * Context getter because it's used often. */ val context: Context get() = itemView.context /** * Called when the view is recycled and being added to the view pool. */ open fun recycle() {} /** * Extension method to set layout params to wrap content on this view. */ protected fun View.wrapContent() { layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.EdgeNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.KindlishNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.LNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.RightAndLeftNavigation import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * Configuration used by webtoon viewers. */ class WebtoonConfig( scope: CoroutineScope, readerPreferences: ReaderPreferences = Injekt.get(), ) : ViewerConfig(readerPreferences, scope) { var themeChangedListener: (() -> Unit)? = null var imageCropBorders = false private set var zoomOutDisabled = false private set var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null var sidePadding = 0 private set var doubleTapZoom = true private set var doubleTapZoomChangedListener: ((Boolean) -> Unit)? = null val theme = readerPreferences.readerTheme.get() init { readerPreferences.cropBordersWebtoon .register({ imageCropBorders = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.webtoonSidePadding .register({ sidePadding = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.navigationModeWebtoon .register({ navigationMode = it }, { updateNavigation(it) }) readerPreferences.webtoonNavInverted .register({ tappingInverted = it }, { navigator.invertMode = it }) readerPreferences.webtoonNavInverted.changes() .drop(1) .onEach { navigationModeChangedListener?.invoke() } .launchIn(scope) readerPreferences.dualPageSplitWebtoon .register({ dualPageSplit = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.dualPageInvertWebtoon .register({ dualPageInvert = it }, { imagePropertyChangedListener?.invoke() }) readerPreferences.dualPageRotateToFitWebtoon .register( { dualPageRotateToFit = it }, { imagePropertyChangedListener?.invoke() }, ) readerPreferences.dualPageRotateToFitInvertWebtoon .register( { dualPageRotateToFitInvert = it }, { imagePropertyChangedListener?.invoke() }, ) readerPreferences.webtoonDisableZoomOut .register( { zoomOutDisabled = it }, { zoomPropertyChangedListener?.invoke(it) }, ) readerPreferences.webtoonDoubleTapZoomEnabled .register( { doubleTapZoom = it }, { doubleTapZoomChangedListener?.invoke(it) }, ) readerPreferences.readerTheme.changes() .drop(1) .distinctUntilChanged() .onEach { themeChangedListener?.invoke() } .launchIn(scope) } override var navigator: ViewerNavigation = defaultNavigation() set(value) { field = value.also { it.invertMode = tappingInverted } } override fun defaultNavigation(): ViewerNavigation { return LNavigation() } override fun updateNavigation(navigationMode: Int) { this.navigator = when (navigationMode) { 0 -> defaultNavigation() 1 -> LNavigation() 2 -> KindlishNavigation() 3 -> EdgeNavigation() 4 -> RightAndLeftNavigation() 5 -> DisabledNavigation() else -> defaultNavigation() } navigationModeChangedListener?.invoke() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.content.Context import android.graphics.Rect import android.view.GestureDetector import android.view.MotionEvent import android.view.ScaleGestureDetector import android.widget.FrameLayout /** * Frame layout which contains a [WebtoonRecyclerView]. It's needed to handle touch events, * because the recyclerview is scaled and its touch events are translated, which breaks the * detectors. * * TODO consider integrating this class into [WebtoonViewer]. */ class WebtoonFrame(context: Context) : FrameLayout(context) { /** * Scale detector, either with pinch or quick scale. */ private val scaleDetector = ScaleGestureDetector(context, ScaleListener()) /** * Fling detector. */ private val flingDetector = GestureDetector(context, FlingListener()) var doubleTapZoom = true set(value) { field = value recycler?.doubleTapZoom = value scaleDetector.isQuickScaleEnabled = value } var zoomOutDisabled = false set(value) { field = value recycler?.zoomOutDisabled = value } /** * Recycler view added in this frame. */ private val recycler: WebtoonRecyclerView? get() = getChildAt(0) as? WebtoonRecyclerView /** * Dispatches a touch event to the detectors. */ override fun dispatchTouchEvent(ev: MotionEvent): Boolean { scaleDetector.onTouchEvent(ev) flingDetector.onTouchEvent(ev) // Get the bounding box of the recyclerview and translate any motion events to be within it. // Used to allow scrolling outside the recyclerview. val recyclerRect = Rect() recycler?.getHitRect(recyclerRect) ?: return super.dispatchTouchEvent(ev) // Shrink the box to account for any rounding issues. recyclerRect.inset(1, 1) if (recyclerRect.right < recyclerRect.left || recyclerRect.bottom < recyclerRect.top) { return super.dispatchTouchEvent(ev) } ev.setLocation( ev.x.coerceIn(recyclerRect.left.toFloat(), recyclerRect.right.toFloat()), ev.y.coerceIn(recyclerRect.top.toFloat(), recyclerRect.bottom.toFloat()), ) return super.dispatchTouchEvent(ev) } /** * Scale listener used to delegate events to the recycler view. */ inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() { override fun onScaleBegin(detector: ScaleGestureDetector): Boolean { recycler?.onScaleBegin() return true } override fun onScale(detector: ScaleGestureDetector): Boolean { recycler?.onScale(detector.scaleFactor) return true } override fun onScaleEnd(detector: ScaleGestureDetector) { recycler?.onScaleEnd() } } /** * Fling listener used to delegate events to the recycler view. */ inner class FlingListener : GestureDetector.SimpleOnGestureListener() { override fun onDown(e: MotionEvent): Boolean { return true } override fun onFling( e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float, ): Boolean { recycler?.onManualScroll() return recycler?.zoomFling(velocityX.toInt(), velocityY.toInt()) ?: false } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonLayoutManager.kt ================================================ @file:Suppress("PackageDirectoryMismatch") package androidx.recyclerview.widget import android.content.Context import androidx.recyclerview.widget.RecyclerView.NO_POSITION /** * Layout manager used by the webtoon viewer. Item prefetch is disabled because the extra layout * space feature is used which allows setting the image even if the holder is not visible, * avoiding (in most cases) black views when they are visible. * * This layout manager uses the same package name as the support library in order to use a package * protected method. */ class WebtoonLayoutManager(context: Context, private val extraLayoutSpace: Int) : LinearLayoutManager(context) { init { isItemPrefetchEnabled = false } /** * Returns the custom extra layout space. */ @Deprecated("Deprecated in Java") override fun getExtraLayoutSpace(state: RecyclerView.State): Int { return extraLayoutSpace } /** * Returns the position of the last item whose end side is visible on screen. */ fun findLastEndVisibleItemPosition(): Int { ensureLayoutState() val callback = if (mOrientation == HORIZONTAL) { mHorizontalBoundCheck } else { mVerticalBoundCheck }.mCallback val start = callback.parentStart val end = callback.parentEnd for (i in childCount - 1 downTo 0) { val child = getChildAt(i)!! val childStart = callback.getChildStart(child) val childEnd = callback.getChildEnd(child) if (childEnd <= end || childStart < start) { return getPosition(child) } } return NO_POSITION } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.content.res.Resources import android.view.LayoutInflater import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.FrameLayout import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.core.view.updateMargins import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import eu.kanade.presentation.util.formattedMessage import eu.kanade.tachiyomi.databinding.ReaderErrorBinding import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator import eu.kanade.tachiyomi.ui.webview.WebViewActivity import eu.kanade.tachiyomi.util.system.dpToPx import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope import logcat.LogPriority import okio.Buffer import okio.BufferedSource import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR /** * Holder of the webtoon reader for a single page of a chapter. * * @param frame the root view for this holder. * @param viewer the webtoon viewer. * @constructor creates a new webtoon holder. */ class WebtoonPageHolder( private val frame: ReaderPageImageView, viewer: WebtoonViewer, ) : WebtoonBaseHolder(frame, viewer) { /** * Loading progress bar to indicate the current progress. */ private val progressIndicator = createProgressIndicator() /** * Progress bar container. Needed to keep a minimum height size of the holder, otherwise the * adapter would create more views to fill the screen, which is not wanted. */ private lateinit var progressContainer: ViewGroup /** * Error layout to show when the image fails to load. */ private var errorLayout: ReaderErrorBinding? = null /** * Getter to retrieve the height of the recycler view. */ private val parentHeight get() = viewer.recycler.height /** * Page of a chapter. */ private var page: ReaderPage? = null private val scope = MainScope() /** * Job for loading the page. */ private var loadJob: Job? = null init { refreshLayoutParams() frame.onImageLoaded = { onImageDecoded() } frame.onImageLoadError = { error -> setError(error) } frame.onScaleChanged = { viewer.activity.hideMenu() } } /** * Binds the given [page] with this view holder, subscribing to its state. */ fun bind(page: ReaderPage) { this.page = page loadJob?.cancel() loadJob = scope.launch { loadPageAndProcessStatus() } refreshLayoutParams() } private fun refreshLayoutParams() { frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply { if (!viewer.isContinuous) { bottomMargin = 15.dpToPx } val margin = Resources.getSystem().displayMetrics.widthPixels * (viewer.config.sidePadding / 100f) marginEnd = margin.toInt() marginStart = margin.toInt() } } /** * Called when the view is recycled and added to the view pool. */ override fun recycle() { loadJob?.cancel() loadJob = null removeErrorLayout() frame.recycle() progressIndicator.setProgress(0) progressContainer.isVisible = true } /** * Loads the page and processes changes to the page's status. * * Returns immediately if there is no page or the page has no PageLoader. * Otherwise, this function does not return. It will continue to process status changes until * the Job is cancelled. */ private suspend fun loadPageAndProcessStatus() { val page = page ?: return val loader = page.chapter.pageLoader ?: return supervisorScope { launchIO { loader.loadPage(page) } page.statusFlow.collectLatest { state -> when (state) { Page.State.Queue -> setQueued() Page.State.LoadPage -> setLoading() Page.State.DownloadImage -> { setDownloading() page.progressFlow.collectLatest { value -> progressIndicator.setProgress(value) } } Page.State.Ready -> setImage() is Page.State.Error -> setError(state.error) } } } } /** * Called when the page is queued. */ private fun setQueued() { progressContainer.isVisible = true progressIndicator.show() removeErrorLayout() } /** * Called when the page is loading. */ private fun setLoading() { progressContainer.isVisible = true progressIndicator.show() removeErrorLayout() } /** * Called when the page is downloading */ private fun setDownloading() { progressContainer.isVisible = true progressIndicator.show() removeErrorLayout() } /** * Called when the page is ready. */ private suspend fun setImage() { progressIndicator.setProgress(0) val streamFn = page?.stream ?: return try { val (source, isAnimated) = withIOContext { val source = streamFn().use { process(Buffer().readFrom(it)) } val isAnimated = ImageUtil.isAnimatedAndSupported(source) Pair(source, isAnimated) } withUIContext { frame.setImage( source, isAnimated, ReaderPageImageView.Config( zoomDuration = viewer.config.doubleTapAnimDuration, minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH, cropBorders = viewer.config.imageCropBorders, ), ) removeErrorLayout() } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) withUIContext { setError(e) } } } private fun process(imageSource: BufferedSource): BufferedSource { if (viewer.config.dualPageRotateToFit) { return rotateDualPage(imageSource) } if (viewer.config.dualPageSplit) { val isDoublePage = ImageUtil.isWideImage(imageSource) if (isDoublePage) { val upperSide = if (viewer.config.dualPageInvert) ImageUtil.Side.LEFT else ImageUtil.Side.RIGHT return ImageUtil.splitAndMerge(imageSource, upperSide) } } return imageSource } private fun rotateDualPage(imageSource: BufferedSource): BufferedSource { val isDoublePage = ImageUtil.isWideImage(imageSource) return if (isDoublePage) { val rotation = if (viewer.config.dualPageRotateToFitInvert) -90f else 90f ImageUtil.rotateImage(imageSource, rotation) } else { imageSource } } /** * Called when the page has an error. */ private fun setError(error: Throwable?) { progressContainer.isVisible = false initErrorLayout(error) } /** * Called when the image is decoded and going to be displayed. */ private fun onImageDecoded() { progressContainer.isVisible = false removeErrorLayout() } /** * Creates a new progress bar. */ private fun createProgressIndicator(): ReaderProgressIndicator { progressContainer = FrameLayout(context) frame.addView(progressContainer, MATCH_PARENT, parentHeight) val progress = ReaderProgressIndicator(context).apply { updateLayoutParams { updateMargins(top = parentHeight / 4) } } progressContainer.addView(progress) return progress } /** * Initializes a button to retry pages. */ private fun initErrorLayout(error: Throwable?): ReaderErrorBinding { if (errorLayout == null) { errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), frame, true) errorLayout?.root?.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, (parentHeight * 0.8).toInt()) errorLayout?.actionRetry?.setOnClickListener { page?.let { it.chapter.pageLoader?.retryPage(it) } } } val imageUrl = page?.imageUrl errorLayout?.actionOpenInWebView?.isVisible = imageUrl != null if (imageUrl != null) { if (imageUrl.startsWith("http", true)) { errorLayout?.actionOpenInWebView?.setOnClickListener { val sourceId = viewer.activity.viewModel.manga?.source val intent = WebViewActivity.newIntent(context, imageUrl, sourceId) context.startActivity(intent) } } } errorLayout?.errorMessage?.text = with(context) { error?.formattedMessage } ?: context.stringResource(MR.strings.decode_image_error) return errorLayout!! } /** * Removes the decode error layout from the holder, if found. */ private fun removeErrorLayout() { errorLayout?.let { frame.removeView(it.root) errorLayout = null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.animation.AnimatorSet import android.animation.ValueAnimator import android.content.Context import android.util.AttributeSet import android.view.HapticFeedbackConstants import android.view.MotionEvent import android.view.ViewConfiguration import android.view.animation.DecelerateInterpolator import androidx.core.animation.doOnEnd import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import eu.kanade.tachiyomi.ui.reader.viewer.GestureDetectorWithLongTap import kotlin.math.abs /** * Implementation of a [RecyclerView] used by the webtoon reader. */ class WebtoonRecyclerView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0, ) : RecyclerView(context, attrs, defStyle) { private var isZooming = false private var atLastPosition = false private var atFirstPosition = false private var halfWidth = 0 private var halfHeight = 0 var originalHeight = 0 private set private var heightSet = false private var firstVisibleItemPosition = 0 private var lastVisibleItemPosition = 0 private var currentScale = DEFAULT_RATE var zoomOutDisabled = false set(value) { field = value if (value && currentScale < DEFAULT_RATE) { zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f) } } private val minRate get() = if (zoomOutDisabled) DEFAULT_RATE else MIN_RATE private val listener = GestureListener() private val detector = Detector() var doubleTapZoom = true var tapListener: ((MotionEvent) -> Unit)? = null var longTapListener: ((MotionEvent) -> Boolean)? = null private var isManuallyScrolling = false private var tapDuringManualScroll = false override fun onMeasure(widthSpec: Int, heightSpec: Int) { halfWidth = MeasureSpec.getSize(widthSpec) / 2 halfHeight = MeasureSpec.getSize(heightSpec) / 2 if (!heightSet) { originalHeight = MeasureSpec.getSize(heightSpec) heightSet = true } super.onMeasure(widthSpec, heightSpec) } override fun onTouchEvent(e: MotionEvent): Boolean { if (e.actionMasked == MotionEvent.ACTION_DOWN) { tapDuringManualScroll = isManuallyScrolling } detector.onTouchEvent(e) return super.onTouchEvent(e) } override fun onScrolled(dx: Int, dy: Int) { super.onScrolled(dx, dy) val layoutManager = layoutManager lastVisibleItemPosition = (layoutManager as LinearLayoutManager).findLastVisibleItemPosition() firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition() } override fun onScrollStateChanged(state: Int) { super.onScrollStateChanged(state) val layoutManager = layoutManager val visibleItemCount = layoutManager?.childCount ?: 0 val totalItemCount = layoutManager?.itemCount ?: 0 atLastPosition = visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1 atFirstPosition = firstVisibleItemPosition == 0 if (state == SCROLL_STATE_IDLE) { isManuallyScrolling = false } } private fun getPositionX(positionX: Float): Float { if (currentScale < 1) { return 0f } val maxPositionX = halfWidth * (currentScale - 1) return positionX.coerceIn(-maxPositionX, maxPositionX) } private fun getPositionY(positionY: Float): Float { if (currentScale < 1) { return (originalHeight / 2 - halfHeight).toFloat() } val maxPositionY = halfHeight * (currentScale - 1) return positionY.coerceIn(-maxPositionY, maxPositionY) } private fun zoom( fromRate: Float, toRate: Float, fromX: Float, toX: Float, fromY: Float, toY: Float, ) { isZooming = true val animatorSet = AnimatorSet() val translationXAnimator = ValueAnimator.ofFloat(fromX, toX) translationXAnimator.addUpdateListener { animation -> x = animation.animatedValue as Float } val translationYAnimator = ValueAnimator.ofFloat(fromY, toY) translationYAnimator.addUpdateListener { animation -> y = animation.animatedValue as Float } val scaleAnimator = ValueAnimator.ofFloat(fromRate, toRate) scaleAnimator.addUpdateListener { animation -> currentScale = animation.animatedValue as Float setScaleRate(currentScale) } animatorSet.playTogether(translationXAnimator, translationYAnimator, scaleAnimator) animatorSet.duration = ANIMATOR_DURATION_TIME.toLong() animatorSet.interpolator = DecelerateInterpolator() animatorSet.start() animatorSet.doOnEnd { isZooming = false currentScale = toRate } } fun zoomFling(velocityX: Int, velocityY: Int): Boolean { if (currentScale <= 1f) return false val distanceTimeFactor = 0.4f val animatorSet = AnimatorSet() if (velocityX != 0) { val dx = (distanceTimeFactor * velocityX / 2) val newX = getPositionX(x + dx) val translationXAnimator = ValueAnimator.ofFloat(x, newX) translationXAnimator.addUpdateListener { animation -> x = getPositionX(animation.animatedValue as Float) } animatorSet.play(translationXAnimator) } if (velocityY != 0 && (atFirstPosition || atLastPosition)) { val dy = (distanceTimeFactor * velocityY / 2) val newY = getPositionY(y + dy) val translationYAnimator = ValueAnimator.ofFloat(y, newY) translationYAnimator.addUpdateListener { animation -> y = getPositionY(animation.animatedValue as Float) } animatorSet.play(translationYAnimator) } animatorSet.duration = 400 animatorSet.interpolator = DecelerateInterpolator() animatorSet.start() return true } private fun zoomScrollBy(dx: Int, dy: Int) { if (dx != 0) { x = getPositionX(x + dx) } if (dy != 0) { y = getPositionY(y + dy) } } private fun setScaleRate(rate: Float) { scaleX = rate scaleY = rate } fun onScale(scaleFactor: Float) { currentScale *= scaleFactor currentScale = currentScale.coerceIn( minRate, MAX_SCALE_RATE, ) setScaleRate(currentScale) layoutParams.height = if (currentScale < 1) { (originalHeight / currentScale).toInt() } else { originalHeight } halfHeight = layoutParams.height / 2 if (currentScale != DEFAULT_RATE) { x = getPositionX(x) y = getPositionY(y) } else { x = 0f y = 0f } requestLayout() } fun onScaleBegin() { if (detector.isDoubleTapping) { detector.isQuickScaling = true } } fun onScaleEnd() { if (scaleX < minRate) { zoom(currentScale, minRate, x, 0f, y, 0f) } } fun onManualScroll() { isManuallyScrolling = true } inner class GestureListener : GestureDetectorWithLongTap.Listener() { override fun onSingleTapConfirmed(ev: MotionEvent): Boolean { if (!tapDuringManualScroll) { tapListener?.invoke(ev) } return false } override fun onDoubleTap(ev: MotionEvent): Boolean { detector.isDoubleTapping = true return false } fun onDoubleTapConfirmed(ev: MotionEvent) { if (!isZooming && doubleTapZoom) { if (scaleX != DEFAULT_RATE) { zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f) layoutParams.height = originalHeight halfHeight = layoutParams.height / 2 requestLayout() } else { val toScale = 2f val toX = (halfWidth - ev.x) * (toScale - 1) val toY = (halfHeight - ev.y) * (toScale - 1) zoom(DEFAULT_RATE, toScale, 0f, toX, 0f, toY) } } } override fun onLongTapConfirmed(ev: MotionEvent) { if (longTapListener?.invoke(ev) == true) { performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) } } } inner class Detector : GestureDetectorWithLongTap(context, listener) { private var scrollPointerId = 0 private var downX = 0 private var downY = 0 private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop private var isZoomDragging = false var isDoubleTapping = false var isQuickScaling = false override fun onTouchEvent(ev: MotionEvent): Boolean { val action = ev.actionMasked val actionIndex = ev.actionIndex when (action) { MotionEvent.ACTION_DOWN -> { scrollPointerId = ev.getPointerId(0) downX = (ev.x + 0.5f).toInt() downY = (ev.y + 0.5f).toInt() } MotionEvent.ACTION_POINTER_DOWN -> { scrollPointerId = ev.getPointerId(actionIndex) downX = (ev.getX(actionIndex) + 0.5f).toInt() downY = (ev.getY(actionIndex) + 0.5f).toInt() } MotionEvent.ACTION_MOVE -> { if (isDoubleTapping && isQuickScaling) { return true } val index = ev.findPointerIndex(scrollPointerId) if (index < 0) { return false } val x = (ev.getX(index) + 0.5f).toInt() val y = (ev.getY(index) + 0.5f).toInt() var dx = x - downX var dy = if (atFirstPosition || atLastPosition) y - downY else 0 if (!isZoomDragging && currentScale > 1f) { var startScroll = false if (abs(dx) > touchSlop) { if (dx < 0) { dx += touchSlop } else { dx -= touchSlop } startScroll = true } if (abs(dy) > touchSlop) { if (dy < 0) { dy += touchSlop } else { dy -= touchSlop } startScroll = true } if (startScroll) { isZoomDragging = true } } if (isZoomDragging) { zoomScrollBy(dx, dy) } } MotionEvent.ACTION_UP -> { if (isDoubleTapping && !isQuickScaling) { listener.onDoubleTapConfirmed(ev) } isZoomDragging = false isDoubleTapping = false isQuickScaling = false } MotionEvent.ACTION_CANCEL -> { isZoomDragging = false isDoubleTapping = false isQuickScaling = false } } return super.onTouchEvent(ev) } } } private const val ANIMATOR_DURATION_TIME = 200 private const val MIN_RATE = 0.5f private const val DEFAULT_RATE = 1f private const val MAX_SCALE_RATE = 3f ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonSubsamplingImageView.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView /** * Implementation of subsampling scale image view that ignores all touch events, because the * webtoon viewer handles all the gestures. */ class WebtoonSubsamplingImageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, ) : SubsamplingScaleImageView(context, attrs) { override fun onTouchEvent(event: MotionEvent): Boolean { return false } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.view.Gravity import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.LinearLayout import androidx.appcompat.widget.AppCompatButton import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isNotEmpty import androidx.core.view.isVisible import com.google.android.material.progressindicator.CircularProgressIndicator import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.viewer.ReaderTransitionView import eu.kanade.tachiyomi.util.system.dpToPx import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR /** * Holder of the webtoon viewer that contains a chapter transition. */ class WebtoonTransitionHolder( val layout: LinearLayout, viewer: WebtoonViewer, ) : WebtoonBaseHolder(layout, viewer) { private val scope = MainScope() private var stateJob: Job? = null private val transitionView = ReaderTransitionView(context) /** * View container of the current status of the transition page. Child views will be added * dynamically. */ private var pagesContainer = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL gravity = Gravity.CENTER } init { layout.layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT) layout.orientation = LinearLayout.VERTICAL layout.gravity = Gravity.CENTER val paddingVertical = 128.dpToPx val paddingHorizontal = 32.dpToPx layout.setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical) val childMargins = 16.dpToPx val childParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply { setMargins(0, childMargins, 0, childMargins) } layout.addView(transitionView) layout.addView(pagesContainer, childParams) } /** * Binds the given [transition] with this view holder, subscribing to its state. */ fun bind(transition: ChapterTransition) { transitionView.bind(transition, viewer.downloadManager, viewer.activity.viewModel.manga) transition.to?.let { observeStatus(it, transition) } } /** * Called when the view is recycled and being added to the view pool. */ override fun recycle() { stateJob?.cancel() } /** * Observes the status of the page list of the next/previous chapter. Whenever there's a new * state, the pages container is cleaned up before setting the new state. */ private fun observeStatus(chapter: ReaderChapter, transition: ChapterTransition) { stateJob?.cancel() stateJob = scope.launch { chapter.stateFlow .collectLatest { state -> pagesContainer.removeAllViews() when (state) { is ReaderChapter.State.Loading -> setLoading() is ReaderChapter.State.Error -> setError(state.error, transition) is ReaderChapter.State.Wait, is ReaderChapter.State.Loaded -> { // No additional view is added } } pagesContainer.isVisible = pagesContainer.isNotEmpty() } } } /** * Sets the loading state on the pages container. */ private fun setLoading() { val progress = CircularProgressIndicator(context) progress.isIndeterminate = true val textView = AppCompatTextView(context).apply { wrapContent() text = context.stringResource(MR.strings.transition_pages_loading) } pagesContainer.addView(progress) pagesContainer.addView(textView) } /** * Sets the error state on the pages container. */ private fun setError(error: Throwable, transition: ChapterTransition) { val textView = AppCompatTextView(context).apply { wrapContent() text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "") } val retryBtn = AppCompatButton(context).apply { wrapContent() text = context.stringResource(MR.strings.action_retry) setOnClickListener { val toChapter = transition.to if (toChapter != null) { viewer.activity.requestPreloadChapter(toChapter) } } } pagesContainer.addView(textView) pagesContainer.addView(retryBtn) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt ================================================ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.graphics.PointF import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import androidx.core.app.ActivityCompat import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.WebtoonLayoutManager import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation.NavigationRegion import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import kotlin.math.max import kotlin.math.min /** * Implementation of a [Viewer] to display pages with a [RecyclerView]. */ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = true) : Viewer { val downloadManager: DownloadManager by injectLazy() private val scope = MainScope() /** * Recycler view used by this viewer. */ val recycler = WebtoonRecyclerView(activity) /** * Frame containing the recycler view. */ private val frame = WebtoonFrame(activity) /** * Distance to scroll when the user taps on one side of the recycler view. */ private val scrollDistance = activity.resources.displayMetrics.heightPixels * 3 / 4 /** * Layout manager of the recycler view. */ private val layoutManager = WebtoonLayoutManager(activity, scrollDistance) /** * Configuration used by this viewer, like allow taps, or crop image borders. */ val config = WebtoonConfig(scope) /** * Adapter of the recycler view. */ private val adapter = WebtoonAdapter(this) /** * Currently active item. It can be a chapter page or a chapter transition. */ private var currentPage: Any? = null private val threshold: Int = Injekt.get() .readerHideThreshold .get() .threshold init { recycler.setItemViewCacheSize(RECYCLER_VIEW_CACHE_SIZE) recycler.isVisible = false // Don't let the recycler layout yet recycler.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) recycler.isFocusable = false recycler.itemAnimator = null recycler.layoutManager = layoutManager recycler.adapter = adapter recycler.addOnScrollListener( object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { onScrolled() if ((dy > threshold || dy < -threshold) && activity.viewModel.state.value.menuVisible) { activity.hideMenu() } if (dy < 0) { val firstIndex = layoutManager.findFirstVisibleItemPosition() val firstItem = adapter.items.getOrNull(firstIndex) if (firstItem is ChapterTransition.Prev && firstItem.to != null) { activity.requestPreloadChapter(firstItem.to) } } val lastIndex = layoutManager.findLastEndVisibleItemPosition() val lastItem = adapter.items.getOrNull(lastIndex) if (lastItem is ChapterTransition.Next && lastItem.to == null) { activity.showMenu() } } }, ) recycler.tapListener = { event -> val viewPosition = IntArray(2) recycler.getLocationOnScreen(viewPosition) val viewPositionRelativeToWindow = IntArray(2) recycler.getLocationInWindow(viewPositionRelativeToWindow) val pos = PointF( (event.rawX - viewPosition[0] + viewPositionRelativeToWindow[0]) / recycler.width, (event.rawY - viewPosition[1] + viewPositionRelativeToWindow[1]) / recycler.originalHeight, ) when (config.navigator.getAction(pos)) { NavigationRegion.MENU -> activity.toggleMenu() NavigationRegion.NEXT, NavigationRegion.RIGHT -> scrollDown() NavigationRegion.PREV, NavigationRegion.LEFT -> scrollUp() } } recycler.longTapListener = f@{ event -> if (activity.viewModel.state.value.menuVisible || config.longTapEnabled) { val child = recycler.findChildViewUnder(event.x, event.y) if (child != null) { val position = recycler.getChildAdapterPosition(child) val item = adapter.items.getOrNull(position) if (item is ReaderPage) { activity.onPageLongTap(item) return@f true } } } false } config.imagePropertyChangedListener = { refreshAdapter() } config.themeChangedListener = { ActivityCompat.recreate(activity) } config.doubleTapZoomChangedListener = { frame.doubleTapZoom = it } config.zoomPropertyChangedListener = { frame.zoomOutDisabled = it } config.navigationModeChangedListener = { val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart) } frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) frame.addView(recycler) } private fun checkAllowPreload(page: ReaderPage?): Boolean { // Page is transition page - preload allowed page ?: return true // Initial opening - preload allowed currentPage ?: return true val nextItem = adapter.items.getOrNull(adapter.items.size - 1) val nextChapter = (nextItem as? ChapterTransition.Next)?.to ?: (nextItem as? ReaderPage)?.chapter // Allow preload for // 1. Going between pages of same chapter // 2. Next chapter page return when (page.chapter) { (currentPage as? ReaderPage)?.chapter -> true nextChapter -> true else -> false } } /** * Returns the view this viewer uses. */ override fun getView(): View { return frame } /** * Destroys this viewer. Called when leaving the reader or swapping viewers. */ override fun destroy() { super.destroy() scope.cancel() } /** * Called from the RecyclerView listener when a [page] is marked as active. It notifies the * activity of the change and requests the preload of the next chapter if this is the last page. */ private fun onPageSelected(page: ReaderPage, allowPreload: Boolean) { val pages = page.chapter.pages ?: return logcat { "onPageSelected: ${page.number}/${pages.size}" } activity.onPageSelected(page) // Preload next chapter once we're within the last 5 pages of the current chapter val inPreloadRange = pages.size - page.number < 5 if (inPreloadRange && allowPreload && page.chapter == adapter.currentChapter) { logcat { "Request preload next chapter because we're at page ${page.number} of ${pages.size}" } val nextItem = adapter.items.getOrNull(adapter.items.size - 1) val transitionChapter = (nextItem as? ChapterTransition.Next)?.to ?: (nextItem as?ReaderPage)?.chapter if (transitionChapter != null) { logcat { "Requesting to preload chapter ${transitionChapter.chapter.chapter_number}" } activity.requestPreloadChapter(transitionChapter) } } } /** * Called from the RecyclerView listener when a [transition] is marked as active. It request the * preload of the destination chapter of the transition. */ private fun onTransitionSelected(transition: ChapterTransition) { logcat { "onTransitionSelected: $transition" } val toChapter = transition.to if (toChapter != null) { logcat { "Request preload destination chapter because we're on the transition" } activity.requestPreloadChapter(toChapter) } } /** * Tells this viewer to set the given [chapters] as active. */ override fun setChapters(chapters: ViewerChapters) { val forceTransition = config.alwaysShowChapterTransition || currentPage is ChapterTransition adapter.setChapters(chapters, forceTransition) if (recycler.isGone) { logcat { "Recycler first layout" } val pages = chapters.currChapter.pages ?: return moveToPage(pages[min(chapters.currChapter.requestedPage, pages.lastIndex)]) recycler.isVisible = true } } /** * Tells this viewer to move to the given [page]. */ override fun moveToPage(page: ReaderPage) { val position = adapter.items.indexOf(page) if (position != -1) { layoutManager.scrollToPositionWithOffset(position, 0) if (layoutManager.findLastEndVisibleItemPosition() == -1) { onScrolled(pos = position) } } else { logcat { "Page $page not found in adapter" } } } fun onScrolled(pos: Int? = null) { val position = pos ?: layoutManager.findLastEndVisibleItemPosition() val item = adapter.items.getOrNull(position) val allowPreload = checkAllowPreload(item as? ReaderPage) if (item != null && currentPage != item) { currentPage = item when (item) { is ReaderPage -> onPageSelected(item, allowPreload) is ChapterTransition -> onTransitionSelected(item) } } } /** * Scrolls up by [scrollDistance]. */ private fun scrollUp() { if (config.usePageTransitions) { recycler.smoothScrollBy(0, -scrollDistance) } else { recycler.scrollBy(0, -scrollDistance) } } /** * Scrolls down by [scrollDistance]. */ private fun scrollDown() { if (config.usePageTransitions) { recycler.smoothScrollBy(0, scrollDistance) } else { recycler.scrollBy(0, scrollDistance) } } /** * Called from the containing activity when a key [event] is received. It should return true * if the event was handled, false otherwise. */ override fun handleKeyEvent(event: KeyEvent): Boolean { val isUp = event.action == KeyEvent.ACTION_UP when (event.keyCode) { KeyEvent.KEYCODE_VOLUME_DOWN -> { if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) { return false } else if (isUp) { if (!config.volumeKeysInverted) scrollDown() else scrollUp() } } KeyEvent.KEYCODE_VOLUME_UP -> { if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) { return false } else if (isUp) { if (!config.volumeKeysInverted) scrollUp() else scrollDown() } } KeyEvent.KEYCODE_MENU -> if (isUp) activity.toggleMenu() KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_PAGE_UP, -> if (isUp) scrollUp() KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_PAGE_DOWN, -> if (isUp) scrollDown() else -> return false } return true } /** * Called from the containing activity when a generic motion [event] is received. It should * return true if the event was handled, false otherwise. */ override fun handleGenericMotionEvent(event: MotionEvent): Boolean { return false } /** * Notifies adapter of changes around the current page to trigger a relayout in the recycler. * Used when an image configuration is changed. */ private fun refreshAdapter() { val position = layoutManager.findLastEndVisibleItemPosition() adapter.refresh() adapter.notifyItemRangeChanged( max(0, position - 3), min(position + 3, adapter.itemCount - 1), ) } } // Double the cache size to reduce rebinds/recycles incurred by the extra layout space on scroll direction changes private const val RECYCLER_VIEW_CACHE_SIZE = 4 ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt ================================================ package eu.kanade.tachiyomi.ui.security import android.os.Bundle import androidx.biometric.BiometricPrompt import androidx.fragment.app.FragmentActivity import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.startAuthentication import logcat.LogPriority import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR /** * Blank activity with a BiometricPrompt. */ class UnlockActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) startAuthentication( stringResource(MR.strings.unlock_app_title, stringResource(MR.strings.app_name)), confirmationRequired = false, callback = object : AuthenticatorUtil.AuthenticationCallback() { override fun onAuthenticationError( activity: FragmentActivity?, errorCode: Int, errString: CharSequence, ) { super.onAuthenticationError(activity, errorCode, errString) logcat(LogPriority.ERROR) { errString.toString() } finishAffinity() } override fun onAuthenticationSucceeded( activity: FragmentActivity?, result: BiometricPrompt.AuthenticationResult, ) { super.onAuthenticationSucceeded(activity, result) SecureActivityDelegate.unlock() finish() } }, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsScreen.kt ================================================ package eu.kanade.tachiyomi.ui.setting import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.more.settings.screen.SettingsAppearanceScreen import eu.kanade.presentation.more.settings.screen.SettingsDataScreen import eu.kanade.presentation.more.settings.screen.SettingsMainScreen import eu.kanade.presentation.more.settings.screen.SettingsTrackingScreen import eu.kanade.presentation.more.settings.screen.about.AboutScreen import eu.kanade.presentation.util.DefaultNavigatorScreenTransition import eu.kanade.presentation.util.LocalBackPress import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.isTabletUi import tachiyomi.presentation.core.components.TwoPanelBox class SettingsScreen( private val destination: Int? = null, ) : Screen() { constructor(destination: Destination) : this(destination.id) @Composable override fun Content() { val parentNavigator = LocalNavigator.currentOrThrow if (!isTabletUi()) { Navigator( screen = when (destination) { Destination.About.id -> AboutScreen Destination.DataAndStorage.id -> SettingsDataScreen Destination.Tracking.id -> SettingsTrackingScreen else -> SettingsMainScreen }, onBackPressed = null, ) { val pop: () -> Unit = { if (it.canPop) { it.pop() } else { parentNavigator.pop() } } CompositionLocalProvider(LocalBackPress provides pop) { DefaultNavigatorScreenTransition(navigator = it) } } } else { Navigator( screen = when (destination) { Destination.About.id -> AboutScreen Destination.DataAndStorage.id -> SettingsDataScreen Destination.Tracking.id -> SettingsTrackingScreen else -> SettingsAppearanceScreen }, onBackPressed = null, ) { val insets = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal) TwoPanelBox( modifier = Modifier .windowInsetsPadding(insets) .consumeWindowInsets(insets), startContent = { CompositionLocalProvider(LocalBackPress provides parentNavigator::pop) { SettingsMainScreen.Content(twoPane = true) } }, endContent = { DefaultNavigatorScreenTransition(navigator = it) }, ) } } } sealed class Destination(val id: Int) { data object About : Destination(0) data object DataAndStorage : Destination(1) data object Tracking : Destination(2) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BaseOAuthLoginActivity.kt ================================================ package eu.kanade.tachiyomi.ui.setting.track import android.content.Intent import android.net.Uri import android.os.Bundle import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.util.view.setComposeContent import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.injectLazy abstract class BaseOAuthLoginActivity : BaseActivity() { internal val trackerManager: TrackerManager by injectLazy() abstract fun handleResult(uri: Uri) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setComposeContent { LoadingScreen() } val data = intent.data if (data == null) { returnToSettings() } else { handleResult(data) } } internal fun returnToSettings() { finish() val intent = Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) } startActivity(intent) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/TrackLoginActivity.kt ================================================ package eu.kanade.tachiyomi.ui.setting.track import android.net.Uri import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.launch class TrackLoginActivity : BaseOAuthLoginActivity() { override fun handleResult(uri: Uri) { val data = when { !uri.encodedQuery.isNullOrBlank() -> uri.encodedQuery !uri.encodedFragment.isNullOrBlank() -> uri.encodedFragment else -> null } ?.split("&") ?.filter { it.isNotBlank() } ?.associate { val parts = it.split("=", limit = 2).map(Uri::decode) parts[0] to parts.getOrNull(1) } .orEmpty() lifecycleScope.launch { when (uri.host) { "anilist-auth" -> handleAniList(data["access_token"]) "bangumi-auth" -> handleBangumi(data["code"]) "myanimelist-auth" -> handleMyAnimeList(data["code"]) "shikimori-auth" -> handleShikimori(data["code"]) } returnToSettings() } } private suspend fun handleAniList(accessToken: String?) { if (accessToken != null) { trackerManager.aniList.login(accessToken) } else { trackerManager.aniList.logout() } } private suspend fun handleBangumi(code: String?) { if (code != null) { trackerManager.bangumi.login(code) } else { trackerManager.bangumi.logout() } } private suspend fun handleMyAnimeList(code: String?) { if (code != null) { trackerManager.myAnimeList.login(code) } else { trackerManager.myAnimeList.logout() } } private suspend fun handleShikimori(code: String?) { if (code != null) { trackerManager.shikimori.login(code) } else { trackerManager.shikimori.logout() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreen.kt ================================================ package eu.kanade.tachiyomi.ui.stats import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.stats.StatsScreenContent import eu.kanade.presentation.more.stats.StatsScreenState import eu.kanade.presentation.util.Screen import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class StatsScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { StatsScreenModel() } val state by screenModel.state.collectAsState() Scaffold( topBar = { scrollBehavior -> AppBar( title = stringResource(MR.strings.label_stats), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) }, ) { paddingValues -> if (state is StatsScreenState.Loading) { LoadingScreen() return@Scaffold } StatsScreenContent( state = state as StatsScreenState.Success, paddingValues = paddingValues, ) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.stats import androidx.compose.ui.util.fastDistinctBy import androidx.compose.ui.util.fastFilter import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.util.fastCountNot import eu.kanade.presentation.more.stats.StatsScreenState import eu.kanade.presentation.more.stats.data.StatsData import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.source.model.SManga import kotlinx.coroutines.flow.update import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.history.interactor.GetTotalReadDuration import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_HAS_UNREAD import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_READ import tachiyomi.domain.manga.interactor.GetLibraryManga import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.model.Track import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class StatsScreenModel( private val downloadManager: DownloadManager = Injekt.get(), private val getLibraryManga: GetLibraryManga = Injekt.get(), private val getTotalReadDuration: GetTotalReadDuration = Injekt.get(), private val getTracks: GetTracks = Injekt.get(), private val preferences: LibraryPreferences = Injekt.get(), private val trackerManager: TrackerManager = Injekt.get(), ) : StateScreenModel(StatsScreenState.Loading) { private val loggedInTrackers by lazy { trackerManager.loggedInTrackers() } init { screenModelScope.launchIO { val libraryManga = getLibraryManga.await() val distinctLibraryManga = libraryManga.fastDistinctBy { it.id } val mangaTrackMap = getMangaTrackMap(distinctLibraryManga) val scoredMangaTrackerMap = getScoredMangaTrackMap(mangaTrackMap) val meanScore = getTrackMeanScore(scoredMangaTrackerMap) val overviewStatData = StatsData.Overview( libraryMangaCount = distinctLibraryManga.size, completedMangaCount = distinctLibraryManga.count { it.manga.status.toInt() == SManga.COMPLETED && it.unreadCount == 0L }, totalReadDuration = getTotalReadDuration.await(), ) val titlesStatData = StatsData.Titles( globalUpdateItemCount = getGlobalUpdateItemCount(libraryManga), startedMangaCount = distinctLibraryManga.count { it.hasStarted }, localMangaCount = distinctLibraryManga.count { it.manga.isLocal() }, ) val chaptersStatData = StatsData.Chapters( totalChapterCount = distinctLibraryManga.sumOf { it.totalChapters }.toInt(), readChapterCount = distinctLibraryManga.sumOf { it.readCount }.toInt(), downloadCount = downloadManager.getDownloadCount(), ) val trackersStatData = StatsData.Trackers( trackedTitleCount = mangaTrackMap.count { it.value.isNotEmpty() }, meanScore = meanScore, trackerCount = loggedInTrackers.size, ) mutableState.update { StatsScreenState.Success( overview = overviewStatData, titles = titlesStatData, chapters = chaptersStatData, trackers = trackersStatData, ) } } } private fun getGlobalUpdateItemCount(libraryManga: List): Int { val includedCategories = preferences.updateCategories.get().map { it.toLong() } val excludedCategories = preferences.updateCategoriesExclude.get().map { it.toLong() } val updateRestrictions = preferences.autoUpdateMangaRestrictions.get() return libraryManga.filter { val included = includedCategories.isEmpty() || it.categories.intersect(includedCategories).isNotEmpty() val excluded = it.categories.intersect(excludedCategories).isNotEmpty() included && !excluded } .fastCountNot { (MANGA_NON_COMPLETED in updateRestrictions && it.manga.status.toInt() == SManga.COMPLETED) || (MANGA_HAS_UNREAD in updateRestrictions && it.unreadCount != 0L) || (MANGA_NON_READ in updateRestrictions && it.totalChapters > 0 && !it.hasStarted) } } private suspend fun getMangaTrackMap(libraryManga: List): Map> { val loggedInTrackerIds = loggedInTrackers.map { it.id }.toHashSet() return libraryManga.associate { manga -> val tracks = getTracks.await(manga.id) .fastFilter { it.trackerId in loggedInTrackerIds } manga.id to tracks } } private fun getScoredMangaTrackMap(mangaTrackMap: Map>): Map> { return mangaTrackMap.mapNotNull { (mangaId, tracks) -> val trackList = tracks.mapNotNull { track -> track.takeIf { it.score > 0.0 } } if (trackList.isEmpty()) return@mapNotNull null mangaId to trackList }.toMap() } private fun getTrackMeanScore(scoredMangaTrackMap: Map>): Double { return scoredMangaTrackMap .map { (_, tracks) -> tracks.map(::get10PointScore).average() } .fastFilter { !it.isNaN() } .average() } private fun get10PointScore(track: Track): Double { val service = trackerManager.get(track.trackerId)!! return service.get10PointScore(track) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.updates import android.app.Application import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Immutable import androidx.compose.runtime.getValue import androidx.compose.ui.util.fastFilter import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.preference.asState import eu.kanade.core.util.addOrRemove import eu.kanade.core.util.insertSeparators import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.updates.UpdatesUiModel import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.util.lang.toLocalDate import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.mutate import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChapter import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.ChapterUpdate import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.model.applyFilter import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.updates.interactor.GetUpdates import tachiyomi.domain.updates.model.UpdatesWithRelations import tachiyomi.domain.updates.service.UpdatesPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.ZonedDateTime class UpdatesScreenModel( private val sourceManager: SourceManager = Injekt.get(), private val downloadManager: DownloadManager = Injekt.get(), private val downloadCache: DownloadCache = Injekt.get(), private val updateChapter: UpdateChapter = Injekt.get(), private val setReadStatus: SetReadStatus = Injekt.get(), private val getUpdates: GetUpdates = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val getChapter: GetChapter = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), private val updatesPreferences: UpdatesPreferences = Injekt.get(), val snackbarHostState: SnackbarHostState = SnackbarHostState(), ) : StateScreenModel(State()) { private val _events: Channel = Channel(Int.MAX_VALUE) val events: Flow = _events.receiveAsFlow() val lastUpdated by libraryPreferences.lastUpdatedTimestamp.asState(screenModelScope) // First and last selected index in list private val selectedPositions: Array = arrayOf(-1, -1) private val selectedChapterIds: HashSet = HashSet() init { screenModelScope.launchIO { // Set date limit for recent chapters val limit = ZonedDateTime.now().minusMonths(3).toInstant() combine( // needed for SQL filters (unread, started, bookmarked, etc) getUpdatesItemPreferenceFlow() .distinctUntilChanged() .flatMapLatest { getUpdates.subscribe( limit, unread = it.filterUnread.toBooleanOrNull(), started = it.filterStarted.toBooleanOrNull(), bookmarked = it.filterBookmarked.toBooleanOrNull(), hideExcludedScanlators = it.filterExcludedScanlators, ).distinctUntilChanged() }, downloadCache.changes, downloadManager.queueState, // needed for Kotlin filters (downloaded) getUpdatesItemPreferenceFlow().distinctUntilChanged { old, new -> old.filterDownloaded == new.filterDownloaded }, ) { updates, _, _, itemPreferences -> updates .toUpdateItems() .applyFilters(itemPreferences) .toPersistentList() } .collectLatest { updateItems -> mutableState.update { it.copy( isLoading = false, items = updateItems, ) } } } screenModelScope.launchIO { merge(downloadManager.statusFlow(), downloadManager.progressFlow()) .catch { logcat(LogPriority.ERROR, it) } .collect(this@UpdatesScreenModel::updateDownloadState) } getUpdatesItemPreferenceFlow() .map { prefs -> listOf( prefs.filterUnread, prefs.filterDownloaded, prefs.filterStarted, prefs.filterBookmarked, ) .any { it != TriState.DISABLED } } .distinctUntilChanged() .onEach { mutableState.update { state -> state.copy(hasActiveFilters = it) } } .launchIn(screenModelScope) } private fun List.applyFilters( preferences: ItemPreferences, ): List { val filterDownloaded = preferences.filterDownloaded val filterFnDownloaded: (UpdatesItem) -> Boolean = { applyFilter(filterDownloaded) { it.downloadStateProvider() == Download.State.DOWNLOADED } } return fastFilter { filterFnDownloaded(it) } } private fun List.toUpdateItems(): List { return this .map { update -> val activeDownload = downloadManager.getQueuedDownloadOrNull(update.chapterId) val downloaded = downloadManager.isChapterDownloaded( update.chapterName, update.scanlator, update.chapterUrl, update.mangaTitle, update.sourceId, ) val downloadState = when { activeDownload != null -> activeDownload.status downloaded -> Download.State.DOWNLOADED else -> Download.State.NOT_DOWNLOADED } UpdatesItem( update = update, downloadStateProvider = { downloadState }, downloadProgressProvider = { activeDownload?.progress ?: 0 }, selected = update.chapterId in selectedChapterIds, ) } } fun updateLibrary(): Boolean { val started = LibraryUpdateJob.startNow(Injekt.get()) screenModelScope.launch { _events.send(Event.LibraryUpdateTriggered(started)) } return started } /** * Update status of chapters. * * @param download download object containing progress. */ private fun updateDownloadState(download: Download) { mutableState.update { state -> val newItems = state.items.mutate { list -> val modifiedIndex = list.indexOfFirst { it.update.chapterId == download.chapter.id } if (modifiedIndex < 0) return@mutate val item = list[modifiedIndex] list[modifiedIndex] = item.copy( downloadStateProvider = { download.status }, downloadProgressProvider = { download.progress }, ) } state.copy(items = newItems) } } fun downloadChapters(items: List, action: ChapterDownloadAction) { if (items.isEmpty()) return screenModelScope.launch { when (action) { ChapterDownloadAction.START -> { downloadChapters(items) if (items.any { it.downloadStateProvider() == Download.State.ERROR }) { downloadManager.startDownloads() } } ChapterDownloadAction.START_NOW -> { val chapterId = items.singleOrNull()?.update?.chapterId ?: return@launch startDownloadingNow(chapterId) } ChapterDownloadAction.CANCEL -> { val chapterId = items.singleOrNull()?.update?.chapterId ?: return@launch cancelDownload(chapterId) } ChapterDownloadAction.DELETE -> { deleteChapters(items) } } toggleAllSelection(false) } } private fun startDownloadingNow(chapterId: Long) { downloadManager.startDownloadNow(chapterId) } private fun cancelDownload(chapterId: Long) { val activeDownload = downloadManager.getQueuedDownloadOrNull(chapterId) ?: return downloadManager.cancelQueuedDownloads(listOf(activeDownload)) updateDownloadState(activeDownload.apply { status = Download.State.NOT_DOWNLOADED }) } /** * Mark the selected updates list as read/unread. * @param updates the list of selected updates. * @param read whether to mark chapters as read or unread. */ fun markUpdatesRead(updates: List, read: Boolean) { screenModelScope.launchIO { setReadStatus.await( read = read, chapters = updates .mapNotNull { getChapter.await(it.update.chapterId) } .toTypedArray(), ) } toggleAllSelection(false) } /** * Bookmarks the given list of chapters. * @param updates the list of chapters to bookmark. */ fun bookmarkUpdates(updates: List, bookmark: Boolean) { screenModelScope.launchIO { updates .filterNot { it.update.bookmark == bookmark } .map { ChapterUpdate(id = it.update.chapterId, bookmark = bookmark) } .let { updateChapter.awaitAll(it) } } toggleAllSelection(false) } /** * Downloads the given list of chapters with the manager. * @param updatesItem the list of chapters to download. */ private fun downloadChapters(updatesItem: List) { screenModelScope.launchNonCancellable { val groupedUpdates = updatesItem.groupBy { it.update.mangaId }.values for (updates in groupedUpdates) { val mangaId = updates.first().update.mangaId val manga = getManga.await(mangaId) ?: continue // Don't download if source isn't available sourceManager.get(manga.source) ?: continue val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) } downloadManager.downloadChapters(manga, chapters) } } } /** * Delete selected chapters * * @param updatesItem list of chapters */ fun deleteChapters(updatesItem: List) { screenModelScope.launchNonCancellable { updatesItem .groupBy { it.update.mangaId } .entries .forEach { (mangaId, updates) -> val manga = getManga.await(mangaId) ?: return@forEach val source = sourceManager.get(manga.source) ?: return@forEach val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) } downloadManager.deleteChapters(chapters, manga, source) } } toggleAllSelection(false) } fun showConfirmDeleteChapters(updatesItem: List) { setDialog(Dialog.DeleteConfirmation(updatesItem)) } fun toggleSelection( item: UpdatesItem, selected: Boolean, fromLongPress: Boolean = false, ) { mutableState.update { state -> val newItems = state.items.toMutableList().apply { val selectedIndex = indexOfFirst { it.update.chapterId == item.update.chapterId } if (selectedIndex < 0) return@apply val selectedItem = get(selectedIndex) if (selectedItem.selected == selected) return@apply val firstSelection = none { it.selected } set(selectedIndex, selectedItem.copy(selected = selected)) selectedChapterIds.addOrRemove(item.update.chapterId, selected) if (selected && fromLongPress) { if (firstSelection) { selectedPositions[0] = selectedIndex selectedPositions[1] = selectedIndex } else { // Try to select the items in-between when possible val range: IntRange if (selectedIndex < selectedPositions[0]) { range = selectedIndex + 1.. selectedPositions[1]) { range = (selectedPositions[1] + 1).. selectedPositions[1]) { selectedPositions[1] = selectedIndex } } } } state.copy(items = newItems.toPersistentList()) } } fun toggleAllSelection(selected: Boolean) { mutableState.update { state -> val newItems = state.items.map { selectedChapterIds.addOrRemove(it.update.chapterId, selected) it.copy(selected = selected) } state.copy(items = newItems.toPersistentList()) } selectedPositions[0] = -1 selectedPositions[1] = -1 } fun invertSelection() { mutableState.update { state -> val newItems = state.items.map { selectedChapterIds.addOrRemove(it.update.chapterId, !it.selected) it.copy(selected = !it.selected) } state.copy(items = newItems.toPersistentList()) } selectedPositions[0] = -1 selectedPositions[1] = -1 } fun setDialog(dialog: Dialog?) { mutableState.update { it.copy(dialog = dialog) } } fun resetNewUpdatesCount() { libraryPreferences.newUpdatesCount.set(0) } private fun getUpdatesItemPreferenceFlow(): Flow { return combine( updatesPreferences.filterDownloaded.changes(), updatesPreferences.filterUnread.changes(), updatesPreferences.filterStarted.changes(), updatesPreferences.filterBookmarked.changes(), updatesPreferences.filterExcludedScanlators.changes(), ) { downloaded, unread, started, bookmarked, excludedScanlators -> ItemPreferences( filterDownloaded = downloaded, filterUnread = unread, filterStarted = started, filterBookmarked = bookmarked, filterExcludedScanlators = excludedScanlators, ) } } fun showFilterDialog() { mutableState.update { it.copy(dialog = Dialog.FilterSheet) } } @Immutable private data class ItemPreferences( val filterDownloaded: TriState, val filterUnread: TriState, val filterStarted: TriState, val filterBookmarked: TriState, val filterExcludedScanlators: Boolean, ) @Immutable data class State( val isLoading: Boolean = true, val hasActiveFilters: Boolean = false, val items: PersistentList = persistentListOf(), val dialog: Dialog? = null, ) { val selected = items.filter { it.selected } val selectionMode = selected.isNotEmpty() fun getUiModel(): List { return items .map { UpdatesUiModel.Item(it) } .insertSeparators { before, after -> val beforeDate = before?.item?.update?.dateFetch?.toLocalDate() val afterDate = after?.item?.update?.dateFetch?.toLocalDate() when { beforeDate != afterDate && afterDate != null -> UpdatesUiModel.Header(afterDate) // Return null to avoid adding a separator between two items. else -> null } } } } sealed interface Dialog { data class DeleteConfirmation(val toDelete: List) : Dialog data object FilterSheet : Dialog } sealed interface Event { data object InternalError : Event data class LibraryUpdateTriggered(val started: Boolean) : Event } } private fun TriState.toBooleanOrNull(): Boolean? { return when (this) { TriState.DISABLED -> null TriState.ENABLED_IS -> true TriState.ENABLED_NOT -> false } } @Immutable data class UpdatesItem( val update: UpdatesWithRelations, val downloadStateProvider: () -> Download.State, val downloadProgressProvider: () -> Int, val selected: Boolean = false, ) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesSettingsScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.updates import cafe.adriel.voyager.core.model.ScreenModel import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.getAndSet import tachiyomi.domain.updates.service.UpdatesPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class UpdatesSettingsScreenModel( val updatesPreferences: UpdatesPreferences = Injekt.get(), ) : ScreenModel { fun toggleFilter(preference: (UpdatesPreferences) -> Preference) { preference(updatesPreferences).getAndSet { it.next() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt ================================================ package eu.kanade.tachiyomi.ui.updates import androidx.compose.animation.graphics.res.animatedVectorResource import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.updates.UpdateScreen import eu.kanade.presentation.updates.UpdatesDeleteConfirmationDialog import eu.kanade.presentation.updates.UpdatesFilterDialog import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.download.DownloadQueueScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.updates.UpdatesScreenModel.Event import kotlinx.coroutines.flow.collectLatest import mihon.feature.upcoming.UpcomingScreen import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource data object UpdatesTab : Tab { override val options: TabOptions @Composable get() { val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter) return TabOptions( index = 1u, title = stringResource(MR.strings.label_recent_updates), icon = rememberAnimatedVectorPainter(image, isSelected), ) } override suspend fun onReselect(navigator: Navigator) { navigator.push(DownloadQueueScreen) } @Composable override fun Content() { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { UpdatesScreenModel() } val settingsScreenModel = rememberScreenModel { UpdatesSettingsScreenModel() } val state by screenModel.state.collectAsState() UpdateScreen( state = state, snackbarHostState = screenModel.snackbarHostState, lastUpdated = screenModel.lastUpdated, onClickCover = { item -> navigator.push(MangaScreen(item.update.mangaId)) }, onSelectAll = screenModel::toggleAllSelection, onInvertSelection = screenModel::invertSelection, onUpdateLibrary = screenModel::updateLibrary, onDownloadChapter = screenModel::downloadChapters, onMultiBookmarkClicked = screenModel::bookmarkUpdates, onMultiMarkAsReadClicked = screenModel::markUpdatesRead, onMultiDeleteClicked = screenModel::showConfirmDeleteChapters, onUpdateSelected = screenModel::toggleSelection, onOpenChapter = { val intent = ReaderActivity.newIntent(context, it.update.mangaId, it.update.chapterId) context.startActivity(intent) }, onCalendarClicked = { navigator.push(UpcomingScreen()) }, onFilterClicked = screenModel::showFilterDialog, hasActiveFilters = state.hasActiveFilters, ) val onDismissDialog = { screenModel.setDialog(null) } when (val dialog = state.dialog) { is UpdatesScreenModel.Dialog.DeleteConfirmation -> { UpdatesDeleteConfirmationDialog( onDismissRequest = onDismissDialog, onConfirm = { screenModel.deleteChapters(dialog.toDelete) }, ) } is UpdatesScreenModel.Dialog.FilterSheet -> { UpdatesFilterDialog( onDismissRequest = onDismissDialog, screenModel = settingsScreenModel, ) } null -> {} } LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> when (event) { Event.InternalError -> screenModel.snackbarHostState.showSnackbar( context.stringResource(MR.strings.internal_error), ) is Event.LibraryUpdateTriggered -> { val msg = if (event.started) { MR.strings.updating_library } else { MR.strings.update_already_running } screenModel.snackbarHostState.showSnackbar(context.stringResource(msg)) } } } } LaunchedEffect(state.selectionMode) { HomeScreen.showBottomNav(!state.selectionMode) } LaunchedEffect(state.isLoading) { if (!state.isLoading) { (context as? MainActivity)?.ready = true } } DisposableEffect(Unit) { screenModel.resetNewUpdatesCount() onDispose { screenModel.resetNewUpdatesCount() } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt ================================================ package eu.kanade.tachiyomi.ui.webview import android.app.Activity import android.app.assist.AssistContent import android.content.Context import android.content.Intent import android.os.Build import android.os.Bundle import android.widget.Toast import androidx.core.net.toUri import eu.kanade.presentation.webview.WebViewScreenContent import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.setComposeContent import logcat.LogPriority import okhttp3.HttpUrl.Companion.toHttpUrl import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class WebViewActivity : BaseActivity() { private val sourceManager: SourceManager by injectLazy() private val network: NetworkHelper by injectLazy() private var assistUrl: String? = null init { registerSecureActivity(this) } override fun onCreate(savedInstanceState: Bundle?) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { overrideActivityTransition( Activity.OVERRIDE_TRANSITION_OPEN, R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit, ) } else { @Suppress("DEPRECATION") overridePendingTransition(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit) } super.onCreate(savedInstanceState) if (!WebViewUtil.supportsWebView(this)) { toast(MR.strings.information_webview_required, Toast.LENGTH_LONG) finish() return } val url = intent.extras?.getString(URL_KEY) ?: return assistUrl = url var headers = emptyMap() (sourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? HttpSource)?.let { source -> try { headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to build headers" } } } setComposeContent { WebViewScreenContent( onNavigateUp = { finish() }, initialTitle = intent.extras?.getString(TITLE_KEY), url = url, headers = headers, onUrlChange = { assistUrl = it }, onShare = this::shareWebpage, onOpenInBrowser = this::openInBrowser, onClearCookies = this::clearCookies, ) } } override fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) assistUrl?.let { outContent.webUri = it.toUri() } } override fun finish() { super.finish() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { overrideActivityTransition( Activity.OVERRIDE_TRANSITION_CLOSE, R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit, ) } else { @Suppress("DEPRECATION") overridePendingTransition(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit) } } private fun shareWebpage(url: String) { try { startActivity(url.toUri().toShareIntent(this, type = "text/plain")) } catch (e: Exception) { toast(e.message) } } private fun openInBrowser(url: String) { openInBrowser(url, forceDefaultBrowser = true) } private fun clearCookies(url: String) { val cleared = network.cookieJar.remove(url.toHttpUrl()) logcat { "Cleared $cleared cookies for: $url" } } companion object { private const val URL_KEY = "url_key" private const val SOURCE_KEY = "source_key" private const val TITLE_KEY = "title_key" fun newIntent(context: Context, url: String, sourceId: Long? = null, title: String? = null): Intent { return Intent(context, WebViewActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) putExtra(URL_KEY, url) putExtra(SOURCE_KEY, sourceId) putExtra(TITLE_KEY, title) } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewScreen.kt ================================================ package eu.kanade.tachiyomi.ui.webview import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen import eu.kanade.presentation.webview.WebViewScreenContent class WebViewScreen( private val url: String, private val initialTitle: String? = null, private val sourceId: Long? = null, ) : Screen(), AssistContentScreen { private var assistUrl: String? = null override fun onProvideAssistUrl() = assistUrl @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val context = LocalContext.current val screenModel = rememberScreenModel { WebViewScreenModel(sourceId) } WebViewScreenContent( onNavigateUp = { navigator.pop() }, initialTitle = initialTitle, url = url, headers = screenModel.headers, onUrlChange = { assistUrl = it }, onShare = { screenModel.shareWebpage(context, it) }, onOpenInBrowser = { screenModel.openInBrowser(context, it) }, onClearCookies = screenModel::clearCookies, ) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewScreenModel.kt ================================================ package eu.kanade.tachiyomi.ui.webview import android.content.Context import androidx.core.net.toUri import cafe.adriel.voyager.core.model.StateScreenModel import eu.kanade.presentation.more.stats.StatsScreenState import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import logcat.LogPriority import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class WebViewScreenModel( val sourceId: Long?, private val sourceManager: SourceManager = Injekt.get(), private val network: NetworkHelper = Injekt.get(), ) : StateScreenModel(StatsScreenState.Loading) { var headers = emptyMap() init { sourceId?.let { sourceManager.get(it) as? HttpSource }?.let { source -> try { headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to build headers" } } } } fun shareWebpage(context: Context, url: String) { try { context.startActivity(url.toUri().toShareIntent(context, type = "text/plain")) } catch (e: Exception) { context.toast(e.message) } } fun openInBrowser(context: Context, url: String) { context.openInBrowser(url, forceDefaultBrowser = true) } fun clearCookies(url: String) { url.toHttpUrlOrNull()?.let { val cleared = network.cookieJar.remove(it) logcat { "Cleared $cleared cookies for: $url" } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt ================================================ package eu.kanade.tachiyomi.util import android.content.Context import android.os.Build import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.createFileInCacheDir import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.lang.withUIContext import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.OffsetDateTime import java.time.ZoneId class CrashLogUtil( private val context: Context, private val extensionManager: ExtensionManager = Injekt.get(), private val preferences: BasePreferences = Injekt.get(), ) { suspend fun dumpLogs(exception: Throwable? = null) = withNonCancellableContext { try { val file = context.createFileInCacheDir("mihon_crash_logs.txt") file.appendText(getDebugInfo() + "\n\n") getExtensionsInfo()?.let { file.appendText("$it\n\n") } exception?.let { file.appendText("$it\n\n") } Runtime.getRuntime().exec("logcat *:E -d -v year -v zone -f ${file.absolutePath}").waitFor() val uri = file.getUriCompat(context) context.startActivity(uri.toShareIntent(context, "text/plain")) } catch (e: Throwable) { withUIContext { context.toast("Failed to get logs") } } } fun getDebugInfo(): String { return """ App ID: ${BuildConfig.APPLICATION_ID} App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}, ${BuildConfig.BUILD_TIME}) Installation ID: ${preferences.installationId.get()} Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}; build ${Build.DISPLAY}) Device brand: ${Build.BRAND} Device manufacturer: ${Build.MANUFACTURER} Device name: ${Build.DEVICE} (${Build.PRODUCT}) Device model: ${Build.MODEL} WebView: ${WebViewUtil.getVersion(context)} Current time: ${OffsetDateTime.now(ZoneId.systemDefault())} """.trimIndent() } private fun getExtensionsInfo(): String? { val availableExtensions = extensionManager.availableExtensionsFlow.value.associateBy { it.pkgName } val extensionInfoList = extensionManager.installedExtensionsFlow.value .sortedBy { it.name } .mapNotNull { val availableExtension = availableExtensions[it.pkgName] val hasUpdate = (availableExtension?.versionCode ?: 0) > it.versionCode if (!hasUpdate && !it.isObsolete) return@mapNotNull null """ - ${it.name} Installed: ${it.versionName} / Available: ${availableExtension?.versionName ?: "?"} Obsolete: ${it.isObsolete} """.trimIndent() } return if (extensionInfoList.isNotEmpty()) { (listOf("Problematic extensions:") + extensionInfoList) .joinToString("\n") } else { null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt ================================================ package eu.kanade.tachiyomi.util import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.domain.manga.model.toSManga import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.source.model.SManga import tachiyomi.domain.manga.model.Manga import tachiyomi.source.local.image.LocalCoverManager import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.InputStream import java.time.Instant /** * Call before updating [Manga.thumbnail_url] to ensure old cover can be cleared from cache */ fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSameUrl: Boolean): Manga { // Never refresh covers if the new url is null, as the current url has possibly become invalid val newUrl = remoteManga.thumbnail_url ?: return this // Never refresh covers if the url is empty to avoid "losing" existing covers if (newUrl.isEmpty()) return this if (!refreshSameUrl && thumbnailUrl == newUrl) return this return when { isLocal() -> { this.copy(coverLastModified = Instant.now().toEpochMilli()) } hasCustomCover(coverCache) -> { coverCache.deleteFromCache(this, false) this } else -> { coverCache.deleteFromCache(this, false) this.copy(coverLastModified = Instant.now().toEpochMilli()) } } } fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Manga { if (isLocal()) return this return if (coverCache.deleteFromCache(this, true) > 0) { return copy(coverLastModified = Instant.now().toEpochMilli()) } else { this } } suspend fun Manga.editCover( coverManager: LocalCoverManager, stream: InputStream, updateManga: UpdateManga = Injekt.get(), coverCache: CoverCache = Injekt.get(), ) { if (isLocal()) { coverManager.update(toSManga(), stream) updateManga.awaitUpdateCoverLastModified(id) } else if (favorite) { coverCache.setCustomCoverToCache(this, stream) updateManga.awaitUpdateCoverLastModified(id) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/PkceUtil.kt ================================================ package eu.kanade.tachiyomi.util import java.security.SecureRandom import java.util.Base64 object PkceUtil { fun generateCodeVerifier(): String { val codeVerifier = ByteArray(50) SecureRandom().nextBytes(codeVerifier) return Base64.getUrlEncoder() .withoutPadding() .encodeToString(codeVerifier) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterFilterDownloaded.kt ================================================ package eu.kanade.tachiyomi.util.chapter import eu.kanade.tachiyomi.data.download.DownloadCache import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import tachiyomi.source.local.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * Returns a copy of the list with not downloaded chapters removed. */ fun List.filterDownloaded(manga: Manga): List { if (manga.isLocal()) return this val downloadCache: DownloadCache = Injekt.get() return filter { downloadCache.isChapterDownloaded(it.name, it.scanlator, it.url, manga.title, manga.source, false) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterGetNextUnread.kt ================================================ package eu.kanade.tachiyomi.util.chapter import eu.kanade.domain.chapter.model.applyFilters import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.ui.manga.ChapterList import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga /** * Gets next unread chapter with filters and sorting applied */ fun List.getNextUnread(manga: Manga, downloadManager: DownloadManager): Chapter? { return applyFilters(manga, downloadManager).let { chapters -> if (manga.sortDescending()) { chapters.findLast { !it.read } } else { chapters.find { !it.read } } } } /** * Gets next unread chapter with filters and sorting applied */ fun List.getNextUnread(manga: Manga): Chapter? { return applyFilters(manga).let { chapters -> if (manga.sortDescending()) { chapters.findLast { !it.chapter.read } } else { chapters.find { !it.chapter.read } } }?.chapter } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRemoveDuplicates.kt ================================================ package eu.kanade.tachiyomi.util.chapter import tachiyomi.domain.chapter.model.Chapter /** * Returns a copy of the list with duplicate chapters removed */ fun List.removeDuplicates(currentChapter: Chapter): List { return groupBy { it.chapterNumber } .map { (_, chapters) -> chapters.find { it.id == currentChapter.id } ?: chapters.find { it.scanlator == currentChapter.scanlator } ?: chapters.first() } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/lang/CloseableExtensions.kt ================================================ package eu.kanade.tachiyomi.util.lang import java.io.Closeable /** * Executes the given block function on this resources and then closes it down correctly whether an exception is * thrown or not. * * @param block a function to process with given Closeable resources. * @return the result of block function invoked on this resource. */ inline fun Array.use(block: () -> Unit) { var blockException: Throwable? = null try { return block() } catch (e: Throwable) { blockException = e throw e } finally { when (blockException) { null -> forEach { it?.close() } else -> forEach { try { it?.close() } catch (closeException: Throwable) { blockException.addSuppressed(closeException) } } } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt ================================================ package eu.kanade.tachiyomi.util.lang import android.content.Context import tachiyomi.core.common.i18n.pluralStringResource import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import java.text.DateFormat import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.time.temporal.ChronoUnit import java.util.Date import kotlin.math.absoluteValue fun LocalDateTime.toDateTimestampString(dateTimeFormatter: DateTimeFormatter): String { val date = dateTimeFormatter.format(this) val time = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).format(this) return "$date $time" } fun Date.toTimestampString(): String { return DateFormat.getTimeInstance(DateFormat.SHORT).format(this) } fun Long.convertEpochMillisZone( from: ZoneId, to: ZoneId, ): Long { return LocalDateTime.ofInstant(Instant.ofEpochMilli(this), from) .atZone(to) .toInstant() .toEpochMilli() } fun Long.toLocalDate(): LocalDate { return LocalDate.ofInstant(Instant.ofEpochMilli(this), ZoneId.systemDefault()) } fun Instant.toLocalDate(zoneId: ZoneId = ZoneId.systemDefault()): LocalDate { return LocalDate.ofInstant(this, zoneId) } fun LocalDate.toRelativeString( context: Context, relative: Boolean = true, dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT), ): String { if (!relative) { return dateFormat.format(this) } val now = LocalDate.now() val difference = ChronoUnit.DAYS.between(this, now) return when { difference < -7 -> dateFormat.format(this) difference < 0 -> context.pluralStringResource( MR.plurals.upcoming_relative_time, difference.toInt().absoluteValue, difference.toInt().absoluteValue, ) difference < 1 -> context.stringResource(MR.strings.relative_time_today) difference < 7 -> context.pluralStringResource( MR.plurals.relative_time, difference.toInt(), difference.toInt(), ) else -> dateFormat.format(this) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/lang/RectFExtensions.kt ================================================ package eu.kanade.tachiyomi.util.lang import android.graphics.RectF import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences fun RectF.invert(invertMode: ReaderPreferences.TappingInvertMode): RectF { val horizontal = invertMode.shouldInvertHorizontal val vertical = invertMode.shouldInvertVertical return when { horizontal && vertical -> RectF(1f - this.right, 1f - this.bottom, 1f - this.left, 1f - this.top) vertical -> RectF(this.left, 1f - this.bottom, this.right, 1f - this.top) horizontal -> RectF(1f - this.right, this.top, 1f - this.left, this.bottom) else -> this } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/storage/FileExtensions.kt ================================================ package eu.kanade.tachiyomi.util.storage import android.content.Context import android.net.Uri import androidx.core.content.FileProvider import eu.kanade.tachiyomi.BuildConfig import java.io.File val Context.cacheImageDir: File get() = File(cacheDir, "shared_image") /** * Returns the uri of a file * * @param context context of application */ fun File.getUriCompat(context: Context): Uri { return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", this) } /** * Copies this file to the given [target] file while marking the file as read-only. * * @see File.copyTo */ fun File.copyAndSetReadOnlyTo(target: File, overwrite: Boolean = false, bufferSize: Int = DEFAULT_BUFFER_SIZE): File { if (!this.exists()) { throw NoSuchFileException(file = this, reason = "The source file doesn't exist.") } if (target.exists()) { if (!overwrite) { throw FileAlreadyExistsException( file = this, other = target, reason = "The destination file already exists.", ) } else if (!target.delete()) { throw FileAlreadyExistsException( file = this, other = target, reason = "Tried to overwrite the destination, but failed to delete it.", ) } } if (this.isDirectory) { if (!target.mkdirs()) { throw FileSystemException(file = this, other = target, reason = "Failed to create target directory.") } } else { target.parentFile?.mkdirs() this.inputStream().use { input -> target.outputStream().use { output -> // Set read-only target.setReadOnly() input.copyTo(output, bufferSize) } } } return target } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/storage/OkioExtensions.kt ================================================ package eu.kanade.tachiyomi.util.storage import okio.BufferedSource import okio.buffer import okio.sink import java.io.File import java.io.OutputStream /** * Saves the given source to a file and closes it. Directories will be created if needed. * * @param file the file where the source is copied. */ fun BufferedSource.saveTo(file: File) { try { // Create parent dirs if needed file.parentFile?.mkdirs() // Copy to destination saveTo(file.outputStream()) } catch (e: Exception) { close() file.delete() throw e } } /** * Saves the given source to an output stream and closes both resources. * * @param stream the stream where the source is copied. */ fun BufferedSource.saveTo(stream: OutputStream) { use { input -> stream.sink().buffer().use { it.writeAll(input) it.flush() } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/AnimationExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import android.provider.Settings /** * Gets the duration multiplier for general animations on the device * @see Settings.Global.ANIMATOR_DURATION_SCALE */ val Context.animatorDurationScale: Float get() = Settings.Global.getFloat(this.contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1f) ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import androidx.annotation.CallSuper import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.Authenticators import androidx.biometric.BiometricPrompt import androidx.biometric.BiometricPrompt.AuthenticationError import androidx.biometric.auth.AuthPromptCallback import androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity import kotlinx.coroutines.suspendCancellableCoroutine import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import kotlin.coroutines.resume object AuthenticatorUtil { /** * A check to avoid double authentication on older APIs when confirming settings changes since * the biometric prompt is launched in a separate activity outside of the app. */ var isAuthenticating = false /** * Launches biometric prompt. * * @param title String title that will be shown on the prompt * @param subtitle Optional string subtitle that will be shown on the prompt * @param confirmationRequired Whether require explicit user confirmation after passive biometric is recognized * @param callback Callback object to handle the authentication events */ fun FragmentActivity.startAuthentication( title: String, subtitle: String? = null, confirmationRequired: Boolean = true, callback: AuthenticationCallback, ) { isAuthenticating = true startClass2BiometricOrCredentialAuthentication( title = title, subtitle = subtitle, confirmationRequired = confirmationRequired, executor = ContextCompat.getMainExecutor(this), callback = callback, ) } suspend fun FragmentActivity.authenticate( title: String, subtitle: String? = stringResource(MR.strings.confirm_lock_change), ): Boolean = suspendCancellableCoroutine { cont -> if (!isAuthenticationSupported()) { cont.resume(true) return@suspendCancellableCoroutine } startAuthentication( title, subtitle, callback = object : AuthenticationCallback() { override fun onAuthenticationSucceeded( activity: FragmentActivity?, result: BiometricPrompt.AuthenticationResult, ) { super.onAuthenticationSucceeded(activity, result) cont.resume(true) } override fun onAuthenticationError( activity: FragmentActivity?, errorCode: Int, errString: CharSequence, ) { super.onAuthenticationError(activity, errorCode, errString) activity?.toast(errString.toString()) cont.resume(false) } }, ) } /** * Returns true if Class 2 biometric or credential lock is set and available to use */ fun Context.isAuthenticationSupported(): Boolean { val authenticators = Authenticators.BIOMETRIC_WEAK or Authenticators.DEVICE_CREDENTIAL return BiometricManager.from(this).canAuthenticate(authenticators) == BiometricManager.BIOMETRIC_SUCCESS } /** * [AuthPromptCallback] with extra check * * @see isAuthenticating */ abstract class AuthenticationCallback : AuthPromptCallback() { /** * Called when an unrecoverable error has been encountered and authentication has stopped. * * * After this method is called, no further events will be sent for the current * authentication session. * * @param activity The activity that is currently hosting the prompt. * @param errorCode An integer ID associated with the error. * @param errString A human-readable string that describes the error. */ @CallSuper override fun onAuthenticationError( activity: FragmentActivity?, @AuthenticationError errorCode: Int, errString: CharSequence, ) { isAuthenticating = false } /** * Called when the user has successfully authenticated. * * * After this method is called, no further events will be sent for the current * authentication session. * * @param activity The activity that is currently hosting the prompt. * @param result An object containing authentication-related data. */ @CallSuper override fun onAuthenticationSucceeded( activity: FragmentActivity?, result: BiometricPrompt.AuthenticationResult, ) { isAuthenticating = false } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/BuildConfig.kt ================================================ @file:Suppress("UNUSED", "KotlinConstantConditions") package eu.kanade.tachiyomi.util.system import eu.kanade.tachiyomi.BuildConfig val telemetryIncluded: Boolean inline get() = BuildConfig.TELEMETRY_INCLUDED val updaterEnabled: Boolean inline get() = BuildConfig.UPDATER_ENABLED val isDebugBuildType: Boolean inline get() = BuildConfig.BUILD_TYPE == "debug" val isPreviewBuildType: Boolean inline get() = BuildConfig.BUILD_TYPE == "preview" val isReleaseBuildType: Boolean inline get() = BuildConfig.BUILD_TYPE == "release" val isFossBuildType: Boolean inline get() = BuildConfig.BUILD_TYPE == "foss" ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/ChildFirstPathClassLoader.kt ================================================ package eu.kanade.tachiyomi.util.system import dalvik.system.PathClassLoader import java.io.IOException import java.io.InputStream import java.net.URL import java.util.Enumeration /** * A parent-last class loader that will try in order: * - the system class loader * - the child class loader * - the parent class loader. */ class ChildFirstPathClassLoader( dexPath: String, librarySearchPath: String?, parent: ClassLoader, ) : PathClassLoader(dexPath, librarySearchPath, parent) { private val systemClassLoader: ClassLoader? = getSystemClassLoader() override fun loadClass(name: String?, resolve: Boolean): Class<*> { var c = findLoadedClass(name) if (c == null && systemClassLoader != null) { try { c = systemClassLoader.loadClass(name) } catch (_: ClassNotFoundException) {} } if (c == null) { c = try { findClass(name) } catch (_: ClassNotFoundException) { super.loadClass(name, resolve) } } if (resolve) { resolveClass(c) } return c } override fun getResource(name: String?): URL? { return systemClassLoader?.getResource(name) ?: findResource(name) ?: super.getResource(name) } override fun getResources(name: String?): Enumeration { val systemUrls = systemClassLoader?.getResources(name) val localUrls = findResources(name) val parentUrls = parent?.getResources(name) val urls = buildList { while (systemUrls?.hasMoreElements() == true) { add(systemUrls.nextElement()) } while (localUrls?.hasMoreElements() == true) { add(localUrls.nextElement()) } while (parentUrls?.hasMoreElements() == true) { add(parentUrls.nextElement()) } } return object : Enumeration { val iterator = urls.iterator() override fun hasMoreElements() = iterator.hasNext() override fun nextElement() = iterator.next() } } override fun getResourceAsStream(name: String?): InputStream? { return try { getResource(name)?.openStream() } catch (_: IOException) { return null } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.res.Configuration import android.net.Uri import android.os.Build import android.os.PowerManager import android.provider.Settings import androidx.appcompat.view.ContextThemeWrapper import androidx.core.content.getSystemService import androidx.core.net.toUri import com.hippo.unifile.UniFile import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.ThemeMode import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.lang.truncateCenter import logcat.LogPriority import rikka.sui.Sui import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File /** * Copies a string to clipboard * * @param label Label to show to the user describing the content * @param content the actual text to copy to the board */ fun Context.copyToClipboard(label: String, content: String) { if (content.isBlank()) return try { val clipboard = getSystemService()!! clipboard.setPrimaryClip(ClipData.newPlainText(label, content)) // Android 13 and higher shows a visual confirmation of copied contents // https://developer.android.com/about/versions/13/features/copy-paste if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) { toast(stringResource(MR.strings.copied_to_clipboard, content.truncateCenter(50))) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) toast(MR.strings.clipboard_copy_error) } } val Context.powerManager: PowerManager get() = getSystemService()!! fun Context.openInBrowser(url: String, forceDefaultBrowser: Boolean = false) { this.openInBrowser(url.toUri(), forceDefaultBrowser) } fun Context.openInBrowser(uri: Uri, forceDefaultBrowser: Boolean = false) { try { val intent = Intent(Intent.ACTION_VIEW, uri).apply { // Force default browser so that verified extensions don't re-open Tachiyomi if (forceDefaultBrowser) { defaultBrowserPackageName()?.let { setPackage(it) } } } startActivity(intent) } catch (e: Exception) { toast(e.message) } } private fun Context.defaultBrowserPackageName(): String? { val browserIntent = Intent(Intent.ACTION_VIEW, "http://".toUri()) val resolveInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { packageManager.resolveActivity( browserIntent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong()), ) } else { packageManager.resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY) } return resolveInfo ?.activityInfo?.packageName ?.takeUnless { it in DeviceUtil.invalidDefaultBrowsers } } fun Context.createFileInCacheDir(name: String): File { val file = File(externalCacheDir, name) if (file.exists()) { file.delete() } file.createNewFile() return file } /** * Creates night mode Context depending on reader theme/background * * Context wrapping method obtained from AppCompatDelegateImpl * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java;l=348;drc=e28752c96fc3fb4d3354781469a1af3dbded4898 */ fun Context.createReaderThemeContext(): Context { val preferences = Injekt.get() val readerPreferences = Injekt.get() val themeMode = preferences.themeMode.get() val isDarkBackground = when (readerPreferences.readerTheme.get()) { 1, 2 -> true // Black, Gray 3 -> when (themeMode) { // Automatic bg uses activity background by default ThemeMode.SYSTEM -> applicationContext.isNightMode() else -> themeMode == ThemeMode.DARK } else -> false // White } val expected = if (isDarkBackground) Configuration.UI_MODE_NIGHT_YES else Configuration.UI_MODE_NIGHT_NO if (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK != expected) { val overrideConf = Configuration() overrideConf.setTo(resources.configuration) overrideConf.uiMode = (overrideConf.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv()) or expected val wrappedContext = ContextThemeWrapper(this, R.style.Theme_Tachiyomi) wrappedContext.applyOverrideConfiguration(overrideConf) ThemingDelegate.getThemeResIds(preferences.appTheme.get(), preferences.themeDarkAmoled.get()) .forEach { wrappedContext.theme.applyStyle(it, true) } return wrappedContext } return this } /** * Gets document size of provided [Uri] * * @return document size of [uri] or null if size can't be obtained */ fun Context.getUriSize(uri: Uri): Long? { return UniFile.fromUri(this, uri)?.length()?.takeIf { it >= 0 } } /** * Returns true if [packageName] is installed. */ fun Context.isPackageInstalled(packageName: String): Boolean { return try { packageManager.getApplicationInfo(packageName, 0) true } catch (e: PackageManager.NameNotFoundException) { false } } val Context.hasMiuiPackageInstaller get() = isPackageInstalled("com.miui.packageinstaller") val Context.isShizukuInstalled get() = isPackageInstalled("moe.shizuku.privileged.api") || Sui.isSui() fun Context.launchRequestPackageInstallsPermission() { Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).apply { data = "package:$packageName".toUri() startActivity(this) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/DeviceUtilExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.os.Build import com.google.android.material.color.DynamicColors val DeviceUtil.isDynamicColorAvailable by lazy { DynamicColors.isDynamicColorAvailable() || (DeviceUtil.isSamsung && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/DisplayExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.app.Activity import android.content.Context import android.content.res.Configuration import android.os.Build import android.view.View import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.TabletUiMode import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get private const val TABLET_UI_REQUIRED_SCREEN_WIDTH_DP = 720 // some tablets have screen width like 711dp = 1600px / 2.25 private const val TABLET_UI_MIN_SCREEN_WIDTH_PORTRAIT_DP = 700 // make sure icons on the nav rail fit private const val TABLET_UI_MIN_SCREEN_WIDTH_LANDSCAPE_DP = 600 fun Configuration.isTabletUi(): Boolean { return smallestScreenWidthDp >= TABLET_UI_REQUIRED_SCREEN_WIDTH_DP } // TODO: move the logic to `isTabletUi()` when main activity is rewritten in Compose fun Context.prepareTabletUiContext(): Context { val configuration = resources.configuration val expected = when (Injekt.get().tabletUiMode.get()) { TabletUiMode.AUTOMATIC -> configuration.smallestScreenWidthDp >= when (configuration.orientation) { Configuration.ORIENTATION_PORTRAIT -> TABLET_UI_MIN_SCREEN_WIDTH_PORTRAIT_DP else -> TABLET_UI_MIN_SCREEN_WIDTH_LANDSCAPE_DP } TabletUiMode.ALWAYS -> true TabletUiMode.LANDSCAPE -> configuration.orientation == Configuration.ORIENTATION_LANDSCAPE TabletUiMode.NEVER -> false } if (configuration.isTabletUi() != expected) { val overrideConf = Configuration() overrideConf.setTo(configuration) overrideConf.smallestScreenWidthDp = if (expected) { overrideConf.smallestScreenWidthDp.coerceAtLeast(TABLET_UI_REQUIRED_SCREEN_WIDTH_DP) } else { overrideConf.smallestScreenWidthDp.coerceAtMost(TABLET_UI_REQUIRED_SCREEN_WIDTH_DP - 1) } return createConfigurationContext(overrideConf) } return this } /** * Returns true if current context is in night mode */ fun Context.isNightMode(): Boolean { return resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES } /** * Checks whether if the device has a display cutout (i.e. notch, camera cutout, etc.). * * Only works on Android 9+. */ fun Activity.hasDisplayCutout(): Boolean { return window.decorView.hasDisplayCutout() } /** * Checks whether if the device has a display cutout (i.e. notch, camera cutout, etc.). * * Only works on Android 9+. */ fun View.hasDisplayCutout(): Boolean { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && rootWindowInsets?.displayCutout != null } /** * Gets system's config_navBarNeedsScrim boolean flag added in Android 10, defaults to true. */ fun Context.isNavigationBarNeedsScrim(): Boolean { return Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || InternalResourceHelper.getBoolean(this, "config_navBarNeedsScrim", true) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/DrawableExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.graphics.Bitmap import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import androidx.core.graphics.drawable.toBitmap import coil3.size.ScaleDrawable fun Drawable.getBitmapOrNull(): Bitmap? = when (this) { is BitmapDrawable -> bitmap is ScaleDrawable -> child.toBitmap() else -> null } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.ClipData import android.content.Context import android.content.Intent import android.net.Uri import android.os.Build import androidx.core.content.IntentCompat import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import java.io.Serializable fun Uri.toShareIntent(context: Context, type: String = "image/*", message: String? = null): Intent { val uri = this val shareIntent = Intent(Intent.ACTION_SEND).apply { when (uri.scheme) { "http", "https" -> { putExtra(Intent.EXTRA_TEXT, uri.toString()) } "content" -> { message?.let { putExtra(Intent.EXTRA_TEXT, it) } putExtra(Intent.EXTRA_STREAM, uri) } } clipData = ClipData.newRawUri(null, uri) setType(type) flags = Intent.FLAG_GRANT_READ_URI_PERMISSION } return Intent.createChooser(shareIntent, context.stringResource(MR.strings.action_share)).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK } } inline fun Intent.getParcelableExtraCompat(name: String): T? { return IntentCompat.getParcelableExtra(this, name, T::class.java) } inline fun Intent.getSerializableExtraCompat(name: String): T? { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { getSerializableExtra(name, T::class.java) } else { @Suppress("DEPRECATION") getSerializableExtra(name) as? T } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/InternalResourceHelper.kt ================================================ package eu.kanade.tachiyomi.util.system import android.annotation.SuppressLint import android.content.Context import android.content.res.Resources object InternalResourceHelper { fun getBoolean(context: Context, resName: String, defaultValue: Boolean): Boolean { val id = getResourceId(resName, "bool") return if (id != 0) { context.createPackageContext("android", 0).resources.getBoolean(id) } else { defaultValue } } /** * Get resource id from system resources * @param resName resource name to get * @param type resource type of [resName] to get * @return 0 if not available */ @SuppressLint("DiscouragedApi") private fun getResourceId(resName: String, type: String): Int { return Resources.getSystem().getIdentifier(resName, type, "android") } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import androidx.core.os.LocaleListCompat import eu.kanade.tachiyomi.ui.browse.source.SourcesScreenModel import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import java.util.Locale /** * Utility class to change the application's language in runtime. */ object LocaleHelper { /** * Sorts by display name, except keeps the "all" (displayed as "Multi") locale at the top. */ val comparator = { a: String, b: String -> if (a == "all") { -1 } else if (b == "all") { 1 } else { getLocalizedDisplayName(a).compareTo(getLocalizedDisplayName(b)) } } /** * Returns display name of a string language code. */ fun getSourceDisplayName(lang: String?, context: Context): String { return when (lang) { SourcesScreenModel.LAST_USED_KEY -> context.stringResource(MR.strings.last_used_source) SourcesScreenModel.PINNED_KEY -> context.stringResource(MR.strings.pinned_sources) "other" -> context.stringResource(MR.strings.other_source) "all" -> context.stringResource(MR.strings.multi_lang) else -> getLocalizedDisplayName(lang) } } fun getDisplayName(lang: String): String { val normalizedLang = when (lang) { "zh-CN" -> "zh-Hans" "zh-TW" -> "zh-Hant" else -> lang } return Locale.forLanguageTag(normalizedLang).displayName } fun getShortDisplayName(lang: String?, uppercase: Boolean = false): String { return when (lang) { null -> "" "es-419" -> "es-la" "zh-CN" -> "zh-hans" "zh-TW" -> "zh-hant" else -> lang } .let { if (uppercase) it.uppercase(Locale.ENGLISH) else it } } /** * Returns display name of a string language code. * * @param lang empty for system language */ fun getLocalizedDisplayName(lang: String?): String { if (lang == null) { return "" } val locale = when (lang) { "" -> LocaleListCompat.getAdjustedDefault()[0] "zh-CN" -> Locale.forLanguageTag("zh-Hans") "zh-TW" -> Locale.forLanguageTag("zh-Hant") else -> Locale.forLanguageTag(lang) } return locale!!.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) } } /** * Return the default languages enabled for the sources. */ fun getDefaultEnabledLanguages(): Set { return setOf("all", "en", Locale.getDefault().language) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.net.wifi.WifiManager import android.os.Build import androidx.core.content.getSystemService val Context.connectivityManager: ConnectivityManager get() = getSystemService()!! val Context.wifiManager: WifiManager get() = getSystemService()!! fun Context.isOnline(): Boolean { val activeNetwork = connectivityManager.activeNetwork ?: return false val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false val maxTransport = when { Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 -> NetworkCapabilities.TRANSPORT_LOWPAN else -> NetworkCapabilities.TRANSPORT_WIFI_AWARE } return (NetworkCapabilities.TRANSPORT_CELLULAR..maxTransport).any(networkCapabilities::hasTransport) } /** * Returns true if device is connected to Wifi. */ fun Context.isConnectedToWifi(): Boolean { if (!wifiManager.isWifiEnabled) return false return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { val activeNetwork = connectivityManager.activeNetwork ?: return false val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) } else { @Suppress("DEPRECATION") wifiManager.connectionInfo.bssid != null } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkStateTracker.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import android.net.ConnectivityManager.NetworkCallback import android.net.Network import android.net.NetworkCapabilities import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow data class NetworkState( val isConnected: Boolean, val isValidated: Boolean, val isWifi: Boolean, ) { val isOnline = isConnected && isValidated } @Suppress("DEPRECATION") fun Context.activeNetworkState(): NetworkState { val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork) return NetworkState( isConnected = connectivityManager.activeNetworkInfo?.isConnected ?: false, isValidated = capabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ?: false, isWifi = wifiManager.isWifiEnabled && capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ?: false, ) } fun Context.networkStateFlow() = callbackFlow { val networkCallback = object : NetworkCallback() { override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { trySend(activeNetworkState()) } override fun onLost(network: Network) { trySend(activeNetworkState()) } } connectivityManager.registerDefaultNetworkCallback(networkCallback) awaitClose { connectivityManager.unregisterNetworkCallback(networkCallback) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/NotificationExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.Manifest import android.app.Notification import android.app.NotificationManager import android.content.Context import android.os.Build import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationChannelGroupCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat.NotificationWithIdAndTag import androidx.core.content.PermissionChecker import androidx.core.content.getSystemService import eu.kanade.tachiyomi.R val Context.notificationManager: NotificationManager get() = getSystemService()!! fun Context.notify(id: Int, channelId: String, block: (NotificationCompat.Builder.() -> Unit)? = null) { val notification = notificationBuilder(channelId, block).build() this.notify(id, notification) } fun Context.notify(id: Int, notification: Notification) { if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && PermissionChecker.checkSelfPermission( this, Manifest.permission.POST_NOTIFICATIONS, ) != PermissionChecker.PERMISSION_GRANTED ) { return } NotificationManagerCompat.from(this).notify(id, notification) } fun Context.notify(notificationWithIdAndTags: List) { if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && PermissionChecker.checkSelfPermission( this, Manifest.permission.POST_NOTIFICATIONS, ) != PermissionChecker.PERMISSION_GRANTED ) { return } NotificationManagerCompat.from(this).notify(notificationWithIdAndTags) } fun Context.cancelNotification(id: Int) { NotificationManagerCompat.from(this).cancel(id) } /** * Helper method to create a notification builder. * * @param id the channel id. * @param block the function that will execute inside the builder. * @return a notification to be displayed or updated. */ fun Context.notificationBuilder( channelId: String, block: (NotificationCompat.Builder.() -> Unit)? = null, ): NotificationCompat.Builder { val builder = NotificationCompat.Builder(this, channelId) .setColor(getColor(R.color.accent_blue)) if (block != null) { builder.block() } return builder } /** * Helper method to build a notification channel group. * * @param channelId the channel id. * @param block the function that will execute inside the builder. * @return a notification channel group to be displayed or updated. */ fun buildNotificationChannelGroup( channelId: String, block: (NotificationChannelGroupCompat.Builder.() -> Unit), ): NotificationChannelGroupCompat { val builder = NotificationChannelGroupCompat.Builder(channelId) builder.block() return builder.build() } /** * Helper method to build a notification channel. * * @param channelId the channel id. * @param channelImportance the channel importance. * @param block the function that will execute inside the builder. * @return a notification channel to be displayed or updated. */ fun buildNotificationChannel( channelId: String, channelImportance: Int, block: (NotificationChannelCompat.Builder.() -> Unit), ): NotificationChannelCompat { val builder = NotificationChannelCompat.Builder(channelId, channelImportance) builder.block() return builder.build() } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/system/WorkManagerExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import androidx.work.CoroutineWorker import androidx.work.WorkInfo import androidx.work.WorkManager import kotlinx.coroutines.delay import logcat.LogPriority import tachiyomi.core.common.util.system.logcat val Context.workManager: WorkManager get() = WorkManager.getInstance(this) fun WorkManager.isRunning(tag: String): Boolean { val list = this.getWorkInfosByTag(tag).get() return list.any { it.state == WorkInfo.State.RUNNING } } /** * Makes this worker run in the context of a foreground service. * * Note that this function is a no-op if the process is subject to foreground * service restrictions. * * Moving to foreground service context requires the worker to run a bit longer, * allowing Service.startForeground() to be called and avoiding system crash. */ suspend fun CoroutineWorker.setForegroundSafely() { try { setForeground(getForegroundInfo()) delay(500) } catch (e: IllegalStateException) { logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/view/EditTextPreferenceExtensions.kt ================================================ @file:Suppress("PackageDirectoryMismatch") package androidx.preference /** * Returns package-private [EditTextPreference.getOnBindEditTextListener] */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") fun EditTextPreference.getOnBindEditTextListener(): EditTextPreference.OnBindEditTextListener? { return onBindEditTextListener } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt ================================================ @file:Suppress("NOTHING_TO_INLINE") package eu.kanade.tachiyomi.util.view import android.content.res.Resources import android.graphics.Rect import android.view.Gravity import android.view.Menu import android.view.MenuItem import android.view.View import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.annotation.MenuRes import androidx.appcompat.widget.PopupMenu import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionContext import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.tachiyomi.R inline fun ComponentActivity.setComposeContent( parent: CompositionContext? = null, crossinline content: @Composable () -> Unit, ) { setContent(parent) { TachiyomiTheme { CompositionLocalProvider( LocalTextStyle provides MaterialTheme.typography.bodySmall, LocalContentColor provides MaterialTheme.colorScheme.onBackground, ) { content() } } } } fun ComposeView.setComposeContent( content: @Composable () -> Unit, ) { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { TachiyomiTheme { CompositionLocalProvider( LocalTextStyle provides MaterialTheme.typography.bodySmall, LocalContentColor provides MaterialTheme.colorScheme.onBackground, ) { content() } } } } /** * Shows a popup menu on top of this view. * * @param menuRes menu items to inflate the menu with. * @param initMenu function to execute when the menu after is inflated. * @param onMenuItemClick function to execute when a menu item is clicked. */ inline fun View.popupMenu( @MenuRes menuRes: Int, noinline initMenu: (Menu.() -> Unit)? = null, noinline onMenuItemClick: MenuItem.() -> Unit, ): PopupMenu { val popup = PopupMenu(context, this, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0) popup.menuInflater.inflate(menuRes, popup.menu) if (initMenu != null) { popup.menu.initMenu() } popup.setOnMenuItemClickListener { it.onMenuItemClick() true } popup.show() return popup } fun View?.isVisibleOnScreen(): Boolean { if (this == null) { return false } if (!this.isShown) { return false } val actualPosition = Rect() this.getGlobalVisibleRect(actualPosition) val screen = Rect(0, 0, Resources.getSystem().displayMetrics.widthPixels, Resources.getSystem().displayMetrics.heightPixels) return actualPosition.intersect(screen) } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt ================================================ package eu.kanade.tachiyomi.util.view import android.view.Window import android.view.WindowManager fun Window.setSecureScreen(enabled: Boolean) { if (enabled) { setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) } else { clearFlags(WindowManager.LayoutParams.FLAG_SECURE) } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiTextInputEditText.kt ================================================ package eu.kanade.tachiyomi.widget import android.content.Context import android.util.AttributeSet import android.widget.EditText import androidx.core.view.inputmethod.EditorInfoCompat import com.google.android.material.textfield.TextInputEditText import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText.Companion.setIncognito import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get /** * A custom [TextInputEditText] that sets [EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING] to imeOptions * if [BasePreferences.incognitoMode] is true. Some IMEs may not respect this flag. * * @see setIncognito */ class TachiyomiTextInputEditText @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.editTextStyle, ) : TextInputEditText(context, attrs, defStyleAttr) { private var scope: CoroutineScope? = null override fun onAttachedToWindow() { super.onAttachedToWindow() scope = CoroutineScope(SupervisorJob() + Dispatchers.Main) setIncognito(scope!!) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() scope?.cancel() scope = null } companion object { /** * Sets Flow to this [EditText] that sets [EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING] to imeOptions * if [BasePreferences.incognitoMode] is true. Some IMEs may not respect this flag. */ fun EditText.setIncognito(viewScope: CoroutineScope) { Injekt.get().incognitoMode.changes() .onEach { imeOptions = if (it) { imeOptions or EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING } else { imeOptions and EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING.inv() } } .launchIn(viewScope) } } } ================================================ FILE: app/src/main/java/eu/kanade/tachiyomi/widget/ViewPagerAdapter.kt ================================================ package eu.kanade.tachiyomi.widget import android.view.View import android.view.ViewGroup import androidx.viewpager.widget.PagerAdapter abstract class ViewPagerAdapter : PagerAdapter() { protected abstract fun createView(container: ViewGroup, position: Int): View protected open fun destroyView(container: ViewGroup, position: Int, view: View) { } override fun instantiateItem(container: ViewGroup, position: Int): Any { val view = createView(container, position) container.addView(view) return view } override fun destroyItem(container: ViewGroup, position: Int, obj: Any) { val view = obj as View destroyView(container, position, view) container.removeView(view) } override fun isViewFromObject(view: View, obj: Any): Boolean { return view === obj } interface PositionableView { val item: Any } } ================================================ FILE: app/src/main/java/eu/kanade/test/DummyTracker.kt ================================================ package eu.kanade.test import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.model.TrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import okhttp3.OkHttpClient import tachiyomi.domain.track.model.Track import tachiyomi.i18n.MR data class DummyTracker( override val id: Long, override val name: String, override val supportsReadingDates: Boolean = false, override val supportsPrivateTracking: Boolean = false, override val isLoggedIn: Boolean = false, override val isLoggedInFlow: Flow = flowOf(false), val valLogo: Int = R.drawable.brand_anilist, val valStatuses: List = (1L..6L).toList(), val valReadingStatus: Long = 1L, val valRereadingStatus: Long = 1L, val valCompletionStatus: Long = 2L, val valScoreList: ImmutableList = (0..10).map(Int::toString).toImmutableList(), val val10PointScore: Double = 5.4, val valSearchResults: List = listOf(), ) : Tracker { override val client: OkHttpClient get() = TODO("Not yet implemented") override fun getLogo(): Int = valLogo override fun getStatusList(): List = valStatuses override fun getStatus(status: Long): StringResource? = when (status) { 1L -> MR.strings.reading 2L -> MR.strings.plan_to_read 3L -> MR.strings.completed 4L -> MR.strings.on_hold 5L -> MR.strings.dropped 6L -> MR.strings.repeating else -> null } override fun getReadingStatus(): Long = valReadingStatus override fun getRereadingStatus(): Long = valRereadingStatus override fun getCompletionStatus(): Long = valCompletionStatus override fun getScoreList(): ImmutableList = valScoreList override fun get10PointScore(track: Track): Double = val10PointScore override fun indexToScore(index: Int): Double = getScoreList()[index].toDouble() override fun displayScore(track: Track): String = track.score.toString() override suspend fun update( track: eu.kanade.tachiyomi.data.database.models.Track, didReadChapter: Boolean, ): eu.kanade.tachiyomi.data.database.models.Track = track override suspend fun bind( track: eu.kanade.tachiyomi.data.database.models.Track, hasReadChapters: Boolean, ): eu.kanade.tachiyomi.data.database.models.Track = track override suspend fun search(query: String): List = valSearchResults override suspend fun refresh( track: eu.kanade.tachiyomi.data.database.models.Track, ): eu.kanade.tachiyomi.data.database.models.Track = track override suspend fun login(username: String, password: String) = Unit override fun logout() = Unit override fun getUsername(): String = "username" override fun getPassword(): String = "passw0rd" override fun saveCredentials(username: String, password: String) = Unit override suspend fun register( item: eu.kanade.tachiyomi.data.database.models.Track, mangaId: Long, ) = Unit override suspend fun setRemoteStatus( track: eu.kanade.tachiyomi.data.database.models.Track, status: Long, ) = Unit override suspend fun setRemoteLastChapterRead( track: eu.kanade.tachiyomi.data.database.models.Track, chapterNumber: Int, ) = Unit override suspend fun setRemoteScore( track: eu.kanade.tachiyomi.data.database.models.Track, scoreString: String, ) = Unit override suspend fun setRemoteStartDate( track: eu.kanade.tachiyomi.data.database.models.Track, epochMillis: Long, ) = Unit override suspend fun setRemoteFinishDate( track: eu.kanade.tachiyomi.data.database.models.Track, epochMillis: Long, ) = Unit override suspend fun setRemotePrivate( track: eu.kanade.tachiyomi.data.database.models.Track, private: Boolean, ) = Unit } ================================================ FILE: app/src/main/java/mihon/app/shizuku/ShellInterface.kt ================================================ /* * Copyright 2024 Mihon Open Source Project * Copyright 2015-2024 Javier Tomás * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * The file contains code originally licensed under the MIT license: * * Copyright (c) 2024 Zachary Wander * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package mihon.app.shizuku import android.annotation.SuppressLint import android.app.PendingIntent import android.content.Context import android.content.Intent import android.content.IntentSender import android.content.pm.PackageInstaller import android.content.res.AssetFileDescriptor import android.os.Build import android.os.IBinder import android.os.ParcelFileDescriptor import android.os.UserHandle import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.extension.installer.ACTION_INSTALL_RESULT import rikka.shizuku.SystemServiceHelper import java.io.OutputStream import kotlin.system.exitProcess class ShellInterface : IShellInterface.Stub() { private val context = createContext() private val userId = UserHandle::class.java .getMethod("myUserId") .invoke(null) as Int private val packageName = BuildConfig.APPLICATION_ID @SuppressLint("PrivateApi") override fun install(apk: AssetFileDescriptor) { val pmInterface = Class.forName($$"android.content.pm.IPackageManager$Stub") .getMethod("asInterface", IBinder::class.java) .invoke(null, SystemServiceHelper.getSystemService("package")) val packageInstaller = Class.forName("android.content.pm.IPackageManager") .getMethod("getPackageInstaller") .invoke(pmInterface) val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL).apply { val installFlags = this::class.java.getField("installFlags") installFlags.set( this, installFlags.getInt(this) or REPLACE_EXISTING_INSTALL_FLAG, ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { setPackageSource(PackageInstaller.PACKAGE_SOURCE_STORE) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { setInstallerPackageName(packageName) } } val sessionId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { packageInstaller::class.java.getMethod( "createSession", PackageInstaller.SessionParams::class.java, String::class.java, String::class.java, Int::class.java, ).invoke(packageInstaller, params, packageName, packageName, userId) as Int } else { packageInstaller::class.java.getMethod( "createSession", PackageInstaller.SessionParams::class.java, String::class.java, Int::class.java, ).invoke(packageInstaller, params, packageName, userId) as Int } val session = packageInstaller::class.java .getMethod("openSession", Int::class.java) .invoke(packageInstaller, sessionId) session::class.java.getMethod( "openWrite", String::class.java, Long::class.java, Long::class.java, ) .invoke(session, "extension", 0L, apk.length) .let { it as ParcelFileDescriptor } .let { fd -> val revocable = Class.forName("android.os.SystemProperties") .getMethod("getBoolean", String::class.java, Boolean::class.java) .invoke(null, "fw.revocable_fd", false) as Boolean if (revocable) { ParcelFileDescriptor.AutoCloseOutputStream(fd) } else { Class.forName($$"android.os.FileBridge$FileBridgeOutputStream") .getConstructor(ParcelFileDescriptor::class.java) .newInstance(fd) as OutputStream } } .use { output -> apk.createInputStream().use { input -> input.copyTo(output) } } val statusIntent = PendingIntent.getBroadcast( context, 0, Intent(ACTION_INSTALL_RESULT).setPackage(packageName), PendingIntent.FLAG_MUTABLE, ) if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { session::class.java.getMethod("commit", IntentSender::class.java, Boolean::class.java) .invoke(session, statusIntent.intentSender, false) } else { session::class.java.getMethod("commit", IntentSender::class.java) .invoke(session, statusIntent.intentSender) } } override fun destroy() { exitProcess(0) } @SuppressLint("PrivateApi") private fun createContext(): Context { val activityThread = Class.forName("android.app.ActivityThread") val systemMain = activityThread.getMethod("systemMain").invoke(null) val systemContext = activityThread.getMethod("getSystemContext").invoke(systemMain) as Context val shellUserHandle = UserHandle::class.java .getConstructor(Int::class.java) .newInstance(userId) val shellContext = systemContext::class.java.getMethod( "createPackageContextAsUser", String::class.java, Int::class.java, UserHandle::class.java, ).invoke( systemContext, "com.android.shell", Context.CONTEXT_INCLUDE_CODE or Context.CONTEXT_IGNORE_SECURITY, shellUserHandle, ) as Context return shellContext.createPackageContext("com.android.shell", 0) } } // Constant hidden from the SDK // https://cs.android.com/android/platform/superproject/main/+/512046e84bcc51cc241bc6599f83ab345e93ab12:frameworks/base/core/java/android/content/pm/PackageManager.java;l=1682-1689 private const val REPLACE_EXISTING_INSTALL_FLAG = 0x00000002 ================================================ FILE: app/src/main/java/mihon/core/designsystem/utils/WindowSize.kt ================================================ package mihon.core.designsystem.utils import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.dp @Composable @ReadOnlyComposable fun isMediumWidthWindow(): Boolean { val configuration = LocalConfiguration.current return configuration.screenWidthDp > MediumWidthWindowSize.value } @Composable @ReadOnlyComposable fun isExpandedWidthWindow(): Boolean { val configuration = LocalConfiguration.current return configuration.screenWidthDp > ExpandedWidthWindowSize.value } val MediumWidthWindowSize = 600.dp val ExpandedWidthWindowSize = 840.dp ================================================ FILE: app/src/main/java/mihon/core/migration/Migration.kt ================================================ package mihon.core.migration interface Migration { val version: Float suspend operator fun invoke(migrationContext: MigrationContext): Boolean val isAlways: Boolean get() = version == ALWAYS companion object { const val ALWAYS = -1f fun of(version: Float, action: suspend (MigrationContext) -> Boolean): Migration = object : Migration { override val version: Float = version override suspend operator fun invoke(migrationContext: MigrationContext): Boolean { return action(migrationContext) } } } } ================================================ FILE: app/src/main/java/mihon/core/migration/MigrationCompletedListener.kt ================================================ package mihon.core.migration typealias MigrationCompletedListener = () -> Unit ================================================ FILE: app/src/main/java/mihon/core/migration/MigrationContext.kt ================================================ package mihon.core.migration import uy.kohesive.injekt.Injekt class MigrationContext(val dryrun: Boolean) { inline fun get(): T? { return Injekt.getInstanceOrNull(T::class.java) } } ================================================ FILE: app/src/main/java/mihon/core/migration/MigrationJobFactory.kt ================================================ package mihon.core.migration import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Deferred import kotlinx.coroutines.async import tachiyomi.core.common.util.system.logcat class MigrationJobFactory( private val migrationContext: MigrationContext, private val scope: CoroutineScope, ) { fun create(migrations: List): Deferred = with(scope) { return migrations.sortedBy { it.version } .fold(CompletableDeferred(true)) { acc: Deferred, migration: Migration -> if (!migrationContext.dryrun) { logcat { "Running migration: { name = ${migration::class.simpleName}, version = ${migration.version} }" } async(start = CoroutineStart.UNDISPATCHED) { val prev = acc.await() migration(migrationContext) || prev } } else { logcat { "(Dry-run) Running migration: { name = ${migration::class.simpleName}, version = ${migration.version} }" } CompletableDeferred(true) } } } } ================================================ FILE: app/src/main/java/mihon/core/migration/MigrationStrategy.kt ================================================ package mihon.core.migration import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Deferred import kotlinx.coroutines.launch interface MigrationStrategy { operator fun invoke(migrations: List): Deferred } class DefaultMigrationStrategy( private val migrationJobFactory: MigrationJobFactory, private val migrationCompletedListener: MigrationCompletedListener, private val scope: CoroutineScope, ) : MigrationStrategy { override operator fun invoke(migrations: List): Deferred = with(scope) { if (migrations.isEmpty()) { return@with CompletableDeferred(false) } val chain = migrationJobFactory.create(migrations) launch { if (chain.await()) migrationCompletedListener() }.start() chain } } class InitialMigrationStrategy(private val strategy: DefaultMigrationStrategy) : MigrationStrategy { override operator fun invoke(migrations: List): Deferred { return strategy(migrations.filter { it.isAlways }) } } class NoopMigrationStrategy(val state: Boolean) : MigrationStrategy { override fun invoke(migrations: List): Deferred { return CompletableDeferred(state) } } class VersionRangeMigrationStrategy( private val versions: IntRange, private val strategy: DefaultMigrationStrategy, ) : MigrationStrategy { override operator fun invoke(migrations: List): Deferred { return strategy(migrations.filter { it.isAlways || it.version.toInt() in versions }) } } ================================================ FILE: app/src/main/java/mihon/core/migration/MigrationStrategyFactory.kt ================================================ package mihon.core.migration class MigrationStrategyFactory( private val factory: MigrationJobFactory, private val migrationCompletedListener: MigrationCompletedListener, ) { fun create(old: Int, new: Int): MigrationStrategy { val strategy = when { old == 0 -> InitialMigrationStrategy( strategy = DefaultMigrationStrategy(factory, migrationCompletedListener, Migrator.scope), ) old >= new -> NoopMigrationStrategy(false) else -> VersionRangeMigrationStrategy( versions = (old + 1)..new, strategy = DefaultMigrationStrategy(factory, migrationCompletedListener, Migrator.scope), ) } return strategy } } ================================================ FILE: app/src/main/java/mihon/core/migration/Migrator.kt ================================================ package mihon.core.migration import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.runBlocking object Migrator { private var result: Deferred? = null val scope = CoroutineScope(Dispatchers.IO + Job()) fun initialize( old: Int, new: Int, migrations: List, dryrun: Boolean = false, onMigrationComplete: () -> Unit, ) { val migrationContext = MigrationContext(dryrun) val migrationJobFactory = MigrationJobFactory(migrationContext, scope) val migrationStrategyFactory = MigrationStrategyFactory(migrationJobFactory, onMigrationComplete) val strategy = migrationStrategyFactory.create(old, new) result = strategy(migrations) } suspend fun await(): Boolean { val result = result ?: CompletableDeferred(false) return result.await() } fun release() { result = null } fun awaitAndRelease(): Boolean = runBlocking { await().also { release() } } } ================================================ FILE: app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt ================================================ package mihon.core.migration.migrations import mihon.core.migration.Migration import mihon.core.migration.MigrationContext import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences class CategoryPreferencesCleanupMigration : Migration { override val version: Float = 10f override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext { val libraryPreferences = migrationContext.get() ?: return@withIOContext false val downloadPreferences = migrationContext.get() ?: return@withIOContext false val getCategories = migrationContext.get() ?: return@withIOContext false val allCategories = getCategories.await().map { it.id.toString() }.toSet() val defaultCategory = libraryPreferences.defaultCategory.get() if (defaultCategory.toString() !in allCategories) { libraryPreferences.defaultCategory.delete() } val categoryPreferences = listOf( libraryPreferences.updateCategories, libraryPreferences.updateCategoriesExclude, downloadPreferences.removeExcludeCategories, downloadPreferences.downloadNewChapterCategories, downloadPreferences.downloadNewChapterCategoriesExclude, ) categoryPreferences.forEach { preference -> val ids = preference.get() val garbageIds = ids.minus(allCategories) if (garbageIds.isEmpty()) return@forEach preference.set(ids.minus(garbageIds)) } return@withIOContext true } } ================================================ FILE: app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt ================================================ package mihon.core.migration.migrations import eu.kanade.domain.base.BasePreferences import mihon.core.common.FeatureFlags import mihon.core.migration.Migration import mihon.core.migration.MigrationContext import kotlin.uuid.ExperimentalUuidApi class InstallationIdMigration : Migration { override val version: Float = Migration.ALWAYS @OptIn(ExperimentalUuidApi::class) override suspend fun invoke(migrationContext: MigrationContext): Boolean { val installationId = migrationContext.get()?.installationId ?: return false if (!installationId.isSet()) installationId.set(FeatureFlags.newInstallationId()) return true } } ================================================ FILE: app/src/main/java/mihon/core/migration/migrations/Migrations.kt ================================================ package mihon.core.migration.migrations import mihon.core.migration.Migration val migrations: List get() = listOf( SetupBackupCreateMigration(), SetupLibraryUpdateMigration(), TrustExtensionRepositoryMigration(), CategoryPreferencesCleanupMigration(), InstallationIdMigration(), ) ================================================ FILE: app/src/main/java/mihon/core/migration/migrations/SetupBackupCreateMigration.kt ================================================ package mihon.core.migration.migrations import android.app.Application import eu.kanade.tachiyomi.data.backup.create.BackupCreateJob import mihon.core.migration.Migration import mihon.core.migration.MigrationContext class SetupBackupCreateMigration : Migration { override val version: Float = Migration.ALWAYS override suspend fun invoke(migrationContext: MigrationContext): Boolean { val context = migrationContext.get() ?: return false BackupCreateJob.setupTask(context) return true } } ================================================ FILE: app/src/main/java/mihon/core/migration/migrations/SetupLibraryUpdateMigration.kt ================================================ package mihon.core.migration.migrations import android.app.Application import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import mihon.core.migration.Migration import mihon.core.migration.MigrationContext class SetupLibraryUpdateMigration : Migration { override val version: Float = Migration.ALWAYS override suspend fun invoke(migrationContext: MigrationContext): Boolean { val context = migrationContext.get() ?: return false LibraryUpdateJob.setupTask(context) return true } } ================================================ FILE: app/src/main/java/mihon/core/migration/migrations/TrustExtensionRepositoryMigration.kt ================================================ package mihon.core.migration.migrations import eu.kanade.domain.source.service.SourcePreferences import logcat.LogPriority import mihon.core.migration.Migration import mihon.core.migration.MigrationContext import mihon.domain.extensionrepo.exception.SaveExtensionRepoException import mihon.domain.extensionrepo.repository.ExtensionRepoRepository import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat class TrustExtensionRepositoryMigration : Migration { override val version: Float = 7f override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext { val sourcePreferences = migrationContext.get() ?: return@withIOContext false val extensionRepositoryRepository = migrationContext.get() ?: return@withIOContext false for ((index, source) in sourcePreferences.extensionRepos.get().withIndex()) { try { extensionRepositoryRepository.upsertRepo( source, "Repo #${index + 1}", null, source, "NOFINGERPRINT-${index + 1}", ) } catch (e: SaveExtensionRepoException) { logcat(LogPriority.ERROR, e) { "Error Migrating Extension Repo with baseUrl: $source" } } } sourcePreferences.extensionRepos.delete() return@withIOContext true } } ================================================ FILE: app/src/main/java/mihon/domain/migration/models/MigrationFlag.kt ================================================ package mihon.domain.migration.models enum class MigrationFlag(val flag: Int) { CHAPTER(0b00001), CATEGORY(0b00010), // 0b00100 was used for manga trackers CUSTOM_COVER(0b01000), NOTES(0b100000), REMOVE_DOWNLOAD(0b10000), ; companion object { fun fromBit(bit: Int): Set { return buildSet { entries.forEach { entry -> if (bit and entry.flag != 0) add(entry) } } } fun toBit(flags: Set): Int { return flags.map { it.flag } .reduceOrNull { acc, mask -> acc or mask } ?: 0 } } } ================================================ FILE: app/src/main/java/mihon/domain/migration/usecases/MigrateMangaUseCase.kt ================================================ package mihon.domain.migration.usecases import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.domain.manga.model.toSManga import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.TrackerManager import kotlinx.coroutines.CancellationException import mihon.domain.migration.models.MigrationFlag import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.category.interactor.SetMangaCategories import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.toChapterUpdate import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.interactor.InsertTrack import java.time.Instant class MigrateMangaUseCase( private val sourcePreferences: SourcePreferences, private val trackerManager: TrackerManager, private val sourceManager: SourceManager, private val downloadManager: DownloadManager, private val updateManga: UpdateManga, private val getChaptersByMangaId: GetChaptersByMangaId, private val syncChaptersWithSource: SyncChaptersWithSource, private val updateChapter: UpdateChapter, private val getCategories: GetCategories, private val setMangaCategories: SetMangaCategories, private val getTracks: GetTracks, private val insertTrack: InsertTrack, private val coverCache: CoverCache, ) { private val enhancedServices by lazy { trackerManager.trackers.filterIsInstance() } suspend operator fun invoke(current: Manga, target: Manga, replace: Boolean) { val targetSource = sourceManager.get(target.source) ?: return val currentSource = sourceManager.get(current.source) val flags = sourcePreferences.migrationFlags.get() try { val chapters = targetSource.getChapterList(target.toSManga()) try { syncChaptersWithSource.await(chapters, target, targetSource) } catch (_: Exception) { // Worst case, chapters won't be synced } // Update chapters read, bookmark and dateFetch if (MigrationFlag.CHAPTER in flags) { val prevMangaChapters = getChaptersByMangaId.await(current.id) val mangaChapters = getChaptersByMangaId.await(target.id) val maxChapterRead = prevMangaChapters .filter { it.read } .maxOfOrNull { it.chapterNumber } val updatedMangaChapters = mangaChapters.map { mangaChapter -> var updatedChapter = mangaChapter if (updatedChapter.isRecognizedNumber) { val prevChapter = prevMangaChapters .find { it.isRecognizedNumber && it.chapterNumber == updatedChapter.chapterNumber } if (prevChapter != null) { updatedChapter = updatedChapter.copy( dateFetch = prevChapter.dateFetch, bookmark = prevChapter.bookmark, ) } if (maxChapterRead != null && updatedChapter.chapterNumber <= maxChapterRead) { updatedChapter = updatedChapter.copy(read = true) } } updatedChapter } val chapterUpdates = updatedMangaChapters.map { it.toChapterUpdate() } updateChapter.awaitAll(chapterUpdates) } // Update categories if (MigrationFlag.CATEGORY in flags) { val categoryIds = getCategories.await(current.id).map { it.id } setMangaCategories.await(target.id, categoryIds) } // Update track getTracks.await(current.id).mapNotNull { track -> val updatedTrack = track.copy(mangaId = target.id) val service = enhancedServices .firstOrNull { it.isTrackFrom(updatedTrack, current, currentSource) } if (service != null) { service.migrateTrack(updatedTrack, target, targetSource) } else { updatedTrack } } .takeIf { it.isNotEmpty() } ?.let { insertTrack.awaitAll(it) } // Delete downloaded if (MigrationFlag.REMOVE_DOWNLOAD in flags && currentSource != null) { downloadManager.deleteManga(current, currentSource) } // Update custom cover (recheck if custom cover exists) if (MigrationFlag.CUSTOM_COVER in flags && current.hasCustomCover()) { coverCache.setCustomCoverToCache(target, coverCache.getCustomCoverFile(current.id).inputStream()) } val currentMangaUpdate = MangaUpdate( id = current.id, favorite = false, dateAdded = 0, ) .takeIf { replace } val targetMangaUpdate = MangaUpdate( id = target.id, favorite = true, chapterFlags = current.chapterFlags, viewerFlags = current.viewerFlags, dateAdded = if (replace) current.dateAdded else Instant.now().toEpochMilli(), notes = if (MigrationFlag.NOTES in flags) current.notes else null, ) updateManga.awaitAll(listOfNotNull(currentMangaUpdate, targetMangaUpdate)) } catch (e: Throwable) { if (e is CancellationException) { throw e } } } } ================================================ FILE: app/src/main/java/mihon/feature/common/utils/MigrationFlag.kt ================================================ package mihon.feature.common.utils import dev.icerock.moko.resources.StringResource import mihon.domain.migration.models.MigrationFlag import tachiyomi.i18n.MR fun MigrationFlag.getLabel(): StringResource { return when (this) { MigrationFlag.CHAPTER -> MR.strings.chapters MigrationFlag.CATEGORY -> MR.strings.categories MigrationFlag.CUSTOM_COVER -> MR.strings.custom_cover MigrationFlag.NOTES -> MR.strings.action_notes MigrationFlag.REMOVE_DOWNLOAD -> MR.strings.delete_downloaded } } ================================================ FILE: app/src/main/java/mihon/feature/migration/config/MigrationConfigScreen.kt ================================================ package mihon.feature.migration.config import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward import androidx.compose.material.icons.outlined.Deselect import androidx.compose.material.icons.outlined.DragHandle import androidx.compose.material.icons.outlined.SelectAll import androidx.compose.material3.ElevatedCard import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.ListItem import androidx.compose.material3.ListItemDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SmallExtendedFloatingActionButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEachIndexed import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.browse.components.SourceIcon import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.browse.migration.search.MigrateSearchScreen import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.update import mihon.feature.migration.list.MigrationListScreen import sh.calvin.reorderable.ReorderableCollectionItemScope import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.ReorderableLazyListState import sh.calvin.reorderable.rememberReorderableLazyListState import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.source.model.Source import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.Pill import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.shouldExpandFAB import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MigrationConfigScreen(private val mangaIds: Collection) : Screen() { constructor(mangaId: Long) : this(listOf(mangaId)) @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { ScreenModel() } val state by screenModel.state.collectAsState() var migrationSheetOpen by rememberSaveable { mutableStateOf(false) } fun continueMigration(openSheet: Boolean, extraSearchQuery: String?) { val mangaId = mangaIds.singleOrNull() if (mangaId == null && openSheet) { migrationSheetOpen = true return } val screen = if (mangaId == null) { MigrationListScreen(mangaIds, extraSearchQuery) } else { MigrateSearchScreen(mangaId) } navigator.replace(screen) } if (state.isLoading) { LoadingScreen() return } val (selectedSources, availableSources) = state.sources.partition { it.isSelected } val showLanguage by remember(state) { derivedStateOf { state.sources.distinctBy { it.source.lang }.size > 1 } } val lazyListState = rememberLazyListState() Scaffold( topBar = { AppBar( title = null, navigateUp = navigator::pop, scrollBehavior = it, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.migrationConfigScreen_selectAllLabel), icon = Icons.Outlined.SelectAll, onClick = { screenModel.toggleSelection(ScreenModel.SelectionConfig.All) }, ), AppBar.Action( title = stringResource(MR.strings.migrationConfigScreen_selectNoneLabel), icon = Icons.Outlined.Deselect, onClick = { screenModel.toggleSelection(ScreenModel.SelectionConfig.None) }, ), AppBar.OverflowAction( title = stringResource(MR.strings.migrationConfigScreen_selectEnabledLabel), onClick = { screenModel.toggleSelection(ScreenModel.SelectionConfig.Enabled) }, ), AppBar.OverflowAction( title = stringResource(MR.strings.migrationConfigScreen_selectPinnedLabel), onClick = { screenModel.toggleSelection(ScreenModel.SelectionConfig.Pinned) }, ), ), ) }, ) }, floatingActionButton = { SmallExtendedFloatingActionButton( text = { Text(text = stringResource(MR.strings.migrationConfigScreen_continueButtonText)) }, icon = { Icon(imageVector = Icons.AutoMirrored.Outlined.ArrowForward, contentDescription = null) }, onClick = { screenModel.saveSources() continueMigration(openSheet = true, extraSearchQuery = null) }, expanded = lazyListState.shouldExpandFAB(), ) }, ) { contentPadding -> val reorderableState = rememberReorderableLazyListState(lazyListState, contentPadding) { from, to -> val fromIndex = selectedSources.indexOfFirst { it.id == from.key } val toIndex = selectedSources.indexOfFirst { it.id == to.key } if (fromIndex == -1 || toIndex == -1) return@rememberReorderableLazyListState screenModel.orderSource(fromIndex, toIndex) } FastScrollLazyColumn( modifier = Modifier.fillMaxSize(), state = lazyListState, contentPadding = contentPadding, ) { listOf(selectedSources, availableSources).fastForEachIndexed { listIndex, sources -> val selectedSourceList = listIndex == 0 if (sources.isNotEmpty()) { val headerPrefix = if (selectedSourceList) "selected" else "available" item("$headerPrefix-header") { Text( text = stringResource( resource = if (selectedSourceList) { MR.strings.migrationConfigScreen_selectedHeader } else { MR.strings.migrationConfigScreen_availableHeader }, ), style = MaterialTheme.typography.bodyMedium, modifier = Modifier .padding(MaterialTheme.padding.medium) .animateItem(), ) } } itemsIndexed( items = sources, key = { _, item -> item.id }, ) { index, item -> SourceItemContainer( firstItem = index == 0, lastItem = index == (sources.size - 1), source = item, showLanguage = showLanguage, dragEnabled = selectedSourceList && sources.size > 1, state = reorderableState, key = { if (selectedSourceList) it.id else "available-${it.id}" }, onClick = { screenModel.toggleSelection(item.id) }, ) } } } } if (migrationSheetOpen) { MigrationConfigScreenSheet( preferences = screenModel.sourcePreferences, onDismissRequest = { migrationSheetOpen = false }, onStartMigration = { extraSearchQuery -> migrationSheetOpen = false continueMigration(openSheet = false, extraSearchQuery = extraSearchQuery) }, ) } } @Composable private fun LazyItemScope.SourceItemContainer( firstItem: Boolean, lastItem: Boolean, source: MigrationSource, showLanguage: Boolean, dragEnabled: Boolean, state: ReorderableLazyListState, key: (MigrationSource) -> Any, onClick: () -> Unit, ) { val shape = remember(firstItem, lastItem) { val top = if (firstItem) 12.dp else 0.dp val bottom = if (lastItem) 12.dp else 0.dp RoundedCornerShape(top, top, bottom, bottom) } ReorderableItem( state = state, key = key(source), enabled = dragEnabled, ) { _ -> ElevatedCard( shape = shape, modifier = Modifier .padding(horizontal = MaterialTheme.padding.medium) .animateItem(), ) { SourceItem( source = source, showLanguage = showLanguage, dragEnabled = dragEnabled, scope = this@ReorderableItem, onClick = onClick, ) } } if (!lastItem) { HorizontalDivider(modifier = Modifier.padding(horizontal = MaterialTheme.padding.medium)) } } @Composable private fun SourceItem( source: MigrationSource, showLanguage: Boolean, dragEnabled: Boolean, scope: ReorderableCollectionItemScope, onClick: () -> Unit, ) { ListItem( headlineContent = { Row( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), verticalAlignment = Alignment.CenterVertically, ) { SourceIcon(source = source.source) Text( text = source.name, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, modifier = Modifier.weight(1f), ) if (showLanguage) { Pill( text = LocaleHelper.getShortDisplayName(source.shortLanguage, uppercase = true), style = MaterialTheme.typography.bodySmall, ) } } }, trailingContent = if (dragEnabled) { { Icon( imageVector = Icons.Outlined.DragHandle, contentDescription = null, modifier = with(scope) { Modifier.draggableHandle() }, ) } } else { null }, colors = ListItemDefaults.colors( containerColor = Color.Transparent, ), modifier = Modifier.clickable(onClick = onClick), ) } private class ScreenModel( val sourcePreferences: SourcePreferences = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), ) : StateScreenModel(State()) { private val sourcesComparator = { includedSources: List -> compareBy( { !it.isSelected }, { includedSources.indexOf(it.id) }, { with(it) { "$name ($shortLanguage)" } }, ) } init { screenModelScope.launchIO { initSources() mutableState.update { it.copy(isLoading = false) } } } private fun updateSources(action: (List) -> List) { mutableState.update { state -> val updatedSources = action(state.sources) val includedSources = updatedSources.mapNotNull { if (!it.isSelected) null else it.id } state.copy(sources = updatedSources.sortedWith(sourcesComparator(includedSources))) } saveSources() } private fun initSources() { val languages = sourcePreferences.enabledLanguages.get() val pinnedSources = sourcePreferences.pinnedSources.get().mapNotNull { it.toLongOrNull() } val includedSources = sourcePreferences.migrationSources.get() val disabledSources = sourcePreferences.disabledSources.get() .mapNotNull { it.toLongOrNull() } val sources = sourceManager.getCatalogueSources() .asSequence() .filterIsInstance() .filter { it.lang in languages } .map { val source = Source( id = it.id, lang = it.lang, name = it.name, supportsLatest = false, isStub = false, ) MigrationSource( source = source, isSelected = when { includedSources.isNotEmpty() -> source.id in includedSources pinnedSources.isNotEmpty() -> source.id in pinnedSources else -> source.id !in disabledSources }, ) } .toList() mutableState.update { state -> state.copy(sources = sources.sortedWith(sourcesComparator(includedSources))) } } fun toggleSelection(id: Long) { updateSources { sources -> sources.map { source -> source.copy(isSelected = if (source.source.id == id) !source.isSelected else source.isSelected) } } } fun toggleSelection(config: SelectionConfig) { val pinnedSources = sourcePreferences.pinnedSources.get().mapNotNull { it.toLongOrNull() } val disabledSources = sourcePreferences.disabledSources.get().mapNotNull { it.toLongOrNull() } val isSelected: (Long) -> Boolean = { when (config) { SelectionConfig.All -> true SelectionConfig.None -> false SelectionConfig.Pinned -> it in pinnedSources SelectionConfig.Enabled -> it !in disabledSources } } updateSources { sources -> sources.map { source -> source.copy(isSelected = isSelected(source.source.id)) } } } fun orderSource(from: Int, to: Int) { updateSources { it.toMutableList() .apply { add(to, removeAt(from)) } .toList() } } fun saveSources() { state.value.sources .filter { source -> source.isSelected } .map { source -> source.source.id } .let { sources -> sourcePreferences.migrationSources.set(sources) } } data class State( val isLoading: Boolean = true, val sources: List = emptyList(), ) enum class SelectionConfig { All, None, Pinned, Enabled, } } data class MigrationSource( val source: Source, val isSelected: Boolean, ) { val id: Long inline get() = source.id val name: String inline get() = source.name val shortLanguage: String = LocaleHelper.getShortDisplayName(source.lang) } } ================================================ FILE: app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt ================================================ package mihon.feature.migration.config import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Warning import androidx.compose.material3.FilterChip import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.ListItem import androidx.compose.material3.ListItemDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.util.fastForEach import eu.kanade.core.util.fastFilterNot import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.components.AdaptiveSheet import mihon.domain.migration.models.MigrationFlag import mihon.feature.common.utils.getLabel import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.getAndSet import tachiyomi.core.common.preference.toggle import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Button import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.collectAsState @Composable fun MigrationConfigScreenSheet( preferences: SourcePreferences, onDismissRequest: () -> Unit, onStartMigration: (extraSearchQuery: String?) -> Unit, ) { var extraSearchQuery by rememberSaveable { mutableStateOf("") } val migrationFlags by preferences.migrationFlags.collectAsState() AdaptiveSheet(onDismissRequest = onDismissRequest) { Column(modifier = Modifier.fillMaxWidth()) { Column( modifier = Modifier .weight(1f, fill = false) .fillMaxWidth() .verticalScroll(rememberScrollState()) .padding(top = MaterialTheme.padding.medium), ) { Text( text = stringResource(MR.strings.migrationConfigScreen_dataToMigrateHeader), style = MaterialTheme.typography.header, modifier = Modifier .fillMaxWidth() .padding(top = MaterialTheme.padding.extraSmall) .padding(horizontal = MaterialTheme.padding.medium), ) Spacer(modifier = Modifier.height(MaterialTheme.padding.extraSmall)) FlowRow( modifier = Modifier .fillMaxWidth() .padding(horizontal = MaterialTheme.padding.medium) .padding(bottom = MaterialTheme.padding.extraSmall), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { MigrationFlag.entries .fastFilterNot { it == MigrationFlag.REMOVE_DOWNLOAD } .fastForEach { flag -> val selected = flag in migrationFlags FilterChip( selected = selected, onClick = { preferences.migrationFlags.getAndSet { currentFlags -> if (flag in currentFlags) { currentFlags - flag } else { currentFlags + flag } } }, label = { Text(stringResource(flag.getLabel())) }, leadingIcon = { if (selected) { Icon( imageVector = Icons.Outlined.Check, contentDescription = null, ) } }, ) } } val removeDownloads = MigrationFlag.REMOVE_DOWNLOAD in migrationFlags MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_removeDownloadsTitle), subtitle = null, checked = removeDownloads, onClick = { preferences.migrationFlags.getAndSet { if (removeDownloads) { it - MigrationFlag.REMOVE_DOWNLOAD } else { it + MigrationFlag.REMOVE_DOWNLOAD } } }, ) MigrationSheetDividerItem() OutlinedTextField( value = extraSearchQuery, onValueChange = { extraSearchQuery = it }, label = { Text(stringResource(MR.strings.migrationConfigScreen_additionalSearchQueryLabel)) }, supportingText = { Text(stringResource(MR.strings.migrationConfigScreen_additionalSearchQuerySupportingText)) }, singleLine = true, modifier = Modifier .fillMaxWidth() .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.extraSmall, ), ) MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_hideUnmatchedTitle), subtitle = null, preference = preferences.migrationHideUnmatched, ) MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_hideWithoutUpdatesTitle), subtitle = stringResource(MR.strings.migrationConfigScreen_hideWithoutUpdatesSubtitle), preference = preferences.migrationHideWithoutUpdates, ) MigrationSheetDividerItem() MigrationSheetWarningItem(stringResource(MR.strings.migrationConfigScreen_enhancedOptionsWarning)) MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_deepSearchModeTitle), subtitle = stringResource(MR.strings.migrationConfigScreen_deepSearchModeSubtitle), preference = preferences.migrationDeepSearchMode, ) MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersTitle), subtitle = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersSubtitle), preference = preferences.migrationPrioritizeByChapters, ) } HorizontalDivider() Button( onClick = { val cleanedExtraSearchQuery = extraSearchQuery.trim().ifBlank { null } onStartMigration(cleanedExtraSearchQuery) }, modifier = Modifier .fillMaxWidth() .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), ) { Text(text = stringResource(MR.strings.migrationConfigScreen_continueButtonText)) } } } } @Composable private fun MigrationSheetSwitchItem( title: String, subtitle: String?, preference: Preference, ) { MigrationSheetSwitchItem( title = title, subtitle = subtitle, checked = preference.collectAsState().value, onClick = { preference.toggle() }, ) } @Composable private fun MigrationSheetSwitchItem( title: String, subtitle: String?, checked: Boolean, onClick: () -> Unit, ) { ListItem( headlineContent = { Text(text = title) }, supportingContent = subtitle?.let { { Text(text = subtitle) } }, trailingContent = { Switch( checked = checked, onCheckedChange = null, ) }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), modifier = Modifier.clickable(onClick = onClick), ) } @Composable private fun MigrationSheetDividerItem() { HorizontalDivider(modifier = Modifier.padding(vertical = MaterialTheme.padding.extraSmall)) } @Composable private fun MigrationSheetWarningItem( text: String, ) { ListItem( leadingContent = { Icon( imageVector = Icons.Outlined.Warning, contentDescription = null, tint = MaterialTheme.colorScheme.active, ) }, headlineContent = { Text( text = text, color = MaterialTheme.colorScheme.error, modifier = Modifier, ) }, colors = ListItemDefaults.colors(containerColor = Color.Transparent), ) } ================================================ FILE: app/src/main/java/mihon/feature/migration/dialog/MigrateMangaDialog.kt ================================================ package mihon.feature.migration.dialog import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.AlertDialog import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.util.fastForEach import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager import kotlinx.coroutines.flow.update import mihon.domain.migration.models.MigrationFlag import mihon.domain.migration.usecases.MigrateMangaUseCase import mihon.feature.common.utils.getLabel import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @Composable internal fun Screen.MigrateMangaDialog( current: Manga, target: Manga, onClickTitle: () -> Unit, onDismissRequest: () -> Unit, onComplete: () -> Unit = onDismissRequest, ) { val scope = rememberCoroutineScope() val screenModel = rememberScreenModel { MigrateDialogScreenModel() } LaunchedEffect(current, target) { screenModel.init(current, target) } val state by screenModel.state.collectAsState() if (state.isMigrated) return if (state.isMigrating) { LoadingScreen( modifier = Modifier.background(MaterialTheme.colorScheme.background.copy(alpha = 0.7f)), ) return } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = stringResource(MR.strings.migration_dialog_what_to_include)) }, text = { Column( modifier = Modifier.verticalScroll(rememberScrollState()), ) { state.applicableFlags.fastForEach { flag -> LabeledCheckbox( label = stringResource(flag.getLabel()), checked = flag in state.selectedFlags, onCheckedChange = { screenModel.toggleSelection(flag) }, ) } } }, confirmButton = { FlowRow( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { TextButton( onClick = { onDismissRequest() onClickTitle() }, ) { Text(text = stringResource(MR.strings.action_show_manga)) } Spacer(modifier = Modifier.weight(1f)) TextButton( onClick = { scope.launchIO { screenModel.migrateManga(replace = false) withUIContext { onComplete() } } }, ) { Text(text = stringResource(MR.strings.copy)) } TextButton( onClick = { scope.launchIO { screenModel.migrateManga(replace = true) withUIContext { onComplete() } } }, ) { Text(text = stringResource(MR.strings.migrate)) } } }, ) } private class MigrateDialogScreenModel( private val sourcePreference: SourcePreferences = Injekt.get(), private val coverCache: CoverCache = Injekt.get(), private val downloadManager: DownloadManager = Injekt.get(), private val migrateManga: MigrateMangaUseCase = Injekt.get(), ) : StateScreenModel(State()) { fun init(current: Manga, target: Manga) { val applicableFlags = buildList { MigrationFlag.entries.forEach { val applicable = when (it) { MigrationFlag.CHAPTER -> true MigrationFlag.CATEGORY -> true MigrationFlag.CUSTOM_COVER -> current.hasCustomCover(coverCache) MigrationFlag.NOTES -> current.notes.isNotBlank() MigrationFlag.REMOVE_DOWNLOAD -> downloadManager.getDownloadCount(current) > 0 } if (applicable) add(it) } } val selectedFlags = sourcePreference.migrationFlags.get() mutableState.update { State( current = current, target = target, applicableFlags = applicableFlags, selectedFlags = selectedFlags, ) } } fun toggleSelection(flag: MigrationFlag) { mutableState.update { val selectedFlags = it.selectedFlags.toMutableSet() .apply { if (contains(flag)) remove(flag) else add(flag) } .toSet() it.copy(selectedFlags = selectedFlags) } } suspend fun migrateManga(replace: Boolean) { val state = state.value val current = state.current ?: return val target = state.target ?: return sourcePreference.migrationFlags.set(state.selectedFlags) mutableState.update { it.copy(isMigrating = true) } migrateManga(current, target, replace) mutableState.update { it.copy(isMigrating = false, isMigrated = true) } } data class State( val current: Manga? = null, val target: Manga? = null, val applicableFlags: List = emptyList(), val selectedFlags: Set = emptySet(), val isMigrating: Boolean = false, val isMigrated: Boolean = false, ) } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/MigrationListScreen.kt ================================================ package mihon.feature.migration.list import android.widget.Toast import androidx.activity.compose.BackHandler import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.migration.search.MigrateSearchScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.util.system.toast import mihon.feature.migration.list.components.MigrationExitDialog import mihon.feature.migration.list.components.MigrationMangaDialog import mihon.feature.migration.list.components.MigrationProgressDialog import tachiyomi.i18n.MR class MigrationListScreen(private val mangaIds: Collection, private val extraSearchQuery: String?) : Screen() { private var matchOverride: Pair? = null fun addMatchOverride(current: Long, target: Long) { matchOverride = current to target } @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { MigrationListScreenModel(mangaIds, extraSearchQuery) } val state by screenModel.state.collectAsState() val context = LocalContext.current LaunchedEffect(matchOverride) { val (current, target) = matchOverride ?: return@LaunchedEffect screenModel.useMangaForMigration( current = current, target = target, onMissingChapters = { context.toast(MR.strings.migrationListScreen_matchWithoutChapterToast, Toast.LENGTH_LONG) }, ) matchOverride = null } LaunchedEffect(screenModel) { screenModel.navigateBackEvent.collect { navigator.pop() } } MigrationListScreenContent( items = state.items, migrationComplete = state.migrationComplete, finishedCount = state.finishedCount, onItemClick = { navigator.push(MangaScreen(it.id, true)) }, onSearchManually = { migrationItem -> navigator push MigrateSearchScreen(migrationItem.manga.id) }, onSkip = { screenModel.removeManga(it) }, onMigrate = { screenModel.migrateNow(mangaId = it, replace = true) }, onCopy = { screenModel.migrateNow(mangaId = it, replace = false) }, openMigrationDialog = screenModel::showMigrateDialog, ) when (val dialog = state.dialog) { is MigrationListScreenModel.Dialog.Migrate -> { MigrationMangaDialog( onDismissRequest = screenModel::dismissDialog, copy = dialog.copy, totalCount = dialog.totalCount, skippedCount = dialog.skippedCount, onMigrate = { if (dialog.copy) { screenModel.copyMangas() } else { screenModel.migrateMangas() } }, ) } is MigrationListScreenModel.Dialog.Progress -> { MigrationProgressDialog( progress = dialog.progress, exitMigration = screenModel::cancelMigrate, ) } MigrationListScreenModel.Dialog.Exit -> { MigrationExitDialog( onDismissRequest = screenModel::dismissDialog, exitMigration = navigator::pop, ) } null -> Unit } BackHandler(true) { screenModel.showExitDialog() } } } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/MigrationListScreenContent.kt ================================================ package mihon.feature.migration.list import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.ContentCopy import androidx.compose.material.icons.outlined.CopyAll import androidx.compose.material.icons.outlined.Done import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.presentation.util.rememberResourceBitmapPainter import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import mihon.feature.migration.list.models.MigratingManga import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Badge import tachiyomi.presentation.core.components.BadgeGroup import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.plus @Composable fun MigrationListScreenContent( items: ImmutableList, migrationComplete: Boolean, finishedCount: Int, onItemClick: (Manga) -> Unit, onSearchManually: (MigratingManga) -> Unit, onSkip: (Long) -> Unit, onMigrate: (Long) -> Unit, onCopy: (Long) -> Unit, openMigrationDialog: (Boolean) -> Unit, ) { Scaffold( topBar = { scrollBehavior -> AppBar( title = if (items.isNotEmpty()) { stringResource(MR.strings.migrationListScreenTitleWithProgress, finishedCount, items.size) } else { stringResource(MR.strings.migrationListScreenTitle) }, actions = { AppBarActions( persistentListOf( AppBar.Action( title = stringResource(MR.strings.migrationListScreen_copyActionLabel), icon = if (items.size == 1) Icons.Outlined.ContentCopy else Icons.Outlined.CopyAll, onClick = { openMigrationDialog(true) }, enabled = migrationComplete, ), AppBar.Action( title = stringResource(MR.strings.migrationListScreen_migrateActionLabel), icon = if (items.size == 1) Icons.Outlined.Done else Icons.Outlined.DoneAll, onClick = { openMigrationDialog(false) }, enabled = migrationComplete, ), ), ) }, scrollBehavior = scrollBehavior, ) }, ) { contentPadding -> FastScrollLazyColumn(contentPadding = contentPadding + topSmallPaddingValues) { items(items, key = { it.manga.id }) { item -> Row( Modifier .fillMaxWidth() .animateItemFastScroll() .padding( start = MaterialTheme.padding.medium, end = MaterialTheme.padding.small, ) .height(IntrinsicSize.Min), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { MigrationListItem( modifier = Modifier .weight(1f) .align(Alignment.Top) .fillMaxHeight(), manga = item.manga, source = item.source, chapterCount = item.chapterCount, latestChapter = item.latestChapter, onClick = { onItemClick(item.manga) }, ) Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowForward, contentDescription = null, modifier = Modifier.weight(0.2f), ) val result by item.searchResult.collectAsState() MigrationListItemResult( modifier = Modifier .weight(1f) .align(Alignment.Top) .fillMaxHeight(), result = result, onItemClick = onItemClick, ) MigrationListItemAction( modifier = Modifier.weight(0.2f), result = result, onSearchManually = { onSearchManually(item) }, onSkip = { onSkip(item.manga.id) }, onMigrate = { onMigrate(item.manga.id) }, onCopy = { onCopy(item.manga.id) }, ) } } } } } @Composable fun MigrationListItem( modifier: Modifier, manga: Manga, source: String, chapterCount: Int, latestChapter: Double?, onClick: () -> Unit, ) { Column( modifier = modifier .widthIn(max = 150.dp) .fillMaxWidth() .clip(MaterialTheme.shapes.small) .clickable(onClick = onClick) .padding(4.dp), ) { Box( modifier = Modifier .fillMaxWidth() .aspectRatio(MangaCover.Book.ratio), ) { MangaCover.Book( modifier = Modifier.fillMaxWidth(), data = manga, ) Box( modifier = Modifier .clip(RoundedCornerShape(bottomStart = 4.dp, bottomEnd = 4.dp)) .background( Brush.verticalGradient( 0f to Color.Transparent, 1f to MaterialTheme.colorScheme.background, ), ) .fillMaxHeight(0.4f) .fillMaxWidth() .align(Alignment.BottomCenter), ) Text( modifier = Modifier .padding(8.dp) .align(Alignment.BottomStart), text = manga.title, overflow = TextOverflow.Ellipsis, maxLines = 2, style = MaterialTheme.typography.labelMedium, ) BadgeGroup(modifier = Modifier.padding(4.dp)) { Badge(text = "$chapterCount") } } Column( modifier = Modifier .padding(MaterialTheme.padding.extraSmall), verticalArrangement = Arrangement.spacedBy(2.dp), ) { Text( text = source, overflow = TextOverflow.Ellipsis, maxLines = 1, style = MaterialTheme.typography.titleSmall, ) val formattedLatestChapters = remember(latestChapter) { latestChapter?.let(::formatChapterNumber) } Text( text = stringResource( MR.strings.migrationListScreen_latestChapterLabel, formattedLatestChapters ?: stringResource(MR.strings.migrationListScreen_unknownLatestChapter), ), overflow = TextOverflow.Ellipsis, maxLines = 1, style = MaterialTheme.typography.bodyMedium, ) } } } @Composable fun MigrationListItemResult( modifier: Modifier, result: MigratingManga.SearchResult, onItemClick: (Manga) -> Unit, ) { Box(modifier.height(IntrinsicSize.Min)) { when (result) { MigratingManga.SearchResult.Searching -> { Box( modifier = Modifier .widthIn(max = 150.dp) .fillMaxSize() .aspectRatio(MangaCover.Book.ratio), contentAlignment = Alignment.Center, ) { CircularProgressIndicator() } } MigratingManga.SearchResult.NotFound -> { Column( Modifier .widthIn(max = 150.dp) .fillMaxSize() .padding(4.dp), ) { Image( painter = rememberResourceBitmapPainter(id = R.drawable.cover_error), contentDescription = null, modifier = Modifier .fillMaxWidth() .aspectRatio(MangaCover.Book.ratio) .clip(MaterialTheme.shapes.extraSmall), contentScale = ContentScale.Crop, ) Text( text = stringResource(MR.strings.migrationListScreen_noMatchFoundText), modifier = Modifier.padding(MaterialTheme.padding.extraSmall), style = MaterialTheme.typography.titleSmall, ) } } is MigratingManga.SearchResult.Success -> { MigrationListItem( modifier = Modifier.fillMaxSize(), manga = result.manga, source = result.source, chapterCount = result.chapterCount, latestChapter = result.latestChapter, onClick = { onItemClick(result.manga) }, ) } } } } @Composable private fun MigrationListItemAction( modifier: Modifier, result: MigratingManga.SearchResult, onSearchManually: () -> Unit, onSkip: () -> Unit, onMigrate: () -> Unit, onCopy: () -> Unit, ) { var menuExpanded by rememberSaveable { mutableStateOf(false) } val closeMenu = { menuExpanded = false } Box(modifier) { when (result) { MigratingManga.SearchResult.Searching -> { IconButton(onClick = onSkip) { Icon( imageVector = Icons.Outlined.Close, contentDescription = null, ) } } MigratingManga.SearchResult.NotFound, is MigratingManga.SearchResult.Success -> { IconButton(onClick = { menuExpanded = true }) { Icon( imageVector = Icons.Outlined.MoreVert, contentDescription = null, ) } DropdownMenu( expanded = menuExpanded, onDismissRequest = closeMenu, offset = DpOffset(8.dp, (-56).dp), ) { DropdownMenuItem( text = { Text(stringResource(MR.strings.migrationListScreen_searchManuallyActionLabel)) }, onClick = { closeMenu() onSearchManually() }, ) DropdownMenuItem( text = { Text(stringResource(MR.strings.migrationListScreen_skipActionLabel)) }, onClick = { closeMenu() onSkip() }, ) if (result is MigratingManga.SearchResult.Success) { DropdownMenuItem( text = { Text(stringResource(MR.strings.migrationListScreen_migrateNowActionLabel)) }, onClick = { closeMenu() onMigrate() }, ) DropdownMenuItem( text = { Text(stringResource(MR.strings.migrationListScreen_copyNowActionLabel)) }, onClick = { closeMenu() onCopy() }, ) } } } } } } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/MigrationListScreenModel.kt ================================================ package mihon.feature.migration.list import androidx.annotation.FloatRange import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.toSManga import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.getNameForMangaInfo import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Job import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.cancel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import logcat.LogPriority import mihon.domain.migration.usecases.MigrateMangaUseCase import mihon.feature.migration.list.models.MigratingManga import mihon.feature.migration.list.models.MigratingManga.SearchResult import mihon.feature.migration.list.search.SmartSourceSearchEngine import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.manga.interactor.GetManga import tachiyomi.domain.manga.interactor.NetworkToLocalManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class MigrationListScreenModel( mangaIds: Collection, extraSearchQuery: String?, private val preferences: SourcePreferences = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), private val getManga: GetManga = Injekt.get(), private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), private val updateManga: UpdateManga = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(), private val migrateManga: MigrateMangaUseCase = Injekt.get(), ) : StateScreenModel(State()) { private val smartSearchEngine = SmartSourceSearchEngine(extraSearchQuery) val items inline get() = state.value.items private val hideUnmatched = preferences.migrationHideUnmatched.get() private val hideWithoutUpdates = preferences.migrationHideWithoutUpdates.get() private val navigateBackChannel = Channel() val navigateBackEvent = navigateBackChannel.receiveAsFlow() private var migrateJob: Job? = null init { screenModelScope.launchIO { val manga = mangaIds .map { async { val manga = getManga.await(it) ?: return@async null val chapterInfo = getChapterInfo(it) MigratingManga( manga = manga, chapterCount = chapterInfo.chapterCount, latestChapter = chapterInfo.latestChapter, source = sourceManager.getOrStub(manga.source).getNameForMangaInfo(), parentContext = screenModelScope.coroutineContext, ) } } .awaitAll() .filterNotNull() mutableState.update { it.copy(items = manga.toImmutableList()) } runMigrations(manga) } } private suspend fun getChapterInfo(id: Long) = getChaptersByMangaId.await(id).let { chapters -> ChapterInfo( latestChapter = chapters.maxOfOrNull { it.chapterNumber }, chapterCount = chapters.size, ) } private suspend fun Manga.toSuccessSearchResult(): SearchResult.Success { val chapterInfo = getChapterInfo(id) val source = sourceManager.getOrStub(source).getNameForMangaInfo() return SearchResult.Success( manga = this, chapterCount = chapterInfo.chapterCount, latestChapter = chapterInfo.latestChapter, source = source, ) } private suspend fun runMigrations(mangas: List) { val prioritizeByChapters = preferences.migrationPrioritizeByChapters.get() val deepSearchMode = preferences.migrationDeepSearchMode.get() val sources = preferences.migrationSources.get() .mapNotNull { sourceManager.get(it) as? CatalogueSource } for (manga in mangas) { if (!currentCoroutineContext().isActive) break if (manga.manga.id !in state.value.mangaIds) continue if (manga.searchResult.value != SearchResult.Searching) continue if (!manga.migrationScope.isActive) continue val result = try { manga.migrationScope.async { if (prioritizeByChapters) { val sourceSemaphore = Semaphore(5) sources.map { source -> async innerAsync@{ sourceSemaphore.withPermit { val result = searchSource(manga.manga, source, deepSearchMode) if (result == null || result.second.chapterCount == 0) return@innerAsync null result } } } .mapNotNull { it.await() } .maxByOrNull { it.second.latestChapter ?: 0.0 } } else { sources.forEach { source -> val result = searchSource(manga.manga, source, deepSearchMode) if (result != null) return@async result } null } } .await() } catch (_: CancellationException) { continue } if (result != null && result.first.thumbnailUrl == null) { try { val newManga = sourceManager.getOrStub(result.first.source).getMangaDetails(result.first.toSManga()) updateManga.awaitUpdateFromSource(result.first, newManga, true) } catch (e: CancellationException) { throw e } catch (_: Exception) { } } manga.searchResult.value = result?.first?.toSuccessSearchResult() ?: SearchResult.NotFound if (result == null && hideUnmatched) { removeManga(manga) } if (result != null && hideWithoutUpdates && (result.second.latestChapter ?: 0.0) <= (manga.latestChapter ?: 0.0) ) { removeManga(manga) } updateMigrationProgress() } } private suspend fun searchSource( manga: Manga, source: CatalogueSource, deepSearchMode: Boolean, ): Pair? { return try { val searchResult = if (deepSearchMode) { smartSearchEngine.deepSearch(source, manga.title) } else { smartSearchEngine.regularSearch(source, manga.title) } if (searchResult == null || (searchResult.url == manga.url && source.id == manga.source)) return null val localManga = networkToLocalManga(searchResult) try { val chapters = source.getChapterList(localManga.toSManga()) syncChaptersWithSource.await(chapters, localManga, source) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } localManga to getChapterInfo(localManga.id) } catch (e: CancellationException) { throw e } catch (_: Exception) { null } } private suspend fun updateMigrationProgress() { mutableState.update { state -> state.copy( finishedCount = items.count { it.searchResult.value != SearchResult.Searching }, migrationComplete = migrationComplete(), ) } if (items.isEmpty()) { navigateBack() } } private fun migrationComplete() = items.all { it.searchResult.value != SearchResult.Searching } && items.any { it.searchResult.value is SearchResult.Success } fun useMangaForMigration(current: Long, target: Long, onMissingChapters: () -> Unit) { val migratingManga = items.find { it.manga.id == current } ?: return migratingManga.searchResult.value = SearchResult.Searching screenModelScope.launchIO { val result = migratingManga.migrationScope.async { val manga = getManga.await(target) ?: return@async null try { val source = sourceManager.get(manga.source)!! val chapters = source.getChapterList(manga.toSManga()) syncChaptersWithSource.await(chapters, manga, source) } catch (_: Exception) { return@async null } manga } .await() if (result == null) { migratingManga.searchResult.value = SearchResult.NotFound withUIContext { onMissingChapters() } return@launchIO } try { val newManga = sourceManager.getOrStub(result.source).getMangaDetails(result.toSManga()) updateManga.awaitUpdateFromSource(result, newManga, true) } catch (e: CancellationException) { throw e } catch (_: Exception) { } migratingManga.searchResult.value = result.toSuccessSearchResult() updateMigrationProgress() } } fun migrateMangas() { migrateMangas(replace = true) } fun copyMangas() { migrateMangas(replace = false) } private fun migrateMangas(replace: Boolean) { migrateJob = screenModelScope.launchIO { mutableState.update { it.copy(dialog = Dialog.Progress(0f)) } val items = items try { items.forEachIndexed { index, manga -> try { ensureActive() val target = manga.searchResult.value.let { if (it is SearchResult.Success) { it.manga } else { null } } if (target != null) { migrateManga(current = manga.manga, target = target, replace = replace) } } catch (e: Exception) { if (e is CancellationException) throw e logcat(LogPriority.WARN, throwable = e) } mutableState.update { it.copy(dialog = Dialog.Progress((index.toFloat() / items.size).coerceAtMost(1f))) } } navigateBack() } finally { mutableState.update { it.copy(dialog = null) } migrateJob = null } } } fun cancelMigrate() { migrateJob?.cancel() migrateJob = null } private suspend fun navigateBack() { navigateBackChannel.send(Unit) } fun migrateNow(mangaId: Long, replace: Boolean) { screenModelScope.launchIO { val manga = items.find { it.manga.id == mangaId } ?: return@launchIO val target = (manga.searchResult.value as? SearchResult.Success)?.manga ?: return@launchIO migrateManga(current = manga.manga, target = target, replace = replace) removeManga(mangaId) } } fun removeManga(mangaId: Long) { screenModelScope.launchIO { val item = items.find { it.manga.id == mangaId } ?: return@launchIO removeManga(item) item.migrationScope.cancel() updateMigrationProgress() } } private fun removeManga(item: MigratingManga) { mutableState.update { it.copy(items = items.toPersistentList().remove(item)) } } override fun onDispose() { super.onDispose() items.forEach { it.migrationScope.cancel() } } fun showMigrateDialog(copy: Boolean) { mutableState.update { state -> state.copy( dialog = Dialog.Migrate( copy = copy, totalCount = items.size, skippedCount = items.count { it.searchResult.value == SearchResult.NotFound }, ), ) } } fun showExitDialog() { mutableState.update { it.copy(dialog = Dialog.Exit) } } fun dismissDialog() { mutableState.update { it.copy(dialog = null) } } data class ChapterInfo( val latestChapter: Double?, val chapterCount: Int, ) sealed interface Dialog { data class Migrate(val copy: Boolean, val totalCount: Int, val skippedCount: Int) : Dialog data class Progress(@FloatRange(0.0, 1.0) val progress: Float) : Dialog data object Exit : Dialog } data class State( val items: ImmutableList = persistentListOf(), val finishedCount: Int = 0, val migrationComplete: Boolean = false, val dialog: Dialog? = null, ) { val mangaIds: List = items.map { it.manga.id } } } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/components/MigrationExitDialog.kt ================================================ package mihon.feature.migration.list.components import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun MigrationExitDialog( onDismissRequest: () -> Unit, exitMigration: () -> Unit, ) { AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = stringResource(MR.strings.migrationListScreen_exitDialogTitle)) }, confirmButton = { TextButton(onClick = exitMigration) { Text(text = stringResource(MR.strings.migrationListScreen_exitDialog_stopLabel)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.migrationListScreen_exitDialog_cancelLabel)) } }, ) } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/components/MigrationMangaDialog.kt ================================================ package mihon.feature.migration.list.components import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource @Composable fun MigrationMangaDialog( onDismissRequest: () -> Unit, copy: Boolean, totalCount: Int, skippedCount: Int, onMigrate: () -> Unit, ) { AlertDialog( onDismissRequest = onDismissRequest, title = { Text( text = pluralStringResource( resource = if (copy) { MR.plurals.migrationListScreen_migrateDialog_copyTitle } else { MR.plurals.migrationListScreen_migrateDialog_migrateTitle }, count = totalCount, totalCount, ), ) }, text = { if (skippedCount > 0) { Text( text = pluralStringResource( resource = MR.plurals.migrationListScreen_migrateDialog_skipText, count = skippedCount, skippedCount, ), ) } }, confirmButton = { TextButton(onClick = onMigrate) { Text( text = stringResource( resource = if (copy) { MR.strings.migrationListScreen_migrateDialog_copyLabel } else { MR.strings.migrationListScreen_migrateDialog_migrateLabel }, ), ) } }, dismissButton = { TextButton(onClick = onDismissRequest) { Text(text = stringResource(MR.strings.migrationListScreen_migrateDialog_cancelLabel)) } }, ) } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/components/MigrationProgressDialog.kt ================================================ package mihon.feature.migration.list.components import androidx.compose.animation.core.animateFloatAsState import androidx.compose.material3.AlertDialog import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.ProgressIndicatorDefaults import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.window.DialogProperties import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun MigrationProgressDialog( progress: Float, exitMigration: () -> Unit, ) { AlertDialog( onDismissRequest = {}, confirmButton = { TextButton(onClick = exitMigration) { Text(text = stringResource(MR.strings.migrationListScreen_progressDialog_cancelLabel)) } }, text = { if (!progress.isNaN()) { val progressAnimated by animateFloatAsState( targetValue = progress, animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec, label = "migration_progress", ) LinearProgressIndicator( progress = { progressAnimated }, ) } }, properties = DialogProperties( dismissOnBackPress = false, dismissOnClickOutside = false, ), ) } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/models/MigratingManga.kt ================================================ package mihon.feature.migration.list.models import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableStateFlow import tachiyomi.domain.manga.model.Manga import kotlin.coroutines.CoroutineContext class MigratingManga( val manga: Manga, val chapterCount: Int, val latestChapter: Double?, val source: String, parentContext: CoroutineContext, ) { val migrationScope = CoroutineScope(parentContext + SupervisorJob() + Dispatchers.Default) val searchResult = MutableStateFlow(SearchResult.Searching) sealed interface SearchResult { data object Searching : SearchResult data object NotFound : SearchResult data class Success( val manga: Manga, val chapterCount: Int, val latestChapter: Double?, val source: String, ) : SearchResult } } ================================================ FILE: app/src/main/java/mihon/feature/migration/list/search/BaseSmartSearchEngine.kt ================================================ package mihon.feature.migration.list.search import com.aallam.similarity.NormalizedLevenshtein import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.supervisorScope import java.util.Locale typealias SearchAction = suspend (String) -> List abstract class BaseSmartSearchEngine( private val extraSearchParams: String? = null, private val eligibleThreshold: Double = MIN_ELIGIBLE_THRESHOLD, ) { private val normalizedLevenshtein = NormalizedLevenshtein() protected abstract fun getTitle(result: T): String protected suspend fun regularSearch(searchAction: SearchAction, title: String): T? { return baseSearch(searchAction, listOf(title)) { normalizedLevenshtein.similarity(title, getTitle(it)) } } protected suspend fun deepSearch(searchAction: SearchAction, title: String): T? { val cleanedTitle = cleanDeepSearchTitle(title) val queries = getDeepSearchQueries(cleanedTitle) return baseSearch(searchAction, queries) { val cleanedMangaTitle = cleanDeepSearchTitle(getTitle(it)) normalizedLevenshtein.similarity(cleanedTitle, cleanedMangaTitle) } } private suspend fun baseSearch( searchAction: SearchAction, queries: List, calculateDistance: (T) -> Double, ): T? { val eligibleManga = supervisorScope { queries.map { query -> async(Dispatchers.Default) { val builtQuery = if (!extraSearchParams.isNullOrBlank()) { "$query $extraSearchParams" } else { query } val candidates = searchAction(builtQuery) candidates .map { val distance = if (queries.size > 1 || candidates.size > 1) { calculateDistance(it) } else { 1.0 } SearchEntry(it, distance) } .filter { it.distance >= eligibleThreshold } } } .flatMap { it.await() } } return eligibleManga.maxByOrNull { it.distance }?.entry } private fun cleanDeepSearchTitle(title: String): String { val preTitle = title.lowercase(Locale.getDefault()) // Remove text in brackets var cleanedTitle = removeTextInBrackets(preTitle, true) if (cleanedTitle.length <= 5) { // Title is suspiciously short, try parsing it backwards cleanedTitle = removeTextInBrackets(preTitle, false) } // Strip chapter reference RU cleanedTitle = cleanedTitle.replace(chapterRefCyrillicRegexp, " ").trim() // Strip non-special characters val cleanedTitleEng = cleanedTitle.replace(titleRegex, " ") // Do not strip foreign language letters if cleanedTitle is too short cleanedTitle = if (cleanedTitleEng.length <= 5) { cleanedTitle.replace(titleCyrillicRegex, " ") } else { cleanedTitleEng } // Strip splitters and consecutive spaces cleanedTitle = cleanedTitle.trim().replace(" - ", " ").replace(consecutiveSpacesRegex, " ").trim() return cleanedTitle } private fun removeTextInBrackets(text: String, readForward: Boolean): String { val openingChars = if (readForward) "([<{" else ")]}>" val closingChars = if (readForward) ")]}>" else "([<{" var depth = 0 return buildString { for (char in (if (readForward) text else text.reversed())) { when (char) { in openingChars -> depth++ in closingChars -> if (depth > 0) depth-- // Avoid depth going negative on mismatched closing else -> if (depth == 0) { // If reading backward, the result is reversed, so prepend if (readForward) append(char) else insert(0, char) } } } } } private fun getDeepSearchQueries(cleanedTitle: String): List { val splitCleanedTitle = cleanedTitle.split(" ") val splitSortedByLargest = splitCleanedTitle.sortedByDescending { it.length } if (splitCleanedTitle.isEmpty()) { return emptyList() } // Search cleaned title // Search two largest words // Search largest word // Search first two words // Search first word val searchQueries = listOf( listOf(cleanedTitle), splitSortedByLargest.take(2), splitSortedByLargest.take(1), splitCleanedTitle.take(2), splitCleanedTitle.take(1), ) return searchQueries .map { it.joinToString(" ").trim() } .distinct() } companion object { const val MIN_ELIGIBLE_THRESHOLD = 0.4 private val titleRegex = Regex("[^a-zA-Z0-9- ]") private val titleCyrillicRegex = Regex("[^\\p{L}0-9- ]") private val consecutiveSpacesRegex = Regex(" +") private val chapterRefCyrillicRegexp = Regex("""((- часть|- глава) \d*)""") } } data class SearchEntry(val entry: T, val distance: Double) ================================================ FILE: app/src/main/java/mihon/feature/migration/list/search/SmartSourceSearchEngine.kt ================================================ package mihon.feature.migration.list.search import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.model.SManga import mihon.domain.manga.model.toDomainManga import tachiyomi.domain.manga.model.Manga class SmartSourceSearchEngine(extraSearchParams: String?) : BaseSmartSearchEngine(extraSearchParams) { override fun getTitle(result: SManga) = result.title suspend fun regularSearch(source: CatalogueSource, title: String): Manga? { return regularSearch(makeSearchAction(source), title).let { it?.toDomainManga(source.id) } } suspend fun deepSearch(source: CatalogueSource, title: String): Manga? { return deepSearch(makeSearchAction(source), title).let { it?.toDomainManga(source.id) } } private fun makeSearchAction(source: CatalogueSource): SearchAction = { query -> source.getSearchManga(1, query, source.getFilterList()).mangas } } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/UpcomingScreen.kt ================================================ package mihon.feature.upcoming import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.manga.MangaScreen class UpcomingScreen : Screen() { @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = rememberScreenModel { UpcomingScreenModel() } val state by screenModel.state.collectAsState() UpcomingScreenContent( state = state, setSelectedYearMonth = screenModel::setSelectedYearMonth, onClickUpcoming = { navigator.push(MangaScreen(it.id)) }, ) } } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/UpcomingScreenContent.kt ================================================ package mihon.feature.upcoming import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material3.Badge import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.text.font.FontWeight import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.relativeDateText import eu.kanade.presentation.util.isTabletUi import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableMap import kotlinx.coroutines.launch import mihon.feature.upcoming.components.UpcomingItem import mihon.feature.upcoming.components.calendar.Calendar import tachiyomi.core.common.Constants import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.TwoPanelBox import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import java.time.LocalDate import java.time.YearMonth @Composable fun UpcomingScreenContent( state: UpcomingScreenModel.State, setSelectedYearMonth: (YearMonth) -> Unit, onClickUpcoming: (manga: Manga) -> Unit, modifier: Modifier = Modifier, ) { val scope = rememberCoroutineScope() val listState = rememberLazyListState() val onClickDay: (LocalDate, Int) -> Unit = { date, offset -> state.headerIndexes[date]?.let { scope.launch { listState.animateScrollToItem(it + offset) } } } Scaffold( topBar = { UpcomingToolbar() }, modifier = modifier, ) { paddingValues -> if (isTabletUi()) { UpcomingScreenLargeImpl( listState = listState, items = state.items, events = state.events, paddingValues = paddingValues, selectedYearMonth = state.selectedYearMonth, setSelectedYearMonth = setSelectedYearMonth, onClickDay = { onClickDay(it, 0) }, onClickUpcoming = onClickUpcoming, ) } else { UpcomingScreenSmallImpl( listState = listState, items = state.items, events = state.events, paddingValues = paddingValues, selectedYearMonth = state.selectedYearMonth, setSelectedYearMonth = setSelectedYearMonth, onClickDay = { onClickDay(it, 1) }, onClickUpcoming = onClickUpcoming, ) } } } @Composable private fun UpcomingToolbar() { val navigator = LocalNavigator.currentOrThrow val uriHandler = LocalUriHandler.current AppBar( title = stringResource(MR.strings.label_upcoming), navigateUp = navigator::pop, actions = { IconButton(onClick = { uriHandler.openUri(Constants.URL_HELP_UPCOMING) }) { Icon( imageVector = Icons.AutoMirrored.Outlined.HelpOutline, contentDescription = stringResource(MR.strings.upcoming_guide), ) } }, ) } @Composable private fun DateHeading( date: LocalDate, mangaCount: Int, ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth(), ) { Text( text = relativeDateText(date), modifier = Modifier .padding(MaterialTheme.padding.small) .padding(start = MaterialTheme.padding.small), color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.SemiBold, style = MaterialTheme.typography.bodyMedium, ) Badge( containerColor = MaterialTheme.colorScheme.primary, contentColor = MaterialTheme.colorScheme.onPrimary, ) { Text("$mangaCount") } } } @Composable private fun UpcomingScreenSmallImpl( listState: LazyListState, items: ImmutableList, events: ImmutableMap, paddingValues: PaddingValues, selectedYearMonth: YearMonth, setSelectedYearMonth: (YearMonth) -> Unit, onClickDay: (LocalDate) -> Unit, onClickUpcoming: (manga: Manga) -> Unit, ) { FastScrollLazyColumn( contentPadding = paddingValues, state = listState, ) { item(key = "upcoming-calendar") { Calendar( selectedYearMonth = selectedYearMonth, events = events, setSelectedYearMonth = setSelectedYearMonth, onClickDay = onClickDay, ) } items( items = items, key = { "upcoming-${it.hashCode()}" }, contentType = { when (it) { is UpcomingUIModel.Header -> "header" is UpcomingUIModel.Item -> "item" } }, ) { item -> when (item) { is UpcomingUIModel.Item -> { UpcomingItem( upcoming = item.manga, onClick = { onClickUpcoming(item.manga) }, ) } is UpcomingUIModel.Header -> { DateHeading( date = item.date, mangaCount = item.mangaCount, ) } } } } } @Composable private fun UpcomingScreenLargeImpl( listState: LazyListState, items: ImmutableList, events: ImmutableMap, paddingValues: PaddingValues, selectedYearMonth: YearMonth, setSelectedYearMonth: (YearMonth) -> Unit, onClickDay: (LocalDate) -> Unit, onClickUpcoming: (manga: Manga) -> Unit, ) { TwoPanelBox( modifier = Modifier.padding(paddingValues), startContent = { Calendar( selectedYearMonth = selectedYearMonth, events = events, setSelectedYearMonth = setSelectedYearMonth, onClickDay = onClickDay, ) }, endContent = { FastScrollLazyColumn(state = listState) { items( items = items, key = { "upcoming-${it.hashCode()}" }, contentType = { when (it) { is UpcomingUIModel.Header -> "header" is UpcomingUIModel.Item -> "item" } }, ) { item -> when (item) { is UpcomingUIModel.Item -> { UpcomingItem( upcoming = item.manga, onClick = { onClickUpcoming(item.manga) }, ) } is UpcomingUIModel.Header -> { DateHeading( date = item.date, mangaCount = item.mangaCount, ) } } } } }, ) } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/UpcomingScreenModel.kt ================================================ package mihon.feature.upcoming import androidx.compose.ui.util.fastMap import androidx.compose.ui.util.fastMapIndexedNotNull import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import eu.kanade.core.util.insertSeparatorsReversed import eu.kanade.tachiyomi.util.lang.toLocalDate import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableMap import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import mihon.domain.upcoming.interactor.GetUpcomingManga import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.LocalDate import java.time.YearMonth class UpcomingScreenModel( private val getUpcomingManga: GetUpcomingManga = Injekt.get(), ) : StateScreenModel(State()) { init { screenModelScope.launch { getUpcomingManga.subscribe().collectLatest { mutableState.update { state -> val upcomingItems = it.toUpcomingUIModels() state.copy( items = upcomingItems, events = upcomingItems.toEvents(), headerIndexes = upcomingItems.getHeaderIndexes(), ) } } } } private fun List.toUpcomingUIModels(): ImmutableList { var mangaCount = 0 return fastMap { UpcomingUIModel.Item(it) } .insertSeparatorsReversed { before, after -> if (after != null) mangaCount++ val beforeDate = before?.manga?.expectedNextUpdate?.toLocalDate() val afterDate = after?.manga?.expectedNextUpdate?.toLocalDate() if (beforeDate != afterDate && afterDate != null) { UpcomingUIModel.Header(afterDate, mangaCount).also { mangaCount = 0 } } else { null } } .toImmutableList() } private fun List.toEvents(): ImmutableMap { return filterIsInstance() .associate { it.date to it.mangaCount } .toImmutableMap() } private fun List.getHeaderIndexes(): ImmutableMap { return fastMapIndexedNotNull { index, upcomingUIModel -> if (upcomingUIModel is UpcomingUIModel.Header) { upcomingUIModel.date to index } else { null } } .toMap() .toImmutableMap() } fun setSelectedYearMonth(yearMonth: YearMonth) { mutableState.update { it.copy(selectedYearMonth = yearMonth) } } data class State( val selectedYearMonth: YearMonth = YearMonth.now(), val items: ImmutableList = persistentListOf(), val events: ImmutableMap = persistentMapOf(), val headerIndexes: ImmutableMap = persistentMapOf(), ) } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/UpcomingUIModel.kt ================================================ package mihon.feature.upcoming import tachiyomi.domain.manga.model.Manga import java.time.LocalDate sealed interface UpcomingUIModel { data class Header(val date: LocalDate, val mangaCount: Int) : UpcomingUIModel data class Item(val manga: Manga) : UpcomingUIModel } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/components/UpcomingItem.kt ================================================ package mihon.feature.upcoming.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.presentation.manga.components.MangaCover import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.asMangaCover import tachiyomi.presentation.core.components.material.padding private val UpcomingItemHeight = 96.dp @Composable fun UpcomingItem( upcoming: Manga, onClick: () -> Unit, modifier: Modifier = Modifier, ) { Row( modifier = modifier .clickable(onClick = onClick) .height(UpcomingItemHeight) .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large), ) { MangaCover.Book( modifier = Modifier.fillMaxHeight(), data = upcoming.asMangaCover(), ) Text( modifier = Modifier.weight(1f), text = upcoming.title, fontWeight = FontWeight.SemiBold, maxLines = 2, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) } } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/components/calendar/Calendar.kt ================================================ package mihon.feature.upcoming.components.calendar import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.util.fastForEach import io.woong.compose.grid.SimpleGridCells import io.woong.compose.grid.VerticalGrid import kotlinx.collections.immutable.ImmutableMap import kotlinx.collections.immutable.toImmutableList import mihon.core.designsystem.utils.isExpandedWidthWindow import mihon.core.designsystem.utils.isMediumWidthWindow import tachiyomi.presentation.core.components.material.padding import java.time.DayOfWeek import java.time.LocalDate import java.time.YearMonth import java.time.format.TextStyle import java.time.temporal.WeekFields import java.util.Locale private val FontSize = 16.sp private const val DAYS_OF_WEEK = 7 @Composable fun Calendar( selectedYearMonth: YearMonth, events: ImmutableMap, setSelectedYearMonth: (YearMonth) -> Unit, onClickDay: (day: LocalDate) -> Unit, modifier: Modifier = Modifier, ) { Column( modifier = modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(4.dp), ) { CalenderHeader( yearMonth = selectedYearMonth, onPreviousClick = { setSelectedYearMonth(selectedYearMonth.minusMonths(1L)) }, onNextClick = { setSelectedYearMonth(selectedYearMonth.plusMonths(1L)) }, modifier = Modifier .fillMaxWidth() .padding(vertical = MaterialTheme.padding.small) .padding(start = MaterialTheme.padding.medium), ) CalendarGrid( selectedYearMonth = selectedYearMonth, events = events, onClickDay = onClickDay, ) } } @Composable private fun CalendarGrid( selectedYearMonth: YearMonth, events: ImmutableMap, onClickDay: (day: LocalDate) -> Unit, ) { val localeFirstDayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek.value val weekDays = remember { (0 until DAYS_OF_WEEK) .map { DayOfWeek.of((localeFirstDayOfWeek - 1 + it) % DAYS_OF_WEEK + 1) } .toImmutableList() } val emptyFieldCount = weekDays.indexOf(selectedYearMonth.atDay(1).dayOfWeek) val daysInMonth = selectedYearMonth.lengthOfMonth() VerticalGrid( columns = SimpleGridCells.Fixed(DAYS_OF_WEEK), modifier = if (isMediumWidthWindow() && !isExpandedWidthWindow()) { Modifier.widthIn(max = 360.dp) } else { Modifier }, ) { weekDays.fastForEach { item -> Text( text = item.getDisplayName( TextStyle.NARROW, Locale.getDefault(), ), textAlign = TextAlign.Center, fontWeight = FontWeight.SemiBold, fontSize = FontSize, ) } repeat(emptyFieldCount) { Box { } } repeat(daysInMonth) { dayIndex -> val localDate = selectedYearMonth.atDay(dayIndex + 1) CalendarDay( date = localDate, onDayClick = { onClickDay(localDate) }, events = events[localDate] ?: 0, ) } } } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/components/calendar/CalendarDay.kt ================================================ package mihon.feature.upcoming.components.calendar import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.offset import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.layout import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import tachiyomi.presentation.core.components.material.DISABLED_ALPHA import java.time.LocalDate private const val MAX_EVENTS = 3 @Composable fun CalendarDay( date: LocalDate, events: Int, onDayClick: () -> Unit, modifier: Modifier = Modifier, ) { val today = remember { LocalDate.now() } Box( modifier = modifier .then( if (today == date) { Modifier.border( border = BorderStroke( width = 1.dp, color = MaterialTheme.colorScheme.onBackground, ), shape = CircleShape, ) } else { Modifier }, ) .clip(shape = CircleShape) .clickable(onClick = onDayClick) .circleLayout(), contentAlignment = Alignment.Center, ) { Text( text = date.dayOfMonth.toString(), textAlign = TextAlign.Center, fontSize = 16.sp, color = if (date.isBefore(today)) { MaterialTheme.colorScheme.onBackground.copy(alpha = DISABLED_ALPHA) } else { MaterialTheme.colorScheme.onBackground }, fontWeight = FontWeight.SemiBold, ) Row(Modifier.offset(y = 12.dp)) { val size = events.coerceAtMost(MAX_EVENTS) for (index in 0 until size) { CalendarIndicator( index = index, size = 56.dp, color = MaterialTheme.colorScheme.primary, ) } } } } private fun Modifier.circleLayout() = layout { measurable, constraints -> val placeable = measurable.measure(constraints) val currentHeight = placeable.height val currentWidth = placeable.width val newDiameter = maxOf(currentHeight, currentWidth) layout(newDiameter, newDiameter) { placeable.placeRelative( x = (newDiameter - currentWidth) / 2, y = (newDiameter - currentHeight) / 2, ) } } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/components/calendar/CalendarHeader.kt ================================================ package mihon.feature.upcoming.components.calendar import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.ContentTransform import androidx.compose.animation.SizeTransform import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutVertically import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.KeyboardArrowLeft import androidx.compose.material.icons.filled.KeyboardArrowRight import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import java.time.YearMonth import java.time.format.DateTimeFormatter import java.util.Locale @Composable fun CalenderHeader( yearMonth: YearMonth, onPreviousClick: () -> Unit, onNextClick: () -> Unit, modifier: Modifier = Modifier, ) { Row( modifier = modifier, horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { AnimatedContent( targetState = yearMonth, transitionSpec = { getAnimation() }, label = "Change Month", ) { monthYear -> Text( text = getTitleText(monthYear), style = MaterialTheme.typography.titleLarge, ) } Row { IconButton(onClick = onPreviousClick) { @Suppress("DEPRECATION") Icon(Icons.Default.KeyboardArrowLeft, stringResource(MR.strings.upcoming_calendar_prev)) } IconButton(onClick = onNextClick) { @Suppress("DEPRECATION") Icon(Icons.Default.KeyboardArrowRight, stringResource(MR.strings.upcoming_calendar_next)) } } } } private const val MONTH_YEAR_CHANGE_ANIMATION_DURATION = 200 private fun AnimatedContentTransitionScope.getAnimation(): ContentTransform { val movingForward = targetState > initialState val enterTransition = slideInVertically( animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION), ) { height -> if (movingForward) height else -height } + fadeIn( animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION), ) val exitTransition = slideOutVertically( animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION), ) { height -> if (movingForward) -height else height } + fadeOut( animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION), ) return (enterTransition togetherWith exitTransition) .using(SizeTransform(clip = false)) } @Composable @ReadOnlyComposable private fun getTitleText(monthYear: YearMonth): String { val formatter = DateTimeFormatter.ofPattern("MMMM yyyy", Locale.getDefault()) return formatter.format(monthYear) } @Preview @Composable private fun CalenderHeaderPreview() { CalenderHeader( yearMonth = YearMonth.now(), onNextClick = {}, onPreviousClick = {}, ) } ================================================ FILE: app/src/main/java/mihon/feature/upcoming/components/calendar/CalendarIndicator.kt ================================================ package mihon.feature.upcoming.components.calendar import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp private const val INDICATOR_SCALE = 12 private const val INDICATOR_ALPHA_MULTIPLIER = 0.3f @Composable fun CalendarIndicator( index: Int, size: Dp, color: Color, modifier: Modifier = Modifier, ) { Box( modifier = modifier .padding(horizontal = 1.dp) .clip(shape = CircleShape) .background(color = color.copy(alpha = (index + 1) * INDICATOR_ALPHA_MULTIPLIER)) .size(size = size.div(INDICATOR_SCALE)), ) } ================================================ FILE: app/src/main/res/anim/shared_axis_x_pop_enter.xml ================================================ ================================================ FILE: app/src/main/res/anim/shared_axis_x_pop_exit.xml ================================================ ================================================ FILE: app/src/main/res/anim/shared_axis_x_push_enter.xml ================================================ ================================================ FILE: app/src/main/res/anim/shared_axis_x_push_exit.xml ================================================ ================================================ FILE: app/src/main/res/anim-v33/shared_axis_x_pop_enter.xml ================================================ ================================================ FILE: app/src/main/res/anim-v33/shared_axis_x_pop_exit.xml ================================================ ================================================ FILE: app/src/main/res/anim-v33/shared_axis_x_push_enter.xml ================================================ ================================================ FILE: app/src/main/res/anim-v33/shared_axis_x_push_exit.xml ================================================ ================================================ FILE: app/src/main/res/color/draggable_card_foreground.xml ================================================ ================================================ FILE: app/src/main/res/drawable/anim_browse_enter.xml ================================================ ================================================ FILE: app/src/main/res/drawable/anim_caret_down.xml ================================================ ================================================ FILE: app/src/main/res/drawable/anim_history_enter.xml ================================================ ================================================ FILE: app/src/main/res/drawable/anim_library_enter.xml ================================================ ================================================ FILE: app/src/main/res/drawable/anim_more_enter.xml ================================================ ================================================ FILE: app/src/main/res/drawable/anim_updates_enter.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_anilist.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_bangumi.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_kavita.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_kitsu.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_komga.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_mangaupdates.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_myanimelist.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_shikimori.xml ================================================ ================================================ FILE: app/src/main/res/drawable/brand_suwayomi.xml ================================================ ================================================ FILE: app/src/main/res/drawable/cover_error.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_book_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_close_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_crop_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_crop_off_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_done_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_done_prev_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_download_chapter_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_drag_handle_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_extension_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_folder_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_glasses_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_info_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_launcher_background.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_launcher_foreground.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_launcher_monochrome.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_mihon.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_mihon_splash.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_overflow_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_pause_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_photo_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_play_arrow_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_reader_continuous_vertical_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_reader_default_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_reader_ltr_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_reader_rtl_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_reader_vertical_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_reader_webtoon_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_refresh_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_share_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_system_update_alt_white_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_tab_close_24px.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_warning_white_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/line_divider.xml ================================================ ================================================ FILE: app/src/main/res/drawable/material_popup_background.xml ================================================ ================================================ FILE: app/src/main/res/drawable/sc_collections_bookmark_48dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/sc_explore_48dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/sc_history_48dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/sc_new_releases_48dp.xml ================================================ ================================================ FILE: app/src/main/res/layout/download_header.xml ================================================ ================================================ FILE: app/src/main/res/layout/download_item.xml ================================================ ================================================ FILE: app/src/main/res/layout/download_list.xml ================================================ ================================================ FILE: app/src/main/res/layout/pref_widget_switch_material.xml ================================================ ================================================ FILE: app/src/main/res/layout/reader_activity.xml ================================================ ================================================ FILE: app/src/main/res/layout/reader_error.xml ================================================ ================================================ FILE: app/src/main/res/menu/download_single.xml ================================================ ================================================ FILE: app/src/main/res/mipmap/ic_launcher.xml ================================================ ================================================ FILE: app/src/main/res/values/bools.xml ================================================ true false false ================================================ FILE: app/src/main/res/values/dimens.xml ================================================ 16dp 12dp ================================================ FILE: app/src/main/res/values/ids.xml ================================================ ================================================ FILE: app/src/main/res/values/styles.xml ================================================ ================================================ FILE: app/src/main/res/values/themes.xml ================================================ ================================================ FILE: app/src/main/res/values-night/bools.xml ================================================ false false true ================================================ FILE: app/src/main/res/values-night/themes.xml ================================================ ================================================ FILE: app/src/main/res/values-night-v31/themes.xml ================================================ ================================================ FILE: app/src/main/res/values-v27/bools.xml ================================================ true true ================================================ FILE: app/src/main/res/values-v27/themes.xml ================================================ ================================================ FILE: app/src/main/res/xml/network_security_config.xml ================================================ ================================================ FILE: app/src/main/res/xml/provider_paths.xml ================================================ ================================================ FILE: app/src/main/res/xml/s_pen_actions.xml ================================================ ================================================ FILE: app/src/main/res/xml/searchable.xml ================================================ ================================================ FILE: app/src/test/java/mihon/core/migration/MigratorTest.kt ================================================ package mihon.core.migration import io.kotest.assertions.nondeterministic.eventually import io.mockk.slot import io.mockk.spyk import io.mockk.verify import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.newSingleThreadContext import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.setMain import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertInstanceOf import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import kotlin.time.Duration.Companion.seconds class MigratorTest { lateinit var migrationCompletedListener: MigrationCompletedListener lateinit var migrationContext: MigrationContext lateinit var migrationJobFactory: MigrationJobFactory lateinit var migrationStrategyFactory: MigrationStrategyFactory @BeforeEach fun initialize() { migrationContext = MigrationContext(false) migrationJobFactory = spyk(MigrationJobFactory(migrationContext, CoroutineScope(Dispatchers.Main + Job()))) migrationCompletedListener = spyk(block = {}) migrationStrategyFactory = spyk(MigrationStrategyFactory(migrationJobFactory, migrationCompletedListener)) } @Test fun initialVersion() = runBlocking { val strategy = migrationStrategyFactory.create(0, 1) assertInstanceOf(InitialMigrationStrategy::class.java, strategy) val migrations = slot>() val execute = strategy(listOf(Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { false })) execute.await() verify { migrationJobFactory.create(capture(migrations)) } assertEquals(1, migrations.captured.size) eventually(2.seconds) { verify { migrationCompletedListener() } } } @Test fun sameVersion() = runBlocking { val strategy = migrationStrategyFactory.create(1, 1) assertInstanceOf(NoopMigrationStrategy::class.java, strategy) val execute = strategy(listOf(Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { false })) val result = execute.await() assertFalse(result) verify(exactly = 0) { migrationJobFactory.create(any()) } } @Test fun noMigrations() = runBlocking { val strategy = migrationStrategyFactory.create(1, 2) assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy) val execute = strategy(emptyList()) val result = execute.await() assertFalse(result) verify(exactly = 0) { migrationJobFactory.create(any()) } } @Test fun smallMigration() = runBlocking { val strategy = migrationStrategyFactory.create(1, 2) assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy) val migrations = slot>() val execute = strategy(listOf(Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { true })) execute.await() verify { migrationJobFactory.create(capture(migrations)) } assertEquals(2, migrations.captured.size) eventually(2.seconds) { verify { migrationCompletedListener() } } } @Test fun largeMigration() = runBlocking { val input = listOf( Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { true }, Migration.of(3f) { true }, Migration.of(4f) { true }, Migration.of(5f) { true }, Migration.of(6f) { true }, Migration.of(7f) { true }, Migration.of(8f) { true }, Migration.of(9f) { true }, Migration.of(10f) { true }, ) val strategy = migrationStrategyFactory.create(1, 10) assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy) val migrations = slot>() val execute = strategy(input) execute.await() verify { migrationJobFactory.create(capture(migrations)) } assertEquals(10, migrations.captured.size) eventually(2.seconds) { verify { migrationCompletedListener() } } } @Test fun withinRangeMigration() = runBlocking { val strategy = migrationStrategyFactory.create(1, 2) assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy) val migrations = slot>() val execute = strategy( listOf( Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { true }, Migration.of(3f) { false }, ), ) execute.await() verify { migrationJobFactory.create(capture(migrations)) } assertEquals(2, migrations.captured.size) eventually(2.seconds) { verify { migrationCompletedListener() } } } companion object { @OptIn(DelicateCoroutinesApi::class) val mainThreadSurrogate = newSingleThreadContext("UI thread") @BeforeAll @JvmStatic fun setUp() { Dispatchers.setMain(mainThreadSurrogate) } @AfterAll @JvmStatic fun tearDown() { Dispatchers.resetMain() // reset the main dispatcher to the original Main dispatcher mainThreadSurrogate.close() } } } ================================================ FILE: build.gradle.kts ================================================ buildscript { dependencies { classpath(libs.android.shortcut.gradle) } } plugins { alias(kotlinx.plugins.serialization) apply false alias(libs.plugins.aboutLibraries) apply false alias(libs.plugins.firebase.crashlytics) apply false alias(libs.plugins.google.services) apply false alias(libs.plugins.moko) apply false alias(libs.plugins.sqldelight) apply false } tasks.register("clean") { delete(rootProject.layout.buildDirectory) } ================================================ FILE: buildSrc/build.gradle.kts ================================================ plugins { `kotlin-dsl` } dependencies { implementation(androidx.gradle) implementation(kotlinx.gradle) implementation(kotlinx.compose.compiler.gradle) implementation(libs.spotless.gradle) implementation(gradleApi()) implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) implementation(files(androidx.javaClass.superclass.protectionDomain.codeSource.location)) implementation(files(compose.javaClass.superclass.protectionDomain.codeSource.location)) implementation(files(kotlinx.javaClass.superclass.protectionDomain.codeSource.location)) } repositories { gradlePluginPortal() mavenCentral() google() } ================================================ FILE: buildSrc/settings.gradle.kts ================================================ dependencyResolutionManagement { versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } create("androidx") { from(files("../gradle/androidx.versions.toml")) } create("compose") { from(files("../gradle/compose.versions.toml")) } create("kotlinx") { from(files("../gradle/kotlinx.versions.toml")) } } } rootProject.name = "mihon-buildSrc" ================================================ FILE: buildSrc/src/main/kotlin/mihon/buildlogic/AndroidConfig.kt ================================================ package mihon.buildlogic import org.gradle.api.JavaVersion as GradleJavaVersion import org.jetbrains.kotlin.gradle.dsl.JvmTarget as KotlinJvmTarget object AndroidConfig { const val COMPILE_SDK = 36 const val TARGET_SDK = 36 const val MIN_SDK = 26 // https://youtrack.jetbrains.com/issue/KT-66995/JvmTarget-and-JavaVersion-compatibility-for-easier-JVM-version-setup val JavaVersion = GradleJavaVersion.VERSION_17 val JvmTarget = KotlinJvmTarget.JVM_17 } ================================================ FILE: buildSrc/src/main/kotlin/mihon/buildlogic/BuildConfig.kt ================================================ package mihon.buildlogic import org.gradle.api.Project interface BuildConfig { val includeTelemetry: Boolean val enableUpdater: Boolean val enableCodeShrink: Boolean val includeDependencyInfo: Boolean } val Project.Config: BuildConfig get() = object : BuildConfig { override val includeTelemetry: Boolean = project.hasProperty("include-telemetry") override val enableUpdater: Boolean = project.hasProperty("enable-updater") override val enableCodeShrink: Boolean = !project.hasProperty("disable-code-shrink") override val includeDependencyInfo: Boolean = project.hasProperty("include-dependency-info") } ================================================ FILE: buildSrc/src/main/kotlin/mihon/buildlogic/Commands.kt ================================================ package mihon.buildlogic import org.gradle.api.Project import java.time.Instant import java.time.LocalDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter // Git is needed in your system PATH for these commands to work. // If it's not installed, you can return a random value as a workaround fun Project.getCommitCount(): String { return runCommand("git rev-list --count HEAD") // return "1" } fun Project.getGitSha(): String { return runCommand("git rev-parse --short HEAD") // return "1" } private val BUILD_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") /** * @param useLastCommitTime If `true`, the build time is based on the timestamp of the last Git commit; * otherwise, the current time is used. Both are in UTC. * @return A formatted string representing the build time. The format used is defined by [BUILD_TIME_FORMATTER]. */ fun Project.getBuildTime(useLastCommitTime: Boolean): String { return if (useLastCommitTime) { val epoch = runCommand("git log -1 --format=%ct").toLong() Instant.ofEpochSecond(epoch).atOffset(ZoneOffset.UTC).format(BUILD_TIME_FORMATTER) } else { LocalDateTime.now(ZoneOffset.UTC).format(BUILD_TIME_FORMATTER) } } private fun Project.runCommand(command: String): String { return providers.exec { commandLine = command.split(" ") } .standardOutput .asText .get() .trim() } ================================================ FILE: buildSrc/src/main/kotlin/mihon/buildlogic/ProjectExtensions.kt ================================================ package mihon.buildlogic import com.android.build.api.dsl.CommonExtension import org.gradle.accessors.dm.LibrariesForAndroidx import org.gradle.accessors.dm.LibrariesForCompose import org.gradle.accessors.dm.LibrariesForKotlinx import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.Project import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.logging.TestLogEvent import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.the import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.io.File val Project.androidx get() = the() val Project.compose get() = the() val Project.kotlinx get() = the() val Project.libs get() = the() internal fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) { commonExtension.apply { compileSdk = AndroidConfig.COMPILE_SDK defaultConfig { minSdk = AndroidConfig.MIN_SDK } compileOptions { sourceCompatibility = AndroidConfig.JavaVersion targetCompatibility = AndroidConfig.JavaVersion isCoreLibraryDesugaringEnabled = true } } tasks.withType().configureEach { compilerOptions { jvmTarget.set(AndroidConfig.JvmTarget) freeCompilerArgs.addAll( "-Xcontext-parameters", "-opt-in=kotlin.RequiresOptIn", ) // Treat all Kotlin warnings as errors (disabled by default) // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties val warningsAsErrors: String? by project allWarningsAsErrors.set(warningsAsErrors.toBoolean()) } } dependencies { "coreLibraryDesugaring"(libs.desugar) } } internal fun Project.configureCompose(commonExtension: CommonExtension<*, *, *, *, *, *>) { pluginManager.apply(kotlinx.plugins.compose.compiler.get().pluginId) commonExtension.apply { buildFeatures { compose = true } dependencies { "implementation"(platform(compose.bom)) } } extensions.configure { val enableMetrics = project.providers.gradleProperty("enableComposeCompilerMetrics").orNull.toBoolean() val enableReports = project.providers.gradleProperty("enableComposeCompilerReports").orNull.toBoolean() val rootBuildDir = rootProject.layout.buildDirectory.asFile.get() val relativePath = projectDir.relativeTo(rootDir) if (enableMetrics) { rootBuildDir.resolve("compose-metrics").resolve(relativePath).let(metricsDestination::set) } if (enableReports) { rootBuildDir.resolve("compose-reports").resolve(relativePath).let(reportsDestination::set) } } } internal fun Project.configureTest() { tasks.withType { useJUnitPlatform() testLogging { events(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) } } } val Project.generatedBuildDir: File get() = project.layout.buildDirectory.asFile.get().resolve("generated/mihon") ================================================ FILE: buildSrc/src/main/kotlin/mihon/buildlogic/tasks/LocalesConfigTask.kt ================================================ package mihon.buildlogic.tasks import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.tasks.TaskProvider import java.io.File private val emptyResourcesElement = "\\s*|".toRegex() fun Project.getLocalesConfigTask(outputResourceDir: File): TaskProvider { return tasks.register("generateLocalesConfig") { val locales = fileTree("$projectDir/src/commonMain/moko-resources/") .matching { include("**/strings.xml") } .filterNot { it.readText().contains(emptyResourcesElement) } .map { it.parentFile.name .replace("base", "en") .replace("-r", "-") .replace("+", "-") } .sorted() .joinToString("\n") { "| " } val content = """ | | $locales | """.trimMargin() outputResourceDir.resolve("xml/locales_config.xml").apply { parentFile.mkdirs() writeText(content) } } } ================================================ FILE: buildSrc/src/main/kotlin/mihon.android.application.compose.gradle.kts ================================================ import mihon.buildlogic.configureCompose plugins { id("com.android.application") kotlin("android") id("mihon.code.lint") } android { configureCompose(this) } ================================================ FILE: buildSrc/src/main/kotlin/mihon.android.application.gradle.kts ================================================ import mihon.buildlogic.AndroidConfig import mihon.buildlogic.configureAndroid import mihon.buildlogic.configureTest plugins { id("com.android.application") kotlin("android") id("mihon.code.lint") } android { defaultConfig { targetSdk = AndroidConfig.TARGET_SDK } configureAndroid(this) configureTest() } ================================================ FILE: buildSrc/src/main/kotlin/mihon.benchmark.gradle.kts ================================================ import mihon.buildlogic.configureAndroid import mihon.buildlogic.configureTest plugins { id("com.android.test") kotlin("android") id("mihon.code.lint") } android { configureAndroid(this) configureTest() } ================================================ FILE: buildSrc/src/main/kotlin/mihon.code.lint.gradle.kts ================================================ import org.gradle.accessors.dm.LibrariesForLibs plugins { id("com.diffplug.spotless") } val libs = the() val xmlFormatExclude = buildList(2) { add("**/build/**/*.xml") projectDir .resolve("src/commonMain/moko-resources") .takeIf { it.isDirectory } ?.let(::fileTree) ?.matching { exclude("/base/**") } ?.let(::add) } .toTypedArray() spotless { kotlin { target("**/*.kt", "**/*.kts") targetExclude("**/build/**/*.kt") ktlint(libs.ktlint.core.get().version) trimTrailingWhitespace() endWithNewline() } format("xml") { target("**/*.xml") targetExclude(*xmlFormatExclude) trimTrailingWhitespace() endWithNewline() } } ================================================ FILE: buildSrc/src/main/kotlin/mihon.library.compose.gradle.kts ================================================ import mihon.buildlogic.configureCompose plugins { id("com.android.library") id("mihon.code.lint") } android { configureCompose(this) } ================================================ FILE: buildSrc/src/main/kotlin/mihon.library.gradle.kts ================================================ import mihon.buildlogic.configureAndroid import mihon.buildlogic.configureTest plugins { id("com.android.library") id("mihon.code.lint") } android { configureAndroid(this) configureTest() } ================================================ FILE: core/archive/build.gradle.kts ================================================ plugins { id("mihon.library") kotlin("android") kotlin("plugin.serialization") } android { namespace = "mihon.core.archive" } dependencies { implementation(libs.jsoup) implementation(libs.libarchive) implementation(libs.unifile) } ================================================ FILE: core/archive/src/main/AndroidManifest.xml ================================================ ================================================ FILE: core/archive/src/main/kotlin/mihon/core/archive/ArchiveEntry.kt ================================================ package mihon.core.archive class ArchiveEntry( val name: String, val isFile: Boolean, ) ================================================ FILE: core/archive/src/main/kotlin/mihon/core/archive/ArchiveInputStream.kt ================================================ package mihon.core.archive import me.zhanghai.android.libarchive.Archive import me.zhanghai.android.libarchive.ArchiveEntry import me.zhanghai.android.libarchive.ArchiveException import java.io.InputStream import java.nio.ByteBuffer import kotlin.concurrent.Volatile import mihon.core.archive.ArchiveEntry as MihonArchiveEntry internal class ArchiveInputStream(buffer: Long, size: Long) : InputStream() { private val lock = Any() @Volatile private var isClosed = false private val archive = Archive.readNew() init { try { Archive.setCharset(archive, Charsets.UTF_8.name().toByteArray()) Archive.readSupportFilterAll(archive) Archive.readSupportFormatAll(archive) Archive.readOpenMemoryUnsafe(archive, buffer, size) } catch (e: ArchiveException) { close() throw e } } private val oneByteBuffer = ByteBuffer.allocateDirect(1) override fun read(): Int { read(oneByteBuffer) return if (oneByteBuffer.hasRemaining()) oneByteBuffer.get().toUByte().toInt() else -1 } override fun read(b: ByteArray, off: Int, len: Int): Int { val buffer = ByteBuffer.wrap(b, off, len) read(buffer) return if (buffer.hasRemaining()) buffer.remaining() else -1 } private fun read(buffer: ByteBuffer) { buffer.clear() Archive.readData(archive, buffer) buffer.flip() } override fun close() { synchronized(lock) { if (isClosed) return isClosed = true } Archive.readFree(archive) } fun getNextEntry(): MihonArchiveEntry? { return Archive.readNextHeader(archive).takeUnless { it == 0L }?.let { entry -> val name = ArchiveEntry.pathnameUtf8(entry) ?: ArchiveEntry.pathname(entry)?.decodeToString() ?: return null val isFile = ArchiveEntry.filetype(entry) == ArchiveEntry.AE_IFREG MihonArchiveEntry(name, isFile) } } } ================================================ FILE: core/archive/src/main/kotlin/mihon/core/archive/ArchiveReader.kt ================================================ package mihon.core.archive import android.os.ParcelFileDescriptor import android.system.Os import android.system.OsConstants import me.zhanghai.android.libarchive.ArchiveException import java.io.Closeable import java.io.InputStream class ArchiveReader(pfd: ParcelFileDescriptor) : Closeable { private val size = pfd.statSize private val address = Os.mmap(0, size, OsConstants.PROT_READ, OsConstants.MAP_PRIVATE, pfd.fileDescriptor, 0) fun useEntries(block: (Sequence) -> T): T = ArchiveInputStream(address, size).use { block(generateSequence { it.getNextEntry() }) } fun getInputStream(entryName: String): InputStream? { val archive = ArchiveInputStream(address, size) try { while (true) { val entry = archive.getNextEntry() ?: break if (entry.name == entryName) { return archive } } } catch (e: ArchiveException) { archive.close() throw e } archive.close() return null } override fun close() { Os.munmap(address, size) } } ================================================ FILE: core/archive/src/main/kotlin/mihon/core/archive/EpubReader.kt ================================================ package mihon.core.archive import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.parser.Parser import java.io.Closeable import java.io.File import java.io.InputStream /** * Wrapper over ArchiveReader to load files in epub format. */ class EpubReader(private val reader: ArchiveReader) : Closeable by reader { /** * Path separator used by this epub. */ private val pathSeparator = getPathSeparator() /** * Returns an input stream for reading the contents of the specified zip file entry. */ fun getInputStream(entryName: String): InputStream? { return reader.getInputStream(entryName) } /** * Returns the path of all the images found in the epub file. */ fun getImagesFromPages(): List { val ref = getPackageHref() val doc = getPackageDocument(ref) val pages = getPagesFromDocument(doc) return getImagesFromPages(pages, ref) } /** * Returns the path to the package document. */ fun getPackageHref(): String { val meta = getInputStream(resolveZipPath("META-INF", "container.xml")) if (meta != null) { val metaDoc = meta.use { Jsoup.parse(it, null, "", Parser.xmlParser()) } val path = metaDoc.getElementsByTag("rootfile").first()?.attr("full-path") if (path != null) { return path } } return resolveZipPath("OEBPS", "content.opf") } /** * Returns the package document where all the files are listed. */ fun getPackageDocument(ref: String): Document { return getInputStream(ref)!!.use { Jsoup.parse(it, null, "", Parser.xmlParser()) } } /** * Returns all the pages from the epub. */ private fun getPagesFromDocument(document: Document): List { val pages = document.select("manifest > item") .filter { node -> "application/xhtml+xml" == node.attr("media-type") } .associateBy { it.attr("id") } val spine = document.select("spine > itemref").map { it.attr("idref") } return spine.mapNotNull { pages[it] }.map { it.attr("href") } } /** * Returns all the images contained in every page from the epub. */ private fun getImagesFromPages(pages: List, packageHref: String): List { val result = mutableListOf() val basePath = getParentDirectory(packageHref) pages.forEach { page -> val entryPath = resolveZipPath(basePath, page) val document = getInputStream(entryPath)!!.use { Jsoup.parse(it, null, "") } val imageBasePath = getParentDirectory(entryPath) document.allElements.forEach { when (it.tagName()) { "img" -> result.add(resolveZipPath(imageBasePath, it.attr("src"))) "image" -> result.add(resolveZipPath(imageBasePath, it.attr("xlink:href"))) } } } return result } /** * Returns the path separator used by the epub file. */ private fun getPathSeparator(): String { val meta = getInputStream("META-INF\\container.xml") return if (meta != null) { meta.close() "\\" } else { "/" } } /** * Resolves a zip path from base and relative components and a path separator. */ private fun resolveZipPath(basePath: String, relativePath: String): String { if (relativePath.startsWith(pathSeparator)) { // Path is absolute, so return as-is. return relativePath } var fixedBasePath = basePath.replace(pathSeparator, File.separator) if (!fixedBasePath.startsWith(File.separator)) { fixedBasePath = "${File.separator}$fixedBasePath" } val fixedRelativePath = relativePath.replace(pathSeparator, File.separator) val resolvedPath = File(fixedBasePath, fixedRelativePath).canonicalPath return resolvedPath.replace(File.separator, pathSeparator).substring(1) } /** * Gets the parent directory of a path. */ private fun getParentDirectory(path: String): String { val separatorIndex = path.lastIndexOf(pathSeparator) return if (separatorIndex >= 0) { path.substring(0, separatorIndex) } else { "" } } } ================================================ FILE: core/archive/src/main/kotlin/mihon/core/archive/UniFileExtensions.kt ================================================ package mihon.core.archive import android.content.Context import android.os.ParcelFileDescriptor import com.hippo.unifile.UniFile internal fun UniFile.openFileDescriptor(context: Context, mode: String): ParcelFileDescriptor = context.contentResolver.openFileDescriptor(uri, mode) ?: error("Failed to open file descriptor: ${filePath ?: uri}") fun UniFile.archiveReader(context: Context) = openFileDescriptor(context, "r").use { ArchiveReader(it) } fun UniFile.epubReader(context: Context) = EpubReader(archiveReader(context)) ================================================ FILE: core/archive/src/main/kotlin/mihon/core/archive/ZipWriter.kt ================================================ package mihon.core.archive import android.content.Context import android.system.Os import android.system.StructStat import com.hippo.unifile.UniFile import me.zhanghai.android.libarchive.Archive import me.zhanghai.android.libarchive.ArchiveEntry import me.zhanghai.android.libarchive.ArchiveException import java.io.Closeable import java.nio.ByteBuffer class ZipWriter(val context: Context, file: UniFile) : Closeable { private val pfd = file.openFileDescriptor(context, "wt") private val archive = Archive.writeNew() private val entry = ArchiveEntry.new2(archive) private val buffer = ByteBuffer.allocateDirect(8192) init { try { Archive.setCharset(archive, Charsets.UTF_8.name().toByteArray()) Archive.writeSetFormatZip(archive) Archive.writeZipSetCompressionStore(archive) Archive.writeOpenFd(archive, pfd.fd) } catch (e: ArchiveException) { close() throw e } } fun write(file: UniFile) { file.openFileDescriptor(context, "r").use { val fd = it.fileDescriptor ArchiveEntry.clear(entry) ArchiveEntry.setPathnameUtf8(entry, file.name) val stat = Os.fstat(fd) ArchiveEntry.setStat(entry, stat.toArchiveStat()) Archive.writeHeader(archive, entry) while (true) { buffer.clear() Os.read(fd, buffer) if (buffer.position() == 0) break buffer.flip() Archive.writeData(archive, buffer) } Archive.writeFinishEntry(archive) } } override fun close() { ArchiveEntry.free(entry) Archive.writeFree(archive) pfd.close() } } private fun StructStat.toArchiveStat() = ArchiveEntry.StructStat().apply { stDev = st_dev stMode = st_mode stNlink = st_nlink.toInt() stUid = st_uid stGid = st_gid stRdev = st_rdev stSize = st_size stBlksize = st_blksize stBlocks = st_blocks stAtim = st_atime.toTimespec() stMtim = st_mtime.toTimespec() stCtim = st_ctime.toTimespec() stIno = st_ino } private fun Long.toTimespec() = ArchiveEntry.StructTimespec().also { it.tvSec = this } ================================================ FILE: core/common/build.gradle.kts ================================================ plugins { id("mihon.library") kotlin("android") kotlin("plugin.serialization") } android { namespace = "eu.kanade.tachiyomi.core.common" } kotlin { compilerOptions { freeCompilerArgs.addAll( "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", ) } } dependencies { implementation(projects.i18n) api(libs.logcat) api(libs.rxjava) api(libs.okhttp.core) api(libs.okhttp.logging) api(libs.okhttp.brotli) api(libs.okhttp.dnsoverhttps) api(libs.okio) implementation(libs.image.decoder) implementation(libs.unifile) implementation(libs.libarchive) api(kotlinx.coroutines.core) api(kotlinx.serialization.json) api(kotlinx.serialization.json.okio) api(libs.preferencektx) implementation(libs.jsoup) // Sort implementation(libs.natural.comparator) // JavaScript engine implementation(libs.bundles.js.engine) testImplementation(libs.bundles.test) testRuntimeOnly(libs.junit.platform.launcher) } ================================================ FILE: core/common/src/main/AndroidManifest.xml ================================================ ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/core/security/PrivacyPreferences.kt ================================================ package eu.kanade.tachiyomi.core.security import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class PrivacyPreferences( preferenceStore: PreferenceStore, ) { val crashlytics: Preference = preferenceStore.getBoolean("crashlytics", true) val analytics: Preference = preferenceStore.getBoolean("analytics", true) } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt ================================================ package eu.kanade.tachiyomi.core.security import dev.icerock.moko.resources.StringResource import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import tachiyomi.i18n.MR class SecurityPreferences( preferenceStore: PreferenceStore, ) { val useAuthenticator: Preference = preferenceStore.getBoolean("use_biometric_lock", false) val lockAppAfter: Preference = preferenceStore.getInt("lock_app_after", 0) val secureScreen: Preference = preferenceStore.getEnum( "secure_screen_v2", SecureScreenMode.INCOGNITO, ) val hideNotificationContent: Preference = preferenceStore.getBoolean("hide_notification_content", false) /** * For app lock. Will be set when there is a pending timed lock. * Otherwise, this pref should be deleted. */ val lastAppClosed: Preference = preferenceStore.getLong( Preference.appStateKey("last_app_closed"), 0, ) enum class SecureScreenMode(val titleRes: StringResource) { ALWAYS(MR.strings.lock_always), INCOGNITO(MR.strings.pref_incognito_mode), NEVER(MR.strings.lock_never), } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/AndroidCookieJar.kt ================================================ package eu.kanade.tachiyomi.network import android.webkit.CookieManager import okhttp3.Cookie import okhttp3.CookieJar import okhttp3.HttpUrl class AndroidCookieJar : CookieJar { private val manager = CookieManager.getInstance() override fun saveFromResponse(url: HttpUrl, cookies: List) { val urlString = url.toString() cookies.forEach { manager.setCookie(urlString, it.toString()) } } override fun loadForRequest(url: HttpUrl): List { return get(url) } fun get(url: HttpUrl): List { val cookies = manager.getCookie(url.toString()) return if (cookies != null && cookies.isNotEmpty()) { cookies.split(";").mapNotNull { Cookie.parse(url, it) } } else { emptyList() } } fun remove(url: HttpUrl, cookieNames: List? = null, maxAge: Int = -1): Int { val urlString = url.toString() val cookies = manager.getCookie(urlString) ?: return 0 fun List.filterNames(): List { return if (cookieNames != null) { this.filter { it in cookieNames } } else { this } } return cookies.split(";") .map { it.substringBefore("=") } .filterNames() .onEach { manager.setCookie(urlString, "$it=;Max-Age=$maxAge") } .count() } fun removeAll() { manager.removeAllCookies {} } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/DohProviders.kt ================================================ package eu.kanade.tachiyomi.network import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient import okhttp3.dnsoverhttps.DnsOverHttps import java.net.InetAddress /** * Based on https://github.com/square/okhttp/blob/ef5d0c83f7bbd3a0c0534e7ca23cbc4ee7550f3b/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DohProviders.java */ const val PREF_DOH_CLOUDFLARE = 1 const val PREF_DOH_GOOGLE = 2 const val PREF_DOH_ADGUARD = 3 const val PREF_DOH_QUAD9 = 4 const val PREF_DOH_ALIDNS = 5 const val PREF_DOH_DNSPOD = 6 const val PREF_DOH_360 = 7 const val PREF_DOH_QUAD101 = 8 const val PREF_DOH_MULLVAD = 9 const val PREF_DOH_CONTROLD = 10 const val PREF_DOH_NJALLA = 11 const val PREF_DOH_SHECAN = 12 fun OkHttpClient.Builder.dohCloudflare() = dns( DnsOverHttps.Builder().client(build()) .url("https://cloudflare-dns.com/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("162.159.36.1"), InetAddress.getByName("162.159.46.1"), InetAddress.getByName("1.1.1.1"), InetAddress.getByName("1.0.0.1"), InetAddress.getByName("162.159.132.53"), InetAddress.getByName("2606:4700:4700::1111"), InetAddress.getByName("2606:4700:4700::1001"), InetAddress.getByName("2606:4700:4700::0064"), InetAddress.getByName("2606:4700:4700::6400"), ) .build(), ) fun OkHttpClient.Builder.dohGoogle() = dns( DnsOverHttps.Builder().client(build()) .url("https://dns.google/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("8.8.4.4"), InetAddress.getByName("8.8.8.8"), InetAddress.getByName("2001:4860:4860::8888"), InetAddress.getByName("2001:4860:4860::8844"), ) .build(), ) // AdGuard "Default" DNS works too but for the sake of making sure no site is blacklisted, // we use "Unfiltered" fun OkHttpClient.Builder.dohAdGuard() = dns( DnsOverHttps.Builder().client(build()) .url("https://dns-unfiltered.adguard.com/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("94.140.14.140"), InetAddress.getByName("94.140.14.141"), InetAddress.getByName("2a10:50c0::1:ff"), InetAddress.getByName("2a10:50c0::2:ff"), ) .build(), ) fun OkHttpClient.Builder.dohQuad9() = dns( DnsOverHttps.Builder().client(build()) .url("https://dns.quad9.net/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("9.9.9.9"), InetAddress.getByName("149.112.112.112"), InetAddress.getByName("2620:fe::fe"), InetAddress.getByName("2620:fe::9"), ) .build(), ) fun OkHttpClient.Builder.dohAliDNS() = dns( DnsOverHttps.Builder().client(build()) .url("https://dns.alidns.com/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("223.5.5.5"), InetAddress.getByName("223.6.6.6"), InetAddress.getByName("2400:3200::1"), InetAddress.getByName("2400:3200:baba::1"), ) .build(), ) fun OkHttpClient.Builder.dohDNSPod() = dns( DnsOverHttps.Builder().client(build()) .url("https://doh.pub/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("1.12.12.12"), InetAddress.getByName("120.53.53.53"), ) .build(), ) fun OkHttpClient.Builder.doh360() = dns( DnsOverHttps.Builder().client(build()) .url("https://doh.360.cn/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("101.226.4.6"), InetAddress.getByName("218.30.118.6"), InetAddress.getByName("123.125.81.6"), InetAddress.getByName("140.207.198.6"), InetAddress.getByName("180.163.249.75"), InetAddress.getByName("101.199.113.208"), InetAddress.getByName("36.99.170.86"), ) .build(), ) fun OkHttpClient.Builder.dohQuad101() = dns( DnsOverHttps.Builder().client(build()) .url("https://dns.twnic.tw/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("101.101.101.101"), InetAddress.getByName("2001:de4::101"), InetAddress.getByName("2001:de4::102"), ) .build(), ) /* * Mullvad DoH * without ad blocking option * Source: https://mullvad.net/en/help/dns-over-https-and-dns-over-tls */ fun OkHttpClient.Builder.dohMullvad() = dns( DnsOverHttps.Builder().client(build()) .url(" https://dns.mullvad.net/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("194.242.2.2"), InetAddress.getByName("2a07:e340::2"), ) .build(), ) /* * Control D * unfiltered option * Source: https://controld.com/free-dns/? */ fun OkHttpClient.Builder.dohControlD() = dns( DnsOverHttps.Builder().client(build()) .url("https://freedns.controld.com/p0".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("76.76.2.0"), InetAddress.getByName("76.76.10.0"), InetAddress.getByName("2606:1a40::"), InetAddress.getByName("2606:1a40:1::"), ) .build(), ) /* * Njalla * Non logging and uncensored */ fun OkHttpClient.Builder.dohNajalla() = dns( DnsOverHttps.Builder().client(build()) .url("https://dns.njal.la/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("95.215.19.53"), InetAddress.getByName("2001:67c:2354:2::53"), ) .build(), ) /** * Source: https://shecan.ir/ */ fun OkHttpClient.Builder.dohShecan() = dns( DnsOverHttps.Builder().client(build()) .url("https://free.shecan.ir/dns-query".toHttpUrl()) .bootstrapDnsHosts( InetAddress.getByName("178.22.122.100"), InetAddress.getByName("185.51.200.2"), ) .build(), ) ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/JavaScriptEngine.kt ================================================ package eu.kanade.tachiyomi.network import android.content.Context import app.cash.quickjs.QuickJs import tachiyomi.core.common.util.lang.withIOContext /** * Util for evaluating JavaScript in sources. */ @Suppress("UNUSED", "UNCHECKED_CAST") class JavaScriptEngine(context: Context) { /** * Evaluate arbitrary JavaScript code and get the result as a primtive type * (e.g., String, Int). * * @since extensions-lib 1.4 * @param script JavaScript to execute. * @return Result of JavaScript code as a primitive type. */ suspend fun evaluate(script: String): T = withIOContext { QuickJs.create().use { it.evaluate(script) as T } } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt ================================================ package eu.kanade.tachiyomi.network import android.content.Context import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor import eu.kanade.tachiyomi.network.interceptor.IgnoreGzipInterceptor import eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor import eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor import okhttp3.Cache import okhttp3.OkHttpClient import okhttp3.brotli.BrotliInterceptor import okhttp3.logging.HttpLoggingInterceptor import java.io.File import java.util.concurrent.TimeUnit class NetworkHelper( private val context: Context, private val preferences: NetworkPreferences, ) { val cookieJar = AndroidCookieJar() private val clientBuilder: OkHttpClient.Builder = run { val builder = OkHttpClient.Builder() .cookieJar(cookieJar) .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .callTimeout(2, TimeUnit.MINUTES) .cache( Cache( directory = File(context.cacheDir, "network_cache"), maxSize = 5L * 1024 * 1024, // 5 MiB ), ) .addInterceptor(UncaughtExceptionInterceptor()) .addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider)) .addNetworkInterceptor(IgnoreGzipInterceptor()) .addNetworkInterceptor(BrotliInterceptor) if (preferences.verboseLogging.get()) { val httpLoggingInterceptor = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.HEADERS } builder.addNetworkInterceptor(httpLoggingInterceptor) } when (preferences.dohProvider.get()) { PREF_DOH_CLOUDFLARE -> builder.dohCloudflare() PREF_DOH_GOOGLE -> builder.dohGoogle() PREF_DOH_ADGUARD -> builder.dohAdGuard() PREF_DOH_QUAD9 -> builder.dohQuad9() PREF_DOH_ALIDNS -> builder.dohAliDNS() PREF_DOH_DNSPOD -> builder.dohDNSPod() PREF_DOH_360 -> builder.doh360() PREF_DOH_QUAD101 -> builder.dohQuad101() PREF_DOH_MULLVAD -> builder.dohMullvad() PREF_DOH_CONTROLD -> builder.dohControlD() PREF_DOH_NJALLA -> builder.dohNajalla() PREF_DOH_SHECAN -> builder.dohShecan() else -> builder } } val nonCloudflareClient = clientBuilder.build() val client = clientBuilder .addInterceptor( CloudflareInterceptor(context, cookieJar, ::defaultUserAgentProvider), ) .build() /** * @deprecated Since extension-lib 1.5 */ @Deprecated("The regular client handles Cloudflare by default") @Suppress("UNUSED") val cloudflareClient: OkHttpClient = client fun defaultUserAgentProvider() = preferences.defaultUserAgent.get().trim() } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkPreferences.kt ================================================ package eu.kanade.tachiyomi.network import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class NetworkPreferences( preferenceStore: PreferenceStore, verboseLoggingDefault: Boolean = false, ) { val verboseLogging: Preference = preferenceStore.getBoolean("verbose_logging", verboseLoggingDefault) val dohProvider: Preference = preferenceStore.getInt("doh_provider", -1) val defaultUserAgent: Preference = preferenceStore.getString( "default_user_agent", "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36", ) } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/OkHttpExtensions.kt ================================================ package eu.kanade.tachiyomi.network import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.json.Json import kotlinx.serialization.json.okio.decodeFromBufferedSource import kotlinx.serialization.serializer import okhttp3.Call import okhttp3.Callback import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import rx.Observable import rx.Producer import rx.Subscription import java.io.IOException import kotlin.concurrent.atomics.AtomicBoolean import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.coroutines.resumeWithException val jsonMime = "application/json; charset=utf-8".toMediaType() @OptIn(ExperimentalAtomicApi::class) fun Call.asObservable(): Observable { return Observable.unsafeCreate { subscriber -> // Since Call is a one-shot type, clone it for each new subscriber. val call = clone() // Wrap the call in a helper which handles both unsubscription and backpressure. val requestArbiter = object : Producer, Subscription { val boolean = AtomicBoolean(false) override fun request(n: Long) { if (n == 0L || !boolean.compareAndSet(expectedValue = false, newValue = true)) return try { val response = call.execute() if (!subscriber.isUnsubscribed) { subscriber.onNext(response) subscriber.onCompleted() } } catch (e: Exception) { if (!subscriber.isUnsubscribed) { subscriber.onError(e) } } } override fun unsubscribe() { call.cancel() } override fun isUnsubscribed(): Boolean { return call.isCanceled() } } subscriber.add(requestArbiter) subscriber.setProducer(requestArbiter) } } fun Call.asObservableSuccess(): Observable { return asObservable().doOnNext { response -> if (!response.isSuccessful) { response.close() throw HttpException(response.code) } } } // Based on https://github.com/gildor/kotlin-coroutines-okhttp @OptIn(ExperimentalCoroutinesApi::class) private suspend fun Call.await(callStack: Array): Response { return suspendCancellableCoroutine { continuation -> val callback = object : Callback { override fun onResponse(call: Call, response: Response) { continuation.resume(response) { response.body.close() } } override fun onFailure(call: Call, e: IOException) { // Don't bother with resuming the continuation if it is already cancelled. if (continuation.isCancelled) return val exception = IOException(e.message, e).apply { stackTrace = callStack } continuation.resumeWithException(exception) } } enqueue(callback) continuation.invokeOnCancellation { try { cancel() } catch (ex: Throwable) { // Ignore cancel exception } } } } suspend fun Call.await(): Response { val callStack = Exception().stackTrace.run { copyOfRange(1, size) } return await(callStack) } /** * @since extensions-lib 1.5 */ suspend fun Call.awaitSuccess(): Response { val callStack = Exception().stackTrace.run { copyOfRange(1, size) } val response = await(callStack) if (!response.isSuccessful) { response.close() throw HttpException(response.code).apply { stackTrace = callStack } } return response } fun OkHttpClient.newCachelessCallWithProgress(request: Request, listener: ProgressListener): Call { val progressClient = newBuilder() .cache(null) .addNetworkInterceptor { chain -> val originalResponse = chain.proceed(chain.request()) originalResponse.newBuilder() .body(ProgressResponseBody(originalResponse.body, listener)) .build() } .build() return progressClient.newCall(request) } context(_: Json) inline fun Response.parseAs(): T { return decodeFromJsonResponse(serializer(), this) } context(json: Json) fun decodeFromJsonResponse( deserializer: DeserializationStrategy, response: Response, ): T { return response.body.source().use { json.decodeFromBufferedSource(deserializer, it) } } /** * Exception that handles HTTP codes considered not successful by OkHttp. * Use it to have a standardized error message in the app across the extensions. * * @since extensions-lib 1.5 * @param code [Int] the HTTP status code */ class HttpException(val code: Int) : IllegalStateException("HTTP error $code") ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/ProgressListener.kt ================================================ package eu.kanade.tachiyomi.network interface ProgressListener { fun update(bytesRead: Long, contentLength: Long, done: Boolean) } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/ProgressResponseBody.kt ================================================ package eu.kanade.tachiyomi.network import okhttp3.MediaType import okhttp3.ResponseBody import okio.Buffer import okio.BufferedSource import okio.ForwardingSource import okio.Source import okio.buffer import java.io.IOException class ProgressResponseBody( private val responseBody: ResponseBody, private val progressListener: ProgressListener, ) : ResponseBody() { private val bufferedSource: BufferedSource by lazy { source(responseBody.source()).buffer() } override fun contentType(): MediaType? { return responseBody.contentType() } override fun contentLength(): Long { return responseBody.contentLength() } override fun source(): BufferedSource { return bufferedSource } private fun source(source: Source): Source { return object : ForwardingSource(source) { var totalBytesRead = 0L @Throws(IOException::class) override fun read(sink: Buffer, byteCount: Long): Long { val bytesRead = super.read(sink, byteCount) // read() returns the number of bytes read, or -1 if this source is exhausted. totalBytesRead += if (bytesRead != -1L) bytesRead else 0 progressListener.update( totalBytesRead, responseBody.contentLength(), bytesRead == -1L, ) return bytesRead } } } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/Requests.kt ================================================ @file:Suppress("FunctionName") package eu.kanade.tachiyomi.network import okhttp3.CacheControl import okhttp3.FormBody import okhttp3.Headers import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request import okhttp3.RequestBody import java.util.concurrent.TimeUnit.MINUTES private val DEFAULT_CACHE_CONTROL = CacheControl.Builder().maxAge(10, MINUTES).build() private val DEFAULT_HEADERS = Headers.Builder().build() private val DEFAULT_BODY: RequestBody = FormBody.Builder().build() fun GET( url: String, headers: Headers = DEFAULT_HEADERS, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request { return GET(url.toHttpUrl(), headers, cache) } /** * @since extensions-lib 1.4 */ fun GET( url: HttpUrl, headers: Headers = DEFAULT_HEADERS, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request { return Request.Builder() .url(url) .headers(headers) .cacheControl(cache) .build() } fun POST( url: String, headers: Headers = DEFAULT_HEADERS, body: RequestBody = DEFAULT_BODY, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request { return Request.Builder() .url(url) .post(body) .headers(headers) .cacheControl(cache) .build() } fun PUT( url: String, headers: Headers = DEFAULT_HEADERS, body: RequestBody = DEFAULT_BODY, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request { return Request.Builder() .url(url) .put(body) .headers(headers) .cacheControl(cache) .build() } fun DELETE( url: String, headers: Headers = DEFAULT_HEADERS, body: RequestBody = DEFAULT_BODY, cache: CacheControl = DEFAULT_CACHE_CONTROL, ): Request { return Request.Builder() .url(url) .delete(body) .headers(headers) .cacheControl(cache) .build() } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import android.annotation.SuppressLint import android.content.Context import android.webkit.WebResourceRequest import android.webkit.WebResourceResponse import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Toast import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.network.AndroidCookieJar import eu.kanade.tachiyomi.util.system.isOutdated import eu.kanade.tachiyomi.util.system.toast import okhttp3.Cookie import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response import org.jsoup.Jsoup import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import java.io.IOException import java.util.concurrent.CountDownLatch class CloudflareInterceptor( private val context: Context, private val cookieManager: AndroidCookieJar, defaultUserAgentProvider: () -> String, ) : WebViewInterceptor(context, defaultUserAgentProvider) { private val executor = ContextCompat.getMainExecutor(context) override fun shouldIntercept(response: Response): Boolean { // Check if Cloudflare anti-bot is on return if (response.code in ERROR_CODES && response.header("Server") in SERVER_CHECK) { val document = Jsoup.parse( response.peekBody(Long.MAX_VALUE).string(), response.request.url.toString(), ) // solve with webview only on captcha, not on geo block document.getElementById("challenge-error-title") != null || document.getElementById("challenge-error-text") != null } else { false } } override fun intercept( chain: Interceptor.Chain, request: Request, response: Response, ): Response { try { response.close() cookieManager.remove(request.url, COOKIE_NAMES, 0) val oldCookie = cookieManager.get(request.url) .firstOrNull { it.name == "cf_clearance" } resolveWithWebView(request, oldCookie) return chain.proceed(request) } // Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that // we don't crash the entire app catch (e: CloudflareBypassException) { throw IOException(context.stringResource(MR.strings.information_cloudflare_bypass_failure), e) } catch (e: Exception) { throw IOException(e) } } @SuppressLint("SetJavaScriptEnabled") private fun resolveWithWebView(originalRequest: Request, oldCookie: Cookie?) { // We need to lock this thread until the WebView finds the challenge solution url, because // OkHttp doesn't support asynchronous interceptors. val latch = CountDownLatch(1) var webview: WebView? = null var challengeFound = false var cloudflareBypassed = false var isWebViewOutdated = false val origRequestUrl = originalRequest.url.toString() val headers = parseHeaders(originalRequest.headers) executor.execute { webview = createWebView(originalRequest) webview.webViewClient = object : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { fun isCloudFlareBypassed(): Boolean { return cookieManager.get(origRequestUrl.toHttpUrl()) .firstOrNull { it.name == "cf_clearance" } .let { it != null && it != oldCookie } } if (isCloudFlareBypassed()) { cloudflareBypassed = true latch.countDown() } if (url == origRequestUrl && !challengeFound) { // The first request didn't return the challenge, abort. latch.countDown() } } override fun onReceivedHttpError( view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse?, ) { if (request?.isForMainFrame == true) { if (errorResponse?.statusCode in ERROR_CODES) { // Found the Cloudflare challenge page. challengeFound = true } else { // Unlock thread, the challenge wasn't found. latch.countDown() } } } } webview.loadUrl(origRequestUrl, headers) } latch.awaitFor30Seconds() executor.execute { if (!cloudflareBypassed) { isWebViewOutdated = webview?.isOutdated() == true } webview?.run { stopLoading() destroy() } } // Throw exception if we failed to bypass Cloudflare if (!cloudflareBypassed) { // Prompt user to update WebView if it seems too outdated if (isWebViewOutdated) { context.toast(MR.strings.information_webview_outdated, Toast.LENGTH_LONG) } throw CloudflareBypassException() } } } private val ERROR_CODES = listOf(403, 503) private val SERVER_CHECK = arrayOf("cloudflare-nginx", "cloudflare") private val COOKIE_NAMES = listOf("cf_clearance") private class CloudflareBypassException : Exception() ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/IgnoreGzipInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import okhttp3.Interceptor import okhttp3.Response /** * To use [okhttp3.brotli.BrotliInterceptor] as a network interceptor, * add [IgnoreGzipInterceptor] right before it. * * This nullifies the transparent gzip of [okhttp3.internal.http.BridgeInterceptor] * so gzip and Brotli are explicitly handled by the [okhttp3.brotli.BrotliInterceptor]. */ class IgnoreGzipInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { var request = chain.request() if (request.header("Accept-Encoding") == "gzip") { request = request.newBuilder().removeHeader("Accept-Encoding").build() } return chain.proceed(request) } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/RateLimitInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import android.os.SystemClock import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Response import java.io.IOException import java.util.ArrayDeque import java.util.concurrent.Semaphore import java.util.concurrent.TimeUnit import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds import kotlin.time.toDuration import kotlin.time.toDurationUnit /** * An OkHttp interceptor that handles rate limiting. * * This uses `java.time` APIs and is the legacy method, kept * for compatibility reasons with existing extensions. * * Examples: * * permits = 5, period = 1, unit = seconds => 5 requests per second * permits = 10, period = 2, unit = minutes => 10 requests per 2 minutes * * @since extension-lib 1.3 * * @param permits [Int] Number of requests allowed within a period of units. * @param period [Long] The limiting duration. Defaults to 1. * @param unit [TimeUnit] The unit of time for the period. Defaults to seconds. */ @Deprecated("Use the version with kotlin.time APIs instead.") fun OkHttpClient.Builder.rateLimit( permits: Int, period: Long = 1, unit: TimeUnit = TimeUnit.SECONDS, ) = addInterceptor(RateLimitInterceptor(null, permits, period.toDuration(unit.toDurationUnit()))) /** * An OkHttp interceptor that handles rate limiting. * * Examples: * * permits = 5, period = 1.seconds => 5 requests per second * permits = 10, period = 2.minutes => 10 requests per 2 minutes * * @since extension-lib 1.5 * * @param permits [Int] Number of requests allowed within a period of units. * @param period [Duration] The limiting duration. Defaults to 1.seconds. */ fun OkHttpClient.Builder.rateLimit(permits: Int, period: Duration = 1.seconds) = addInterceptor(RateLimitInterceptor(null, permits, period)) /** We can probably accept domains or wildcards by comparing with [endsWith], etc. */ @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") internal class RateLimitInterceptor( private val host: String?, private val permits: Int, period: Duration, ) : Interceptor { private val requestQueue = ArrayDeque(permits) private val rateLimitMillis = period.inWholeMilliseconds private val fairLock = Semaphore(1, true) override fun intercept(chain: Interceptor.Chain): Response { val call = chain.call() if (call.isCanceled()) throw IOException("Canceled") val request = chain.request() when (host) { null, request.url.host -> {} // need rate limit else -> return chain.proceed(request) } try { fairLock.acquire() } catch (e: InterruptedException) { throw IOException(e) } val requestQueue = this.requestQueue val timestamp: Long try { synchronized(requestQueue) { while (requestQueue.size >= permits) { // queue is full, remove expired entries val periodStart = SystemClock.elapsedRealtime() - rateLimitMillis var hasRemovedExpired = false while (!requestQueue.isEmpty() && requestQueue.first <= periodStart) { requestQueue.removeFirst() hasRemovedExpired = true } if (call.isCanceled()) { throw IOException("Canceled") } else if (hasRemovedExpired) { break } else { try { // wait for the first entry to expire, or notified by cached response (requestQueue as Object).wait(requestQueue.first - periodStart) } catch (_: InterruptedException) { continue } } } // add request to queue timestamp = SystemClock.elapsedRealtime() requestQueue.addLast(timestamp) } } finally { fairLock.release() } val response = chain.proceed(request) if (response.networkResponse == null) { // response is cached, remove it from queue synchronized(requestQueue) { if (requestQueue.isEmpty() || timestamp < requestQueue.first) return@synchronized requestQueue.removeFirstOccurrence(timestamp) (requestQueue as Object).notifyAll() } } return response } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/SpecificHostRateLimitInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient import java.util.concurrent.TimeUnit import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds import kotlin.time.toDuration import kotlin.time.toDurationUnit /** * An OkHttp interceptor that handles given url host's rate limiting. * * This uses Java Time APIs and is the legacy method, kept * for compatibility reasons with existing extensions. * * Examples: * * httpUrl = "api.manga.com".toHttpUrlOrNull(), permits = 5, period = 1, unit = seconds => 5 requests per second to api.manga.com * httpUrl = "imagecdn.manga.com".toHttpUrlOrNull(), permits = 10, period = 2, unit = minutes => 10 requests per 2 minutes to imagecdn.manga.com * * @since extension-lib 1.3 * * @param httpUrl [HttpUrl] The url host that this interceptor should handle. Will get url's host by using HttpUrl.host() * @param permits [Int] Number of requests allowed within a period of units. * @param period [Long] The limiting duration. Defaults to 1. * @param unit [TimeUnit] The unit of time for the period. Defaults to seconds. */ @Deprecated("Use the version with kotlin.time APIs instead.") fun OkHttpClient.Builder.rateLimitHost( httpUrl: HttpUrl, permits: Int, period: Long = 1, unit: TimeUnit = TimeUnit.SECONDS, ) = addInterceptor( RateLimitInterceptor(httpUrl.host, permits, period.toDuration(unit.toDurationUnit())), ) /** * An OkHttp interceptor that handles given url host's rate limiting. * * Examples: * * httpUrl = "https://api.manga.com".toHttpUrlOrNull(), permits = 5, period = 1.seconds => 5 requests per second to api.manga.com * httpUrl = "https://imagecdn.manga.com".toHttpUrlOrNull(), permits = 10, period = 2.minutes => 10 requests per 2 minutes to imagecdn.manga.com * * @since extension-lib 1.5 * * @param httpUrl [HttpUrl] The url host that this interceptor should handle. Will get url's host by using HttpUrl.host() * @param permits [Int] Number of requests allowed within a period of units. * @param period [Duration] The limiting duration. Defaults to 1.seconds. */ @Suppress("UNUSED") fun OkHttpClient.Builder.rateLimitHost( httpUrl: HttpUrl, permits: Int, period: Duration = 1.seconds, ) = addInterceptor(RateLimitInterceptor(httpUrl.host, permits, period)) /** * An OkHttp interceptor that handles given url host's rate limiting. * * Examples: * * url = "https://api.manga.com", permits = 5, period = 1.seconds => 5 requests per second to api.manga.com * url = "https://imagecdn.manga.com", permits = 10, period = 2.minutes => 10 requests per 2 minutes to imagecdn.manga.com * * @since extension-lib 1.5 * * @param url [String] The url host that this interceptor should handle. Will get url's host by using HttpUrl.host() * @param permits [Int] Number of requests allowed within a period of units. * @param period [Duration] The limiting duration. Defaults to 1.seconds. */ @Suppress("UNUSED") fun OkHttpClient.Builder.rateLimitHost(url: String, permits: Int, period: Duration = 1.seconds) = addInterceptor(RateLimitInterceptor(url.toHttpUrlOrNull()?.host, permits, period)) ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import okhttp3.Interceptor import okhttp3.Response import java.io.IOException /** * Catches any uncaught exceptions from later in the chain and rethrows as a non-fatal * IOException to avoid catastrophic failure. * * This should be the first interceptor in the client. * * See https://square.github.io/okhttp/4.x/okhttp/okhttp3/-interceptor/ */ class UncaughtExceptionInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { return try { chain.proceed(chain.request()) } catch (e: Exception) { if (e is IOException) { throw e } else { throw IOException(e) } } } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import okhttp3.Interceptor import okhttp3.Response class UserAgentInterceptor( private val defaultUserAgentProvider: () -> String, ) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() return if (originalRequest.header("User-Agent").isNullOrEmpty()) { val newRequest = originalRequest .newBuilder() .removeHeader("User-Agent") .addHeader("User-Agent", defaultUserAgentProvider()) .build() chain.proceed(newRequest) } else { chain.proceed(originalRequest) } } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/WebViewInterceptor.kt ================================================ package eu.kanade.tachiyomi.network.interceptor import android.content.Context import android.os.Build import android.webkit.WebSettings import android.webkit.WebView import android.widget.Toast import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.setDefaultSettings import eu.kanade.tachiyomi.util.system.toast import okhttp3.Headers import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response import tachiyomi.core.common.util.lang.launchUI import tachiyomi.i18n.MR import java.util.Locale import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit abstract class WebViewInterceptor( private val context: Context, private val defaultUserAgentProvider: () -> String, ) : Interceptor { /** * When this is called, it initializes the WebView if it wasn't already. We use this to avoid * blocking the main thread too much. If used too often we could consider moving it to the * Application class. */ private val initWebView by lazy { // Crashes on some devices. We skip this in some cases since the only impact is slower // WebView init in those rare cases. // See https://bugs.chromium.org/p/chromium/issues/detail?id=1279562 if (DeviceUtil.isMiui || (Build.VERSION.SDK_INT == Build.VERSION_CODES.S && DeviceUtil.isSamsung)) { return@lazy } try { WebSettings.getDefaultUserAgent(context) } catch (_: Exception) { // Avoid some crashes like when Chrome/WebView is being updated. } } abstract fun shouldIntercept(response: Response): Boolean abstract fun intercept(chain: Interceptor.Chain, request: Request, response: Response): Response override fun intercept(chain: Interceptor.Chain): Response { val request = chain.request() val response = chain.proceed(request) if (!shouldIntercept(response)) { return response } if (!WebViewUtil.supportsWebView(context)) { launchUI { context.toast(MR.strings.information_webview_required, Toast.LENGTH_LONG) } return response } initWebView return intercept(chain, request, response) } fun parseHeaders(headers: Headers): Map { return headers // Keeping unsafe header makes webview throw [net::ERR_INVALID_ARGUMENT] .filter { (name, value) -> isRequestHeaderSafe(name, value) } .groupBy(keySelector = { (name, _) -> name }) { (_, value) -> value } .mapValues { it.value.getOrNull(0).orEmpty() } } fun CountDownLatch.awaitFor30Seconds() { await(30, TimeUnit.SECONDS) } fun createWebView(request: Request): WebView { return WebView(context).apply { setDefaultSettings() // Avoid sending empty User-Agent, Chromium WebView will reset to default if empty settings.userAgentString = request.header("User-Agent") ?: defaultUserAgentProvider() } } } // Based on [IsRequestHeaderSafe] in // https://source.chromium.org/chromium/chromium/src/+/main:services/network/public/cpp/header_util.cc private fun isRequestHeaderSafe(_name: String, _value: String): Boolean { val name = _name.lowercase(Locale.ENGLISH) val value = _value.lowercase(Locale.ENGLISH) if (name in unsafeHeaderNames || name.startsWith("proxy-")) return false if (name == "connection" && value == "upgrade") return false return true } private val unsafeHeaderNames = listOf( "content-length", "host", "trailer", "te", "upgrade", "cookie2", "keep-alive", "transfer-encoding", "set-cookie", ) ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/lang/Hash.kt ================================================ package eu.kanade.tachiyomi.util.lang import java.security.MessageDigest object Hash { private val chars = charArrayOf( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', ) private val MD5 get() = MessageDigest.getInstance("MD5") private val SHA256 get() = MessageDigest.getInstance("SHA-256") fun sha256(bytes: ByteArray): String { return encodeHex(SHA256.digest(bytes)) } fun sha256(string: String): String { return sha256(string.toByteArray()) } fun md5(bytes: ByteArray): String { return encodeHex(MD5.digest(bytes)) } fun md5(string: String): String { return md5(string.toByteArray()) } private fun encodeHex(data: ByteArray): String { val l = data.size val out = CharArray(l shl 1) var i = 0 var j = 0 while (i < l) { out[j++] = chars[(240 and data[i].toInt()).ushr(4)] out[j++] = chars[15 and data[i].toInt()] i++ } return String(out) } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/lang/StringExtensions.kt ================================================ package eu.kanade.tachiyomi.util.lang import androidx.core.text.parseAsHtml import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator import java.nio.charset.StandardCharsets import kotlin.math.floor /** * Replaces the given string to have at most [count] characters using [replacement] at its end. * If [replacement] is longer than [count] an exception will be thrown when `length > count`. */ fun String.chop(count: Int, replacement: String = "…"): String { return if (length > count) { take(count - replacement.length) + replacement } else { this } } /** * Replaces the given string to have at most [count] characters using [replacement] near the center. * If [replacement] is longer than [count] an exception will be thrown when `length > count`. */ fun String.truncateCenter(count: Int, replacement: String = "..."): String { if (length <= count) { return this } val pieceLength: Int = floor((count - replacement.length).div(2.0)).toInt() return "${take(pieceLength)}$replacement${takeLast(pieceLength)}" } /** * Case-insensitive natural comparator for strings. */ fun String.compareToCaseInsensitiveNaturalOrder(other: String): Int { val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance() return comparator.compare(this, other) } /** * Returns the size of the string as the number of bytes. */ fun String.byteSize(): Int { return toByteArray(StandardCharsets.UTF_8).size } /** * Returns a string containing the first [n] bytes from this string, or the entire string if this * string is shorter. */ fun String.takeBytes(n: Int): String { val bytes = toByteArray(StandardCharsets.UTF_8) return if (bytes.size <= n) { this } else { bytes.decodeToString(endIndex = n).replace("\uFFFD", "") } } /** * HTML-decode the string */ fun String.htmlDecode(): String { return this.parseAsHtml().toString() } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/DiskUtil.kt ================================================ package eu.kanade.tachiyomi.util.storage import android.content.Context import android.media.MediaScannerConnection import android.net.Uri import android.os.Environment import android.os.StatFs import androidx.core.content.ContextCompat import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.util.lang.Hash import java.io.File import java.nio.ByteBuffer import java.nio.CharBuffer import java.nio.charset.CodingErrorAction object DiskUtil { /** * Returns the root folders of all the available external storages. */ fun getExternalStorages(context: Context): List { return ContextCompat.getExternalFilesDirs(context, null) .filterNotNull() .mapNotNull { val file = File(it.absolutePath.substringBefore("/Android/")) val state = Environment.getExternalStorageState(file) if (state == Environment.MEDIA_MOUNTED || state == Environment.MEDIA_MOUNTED_READ_ONLY) { file } else { null } } } fun hashKeyForDisk(key: String): String { return Hash.md5(key) } fun getDirectorySize(f: File): Long { var size: Long = 0 if (f.isDirectory) { for (file in f.listFiles().orEmpty()) { size += getDirectorySize(file) } } else { size = f.length() } return size } /** * Gets the total space for the disk that a file path points to, in bytes. */ fun getTotalStorageSpace(file: File): Long { return try { val stat = StatFs(file.absolutePath) stat.blockCountLong * stat.blockSizeLong } catch (_: Exception) { -1L } } /** * Gets the available space for the disk that a file path points to, in bytes. */ fun getAvailableStorageSpace(file: File): Long { return try { val stat = StatFs(file.absolutePath) stat.availableBlocksLong * stat.blockSizeLong } catch (_: Exception) { -1L } } /** * Gets the available space for the disk that a file path points to, in bytes. */ fun getAvailableStorageSpace(f: UniFile): Long { return try { val stat = StatFs(f.uri.path) stat.availableBlocksLong * stat.blockSizeLong } catch (_: Exception) { -1L } } /** * Don't display downloaded chapters in gallery apps creating `.nomedia`. */ fun createNoMediaFile(dir: UniFile?, context: Context?) { if (dir != null && dir.exists()) { val nomedia = dir.findFile(NOMEDIA_FILE) if (nomedia == null) { dir.createFile(NOMEDIA_FILE) context?.let { scanMedia(it, dir.uri) } } } } /** * Scans the given file so that it can be shown in gallery apps, for example. */ fun scanMedia(context: Context, uri: Uri) { MediaScannerConnection.scanFile(context, arrayOf(uri.path), null, null) } /** * Transform a filename fragment to make it safe to use on almost * all commonly used filesystems. You can pass an entire filename, * or just part of one, in case you want a specific part of a long * filename to be truncated, rather than the end of it. * * Characters that are potentially unsafe for some filesystems are * replaced with underscores. This includes the standard ones from * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file * but does allow any other valid Unicode code point. * * Excessively long filenames are truncated, by default to 240 * bytes. Note that the truncation is based on bytes rather than * characters (code points), because this is what is relevant to * filesystem restrictions in most cases. * * Leading periods are stripped, to avoid the creation of hidden * files by default. If a hidden file is desired, a period can be * prepended to the return value from this function. * * If the optional argument disallowNonAscii is set to true, * then ANYTHING outside the ASCII range is replaced not with underscores, * but with its hexadecimal encoding. This is to make it so that distinct * non-English titles of things remain distinct, since not all * places where this function is used also take care of * disambiguation. * * We could instead replace only non-ASCII characters known to * be problematic, but so far nobody with a non-Unicode-compliant * device has been able to provide either directions to reproduce * their issue nor any documentation or tests that would allow us * to determine which characters are problems and which are not. */ fun buildValidFilename( origName: String, maxBytes: Int = MAX_FILE_NAME_BYTES, disallowNonAscii: Boolean = false, ): String { val name = origName.trim('.', ' ') if (name.isEmpty()) { return "(invalid)" } val sb = StringBuilder(name.length) name.forEach { c -> if (disallowNonAscii && c >= 0x80.toChar()) { sb.append( c.toString().toByteArray(Charsets.UTF_8).toHexString( HexFormat { upperCase = false }, ), ) } else if (isValidFatFilenameChar(c)) { sb.append(c) } else { sb.append('_') } } return truncateToLength(sb.toString(), maxBytes) } /** * Truncate a string to a maximum length, while maintaining valid Unicode encoding. */ fun truncateToLength(s: String, maxBytes: Int): String { val charset = Charsets.UTF_8 val decoder = charset.newDecoder() val sba = s.toByteArray(charset) if (sba.size <= maxBytes) { return s } // Ensure truncation by having byte buffer = maxBytes val bb = ByteBuffer.wrap(sba, 0, maxBytes) val cb = CharBuffer.allocate(maxBytes) // Ignore an incomplete character decoder.onMalformedInput(CodingErrorAction.IGNORE) decoder.decode(bb, cb, true) decoder.flush(cb) return String(cb.array(), 0, cb.position()) } /** * Returns true if the given character is a valid filename character, false otherwise. */ private fun isValidFatFilenameChar(c: Char): Boolean { if (0x00.toChar() <= c && c <= 0x1f.toChar()) { return false } return when (c) { '"', '*', '/', ':', '<', '>', '?', '\\', '|', 0x7f.toChar() -> false else -> true } } const val NOMEDIA_FILE = ".nomedia" // Safe theoretical max filename size is 255 bytes and 1 char = 2-4 bytes (UTF-8). // To allow for writing to ext4 through a FUSE layer in the future, also subtract 15 // reserved characters. const val MAX_FILE_NAME_BYTES = 240 } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/DensityExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.res.Resources /** * Converts to px. */ val Int.dpToPx: Int get() = (this * Resources.getSystem().displayMetrics.density).toInt() ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/DeviceUtil.kt ================================================ package eu.kanade.tachiyomi.util.system import android.annotation.SuppressLint import android.app.ActivityManager import android.content.Context import android.os.Build import androidx.core.content.getSystemService import logcat.LogPriority import tachiyomi.core.common.util.system.logcat object DeviceUtil { val isMiui: Boolean by lazy { getSystemProperty("ro.miui.ui.version.name")?.isNotEmpty() ?: false } /** * Extracts the MIUI major version code from a string like "V12.5.3.0.QFGMIXM". * * @return MIUI major version code (e.g., 13) or null if can't be parsed. */ val miuiMajorVersion: Int? by lazy { if (!isMiui) return@lazy null Build.VERSION.INCREMENTAL .substringBefore('.') .trimStart('V') .toIntOrNull() } @SuppressLint("PrivateApi") fun isMiuiOptimizationDisabled(): Boolean { val sysProp = getSystemProperty("persist.sys.miui_optimization") if (sysProp == "0" || sysProp == "false") { return true } return try { Class.forName("android.miui.AppOpsUtils") .getDeclaredMethod("isXOptMode") .invoke(null) as Boolean } catch (e: Exception) { false } } val isSamsung: Boolean by lazy { Build.MANUFACTURER.equals("samsung", ignoreCase = true) } val oneUiVersion: Double? by lazy { try { val semPlatformIntField = Build.VERSION::class.java.getDeclaredField("SEM_PLATFORM_INT") val version = semPlatformIntField.getInt(null) - 90000 if (version < 0) { 1.0 } else { ((version / 10000).toString() + "." + version % 10000 / 100).toDouble() } } catch (e: Exception) { null } } /** * A list of package names that may be incorrectly resolved as usable browsers by * the system. * * If these are resolved for [android.content.Intent.ACTION_VIEW], it prevents the * system from opening a proper browser or any usable app . * * Some of them may only be present on certain manufacturer's devices. */ val invalidDefaultBrowsers = listOf( "android", // Honor "com.hihonor.android.internal.app", // Huawei "com.huawei.android.internal.app", // Lenovo "com.zui.resolver", // Infinix "com.transsion.resolver", // Xiaomi Redmi "com.android.intentresolver", ) /** * ActivityManager#isLowRamDevice is based on a system property, which isn't * necessarily trustworthy. 1GB is supposedly the regular threshold. * * Instead, we consider anything with less than 3GB of RAM as low memory * considering how heavy image processing can be. */ fun isLowRamDevice(context: Context): Boolean { val memInfo = ActivityManager.MemoryInfo() context.getSystemService()!!.getMemoryInfo(memInfo) val totalMemBytes = memInfo.totalMem return totalMemBytes < 3L * 1024 * 1024 * 1024 } @SuppressLint("PrivateApi") private fun getSystemProperty(key: String?): String? { return try { Class.forName("android.os.SystemProperties") .getDeclaredMethod("get", String::class.java) .invoke(null, key) as String } catch (e: Exception) { logcat(LogPriority.WARN, e) { "Unable to use SystemProperties.get()" } null } } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/GLUtil.kt ================================================ package eu.kanade.tachiyomi.util.system import javax.microedition.khronos.egl.EGL10 import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.egl.EGLContext import kotlin.math.max object GLUtil { val DEVICE_TEXTURE_LIMIT: Int by lazy { // Get EGL Display val egl = EGLContext.getEGL() as EGL10 val display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY) // Initialise val version = IntArray(2) egl.eglInitialize(display, version) // Query total number of configurations val totalConfigurations = IntArray(1) egl.eglGetConfigs(display, null, 0, totalConfigurations) // Query actual list configurations val configurationsList = arrayOfNulls(totalConfigurations[0]) egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations) val textureSize = IntArray(1) var maximumTextureSize = 0 // Iterate through all the configurations to located the maximum texture size for (i in 0.. by lazy { val steps = DEVICE_TEXTURE_LIMIT / MULTIPLIER buildList(steps) { add(DEVICE_TEXTURE_LIMIT) for (step in steps downTo 2) { val value = step * MULTIPLIER if (value >= DEVICE_TEXTURE_LIMIT) continue add(value) } } } } private const val MULTIPLIER: Int = 1024 ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/ToastExtensions.kt ================================================ package eu.kanade.tachiyomi.util.system import android.content.Context import android.widget.Toast import dev.icerock.moko.resources.StringResource import tachiyomi.core.common.i18n.stringResource /** * Display a toast in this context. * * @param resource the text resource. * @param duration the duration of the toast. Defaults to short. */ fun Context.toast( resource: StringResource, duration: Int = Toast.LENGTH_SHORT, block: (Toast) -> Unit = {}, ): Toast { return toast(stringResource(resource), duration, block) } /** * Display a toast in this context. * * @param text the text to display. * @param duration the duration of the toast. Defaults to short. */ fun Context.toast( text: String?, duration: Int = Toast.LENGTH_SHORT, block: (Toast) -> Unit = {}, ): Toast { return Toast.makeText(applicationContext, text.orEmpty(), duration).also { block(it) it.show() } } ================================================ FILE: core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt ================================================ package eu.kanade.tachiyomi.util.system import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.webkit.CookieManager import android.webkit.WebSettings import android.webkit.WebView import kotlinx.coroutines.suspendCancellableCoroutine import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import kotlin.coroutines.resume object WebViewUtil { private const val CHROME_PACKAGE = "com.android.chrome" private const val SYSTEM_SETTINGS_PACKAGE = "com.android.settings" const val MINIMUM_WEBVIEW_VERSION = 118 /** * Uses the WebView's user agent string to create something similar to what Chrome on Android * would return. * * Example of WebView user agent string: * Mozilla/5.0 (Linux; Android 13; Pixel 7 Build/TQ3A.230901.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 * * Example of Chrome on Android: * Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.3 */ fun getInferredUserAgent(context: Context): String { return WebView(context) .getDefaultUserAgentString() .replace("; Android .*?\\)".toRegex(), "; Android 10; K)") .replace("Version/.* Chrome/".toRegex(), "Chrome/") } fun getVersion(context: Context): String { val webView = WebView.getCurrentWebViewPackage() ?: return "how did you get here?" val pm = context.packageManager val label = webView.applicationInfo!!.loadLabel(pm) val version = webView.versionName return "$label $version" } fun supportsWebView(context: Context): Boolean { try { // May throw android.webkit.WebViewFactory$MissingWebViewPackageException if WebView // is not installed CookieManager.getInstance() } catch (e: Throwable) { logcat(LogPriority.ERROR, e) return false } return context.packageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW) } fun spoofedPackageName(context: Context): String { return try { context.packageManager.getPackageInfo(CHROME_PACKAGE, PackageManager.GET_META_DATA) CHROME_PACKAGE } catch (_: PackageManager.NameNotFoundException) { SYSTEM_SETTINGS_PACKAGE } } } fun WebView.isOutdated(): Boolean { return getWebViewMajorVersion() < WebViewUtil.MINIMUM_WEBVIEW_VERSION } suspend fun WebView.getHtml(): String = suspendCancellableCoroutine { evaluateJavascript("document.documentElement.outerHTML") { html -> it.resume(html) } } @SuppressLint("SetJavaScriptEnabled") fun WebView.setDefaultSettings() { with(settings) { javaScriptEnabled = true domStorageEnabled = true useWideViewPort = true loadWithOverviewMode = true cacheMode = WebSettings.LOAD_DEFAULT // Handle popups properly setSupportMultipleWindows(true) // Allow zooming setSupportZoom(true) builtInZoomControls = true displayZoomControls = false } CookieManager.getInstance().acceptThirdPartyCookies(this) } private fun WebView.getWebViewMajorVersion(): Int { val uaRegexMatch = """.*Chrome/(\d+)\..*""".toRegex().matchEntire(getDefaultUserAgentString()) return if (uaRegexMatch != null && uaRegexMatch.groupValues.size > 1) { uaRegexMatch.groupValues[1].toInt() } else { 0 } } // Based on https://stackoverflow.com/a/29218966 private fun WebView.getDefaultUserAgentString(): String { val originalUA: String = settings.userAgentString // Next call to getUserAgentString() will get us the default settings.userAgentString = null val defaultUserAgentString = settings.userAgentString // Revert to original UA string settings.userAgentString = originalUA return defaultUserAgentString } ================================================ FILE: core/common/src/main/kotlin/mihon/core/common/FeatureFlags.kt ================================================ package mihon.core.common import kotlin.uuid.ExperimentalUuidApi import kotlin.uuid.Uuid object FeatureFlags { @OptIn(ExperimentalUuidApi::class) fun newInstallationId(): String { return Uuid.random().toHexDashString() } } ================================================ FILE: core/common/src/main/kotlin/mihon/core/common/utils/Set.kt ================================================ package mihon.core.common.utils fun Set.mutate(action: (MutableSet) -> Unit): Set { return toMutableSet().apply(action) } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/Constants.kt ================================================ package tachiyomi.core.common object Constants { const val URL_HELP = "https://mihon.app/docs/guides/troubleshooting/" const val URL_HELP_UPCOMING = "https://mihon.app/docs/faq/updates/upcoming" const val URL_DONATE = "https://patreon.com/mihon/membership" const val MANGA_EXTRA = "manga" const val MAIN_ACTIVITY = "eu.kanade.tachiyomi.ui.main.MainActivity" // Shortcut actions const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY" const val SHORTCUT_MANGA = "eu.kanade.tachiyomi.SHOW_MANGA" const val SHORTCUT_UPDATES = "eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED" const val SHORTCUT_HISTORY = "eu.kanade.tachiyomi.SHOW_RECENTLY_READ" const val SHORTCUT_SOURCES = "eu.kanade.tachiyomi.SHOW_CATALOGUES" const val SHORTCUT_EXTENSIONS = "eu.kanade.tachiyomi.EXTENSIONS" const val SHORTCUT_DOWNLOADS = "eu.kanade.tachiyomi.SHOW_DOWNLOADS" } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/i18n/Localize.kt ================================================ package tachiyomi.core.common.i18n import android.content.Context import dev.icerock.moko.resources.PluralsResource import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.desc.Plural import dev.icerock.moko.resources.desc.PluralFormatted import dev.icerock.moko.resources.desc.Resource import dev.icerock.moko.resources.desc.ResourceFormatted import dev.icerock.moko.resources.desc.StringDesc fun Context.stringResource(resource: StringResource): String { return StringDesc.Resource(resource).toString(this).fixed() } fun Context.stringResource(resource: StringResource, vararg args: Any): String { return StringDesc.ResourceFormatted(resource, *args).toString(this).fixed() } fun Context.pluralStringResource(resource: PluralsResource, count: Int): String { return StringDesc.Plural(resource, count).toString(this).fixed() } fun Context.pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String { return StringDesc.PluralFormatted(resource, count, *args).toString(this).fixed() } // TODO: janky workaround for https://github.com/icerockdev/moko-resources/issues/337 private fun String.fixed() = this.replace("""\""", """"""") ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/AndroidPreference.kt ================================================ package tachiyomi.core.common.preference import android.content.SharedPreferences import android.content.SharedPreferences.Editor import androidx.core.content.edit import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import tachiyomi.core.common.util.system.logcat sealed class AndroidPreference( private val preferences: SharedPreferences, private val keyFlow: Flow, private val key: String, private val defaultValue: T, ) : Preference { abstract fun read(preferences: SharedPreferences, key: String, defaultValue: T): T abstract fun write(key: String, value: T): Editor.() -> Unit override fun key(): String { return key } override fun get(): T { return try { read(preferences, key, defaultValue) } catch (e: ClassCastException) { logcat { "Invalid value for $key; deleting" } delete() defaultValue } } override fun set(value: T) { preferences.edit(action = write(key, value)) } override fun isSet(): Boolean { return preferences.contains(key) } override fun delete() { preferences.edit { remove(key) } } override fun defaultValue(): T { return defaultValue } override fun changes(): Flow { return keyFlow .filter { it == key || it == null } .onStart { emit("ignition") } .map { get() } .conflate() } override fun stateIn(scope: CoroutineScope): StateFlow { return changes().stateIn(scope, SharingStarted.Eagerly, get()) } class StringPrimitive( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: String, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read( preferences: SharedPreferences, key: String, defaultValue: String, ): String { return preferences.getString(key, defaultValue) ?: defaultValue } override fun write(key: String, value: String): Editor.() -> Unit = { putString(key, value) } } class LongPrimitive( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: Long, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read(preferences: SharedPreferences, key: String, defaultValue: Long): Long { return preferences.getLong(key, defaultValue) } override fun write(key: String, value: Long): Editor.() -> Unit = { putLong(key, value) } } class IntPrimitive( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: Int, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read(preferences: SharedPreferences, key: String, defaultValue: Int): Int { return preferences.getInt(key, defaultValue) } override fun write(key: String, value: Int): Editor.() -> Unit = { putInt(key, value) } } class FloatPrimitive( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: Float, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read(preferences: SharedPreferences, key: String, defaultValue: Float): Float { return preferences.getFloat(key, defaultValue) } override fun write(key: String, value: Float): Editor.() -> Unit = { putFloat(key, value) } } class BooleanPrimitive( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: Boolean, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read( preferences: SharedPreferences, key: String, defaultValue: Boolean, ): Boolean { return preferences.getBoolean(key, defaultValue) } override fun write(key: String, value: Boolean): Editor.() -> Unit = { putBoolean(key, value) } } class StringSetPrimitive( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: Set, ) : AndroidPreference>(preferences, keyFlow, key, defaultValue) { override fun read( preferences: SharedPreferences, key: String, defaultValue: Set, ): Set { return preferences.getStringSet(key, defaultValue) ?: defaultValue } override fun write(key: String, value: Set): Editor.() -> Unit = { putStringSet(key, value) } } class ObjectAsString( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: T, private val serializer: (T) -> String, private val deserializer: (String) -> T, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read(preferences: SharedPreferences, key: String, defaultValue: T): T { return try { preferences.getString(key, null)?.let(deserializer) ?: defaultValue } catch (e: Exception) { defaultValue } } override fun write(key: String, value: T): Editor.() -> Unit = { putString(key, serializer(value)) } } class ObjectAsInt( preferences: SharedPreferences, keyFlow: Flow, key: String, defaultValue: T, private val serializer: (T) -> Int, private val deserializer: (Int) -> T, ) : AndroidPreference(preferences, keyFlow, key, defaultValue) { override fun read(preferences: SharedPreferences, key: String, defaultValue: T): T { return try { if (preferences.contains(key)) preferences.getInt(key, 0).let(deserializer) else defaultValue } catch (e: Exception) { defaultValue } } override fun write(key: String, value: T): Editor.() -> Unit = { putInt(key, serializer(value)) } } } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/AndroidPreferenceStore.kt ================================================ package tachiyomi.core.common.preference import android.content.Context import android.content.SharedPreferences import androidx.preference.PreferenceManager import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow import tachiyomi.core.common.preference.AndroidPreference.BooleanPrimitive import tachiyomi.core.common.preference.AndroidPreference.FloatPrimitive import tachiyomi.core.common.preference.AndroidPreference.IntPrimitive import tachiyomi.core.common.preference.AndroidPreference.LongPrimitive import tachiyomi.core.common.preference.AndroidPreference.ObjectAsInt import tachiyomi.core.common.preference.AndroidPreference.ObjectAsString import tachiyomi.core.common.preference.AndroidPreference.StringPrimitive import tachiyomi.core.common.preference.AndroidPreference.StringSetPrimitive class AndroidPreferenceStore( context: Context, private val sharedPreferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context), ) : PreferenceStore { private val keyFlow = sharedPreferences.keyFlow override fun getString(key: String, defaultValue: String): Preference { return StringPrimitive(sharedPreferences, keyFlow, key, defaultValue) } override fun getLong(key: String, defaultValue: Long): Preference { return LongPrimitive(sharedPreferences, keyFlow, key, defaultValue) } override fun getInt(key: String, defaultValue: Int): Preference { return IntPrimitive(sharedPreferences, keyFlow, key, defaultValue) } override fun getFloat(key: String, defaultValue: Float): Preference { return FloatPrimitive(sharedPreferences, keyFlow, key, defaultValue) } override fun getBoolean(key: String, defaultValue: Boolean): Preference { return BooleanPrimitive(sharedPreferences, keyFlow, key, defaultValue) } override fun getStringSet(key: String, defaultValue: Set): Preference> { return StringSetPrimitive(sharedPreferences, keyFlow, key, defaultValue) } override fun getObjectFromString( key: String, defaultValue: T, serializer: (T) -> String, deserializer: (String) -> T, ): Preference { return ObjectAsString( preferences = sharedPreferences, keyFlow = keyFlow, key = key, defaultValue = defaultValue, serializer = serializer, deserializer = deserializer, ) } override fun getObjectFromInt( key: String, defaultValue: T, serializer: (T) -> Int, deserializer: (Int) -> T, ): Preference { return ObjectAsInt( preferences = sharedPreferences, keyFlow = keyFlow, key = key, defaultValue = defaultValue, serializer = serializer, deserializer = deserializer, ) } override fun getAll(): Map { return sharedPreferences.all ?: emptyMap() } } private val SharedPreferences.keyFlow get() = callbackFlow { val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, key: String? -> trySend( key, ) } registerOnSharedPreferenceChangeListener(listener) awaitClose { unregisterOnSharedPreferenceChangeListener(listener) } } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/CheckboxState.kt ================================================ package tachiyomi.core.common.preference sealed class CheckboxState(open val value: T) { abstract fun next(): CheckboxState sealed class State(override val value: T) : CheckboxState(value) { data class Checked(override val value: T) : State(value) data class None(override val value: T) : State(value) val isChecked: Boolean get() = this is Checked override fun next(): CheckboxState { return when (this) { is Checked -> None(value) is None -> Checked(value) } } } sealed class TriState(override val value: T) : CheckboxState(value) { data class Include(override val value: T) : TriState(value) data class Exclude(override val value: T) : TriState(value) data class None(override val value: T) : TriState(value) override fun next(): CheckboxState { return when (this) { is Exclude -> None(value) is Include -> Exclude(value) is None -> Include(value) } } } } inline fun T.asCheckboxState(condition: (T) -> Boolean): CheckboxState.State { return if (condition(this)) { CheckboxState.State.Checked(this) } else { CheckboxState.State.None(this) } } inline fun List.mapAsCheckboxState(condition: (T) -> Boolean): List> { return this.map { it.asCheckboxState(condition) } } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/InMemoryPreferenceStore.kt ================================================ package tachiyomi.core.common.preference import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.stateIn /** * Local-copy implementation of PreferenceStore mostly for test and preview purposes */ class InMemoryPreferenceStore( initialPreferences: Sequence> = sequenceOf(), ) : PreferenceStore { private val preferences: Map> = initialPreferences.toList().associateBy { it.key() } override fun getString(key: String, defaultValue: String): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: String? = preferences[key]?.get() as? String return if (data == null) default else InMemoryPreference(key, data, defaultValue) } override fun getLong(key: String, defaultValue: Long): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: Long? = preferences[key]?.get() as? Long return if (data == null) default else InMemoryPreference(key, data, defaultValue) } override fun getInt(key: String, defaultValue: Int): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: Int? = preferences[key]?.get() as? Int return if (data == null) default else InMemoryPreference(key, data, defaultValue) } override fun getFloat(key: String, defaultValue: Float): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: Float? = preferences[key]?.get() as? Float return if (data == null) default else InMemoryPreference(key, data, defaultValue) } override fun getBoolean(key: String, defaultValue: Boolean): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: Boolean? = preferences[key]?.get() as? Boolean return if (data == null) default else InMemoryPreference(key, data, defaultValue) } override fun getStringSet(key: String, defaultValue: Set): Preference> { TODO("Not yet implemented") } @Suppress("UNCHECKED_CAST") override fun getObjectFromString( key: String, defaultValue: T, serializer: (T) -> String, deserializer: (String) -> T, ): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: T? = preferences[key]?.get() as? T return if (data == null) default else InMemoryPreference(key, data, defaultValue) } @Suppress("UNCHECKED_CAST") override fun getObjectFromInt( key: String, defaultValue: T, serializer: (T) -> Int, deserializer: (Int) -> T, ): Preference { val default = InMemoryPreference(key, null, defaultValue) val data: T? = preferences[key]?.get() as? T return if (data == null) default else InMemoryPreference(key, data, defaultValue) } override fun getAll(): Map { return preferences } class InMemoryPreference( private val key: String, private var data: T?, private val defaultValue: T, ) : Preference { override fun key(): String = key override fun get(): T = data ?: defaultValue() override fun isSet(): Boolean = data != null override fun delete() { data = null } override fun defaultValue(): T = defaultValue override fun changes(): Flow = flow { data } override fun stateIn(scope: CoroutineScope): StateFlow { return changes().stateIn(scope, SharingStarted.Eagerly, get()) } override fun set(value: T) { data = value } } } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/Preference.kt ================================================ package tachiyomi.core.common.preference import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow interface Preference { fun key(): String fun get(): T fun set(value: T) fun isSet(): Boolean fun delete() fun defaultValue(): T fun changes(): Flow fun stateIn(scope: CoroutineScope): StateFlow companion object { /** * A preference that should not be exposed in places like backups without user consent. */ fun isPrivate(key: String): Boolean { return key.startsWith(PRIVATE_PREFIX) } fun privateKey(key: String): String { return "$PRIVATE_PREFIX$key" } /** * A preference used for internal app state that isn't really a user preference * and therefore should not be in places like backups. */ fun isAppState(key: String): Boolean { return key.startsWith(APP_STATE_PREFIX) } fun appStateKey(key: String): String { return "$APP_STATE_PREFIX$key" } private const val APP_STATE_PREFIX = "__APP_STATE_" private const val PRIVATE_PREFIX = "__PRIVATE_" } } inline fun Preference.getAndSet(crossinline block: (T) -> R) = set( block(get()), ) operator fun Preference>.plusAssign(item: T) { set(get() + item) } operator fun Preference>.plusAssign(items: Iterable) { set(get() + items) } operator fun Preference>.minusAssign(item: T) { set(get() - item) } fun Preference.toggle(): Boolean { set(!get()) return get() } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/PreferenceStore.kt ================================================ package tachiyomi.core.common.preference interface PreferenceStore { fun getString(key: String, defaultValue: String = ""): Preference fun getLong(key: String, defaultValue: Long = 0): Preference fun getInt(key: String, defaultValue: Int = 0): Preference fun getFloat(key: String, defaultValue: Float = 0f): Preference fun getBoolean(key: String, defaultValue: Boolean = false): Preference fun getStringSet(key: String, defaultValue: Set = emptySet()): Preference> fun getObjectFromString( key: String, defaultValue: T, serializer: (T) -> String, deserializer: (String) -> T, ): Preference fun getObjectFromInt( key: String, defaultValue: T, serializer: (T) -> Int, deserializer: (Int) -> T, ): Preference fun getAll(): Map } fun PreferenceStore.getLongArray( key: String, defaultValue: List, ): Preference> { return getObjectFromString( key = key, defaultValue = defaultValue, serializer = { it.joinToString(",") }, deserializer = { it.split(",").mapNotNull { l -> l.toLongOrNull() } }, ) } inline fun > PreferenceStore.getEnum( key: String, defaultValue: T, ): Preference { return getObjectFromString( key = key, defaultValue = defaultValue, serializer = { it.name }, deserializer = { try { enumValueOf(it) } catch (e: IllegalArgumentException) { defaultValue } }, ) } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/preference/TriState.kt ================================================ package tachiyomi.core.common.preference enum class TriState { DISABLED, // Disable filter ENABLED_IS, // Enabled with "is" filter ENABLED_NOT, // Enabled with "not" filter ; fun next(): TriState { return when (this) { DISABLED -> ENABLED_IS ENABLED_IS -> ENABLED_NOT ENABLED_NOT -> DISABLED } } } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/storage/AndroidStorageFolderProvider.kt ================================================ package tachiyomi.core.common.storage import android.content.Context import android.os.Environment import androidx.core.net.toUri import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import java.io.File class AndroidStorageFolderProvider( private val context: Context, ) : FolderProvider { override fun directory(): File { return File( Environment.getExternalStorageDirectory().absolutePath + File.separator + context.stringResource(MR.strings.app_name), ) } override fun path(): String { return directory().toUri().toString() } } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/storage/FolderProvider.kt ================================================ package tachiyomi.core.common.storage import java.io.File interface FolderProvider { fun directory(): File fun path(): String } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/storage/UniFileExtensions.kt ================================================ package tachiyomi.core.common.storage import com.hippo.unifile.UniFile val UniFile.extension: String? get() = name?.substringAfterLast('.') val UniFile.nameWithoutExtension: String? get() = name?.substringBeforeLast('.') val UniFile.displayablePath: String get() = filePath ?: uri.toString() ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/util/lang/BooleanExtensions.kt ================================================ package tachiyomi.core.common.util.lang fun Boolean.toLong() = if (this) 1L else 0L ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/util/lang/CoroutinesExtensions.kt ================================================ package tachiyomi.core.common.util.lang import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.launch import kotlinx.coroutines.withContext /** * Think twice before using this. This is a delicate API. It is easy to accidentally create resource or memory leaks when GlobalScope is used. * * **Possible replacements** * - suspend function * - custom scope like view or presenter scope */ @DelicateCoroutinesApi fun launchUI(block: suspend CoroutineScope.() -> Unit): Job = GlobalScope.launch(Dispatchers.Main, CoroutineStart.DEFAULT, block) /** * Think twice before using this. This is a delicate API. It is easy to accidentally create resource or memory leaks when GlobalScope is used. * * **Possible replacements** * - suspend function * - custom scope like view or presenter scope */ @DelicateCoroutinesApi fun launchIO(block: suspend CoroutineScope.() -> Unit): Job = GlobalScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT, block) /** * Think twice before using this. This is a delicate API. It is easy to accidentally create resource or memory leaks when GlobalScope is used. * * **Possible replacements** * - suspend function * - custom scope like view or presenter scope */ @DelicateCoroutinesApi fun launchNow(block: suspend CoroutineScope.() -> Unit): Job = GlobalScope.launch(Dispatchers.Main, CoroutineStart.UNDISPATCHED, block) fun CoroutineScope.launchUI(block: suspend CoroutineScope.() -> Unit): Job = launch(Dispatchers.Main, block = block) fun CoroutineScope.launchIO(block: suspend CoroutineScope.() -> Unit): Job = launch(Dispatchers.IO, block = block) fun CoroutineScope.launchNonCancellable(block: suspend CoroutineScope.() -> Unit): Job = launchIO { withContext(NonCancellable, block) } suspend fun withUIContext(block: suspend CoroutineScope.() -> T) = withContext( Dispatchers.Main, block, ) suspend fun withIOContext(block: suspend CoroutineScope.() -> T) = withContext( Dispatchers.IO, block, ) suspend fun withNonCancellableContext(block: suspend CoroutineScope.() -> T) = withContext(NonCancellable, block) ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/util/lang/RxCoroutineBridge.kt ================================================ package tachiyomi.core.common.util.lang import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine import rx.Observable import rx.Subscriber import rx.Subscription import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException /* * Util functions for bridging RxJava and coroutines. Taken from TachiyomiEH/SY. */ suspend fun Observable.awaitSingle(): T = single().awaitOne() @OptIn(InternalCoroutinesApi::class) private suspend fun Observable.awaitOne(): T = suspendCancellableCoroutine { cont -> cont.unsubscribeOnCancellation( subscribe( object : Subscriber() { override fun onStart() { request(1) } override fun onNext(t: T) { cont.resume(t) } override fun onCompleted() { if (cont.isActive) { cont.resumeWithException( IllegalStateException( "Should have invoked onNext", ), ) } } override fun onError(e: Throwable) { /* * Rx1 observable throws NoSuchElementException if cancellation happened before * element emission. To mitigate this we try to atomically resume continuation with exception: * if resume failed, then we know that continuation successfully cancelled itself */ val token = cont.tryResumeWithException(e) if (token != null) { cont.completeResume(token) } } }, ), ) } private fun CancellableContinuation.unsubscribeOnCancellation(sub: Subscription) = invokeOnCancellation { sub.unsubscribe() } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/util/lang/SortUtil.kt ================================================ package tachiyomi.core.common.util.lang import java.text.Collator import java.util.Locale private val collator by lazy { val locale = Locale.getDefault() Collator.getInstance(locale).apply { strength = Collator.PRIMARY } } fun String.compareToWithCollator(other: String): Int { return collator.compare(this, other) } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/util/system/ImageUtil.kt ================================================ package tachiyomi.core.common.util.system import android.content.Context import android.content.res.Configuration import android.content.res.Resources import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.BitmapRegionDecoder import android.graphics.Color import android.graphics.Matrix import android.graphics.Rect import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable import android.os.Build import androidx.annotation.ColorInt import androidx.core.graphics.alpha import androidx.core.graphics.applyCanvas import androidx.core.graphics.blue import androidx.core.graphics.createBitmap import androidx.core.graphics.get import androidx.core.graphics.green import androidx.core.graphics.red import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.util.system.GLUtil import logcat.LogPriority import okio.Buffer import okio.BufferedSource import tachiyomi.decoder.Format import tachiyomi.decoder.ImageDecoder import java.io.InputStream import java.util.Locale import kotlin.math.abs import kotlin.math.max import kotlin.math.min object ImageUtil { fun isImage(name: String?, openStream: (() -> InputStream)? = null): Boolean { if (name == null) return false val extension = name.substringAfterLast('.') return ImageType.entries.any { it.extension == extension } || openStream?.let { findImageType(it) } != null } fun findImageType(openStream: () -> InputStream): ImageType? { return openStream().use { findImageType(it) } } fun findImageType(stream: InputStream): ImageType? { return try { when (getImageType(stream)?.format) { Format.Avif -> ImageType.AVIF Format.Gif -> ImageType.GIF Format.Heif -> ImageType.HEIF Format.Jpeg -> ImageType.JPEG Format.Jxl -> ImageType.JXL Format.Png -> ImageType.PNG Format.Webp -> ImageType.WEBP else -> null } } catch (e: Exception) { null } } fun getExtensionFromMimeType(mime: String?, openStream: () -> InputStream): String { val type = mime?.let { ImageType.entries.find { it.mime == mime } } ?: findImageType(openStream) return type?.extension ?: "jpg" } fun isAnimatedAndSupported(source: BufferedSource): Boolean { return try { val type = getImageType(source.peek().inputStream()) ?: return false // https://coil-kt.github.io/coil/getting_started/#supported-image-formats when (type.format) { Format.Gif -> true // Animated WebP on Android 9+ Format.Webp -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P // Animated Heif on Android 11+ Format.Heif -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R else -> false } } catch (e: Exception) { false } } private fun getImageType(stream: InputStream): tachiyomi.decoder.ImageType? { val bytes = ByteArray(32) val length = if (stream.markSupported()) { stream.mark(bytes.size) stream.read(bytes, 0, bytes.size).also { stream.reset() } } else { stream.read(bytes, 0, bytes.size) } if (length == -1) { return null } return ImageDecoder.findType(bytes) } enum class ImageType(val mime: String, val extension: String) { AVIF("image/avif", "avif"), GIF("image/gif", "gif"), HEIF("image/heif", "heif"), JPEG("image/jpeg", "jpg"), JXL("image/jxl", "jxl"), PNG("image/png", "png"), WEBP("image/webp", "webp"), } /** * Check whether the image is wide (which we consider a double-page spread). * * @return true if the width is greater than the height */ fun isWideImage(imageSource: BufferedSource): Boolean { val options = extractImageOptions(imageSource) return options.outWidth > options.outHeight } /** * Extract the 'side' part from [BufferedSource] and return it as [BufferedSource]. */ fun splitInHalf(imageSource: BufferedSource, side: Side): BufferedSource { val imageBitmap = BitmapFactory.decodeStream(imageSource.inputStream()) val height = imageBitmap.height val width = imageBitmap.width val singlePage = Rect(0, 0, width / 2, height) val half = createBitmap(width / 2, height) val part = when (side) { Side.RIGHT -> Rect(width - width / 2, 0, width, height) Side.LEFT -> Rect(0, 0, width / 2, height) } half.applyCanvas { drawBitmap(imageBitmap, part, singlePage, null) } val output = Buffer() half.compress(Bitmap.CompressFormat.JPEG, 100, output.outputStream()) return output } fun rotateImage(imageSource: BufferedSource, degrees: Float): BufferedSource { val imageBitmap = BitmapFactory.decodeStream(imageSource.inputStream()) val rotated = rotateBitMap(imageBitmap, degrees) val output = Buffer() rotated.compress(Bitmap.CompressFormat.JPEG, 100, output.outputStream()) return output } private fun rotateBitMap(bitmap: Bitmap, degrees: Float): Bitmap { val matrix = Matrix().apply { postRotate(degrees) } return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true) } /** * Split the image into left and right parts, then merge them into a new image. */ fun splitAndMerge(imageSource: BufferedSource, upperSide: Side): BufferedSource { val imageBitmap = BitmapFactory.decodeStream(imageSource.inputStream()) val height = imageBitmap.height val width = imageBitmap.width val result = createBitmap(width / 2, height * 2) result.applyCanvas { // right -> upper val rightPart = when (upperSide) { Side.RIGHT -> Rect(width - width / 2, 0, width, height) Side.LEFT -> Rect(0, 0, width / 2, height) } val upperPart = Rect(0, 0, width / 2, height) drawBitmap(imageBitmap, rightPart, upperPart, null) // left -> bottom val leftPart = when (upperSide) { Side.LEFT -> Rect(width - width / 2, 0, width, height) Side.RIGHT -> Rect(0, 0, width / 2, height) } val bottomPart = Rect(0, height, width / 2, height * 2) drawBitmap(imageBitmap, leftPart, bottomPart, null) } val output = Buffer() result.compress(Bitmap.CompressFormat.JPEG, 100, output.outputStream()) return output } enum class Side { RIGHT, LEFT, } /** * Check whether the image is considered a tall image. * * @return true if the height:width ratio is greater than 3. */ private fun isTallImage(imageSource: BufferedSource): Boolean { val options = extractImageOptions(imageSource) return (options.outHeight / options.outWidth) > 3 } /** * Splits tall images to improve performance of reader */ fun splitTallImage(tmpDir: UniFile, imageFile: UniFile, filenamePrefix: String): Boolean { val imageSource = imageFile.openInputStream().use { Buffer().readFrom(it) } if (isAnimatedAndSupported(imageSource) || !isTallImage(imageSource)) { return true } val bitmapRegionDecoder = getBitmapRegionDecoder(imageSource.peek().inputStream()) if (bitmapRegionDecoder == null) { logcat { "Failed to create new instance of BitmapRegionDecoder" } return false } val options = extractImageOptions(imageSource).apply { inJustDecodeBounds = false } val splitDataList = options.splitData return try { splitDataList.forEach { splitData -> val splitImageName = splitImageName(filenamePrefix, splitData.index) // Remove pre-existing split if exists (this split shouldn't exist under normal circumstances) tmpDir.findFile(splitImageName)?.delete() val splitFile = tmpDir.createFile(splitImageName)!! val region = Rect(0, splitData.topOffset, splitData.splitWidth, splitData.bottomOffset) splitFile.openOutputStream().use { outputStream -> val splitBitmap = bitmapRegionDecoder.decodeRegion(region, options) splitBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream) splitBitmap.recycle() } logcat { "Success: Split #${splitData.index + 1} with topOffset=${splitData.topOffset} " + "height=${splitData.splitHeight} bottomOffset=${splitData.bottomOffset}" } } imageFile.delete() true } catch (e: Exception) { // Image splits were not successfully saved so delete them and keep the original image splitDataList .map { splitImageName(filenamePrefix, it.index) } .forEach { tmpDir.findFile(it)?.delete() } logcat(LogPriority.ERROR, e) false } finally { bitmapRegionDecoder.recycle() } } private fun splitImageName(filenamePrefix: String, index: Int) = "${filenamePrefix}__${"%03d".format( Locale.ENGLISH, index + 1, )}.jpg" private val BitmapFactory.Options.splitData get(): List { val imageHeight = outHeight val imageWidth = outWidth // -1 so it doesn't try to split when imageHeight = optimalImageHeight val partCount = (imageHeight - 1) / optimalImageHeight + 1 val optimalSplitHeight = imageHeight / partCount logcat { "Generating SplitData for image (height: $imageHeight): " + "$partCount parts @ ${optimalSplitHeight}px height per part" } return buildList { val range = 0.. val other = topAndBotPixels[(index + 1) % topAndBotPixels.size] !color.isWhite() && color.isCloseTo(other) } if (isNotWhiteAndCloseTo.all { it }) { return ColorDrawable(topLeftPixel) } val cornerPixels = listOf(topLeftPixel, topRightPixel, botLeftPixel, botRightPixel) val numberOfWhiteCorners = cornerPixels.map { cornerPixel -> cornerPixel.isWhite() } .filter { it } .size if (numberOfWhiteCorners > 2) { darkBG = false } var blackColor = when { topLeftIsDark -> topLeftPixel topRightIsDark -> topRightPixel botLeftIsDark -> botLeftPixel botRightIsDark -> botRightPixel else -> whiteColor } var overallWhitePixels = 0 var overallBlackPixels = 0 var topBlackStreak = 0 var topWhiteStreak = 0 var botBlackStreak = 0 var botWhiteStreak = 0 outer@ for (x in intArrayOf(left, right, leftOffsetX, rightOffsetX)) { var whitePixelsStreak = 0 var whitePixels = 0 var blackPixelsStreak = 0 var blackPixels = 0 var blackStreak = false var whiteStreak = false val notOffset = x == left || x == right inner@ for ((index, y) in (0.. 14) { whiteStreak = true } if (whitePixelsStreak > 6 && whitePixelsStreak >= index - 1) { topWhiteStreak = whitePixelsStreak } } else { whitePixelsStreak = 0 if (pixel.isDark() && pixelOff.isDark()) { blackPixels++ if (notOffset) { overallBlackPixels++ } blackPixelsStreak++ if (blackPixelsStreak >= 14) { blackStreak = true } continue@inner } } if (blackPixelsStreak > 6 && blackPixelsStreak >= index - 1) { topBlackStreak = blackPixelsStreak } blackPixelsStreak = 0 } if (blackPixelsStreak > 6) { botBlackStreak = blackPixelsStreak } else if (whitePixelsStreak > 6) { botWhiteStreak = whitePixelsStreak } when { blackPixels > 22 -> { if (x == right || x == rightOffsetX) { blackColor = when { topRightIsDark -> topRightPixel botRightIsDark -> botRightPixel else -> blackColor } } darkBG = true overallWhitePixels = 0 break@outer } blackStreak -> { darkBG = true if (x == right || x == rightOffsetX) { blackColor = when { topRightIsDark -> topRightPixel botRightIsDark -> botRightPixel else -> blackColor } } if (blackPixels > 18) { overallWhitePixels = 0 break@outer } } whiteStreak || whitePixels > 22 -> darkBG = false } } val topIsBlackStreak = topBlackStreak > topWhiteStreak val bottomIsBlackStreak = botBlackStreak > botWhiteStreak if (overallWhitePixels > 9 && overallWhitePixels > overallBlackPixels) { darkBG = false } if (topIsBlackStreak && bottomIsBlackStreak) { darkBG = true } val isLandscape = context.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE if (isLandscape) { return when { darkBG -> ColorDrawable(blackColor) else -> ColorDrawable(whiteColor) } } val botCornersIsWhite = botLeftPixel.isWhite() && botRightPixel.isWhite() val topCornersIsWhite = topLeftPixel.isWhite() && topRightPixel.isWhite() val topCornersIsDark = topLeftIsDark && topRightIsDark val botCornersIsDark = botLeftIsDark && botRightIsDark val topOffsetCornersIsDark = image[leftOffsetX, top].isDark() && image[rightOffsetX, top].isDark() val botOffsetCornersIsDark = image[leftOffsetX, bot].isDark() && image[rightOffsetX, bot].isDark() val gradient = when { darkBG && botCornersIsWhite -> { intArrayOf(blackColor, blackColor, whiteColor, whiteColor) } darkBG && topCornersIsWhite -> { intArrayOf(whiteColor, whiteColor, blackColor, blackColor) } darkBG -> { return ColorDrawable(blackColor) } topIsBlackStreak || ( topCornersIsDark && topOffsetCornersIsDark && (topMidIsDark || overallBlackPixels > 9) ) -> { intArrayOf(blackColor, blackColor, whiteColor, whiteColor) } bottomIsBlackStreak || ( botCornersIsDark && botOffsetCornersIsDark && (bottomCenterPixel.isDark() || overallBlackPixels > 9) ) -> { intArrayOf(whiteColor, whiteColor, blackColor, blackColor) } else -> { return ColorDrawable(whiteColor) } } return GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, gradient, ) } private fun @receiver:ColorInt Int.isDark(): Boolean = red < 40 && blue < 40 && green < 40 && alpha > 200 private fun @receiver:ColorInt Int.isCloseTo(other: Int): Boolean = abs(red - other.red) < 30 && abs(green - other.green) < 30 && abs(blue - other.blue) < 30 private fun @receiver:ColorInt Int.isWhite(): Boolean = red + blue + green > 740 /** * Used to check an image's dimensions without loading it in the memory. */ private fun extractImageOptions(imageSource: BufferedSource): BitmapFactory.Options { val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } BitmapFactory.decodeStream(imageSource.peek().inputStream(), null, options) return options } private fun getBitmapRegionDecoder(imageStream: InputStream): BitmapRegionDecoder? { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { BitmapRegionDecoder.newInstance(imageStream) } else { @Suppress("DEPRECATION") BitmapRegionDecoder.newInstance(imageStream, false) } } private val optimalImageHeight = getDisplayMaxHeightInPx * 2 /** * Taken from Coil * (https://github.com/coil-kt/coil/blob/1674d3516f061aeacbe749a435b1924f9648fd41/coil-core/src/androidMain/kotlin/coil3/util/hardwareBitmaps.kt) * --- * Maintains a list of devices with broken/incomplete/unstable hardware bitmap implementations. * * Model names are retrieved from * [Google's official device list](https://support.google.com/googleplay/answer/1727131?hl=en). * */ val HARDWARE_BITMAP_UNSUPPORTED = when (Build.VERSION.SDK_INT) { 26 -> run { val model = Build.MODEL ?: return@run false // Samsung Galaxy (ALL) if (model.removePrefix("SAMSUNG-").startsWith("SM-")) return@run true val device = Build.DEVICE ?: return@run false return@run device in arrayOf( "nora", "nora_8917", "nora_8917_n", // Moto E5 "james", "rjames_f", "rjames_go", "pettyl", // Moto E5 Play "hannah", "ahannah", "rhannah", // Moto E5 Plus "ali", "ali_n", // Moto G6 "aljeter", "aljeter_n", "jeter", // Moto G6 Play "evert", "evert_n", "evert_nt", // Moto G6 Plus "G3112", "G3116", "G3121", "G3123", "G3125", // Xperia XA1 "G3412", "G3416", "G3421", "G3423", "G3426", // Xperia XA1 Plus "G3212", "G3221", "G3223", "G3226", // Xperia XA1 Ultra "BV6800Pro", // BlackView BV6800Pro "CatS41", // Cat S41 "Hi9Pro", // CHUWI Hi9 Pro "manning", // Lenovo K8 Note "N5702L", // NUU Mobile G3 ) } 27 -> run { val device = Build.DEVICE ?: return@run false return@run device in arrayOf( "mcv1s", // LG Tribute Empire "mcv3", // LG K11 "mcv5a", // LG Q7 "mcv7a", // LG Stylo 4 "A30ATMO", // T-Mobile REVVL 2 "A70AXLTMO", // T-Mobile REVVL 2 PLUS "A3A_8_4G_TMO", // Alcatel 9027W "Edison_CKT", // Alcatel ONYX "EDISON_TF", // Alcatel TCL XL2 "FERMI_TF", // Alcatel A501DL "U50A_ATT", // Alcatel TETRA "U50A_PLUS_ATT", // Alcatel 5059R "U50A_PLUS_TF", // Alcatel TCL LX "U50APLUSTMO", // Alcatel 5059Z "U5A_PLUS_4G", // Alcatel 1X "RCT6513W87DK5e", // RCA Galileo Pro "RCT6873W42BMF9A", // RCA Voyager "RCT6A03W13", // RCA 10 Viking "RCT6B03W12", // RCA Atlas 10 Pro "RCT6B03W13", // RCA Atlas 10 Pro+ "RCT6T06E13", // RCA Artemis 10 "A3_Pro", // Umidigi A3 Pro "One", // Umidigi One "One_Max", // Umidigi One Max "One_Pro", // Umidigi One Pro "Z2", // Umidigi Z2 "Z2_PRO", // Umidigi Z2 Pro "Armor_3", // Ulefone Armor 3 "Armor_6", // Ulefone Armor 6 "Blackview", // Blackview BV6000 "BV9500", // Blackview BV9500 "BV9500Pro", // Blackview BV9500Pro "A6L-C", // Nuu A6L-C "N5002LA", // Nuu A7L "N5501LA", // Nuu A5L "Power_2_Pro", // Leagoo Power 2 Pro "Power_5", // Leagoo Power 5 "Z9", // Leagoo Z9 "V0310WW", // Blu VIVO VI+ "V0330WW", // Blu VIVO XI "A3", // BenQ A3 "ASUS_X018_4", // Asus ZenFone Max Plus M1 (ZB570TL) "C210AE", // Wiko Life "fireball", // DROID Incredible 4G LTE "ILA_X1", // iLA X1 "Infinix-X605_sprout", // Infinix NOTE 5 Stylus "j7maxlte", // Samsung Galaxy J7 Max "KING_KONG_3", // Cubot King Kong 3 "M10500", // Packard Bell M10500 "S70", // Altice ALTICE S70 "S80Lite", // Doogee S80Lite "SGINO6", // SGiNO 6 "st18c10bnn", // Barnes and Noble BNTV650 "TECNO-CA8", // Tecno CAMON X Pro, "SHIFT6m", // SHIFT 6m ) } else -> false } } val getDisplayMaxHeightInPx: Int get() = Resources.getSystem().displayMetrics.let { max(it.heightPixels, it.widthPixels) } ================================================ FILE: core/common/src/main/kotlin/tachiyomi/core/common/util/system/LogcatExtensions.kt ================================================ package tachiyomi.core.common.util.system import logcat.LogPriority import logcat.asLog import logcat.logcat inline fun Any.logcat( priority: LogPriority = LogPriority.DEBUG, throwable: Throwable? = null, message: () -> String = { "" }, ) = logcat(priority = priority) { var msg = message() if (throwable != null) { if (msg.isNotBlank()) msg += "\n" msg += throwable.asLog() } msg } ================================================ FILE: core-metadata/build.gradle.kts ================================================ plugins { id("mihon.library") kotlin("android") kotlin("plugin.serialization") } android { namespace = "tachiyomi.core.metadata" defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } } dependencies { implementation(projects.sourceApi) implementation(kotlinx.bundles.serialization) } ================================================ FILE: core-metadata/consumer-rules.pro ================================================ ================================================ FILE: core-metadata/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: core-metadata/src/main/AndroidManifest.xml ================================================ ================================================ FILE: core-metadata/src/main/java/tachiyomi/core/metadata/comicinfo/ComicInfo.kt ================================================ package tachiyomi.core.metadata.comicinfo import eu.kanade.tachiyomi.source.model.SManga import kotlinx.serialization.Serializable import nl.adaptivity.xmlutil.serialization.XmlElement import nl.adaptivity.xmlutil.serialization.XmlSerialName import nl.adaptivity.xmlutil.serialization.XmlValue const val COMIC_INFO_FILE = "ComicInfo.xml" fun SManga.getComicInfo() = ComicInfo( series = ComicInfo.Series(title), summary = description?.let { ComicInfo.Summary(it) }, writer = author?.let { ComicInfo.Writer(it) }, penciller = artist?.let { ComicInfo.Penciller(it) }, genre = genre?.let { ComicInfo.Genre(it) }, publishingStatus = ComicInfo.PublishingStatusTachiyomi( ComicInfoPublishingStatus.toComicInfoValue(status.toLong()), ), title = null, number = null, web = null, translator = null, inker = null, colorist = null, letterer = null, coverArtist = null, tags = null, categories = null, source = null, ) fun SManga.copyFromComicInfo(comicInfo: ComicInfo) { comicInfo.series?.let { title = it.value } comicInfo.writer?.let { author = it.value } comicInfo.summary?.let { description = it.value } listOfNotNull( comicInfo.genre?.value, comicInfo.tags?.value, comicInfo.categories?.value, ) .distinct() .joinToString(", ") { it.trim() } .takeIf { it.isNotEmpty() } ?.let { genre = it } listOfNotNull( comicInfo.penciller?.value, comicInfo.inker?.value, comicInfo.colorist?.value, comicInfo.letterer?.value, comicInfo.coverArtist?.value, ) .flatMap { it.split(", ") } .distinct() .joinToString(", ") { it.trim() } .takeIf { it.isNotEmpty() } ?.let { artist = it } status = ComicInfoPublishingStatus.toSMangaValue(comicInfo.publishingStatus?.value) } // https://anansi-project.github.io/docs/comicinfo/schemas/v2.0 @Suppress("UNUSED") @Serializable @XmlSerialName("ComicInfo", "", "") data class ComicInfo( val title: Title?, val series: Series?, val number: Number?, val summary: Summary?, val writer: Writer?, val penciller: Penciller?, val inker: Inker?, val colorist: Colorist?, val letterer: Letterer?, val coverArtist: CoverArtist?, val translator: Translator?, val genre: Genre?, val tags: Tags?, val web: Web?, val publishingStatus: PublishingStatusTachiyomi?, val categories: CategoriesTachiyomi?, val source: SourceMihon?, ) { @XmlElement(false) @XmlSerialName("xmlns:xsd", "", "") val xmlSchema: String = "http://www.w3.org/2001/XMLSchema" @XmlElement(false) @XmlSerialName("xmlns:xsi", "", "") val xmlSchemaInstance: String = "http://www.w3.org/2001/XMLSchema-instance" @Serializable @XmlSerialName("Title", "", "") data class Title(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Series", "", "") data class Series(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Number", "", "") data class Number(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Summary", "", "") data class Summary(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Writer", "", "") data class Writer(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Penciller", "", "") data class Penciller(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Inker", "", "") data class Inker(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Colorist", "", "") data class Colorist(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Letterer", "", "") data class Letterer(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("CoverArtist", "", "") data class CoverArtist(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Translator", "", "") data class Translator(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Genre", "", "") data class Genre(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Tags", "", "") data class Tags(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Web", "", "") data class Web(@XmlValue(true) val value: String = "") // The spec doesn't have a good field for this @Serializable @XmlSerialName("PublishingStatusTachiyomi", "http://www.w3.org/2001/XMLSchema", "ty") data class PublishingStatusTachiyomi(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("Categories", "http://www.w3.org/2001/XMLSchema", "ty") data class CategoriesTachiyomi(@XmlValue(true) val value: String = "") @Serializable @XmlSerialName("SourceMihon", "http://www.w3.org/2001/XMLSchema", "mh") data class SourceMihon(@XmlValue(true) val value: String = "") } enum class ComicInfoPublishingStatus( val comicInfoValue: String, val sMangaModelValue: Int, ) { ONGOING("Ongoing", SManga.ONGOING), COMPLETED("Completed", SManga.COMPLETED), LICENSED("Licensed", SManga.LICENSED), PUBLISHING_FINISHED("Publishing finished", SManga.PUBLISHING_FINISHED), CANCELLED("Cancelled", SManga.CANCELLED), ON_HIATUS("On hiatus", SManga.ON_HIATUS), UNKNOWN("Unknown", SManga.UNKNOWN), ; companion object { fun toComicInfoValue(value: Long): String { return entries.firstOrNull { it.sMangaModelValue == value.toInt() }?.comicInfoValue ?: UNKNOWN.comicInfoValue } fun toSMangaValue(value: String?): Int { return entries.firstOrNull { it.comicInfoValue == value }?.sMangaModelValue ?: UNKNOWN.sMangaModelValue } } } ================================================ FILE: core-metadata/src/main/java/tachiyomi/core/metadata/tachiyomi/MangaDetails.kt ================================================ package tachiyomi.core.metadata.tachiyomi import kotlinx.serialization.Serializable @Serializable class MangaDetails( val title: String? = null, val author: String? = null, val artist: String? = null, val description: String? = null, val genre: List? = null, val status: Int? = null, ) ================================================ FILE: data/build.gradle.kts ================================================ plugins { id("mihon.library") kotlin("android") kotlin("plugin.serialization") alias(libs.plugins.sqldelight) } android { namespace = "tachiyomi.data" defaultConfig { consumerProguardFiles("consumer-rules.pro") } sqldelight { databases { create("Database") { packageName.set("tachiyomi.data") dialect(libs.sqldelight.dialects.sql) schemaOutputDirectory.set(project.file("./src/main/sqldelight")) } } } } kotlin { compilerOptions { freeCompilerArgs.add("-opt-in=kotlinx.serialization.ExperimentalSerializationApi") } } dependencies { implementation(projects.sourceApi) implementation(projects.domain) implementation(projects.core.common) api(libs.bundles.sqldelight) } ================================================ FILE: data/consumer-rules.pro ================================================ ================================================ FILE: data/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: data/src/main/AndroidManifest.xml ================================================ ================================================ FILE: data/src/main/java/mihon/data/repository/ExtensionRepoRepositoryImpl.kt ================================================ package mihon.data.repository import android.database.sqlite.SQLiteException import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import mihon.domain.extensionrepo.exception.SaveExtensionRepoException import mihon.domain.extensionrepo.model.ExtensionRepo import mihon.domain.extensionrepo.repository.ExtensionRepoRepository import tachiyomi.data.DatabaseHandler class ExtensionRepoRepositoryImpl( private val handler: DatabaseHandler, ) : ExtensionRepoRepository { override fun subscribeAll(): Flow> { return handler.subscribeToList { extension_reposQueries.findAll(::mapExtensionRepo) } } override suspend fun getAll(): List { return handler.awaitList { extension_reposQueries.findAll(::mapExtensionRepo) } } override suspend fun getRepo(baseUrl: String): ExtensionRepo? { return handler.awaitOneOrNull { extension_reposQueries.findOne(baseUrl, ::mapExtensionRepo) } } override suspend fun getRepoBySigningKeyFingerprint(fingerprint: String): ExtensionRepo? { return handler.awaitOneOrNull { extension_reposQueries.findOneBySigningKeyFingerprint(fingerprint, ::mapExtensionRepo) } } override fun getCount(): Flow { return handler.subscribeToOne { extension_reposQueries.count() }.map { it.toInt() } } override suspend fun insertRepo( baseUrl: String, name: String, shortName: String?, website: String, signingKeyFingerprint: String, ) { try { handler.await { extension_reposQueries.insert(baseUrl, name, shortName, website, signingKeyFingerprint) } } catch (ex: SQLiteException) { throw SaveExtensionRepoException(ex) } } override suspend fun upsertRepo( baseUrl: String, name: String, shortName: String?, website: String, signingKeyFingerprint: String, ) { try { handler.await { extension_reposQueries.upsert(baseUrl, name, shortName, website, signingKeyFingerprint) } } catch (ex: SQLiteException) { throw SaveExtensionRepoException(ex) } } override suspend fun replaceRepo(newRepo: ExtensionRepo) { handler.await { extension_reposQueries.replace( newRepo.baseUrl, newRepo.name, newRepo.shortName, newRepo.website, newRepo.signingKeyFingerprint, ) } } override suspend fun deleteRepo(baseUrl: String) { return handler.await { extension_reposQueries.delete(baseUrl) } } private fun mapExtensionRepo( baseUrl: String, name: String, shortName: String?, website: String, signingKeyFingerprint: String, ): ExtensionRepo = ExtensionRepo( baseUrl = baseUrl, name = name, shortName = shortName, website = website, signingKeyFingerprint = signingKeyFingerprint, ) } ================================================ FILE: data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt ================================================ package tachiyomi.data import androidx.paging.PagingSource import app.cash.sqldelight.ExecutableQuery import app.cash.sqldelight.Query import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList import app.cash.sqldelight.coroutines.mapToOne import app.cash.sqldelight.coroutines.mapToOneOrNull import app.cash.sqldelight.db.SqlDriver import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.withContext class AndroidDatabaseHandler( val db: Database, private val driver: SqlDriver, val queryDispatcher: CoroutineDispatcher = Dispatchers.IO, val transactionDispatcher: CoroutineDispatcher = queryDispatcher, ) : DatabaseHandler { val suspendingTransactionId = ThreadLocal() override suspend fun await(inTransaction: Boolean, block: suspend Database.() -> T): T { return dispatch(inTransaction, block) } override suspend fun awaitList( inTransaction: Boolean, block: suspend Database.() -> Query, ): List { return dispatch(inTransaction) { block(db).executeAsList() } } override suspend fun awaitOne( inTransaction: Boolean, block: suspend Database.() -> Query, ): T { return dispatch(inTransaction) { block(db).executeAsOne() } } override suspend fun awaitOneExecutable( inTransaction: Boolean, block: suspend Database.() -> ExecutableQuery, ): T { return dispatch(inTransaction) { block(db).executeAsOne() } } override suspend fun awaitOneOrNull( inTransaction: Boolean, block: suspend Database.() -> Query, ): T? { return dispatch(inTransaction) { block(db).executeAsOneOrNull() } } override suspend fun awaitOneOrNullExecutable( inTransaction: Boolean, block: suspend Database.() -> ExecutableQuery, ): T? { return dispatch(inTransaction) { block(db).executeAsOneOrNull() } } override fun subscribeToList(block: Database.() -> Query): Flow> { return block(db).asFlow().mapToList(queryDispatcher) } override fun subscribeToOne(block: Database.() -> Query): Flow { return block(db).asFlow().mapToOne(queryDispatcher) } override fun subscribeToOneOrNull(block: Database.() -> Query): Flow { return block(db).asFlow().mapToOneOrNull(queryDispatcher) } override fun subscribeToPagingSource( countQuery: Database.() -> Query, queryProvider: Database.(Long, Long) -> Query, ): PagingSource { return QueryPagingSource( handler = this, countQuery = countQuery, queryProvider = { limit, offset -> queryProvider.invoke(db, limit, offset) }, ) } private suspend fun dispatch(inTransaction: Boolean, block: suspend Database.() -> T): T { // Create a transaction if needed and run the calling block inside it. if (inTransaction) { return withTransaction { block(db) } } // If we're currently in the transaction thread, there's no need to dispatch our query. if (driver.currentTransaction() != null) { return block(db) } // Get the current database context and run the calling block. val context = getCurrentDatabaseContext() return withContext(context) { block(db) } } } ================================================ FILE: data/src/main/java/tachiyomi/data/DatabaseAdapter.kt ================================================ package tachiyomi.data import app.cash.sqldelight.ColumnAdapter import eu.kanade.tachiyomi.source.model.UpdateStrategy import java.util.Date object DateColumnAdapter : ColumnAdapter { override fun decode(databaseValue: Long): Date = Date(databaseValue) override fun encode(value: Date): Long = value.time } private const val LIST_OF_STRINGS_SEPARATOR = ", " object StringListColumnAdapter : ColumnAdapter, String> { override fun decode(databaseValue: String) = if (databaseValue.isEmpty()) { emptyList() } else { databaseValue.split(LIST_OF_STRINGS_SEPARATOR) } override fun encode(value: List) = value.joinToString( separator = LIST_OF_STRINGS_SEPARATOR, ) } object UpdateStrategyColumnAdapter : ColumnAdapter { override fun decode(databaseValue: Long): UpdateStrategy = UpdateStrategy.entries.getOrElse(databaseValue.toInt()) { UpdateStrategy.ALWAYS_UPDATE } override fun encode(value: UpdateStrategy): Long = value.ordinal.toLong() } ================================================ FILE: data/src/main/java/tachiyomi/data/DatabaseHandler.kt ================================================ package tachiyomi.data import androidx.paging.PagingSource import app.cash.sqldelight.ExecutableQuery import app.cash.sqldelight.Query import kotlinx.coroutines.flow.Flow interface DatabaseHandler { suspend fun await(inTransaction: Boolean = false, block: suspend Database.() -> T): T suspend fun awaitList( inTransaction: Boolean = false, block: suspend Database.() -> Query, ): List suspend fun awaitOne( inTransaction: Boolean = false, block: suspend Database.() -> Query, ): T suspend fun awaitOneExecutable( inTransaction: Boolean = false, block: suspend Database.() -> ExecutableQuery, ): T suspend fun awaitOneOrNull( inTransaction: Boolean = false, block: suspend Database.() -> Query, ): T? suspend fun awaitOneOrNullExecutable( inTransaction: Boolean = false, block: suspend Database.() -> ExecutableQuery, ): T? fun subscribeToList(block: Database.() -> Query): Flow> fun subscribeToOne(block: Database.() -> Query): Flow fun subscribeToOneOrNull(block: Database.() -> Query): Flow fun subscribeToPagingSource( countQuery: Database.() -> Query, queryProvider: Database.(Long, Long) -> Query, ): PagingSource } ================================================ FILE: data/src/main/java/tachiyomi/data/QueryPagingSource.kt ================================================ package tachiyomi.data import androidx.paging.PagingSource import androidx.paging.PagingState import app.cash.sqldelight.Query import kotlin.properties.Delegates class QueryPagingSource( val handler: DatabaseHandler, val countQuery: Database.() -> Query, val queryProvider: Database.(Long, Long) -> Query, ) : PagingSource(), Query.Listener { override val jumpingSupported: Boolean = true private var currentQuery: Query? by Delegates.observable(null) { _, old, new -> old?.removeListener(this) new?.addListener(this) } init { registerInvalidatedCallback { currentQuery?.removeListener(this) currentQuery = null } } override suspend fun load(params: LoadParams): LoadResult { try { val key = params.key ?: 0L val loadSize = params.loadSize val count = handler.awaitOne { countQuery() } val (offset, limit) = when (params) { is LoadParams.Prepend -> key - loadSize to loadSize.toLong() else -> key to loadSize.toLong() } val data = handler.awaitList { queryProvider(limit, offset) .also { currentQuery = it } } val (prevKey, nextKey) = when (params) { is LoadParams.Append -> (offset - loadSize to offset + loadSize) else -> (offset to offset + loadSize) } return LoadResult.Page( data = data, prevKey = if (offset <= 0L || prevKey < 0L) null else prevKey, nextKey = if (offset + loadSize >= count) null else nextKey, itemsBefore = maxOf(0L, offset).toInt(), itemsAfter = maxOf(0L, count - (offset + loadSize)).toInt(), ) } catch (e: Exception) { return LoadResult.Error(throwable = e) } } override fun getRefreshKey(state: PagingState): Long? { return state.anchorPosition?.let { anchorPosition -> val anchorPage = state.closestPageToPosition(anchorPosition) anchorPage?.prevKey ?: anchorPage?.nextKey } } override fun queryResultsChanged() { invalidate() } } ================================================ FILE: data/src/main/java/tachiyomi/data/TransactionContext.kt ================================================ package tachiyomi.data import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job import kotlinx.coroutines.asContextElement import kotlinx.coroutines.runBlocking import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import java.util.concurrent.RejectedExecutionException import kotlin.concurrent.atomics.AtomicInt import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.concurrent.atomics.decrementAndFetch import kotlin.concurrent.atomics.incrementAndFetch import kotlin.coroutines.ContinuationInterceptor import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.coroutineContext import kotlin.coroutines.resume /** * Returns the transaction dispatcher if we are on a transaction, or the database dispatchers. */ internal suspend fun AndroidDatabaseHandler.getCurrentDatabaseContext(): CoroutineContext { return coroutineContext[TransactionElement]?.transactionDispatcher ?: queryDispatcher } /** * Calls the specified suspending [block] in a database transaction. The transaction will be * marked as successful unless an exception is thrown in the suspending [block] or the coroutine * is cancelled. * * SQLDelight will only perform at most one transaction at a time, additional transactions are queued * and executed on a first come, first serve order. * * Performing blocking database operations is not permitted in a coroutine scope other than the * one received by the suspending block. It is recommended that all [Dao] function invoked within * the [block] be suspending functions. * * The dispatcher used to execute the given [block] will utilize threads from SQLDelight's query executor. */ internal suspend fun AndroidDatabaseHandler.withTransaction(block: suspend () -> T): T { // Use inherited transaction context if available, this allows nested suspending transactions. val transactionContext = coroutineContext[TransactionElement]?.transactionDispatcher ?: createTransactionContext() return withContext(transactionContext) { val transactionElement = coroutineContext[TransactionElement]!! transactionElement.acquire() try { db.transactionWithResult { runBlocking(transactionContext) { block() } } } finally { transactionElement.release() } } } /** * Creates a [CoroutineContext] for performing database operations within a coroutine transaction. * * The context is a combination of a dispatcher, a [TransactionElement] and a thread local element. * * * The dispatcher will dispatch coroutines to a single thread that is taken over from the SQLDelight * query executor. If the coroutine context is switched, suspending DAO functions will be able to * dispatch to the transaction thread. * * * The [TransactionElement] serves as an indicator for inherited context, meaning, if there is a * switch of context, suspending DAO methods will be able to use the indicator to dispatch the * database operation to the transaction thread. * * * The thread local element serves as a second indicator and marks threads that are used to * execute coroutines within the coroutine transaction, more specifically it allows us to identify * if a blocking DAO method is invoked within the transaction coroutine. Never assign meaning to * this value, for now all we care is if its present or not. */ private suspend fun AndroidDatabaseHandler.createTransactionContext(): CoroutineContext { val controlJob = Job() // make sure to tie the control job to this context to avoid blocking the transaction if // context get cancelled before we can even start using this job. Otherwise, the acquired // transaction thread will forever wait for the controlJob to be cancelled. // see b/148181325 coroutineContext[Job]?.invokeOnCompletion { controlJob.cancel() } val dispatcher = transactionDispatcher.acquireTransactionThread(controlJob) val transactionElement = TransactionElement(controlJob, dispatcher) val threadLocalElement = suspendingTransactionId.asContextElement(System.identityHashCode(controlJob)) return dispatcher + transactionElement + threadLocalElement } /** * Acquires a thread from the executor and returns a [ContinuationInterceptor] to dispatch * coroutines to the acquired thread. The [controlJob] is used to control the release of the * thread by cancelling the job. */ private suspend fun CoroutineDispatcher.acquireTransactionThread( controlJob: Job, ): ContinuationInterceptor { return suspendCancellableCoroutine { continuation -> continuation.invokeOnCancellation { // We got cancelled while waiting to acquire a thread, we can't stop our attempt to // acquire a thread, but we can cancel the controlling job so once it gets acquired it // is quickly released. controlJob.cancel() } try { dispatch(EmptyCoroutineContext) { runBlocking { // Thread acquired, resume coroutine continuation.resume(coroutineContext[ContinuationInterceptor]!!) controlJob.join() } } } catch (ex: RejectedExecutionException) { // Couldn't acquire a thread, cancel coroutine continuation.cancel( IllegalStateException( "Unable to acquire a thread to perform the database transaction", ex, ), ) } } } /** * A [CoroutineContext.Element] that indicates there is an on-going database transaction. */ @OptIn(ExperimentalAtomicApi::class) private class TransactionElement( private val transactionThreadControlJob: Job, val transactionDispatcher: ContinuationInterceptor, ) : CoroutineContext.Element { companion object Key : CoroutineContext.Key override val key: CoroutineContext.Key get() = TransactionElement /** * Number of transactions (including nested ones) started with this element. * Call [acquire] to increase the count and [release] to decrease it. If the count reaches zero * when [release] is invoked then the transaction job is cancelled and the transaction thread * is released. */ private val referenceCount = AtomicInt(0) fun acquire() { referenceCount.incrementAndFetch() } fun release() { val count = referenceCount.decrementAndFetch() if (count < 0) { throw IllegalStateException("Transaction was never started or was already released") } else if (count == 0) { // Cancel the job that controls the transaction thread, causing it to be released. transactionThreadControlJob.cancel() } } } ================================================ FILE: data/src/main/java/tachiyomi/data/category/CategoryRepositoryImpl.kt ================================================ package tachiyomi.data.category import kotlinx.coroutines.flow.Flow import tachiyomi.data.Database import tachiyomi.data.DatabaseHandler import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class CategoryRepositoryImpl( private val handler: DatabaseHandler, ) : CategoryRepository { override suspend fun get(id: Long): Category? { return handler.awaitOneOrNull { categoriesQueries.getCategory(id, ::mapCategory) } } override suspend fun getAll(): List { return handler.awaitList { categoriesQueries.getCategories(::mapCategory) } } override fun getAllAsFlow(): Flow> { return handler.subscribeToList { categoriesQueries.getCategories(::mapCategory) } } override suspend fun getCategoriesByMangaId(mangaId: Long): List { return handler.awaitList { categoriesQueries.getCategoriesByMangaId(mangaId, ::mapCategory) } } override fun getCategoriesByMangaIdAsFlow(mangaId: Long): Flow> { return handler.subscribeToList { categoriesQueries.getCategoriesByMangaId(mangaId, ::mapCategory) } } override suspend fun insert(category: Category) { handler.await { categoriesQueries.insert( name = category.name, order = category.order, flags = category.flags, ) } } override suspend fun updatePartial(update: CategoryUpdate) { handler.await { updatePartialBlocking(update) } } override suspend fun updatePartial(updates: List) { handler.await(inTransaction = true) { for (update in updates) { updatePartialBlocking(update) } } } private fun Database.updatePartialBlocking(update: CategoryUpdate) { categoriesQueries.update( name = update.name, order = update.order, flags = update.flags, categoryId = update.id, ) } override suspend fun updateAllFlags(flags: Long?) { handler.await { categoriesQueries.updateAllFlags(flags) } } override suspend fun delete(categoryId: Long) { handler.await { categoriesQueries.delete( categoryId = categoryId, ) } } private fun mapCategory( id: Long, name: String, order: Long, flags: Long, ): Category { return Category( id = id, name = name, order = order, flags = flags, ) } } ================================================ FILE: data/src/main/java/tachiyomi/data/chapter/ChapterRepositoryImpl.kt ================================================ package tachiyomi.data.chapter import kotlinx.coroutines.flow.Flow import logcat.LogPriority import tachiyomi.core.common.util.lang.toLong import tachiyomi.core.common.util.system.logcat import tachiyomi.data.DatabaseHandler import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.ChapterUpdate import tachiyomi.domain.chapter.repository.ChapterRepository class ChapterRepositoryImpl( private val handler: DatabaseHandler, ) : ChapterRepository { override suspend fun addAll(chapters: List): List { return try { handler.await(inTransaction = true) { chapters.map { chapter -> chaptersQueries.insert( chapter.mangaId, chapter.url, chapter.name, chapter.scanlator, chapter.read, chapter.bookmark, chapter.lastPageRead, chapter.chapterNumber, chapter.sourceOrder, chapter.dateFetch, chapter.dateUpload, chapter.version, ) val lastInsertId = chaptersQueries.selectLastInsertedRowId().executeAsOne() chapter.copy(id = lastInsertId) } } } catch (e: Exception) { logcat(LogPriority.ERROR, e) emptyList() } } override suspend fun update(chapterUpdate: ChapterUpdate) { partialUpdate(chapterUpdate) } override suspend fun updateAll(chapterUpdates: List) { partialUpdate(*chapterUpdates.toTypedArray()) } private suspend fun partialUpdate(vararg chapterUpdates: ChapterUpdate) { handler.await(inTransaction = true) { chapterUpdates.forEach { chapterUpdate -> chaptersQueries.update( mangaId = chapterUpdate.mangaId, url = chapterUpdate.url, name = chapterUpdate.name, scanlator = chapterUpdate.scanlator, read = chapterUpdate.read, bookmark = chapterUpdate.bookmark, lastPageRead = chapterUpdate.lastPageRead, chapterNumber = chapterUpdate.chapterNumber, sourceOrder = chapterUpdate.sourceOrder, dateFetch = chapterUpdate.dateFetch, dateUpload = chapterUpdate.dateUpload, chapterId = chapterUpdate.id, version = chapterUpdate.version, isSyncing = 0, ) } } } override suspend fun removeChaptersWithIds(chapterIds: List) { try { handler.await { chaptersQueries.removeChaptersWithIds(chapterIds) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } override suspend fun getChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean): List { return handler.awaitList { chaptersQueries.getChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ::mapChapter) } } override suspend fun getScanlatorsByMangaId(mangaId: Long): List { return handler.awaitList { chaptersQueries.getScanlatorsByMangaId(mangaId) { it.orEmpty() } } } override fun getScanlatorsByMangaIdAsFlow(mangaId: Long): Flow> { return handler.subscribeToList { chaptersQueries.getScanlatorsByMangaId(mangaId) { it.orEmpty() } } } override suspend fun getBookmarkedChaptersByMangaId(mangaId: Long): List { return handler.awaitList { chaptersQueries.getBookmarkedChaptersByMangaId( mangaId, ::mapChapter, ) } } override suspend fun getChapterById(id: Long): Chapter? { return handler.awaitOneOrNull { chaptersQueries.getChapterById(id, ::mapChapter) } } override suspend fun getChapterByMangaIdAsFlow(mangaId: Long, applyScanlatorFilter: Boolean): Flow> { return handler.subscribeToList { chaptersQueries.getChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ::mapChapter) } } override suspend fun getChapterByUrlAndMangaId(url: String, mangaId: Long): Chapter? { return handler.awaitOneOrNull { chaptersQueries.getChapterByUrlAndMangaId( url, mangaId, ::mapChapter, ) } } private fun mapChapter( id: Long, mangaId: Long, url: String, name: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, chapterNumber: Double, sourceOrder: Long, dateFetch: Long, dateUpload: Long, lastModifiedAt: Long, version: Long, @Suppress("UNUSED_PARAMETER") isSyncing: Long, ): Chapter = Chapter( id = id, mangaId = mangaId, read = read, bookmark = bookmark, lastPageRead = lastPageRead, dateFetch = dateFetch, sourceOrder = sourceOrder, url = url, name = name, dateUpload = dateUpload, chapterNumber = chapterNumber, scanlator = scanlator, lastModifiedAt = lastModifiedAt, version = version, ) } ================================================ FILE: data/src/main/java/tachiyomi/data/chapter/ChapterSanitizer.kt ================================================ package tachiyomi.data.chapter object ChapterSanitizer { fun String.sanitize(title: String): String { return trim() .removePrefix(title) .trim(*CHAPTER_TRIM_CHARS) } private val CHAPTER_TRIM_CHARS = arrayOf( // Whitespace ' ', '\u0009', '\u000A', '\u000B', '\u000C', '\u000D', '\u0020', '\u0085', '\u00A0', '\u1680', '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', '\u205F', '\u3000', // Separators '-', '_', ',', ':', ).toCharArray() } ================================================ FILE: data/src/main/java/tachiyomi/data/history/HistoryMapper.kt ================================================ package tachiyomi.data.history import tachiyomi.domain.history.model.History import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.manga.model.MangaCover import java.util.Date object HistoryMapper { fun mapHistory( id: Long, chapterId: Long, readAt: Date?, readDuration: Long, ): History = History( id = id, chapterId = chapterId, readAt = readAt, readDuration = readDuration, ) fun mapHistoryWithRelations( historyId: Long, mangaId: Long, chapterId: Long, title: String, thumbnailUrl: String?, sourceId: Long, isFavorite: Boolean, coverLastModified: Long, chapterNumber: Double, readAt: Date?, readDuration: Long, ): HistoryWithRelations = HistoryWithRelations( id = historyId, chapterId = chapterId, mangaId = mangaId, title = title, chapterNumber = chapterNumber, readAt = readAt, readDuration = readDuration, coverData = MangaCover( mangaId = mangaId, sourceId = sourceId, isMangaFavorite = isFavorite, url = thumbnailUrl, lastModified = coverLastModified, ), ) } ================================================ FILE: data/src/main/java/tachiyomi/data/history/HistoryRepositoryImpl.kt ================================================ package tachiyomi.data.history import kotlinx.coroutines.flow.Flow import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.data.DatabaseHandler import tachiyomi.domain.history.model.History import tachiyomi.domain.history.model.HistoryUpdate import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.history.repository.HistoryRepository class HistoryRepositoryImpl( private val handler: DatabaseHandler, ) : HistoryRepository { override fun getHistory(query: String): Flow> { return handler.subscribeToList { historyViewQueries.history(query, HistoryMapper::mapHistoryWithRelations) } } override suspend fun getLastHistory(): HistoryWithRelations? { return handler.awaitOneOrNull { historyViewQueries.getLatestHistory(HistoryMapper::mapHistoryWithRelations) } } override suspend fun getTotalReadDuration(): Long { return handler.awaitOne { historyQueries.getReadDuration() } } override suspend fun getHistoryByMangaId(mangaId: Long): List { return handler.awaitList { historyQueries.getHistoryByMangaId(mangaId, HistoryMapper::mapHistory) } } override suspend fun resetHistory(historyId: Long) { try { handler.await { historyQueries.resetHistoryById(historyId) } } catch (e: Exception) { logcat(LogPriority.ERROR, throwable = e) } } override suspend fun resetHistoryByMangaId(mangaId: Long) { try { handler.await { historyQueries.resetHistoryByMangaId(mangaId) } } catch (e: Exception) { logcat(LogPriority.ERROR, throwable = e) } } override suspend fun deleteAllHistory(): Boolean { return try { handler.await { historyQueries.removeAllHistory() } true } catch (e: Exception) { logcat(LogPriority.ERROR, throwable = e) false } } override suspend fun upsertHistory(historyUpdate: HistoryUpdate) { try { handler.await { historyQueries.upsert( historyUpdate.chapterId, historyUpdate.readAt, historyUpdate.sessionReadDuration, ) } } catch (e: Exception) { logcat(LogPriority.ERROR, throwable = e) } } } ================================================ FILE: data/src/main/java/tachiyomi/data/manga/MangaMapper.kt ================================================ package tachiyomi.data.manga import eu.kanade.tachiyomi.source.model.UpdateStrategy import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaWithChapterCount object MangaMapper { fun mapManga( id: Long, source: Long, url: String, artist: String?, author: String?, description: String?, genre: List?, title: String, status: Long, thumbnailUrl: String?, favorite: Boolean, lastUpdate: Long?, nextUpdate: Long?, initialized: Boolean, viewerFlags: Long, chapterFlags: Long, coverLastModified: Long, dateAdded: Long, updateStrategy: UpdateStrategy, calculateInterval: Long, lastModifiedAt: Long, favoriteModifiedAt: Long?, version: Long, @Suppress("UNUSED_PARAMETER") isSyncing: Long, notes: String, ): Manga = Manga( id = id, source = source, favorite = favorite, lastUpdate = lastUpdate ?: 0, nextUpdate = nextUpdate ?: 0, fetchInterval = calculateInterval.toInt(), dateAdded = dateAdded, viewerFlags = viewerFlags, chapterFlags = chapterFlags, coverLastModified = coverLastModified, url = url, title = title, artist = artist, author = author, description = description, genre = genre, status = status, thumbnailUrl = thumbnailUrl, updateStrategy = updateStrategy, initialized = initialized, lastModifiedAt = lastModifiedAt, favoriteModifiedAt = favoriteModifiedAt, version = version, notes = notes, ) fun mapLibraryManga( id: Long, source: Long, url: String, artist: String?, author: String?, description: String?, genre: List?, title: String, status: Long, thumbnailUrl: String?, favorite: Boolean, lastUpdate: Long?, nextUpdate: Long?, initialized: Boolean, viewerFlags: Long, chapterFlags: Long, coverLastModified: Long, dateAdded: Long, updateStrategy: UpdateStrategy, calculateInterval: Long, lastModifiedAt: Long, favoriteModifiedAt: Long?, version: Long, isSyncing: Long, notes: String, totalCount: Long, readCount: Double, latestUpload: Long, chapterFetchedAt: Long, lastRead: Long, bookmarkCount: Double, categories: String, ): LibraryManga = LibraryManga( manga = mapManga( id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, nextUpdate, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, updateStrategy, calculateInterval, lastModifiedAt, favoriteModifiedAt, version, isSyncing, notes, ), categories = categories.split(",").map { it.toLong() }, totalChapters = totalCount, readCount = readCount.toLong(), bookmarkCount = bookmarkCount.toLong(), latestUpload = latestUpload, chapterFetchedAt = chapterFetchedAt, lastRead = lastRead, ) fun mapMangaWithChapterCount( id: Long, source: Long, url: String, artist: String?, author: String?, description: String?, genre: List?, title: String, status: Long, thumbnailUrl: String?, favorite: Boolean, lastUpdate: Long?, nextUpdate: Long?, initialized: Boolean, viewerFlags: Long, chapterFlags: Long, coverLastModified: Long, dateAdded: Long, updateStrategy: UpdateStrategy, calculateInterval: Long, lastModifiedAt: Long, favoriteModifiedAt: Long?, version: Long, isSyncing: Long, notes: String, totalCount: Long, ): MangaWithChapterCount = MangaWithChapterCount( manga = mapManga( id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, nextUpdate, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, updateStrategy, calculateInterval, lastModifiedAt, favoriteModifiedAt, version, isSyncing, notes, ), chapterCount = totalCount, ) } ================================================ FILE: data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt ================================================ package tachiyomi.data.manga import kotlinx.coroutines.flow.Flow import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.data.DatabaseHandler import tachiyomi.data.StringListColumnAdapter import tachiyomi.data.UpdateStrategyColumnAdapter import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.model.MangaWithChapterCount import tachiyomi.domain.manga.repository.MangaRepository import java.time.LocalDate import java.time.ZoneId class MangaRepositoryImpl( private val handler: DatabaseHandler, ) : MangaRepository { override suspend fun getMangaById(id: Long): Manga { return handler.awaitOne { mangasQueries.getMangaById(id, MangaMapper::mapManga) } } override suspend fun getMangaByIdAsFlow(id: Long): Flow { return handler.subscribeToOne { mangasQueries.getMangaById(id, MangaMapper::mapManga) } } override suspend fun getMangaByUrlAndSourceId(url: String, sourceId: Long): Manga? { return handler.awaitOneOrNull { mangasQueries.getMangaByUrlAndSource( url, sourceId, MangaMapper::mapManga, ) } } override fun getMangaByUrlAndSourceIdAsFlow(url: String, sourceId: Long): Flow { return handler.subscribeToOneOrNull { mangasQueries.getMangaByUrlAndSource( url, sourceId, MangaMapper::mapManga, ) } } override suspend fun getFavorites(): List { return handler.awaitList { mangasQueries.getFavorites(MangaMapper::mapManga) } } override suspend fun getReadMangaNotInLibrary(): List { return handler.awaitList { mangasQueries.getReadMangaNotInLibrary(MangaMapper::mapManga) } } override suspend fun getLibraryManga(): List { return handler.awaitList { libraryViewQueries.library(MangaMapper::mapLibraryManga) } } override fun getLibraryMangaAsFlow(): Flow> { return handler.subscribeToList { libraryViewQueries.library(MangaMapper::mapLibraryManga) } } override fun getFavoritesBySourceId(sourceId: Long): Flow> { return handler.subscribeToList { mangasQueries.getFavoriteBySourceId(sourceId, MangaMapper::mapManga) } } override suspend fun getDuplicateLibraryManga(id: Long, title: String): List { return handler.awaitList { mangasQueries.getDuplicateLibraryManga(id, title, MangaMapper::mapMangaWithChapterCount) } } override suspend fun getUpcomingManga(statuses: Set): Flow> { val epochMillis = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toEpochSecond() * 1000 return handler.subscribeToList { mangasQueries.getUpcomingManga(epochMillis, statuses, MangaMapper::mapManga) } } override suspend fun resetViewerFlags(): Boolean { return try { handler.await { mangasQueries.resetViewerFlags() } true } catch (e: Exception) { logcat(LogPriority.ERROR, e) false } } override suspend fun setMangaCategories(mangaId: Long, categoryIds: List) { handler.await(inTransaction = true) { mangas_categoriesQueries.deleteMangaCategoryByMangaId(mangaId) categoryIds.map { categoryId -> mangas_categoriesQueries.insert(mangaId, categoryId) } } } override suspend fun update(update: MangaUpdate): Boolean { return try { partialUpdate(update) true } catch (e: Exception) { logcat(LogPriority.ERROR, e) false } } override suspend fun updateAll(mangaUpdates: List): Boolean { return try { partialUpdate(*mangaUpdates.toTypedArray()) true } catch (e: Exception) { logcat(LogPriority.ERROR, e) false } } override suspend fun insertNetworkManga(manga: List): List { return handler.await(inTransaction = true) { manga.map { mangasQueries.insertNetworkManga( source = it.source, url = it.url, artist = it.artist, author = it.author, description = it.description, genre = it.genre, title = it.title, status = it.status, thumbnailUrl = it.thumbnailUrl, favorite = it.favorite, lastUpdate = it.lastUpdate, nextUpdate = it.nextUpdate, calculateInterval = it.fetchInterval.toLong(), initialized = it.initialized, viewerFlags = it.viewerFlags, chapterFlags = it.chapterFlags, coverLastModified = it.coverLastModified, dateAdded = it.dateAdded, updateStrategy = it.updateStrategy, version = it.version, updateTitle = it.title.isNotBlank(), updateCover = !it.thumbnailUrl.isNullOrBlank(), updateDetails = it.initialized, mapper = MangaMapper::mapManga, ) .executeAsOne() } } } private suspend fun partialUpdate(vararg mangaUpdates: MangaUpdate) { handler.await(inTransaction = true) { mangaUpdates.forEach { value -> mangasQueries.update( source = value.source, url = value.url, artist = value.artist, author = value.author, description = value.description, genre = value.genre?.let(StringListColumnAdapter::encode), title = value.title, status = value.status, thumbnailUrl = value.thumbnailUrl, favorite = value.favorite, lastUpdate = value.lastUpdate, nextUpdate = value.nextUpdate, calculateInterval = value.fetchInterval?.toLong(), initialized = value.initialized, viewer = value.viewerFlags, chapterFlags = value.chapterFlags, coverLastModified = value.coverLastModified, dateAdded = value.dateAdded, mangaId = value.id, updateStrategy = value.updateStrategy?.let(UpdateStrategyColumnAdapter::encode), version = value.version, isSyncing = 0, notes = value.notes, ) } } } } ================================================ FILE: data/src/main/java/tachiyomi/data/release/GithubRelease.kt ================================================ package tachiyomi.data.release import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable /** * Contains information about the latest release from GitHub. */ @Serializable data class GithubRelease( @SerialName("tag_name") val version: String, @SerialName("body") val info: String, @SerialName("html_url") val releaseLink: String, @SerialName("assets") val assets: List, ) /** * Asset class containing asset name and download url. */ @Serializable data class GitHubAsset( val name: String, @SerialName("browser_download_url") val downloadLink: String, ) ================================================ FILE: data/src/main/java/tachiyomi/data/release/ReleaseServiceImpl.kt ================================================ package tachiyomi.data.release import android.os.Build import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import tachiyomi.domain.release.interactor.GetApplicationRelease import tachiyomi.domain.release.model.Release import tachiyomi.domain.release.service.ReleaseService class ReleaseServiceImpl( private val networkService: NetworkHelper, private val json: Json, ) : ReleaseService { override suspend fun latest(arguments: GetApplicationRelease.Arguments): Release? { val release = with(json) { networkService.client .newCall(GET("https://api.github.com/repos/${arguments.repository}/releases/latest")) .awaitSuccess() .parseAs() } val downloadLink = getDownloadLink(release = release, isFoss = arguments.isFoss) ?: return null return Release( version = release.version, info = release.info.substringBeforeLast("").replace(gitHubUsernameMentionRegex) { mention -> "[${mention.value}](https://github.com/${mention.value.substring(1)})" }, releaseLink = release.releaseLink, downloadLink = downloadLink, ) } private fun getDownloadLink(release: GithubRelease, isFoss: Boolean): String? { val map = release.assets.associate { asset -> BUILD_TYPES.find { "-$it" in asset.name } to asset.downloadLink } return if (!isFoss) { map[Build.SUPPORTED_ABIS[0]] ?: map[null] } else { map[FOSS] } } companion object { private const val FOSS = "foss" private val BUILD_TYPES = listOf(FOSS, "arm64-v8a", "armeabi-v7a", "x86_64", "x86") /** * Regular expression that matches a mention to a valid GitHub username, like it's * done in GitHub Flavored Markdown. It follows these constraints: * * - Alphanumeric with single hyphens (no consecutive hyphens) * - Cannot begin or end with a hyphen * - Max length of 39 characters * * Reference: https://stackoverflow.com/a/30281147 */ private val gitHubUsernameMentionRegex = """\B@([a-z0-9](?:-(?=[a-z0-9])|[a-z0-9]){0,38}(?<=[a-z0-9]))""" .toRegex(RegexOption.IGNORE_CASE) } } ================================================ FILE: data/src/main/java/tachiyomi/data/source/SourcePagingSource.kt ================================================ package tachiyomi.data.source import androidx.paging.PagingState import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import mihon.domain.manga.model.toDomainManga import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.manga.interactor.NetworkToLocalManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.repository.SourcePagingSource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class SourceSearchPagingSource( source: CatalogueSource, private val query: String, private val filters: FilterList, ) : BaseSourcePagingSource(source) { override suspend fun requestNextPage(currentPage: Int): MangasPage { return source.getSearchManga(currentPage, query, filters) } } class SourcePopularPagingSource(source: CatalogueSource) : BaseSourcePagingSource(source) { override suspend fun requestNextPage(currentPage: Int): MangasPage { return source.getPopularManga(currentPage) } } class SourceLatestPagingSource(source: CatalogueSource) : BaseSourcePagingSource(source) { override suspend fun requestNextPage(currentPage: Int): MangasPage { return source.getLatestUpdates(currentPage) } } abstract class BaseSourcePagingSource( protected val source: CatalogueSource, private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), ) : SourcePagingSource() { private val seenManga = hashSetOf() abstract suspend fun requestNextPage(currentPage: Int): MangasPage override suspend fun load(params: LoadParams): LoadResult { val page = params.key ?: 1 return try { val mangasPage = withIOContext { requestNextPage(page.toInt()) .takeIf { it.mangas.isNotEmpty() } ?: throw NoResultsException() } val manga = mangasPage.mangas .map { it.toDomainManga(source.id) } .filter { seenManga.add(it.url) } .let { networkToLocalManga(it) } LoadResult.Page( data = manga, prevKey = null, nextKey = if (mangasPage.hasNextPage) page + 1 else null, ) } catch (e: Exception) { LoadResult.Error(e) } } override fun getRefreshKey(state: PagingState): Long? { return state.anchorPosition?.let { anchorPosition -> val anchorPage = state.closestPageToPosition(anchorPosition) anchorPage?.prevKey ?: anchorPage?.nextKey } } } class NoResultsException : Exception() ================================================ FILE: data/src/main/java/tachiyomi/data/source/SourceRepositoryImpl.kt ================================================ package tachiyomi.data.source import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import tachiyomi.data.DatabaseHandler import tachiyomi.domain.source.model.SourceWithCount import tachiyomi.domain.source.model.StubSource import tachiyomi.domain.source.repository.SourcePagingSource import tachiyomi.domain.source.repository.SourceRepository import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.source.model.Source as DomainSource class SourceRepositoryImpl( private val sourceManager: SourceManager, private val handler: DatabaseHandler, ) : SourceRepository { override fun getSources(): Flow> { return sourceManager.catalogueSources.map { sources -> sources.map { mapSourceToDomainSource(it).copy( supportsLatest = it.supportsLatest, ) } } } override fun getOnlineSources(): Flow> { return sourceManager.catalogueSources.map { sources -> sources .filterIsInstance() .map(::mapSourceToDomainSource) } } override fun getSourcesWithFavoriteCount(): Flow>> { return combine( handler.subscribeToList { mangasQueries.getSourceIdWithFavoriteCount() }, sourceManager.catalogueSources, ) { sourceIdWithFavoriteCount, _ -> sourceIdWithFavoriteCount } .map { it.map { (sourceId, count) -> val source = sourceManager.getOrStub(sourceId) val domainSource = mapSourceToDomainSource(source).copy( isStub = source is StubSource, ) domainSource to count } } } override fun getSourcesWithNonLibraryManga(): Flow> { val sourceIdWithNonLibraryManga = handler.subscribeToList { mangasQueries.getSourceIdsWithNonLibraryManga() } return sourceIdWithNonLibraryManga.map { sourceId -> sourceId.map { (sourceId, count) -> val source = sourceManager.getOrStub(sourceId) val domainSource = mapSourceToDomainSource(source).copy( isStub = source is StubSource, ) SourceWithCount(domainSource, count) } } } override fun search( sourceId: Long, query: String, filterList: FilterList, ): SourcePagingSource { val source = sourceManager.get(sourceId) as CatalogueSource return SourceSearchPagingSource(source, query, filterList) } override fun getPopular(sourceId: Long): SourcePagingSource { val source = sourceManager.get(sourceId) as CatalogueSource return SourcePopularPagingSource(source) } override fun getLatest(sourceId: Long): SourcePagingSource { val source = sourceManager.get(sourceId) as CatalogueSource return SourceLatestPagingSource(source) } private fun mapSourceToDomainSource(source: Source): DomainSource = DomainSource( id = source.id, lang = source.lang, name = source.name, supportsLatest = false, isStub = false, ) } ================================================ FILE: data/src/main/java/tachiyomi/data/source/StubSourceRepositoryImpl.kt ================================================ package tachiyomi.data.source import kotlinx.coroutines.flow.Flow import tachiyomi.data.DatabaseHandler import tachiyomi.domain.source.model.StubSource import tachiyomi.domain.source.repository.StubSourceRepository class StubSourceRepositoryImpl( private val handler: DatabaseHandler, ) : StubSourceRepository { override fun subscribeAll(): Flow> { return handler.subscribeToList { sourcesQueries.findAll(::mapStubSource) } } override suspend fun getStubSource(id: Long): StubSource? { return handler.awaitOneOrNull { sourcesQueries.findOne(id, ::mapStubSource) } } override suspend fun upsertStubSource(id: Long, lang: String, name: String) { handler.await { sourcesQueries.upsert(id, lang, name) } } private fun mapStubSource( id: Long, lang: String, name: String, ): StubSource = StubSource(id = id, lang = lang, name = name) } ================================================ FILE: data/src/main/java/tachiyomi/data/track/TrackMapper.kt ================================================ package tachiyomi.data.track import tachiyomi.domain.track.model.Track object TrackMapper { fun mapTrack( id: Long, mangaId: Long, syncId: Long, remoteId: Long, libraryId: Long?, title: String, lastChapterRead: Double, totalChapters: Long, status: Long, score: Double, remoteUrl: String, startDate: Long, finishDate: Long, private: Boolean, ): Track = Track( id = id, mangaId = mangaId, trackerId = syncId, remoteId = remoteId, libraryId = libraryId, title = title, lastChapterRead = lastChapterRead, totalChapters = totalChapters, status = status, score = score, remoteUrl = remoteUrl, startDate = startDate, finishDate = finishDate, private = private, ) } ================================================ FILE: data/src/main/java/tachiyomi/data/track/TrackRepositoryImpl.kt ================================================ package tachiyomi.data.track import kotlinx.coroutines.flow.Flow import tachiyomi.data.DatabaseHandler import tachiyomi.domain.track.model.Track import tachiyomi.domain.track.repository.TrackRepository class TrackRepositoryImpl( private val handler: DatabaseHandler, ) : TrackRepository { override suspend fun getTrackById(id: Long): Track? { return handler.awaitOneOrNull { manga_syncQueries.getTrackById(id, TrackMapper::mapTrack) } } override suspend fun getTracksByMangaId(mangaId: Long): List { return handler.awaitList { manga_syncQueries.getTracksByMangaId(mangaId, TrackMapper::mapTrack) } } override fun getTracksAsFlow(): Flow> { return handler.subscribeToList { manga_syncQueries.getTracks(TrackMapper::mapTrack) } } override fun getTracksByMangaIdAsFlow(mangaId: Long): Flow> { return handler.subscribeToList { manga_syncQueries.getTracksByMangaId(mangaId, TrackMapper::mapTrack) } } override suspend fun delete(mangaId: Long, trackerId: Long) { handler.await { manga_syncQueries.delete( mangaId = mangaId, syncId = trackerId, ) } } override suspend fun insert(track: Track) { insertValues(track) } override suspend fun insertAll(tracks: List) { insertValues(*tracks.toTypedArray()) } private suspend fun insertValues(vararg tracks: Track) { handler.await(inTransaction = true) { tracks.forEach { mangaTrack -> manga_syncQueries.insert( mangaId = mangaTrack.mangaId, syncId = mangaTrack.trackerId, remoteId = mangaTrack.remoteId, libraryId = mangaTrack.libraryId, title = mangaTrack.title, lastChapterRead = mangaTrack.lastChapterRead, totalChapters = mangaTrack.totalChapters, status = mangaTrack.status, score = mangaTrack.score, remoteUrl = mangaTrack.remoteUrl, startDate = mangaTrack.startDate, finishDate = mangaTrack.finishDate, private = mangaTrack.private, ) } } } } ================================================ FILE: data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt ================================================ package tachiyomi.data.updates import kotlinx.coroutines.flow.Flow import tachiyomi.core.common.util.lang.toLong import tachiyomi.data.DatabaseHandler import tachiyomi.domain.manga.model.MangaCover import tachiyomi.domain.updates.model.UpdatesWithRelations import tachiyomi.domain.updates.repository.UpdatesRepository class UpdatesRepositoryImpl( private val databaseHandler: DatabaseHandler, ) : UpdatesRepository { override suspend fun awaitWithRead( read: Boolean, after: Long, limit: Long, ): List { return databaseHandler.awaitList { updatesViewQueries.getUpdatesByReadStatus( read = read, after = after, limit = limit, mapper = ::mapUpdatesWithRelations, ) } } override fun subscribeAll( after: Long, limit: Long, unread: Boolean?, started: Boolean?, bookmarked: Boolean?, hideExcludedScanlators: Boolean, ): Flow> { return databaseHandler.subscribeToList { updatesViewQueries.getRecentUpdatesWithFilters( after = after, limit = limit, // invert because unread in Kotlin -> read column in SQL read = unread?.let { !it }, started = started?.toLong(), bookmarked = bookmarked, hideExcludedScanlators = hideExcludedScanlators.toLong(), mapper = ::mapUpdatesWithRelations, ) } } override fun subscribeWithRead( read: Boolean, after: Long, limit: Long, ): Flow> { return databaseHandler.subscribeToList { updatesViewQueries.getUpdatesByReadStatus( read = read, after = after, limit = limit, mapper = ::mapUpdatesWithRelations, ) } } private fun mapUpdatesWithRelations( mangaId: Long, mangaTitle: String, chapterId: Long, chapterName: String, scanlator: String?, chapterUrl: String, read: Boolean, bookmark: Boolean, lastPageRead: Long, sourceId: Long, favorite: Boolean, thumbnailUrl: String?, coverLastModified: Long, dateUpload: Long, dateFetch: Long, excludedScanlator: String?, ): UpdatesWithRelations = UpdatesWithRelations( mangaId = mangaId, mangaTitle = mangaTitle, chapterId = chapterId, chapterName = chapterName, scanlator = scanlator, chapterUrl = chapterUrl, read = read, bookmark = bookmark, lastPageRead = lastPageRead, sourceId = sourceId, dateFetch = dateFetch, coverData = MangaCover( mangaId = mangaId, sourceId = sourceId, isMangaFavorite = favorite, url = thumbnailUrl, lastModified = coverLastModified, ), ) } ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/categories.sq ================================================ CREATE TABLE categories( _id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL, sort INTEGER NOT NULL, flags INTEGER NOT NULL ); -- Insert system category INSERT OR IGNORE INTO categories(_id, name, sort, flags) VALUES (0, "", -1, 0); -- Disallow deletion of default category CREATE TRIGGER IF NOT EXISTS system_category_delete_trigger BEFORE DELETE ON categories BEGIN SELECT CASE WHEN old._id <= 0 THEN RAISE(ABORT, "System category can't be deleted") END; END; getCategory: SELECT * FROM categories WHERE _id = :id LIMIT 1; getCategories: SELECT _id AS id, name, sort AS `order`, flags FROM categories ORDER BY sort; getCategoriesByMangaId: SELECT C._id AS id, C.name, C.sort AS `order`, C.flags FROM categories C JOIN mangas_categories MC ON C._id = MC.category_id WHERE MC.manga_id = :mangaId; insert: INSERT INTO categories(name, sort, flags) VALUES (:name, :order, :flags); delete: DELETE FROM categories WHERE _id = :categoryId; update: UPDATE categories SET name = coalesce(:name, name), sort = coalesce(:order, sort), flags = coalesce(:flags, flags) WHERE _id = :categoryId; updateAllFlags: UPDATE categories SET flags = coalesce(?, flags); selectLastInsertedRowId: SELECT last_insert_rowid(); ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/chapters.sq ================================================ import kotlin.Boolean; CREATE TABLE chapters( _id INTEGER NOT NULL PRIMARY KEY, manga_id INTEGER NOT NULL, url TEXT NOT NULL, name TEXT NOT NULL, scanlator TEXT, read INTEGER AS Boolean NOT NULL, bookmark INTEGER AS Boolean NOT NULL, last_page_read INTEGER NOT NULL, chapter_number REAL NOT NULL, source_order INTEGER NOT NULL, date_fetch INTEGER NOT NULL, date_upload INTEGER NOT NULL, last_modified_at INTEGER NOT NULL DEFAULT 0, version INTEGER NOT NULL DEFAULT 0, is_syncing INTEGER NOT NULL DEFAULT 0, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); CREATE INDEX chapters_manga_id_index ON chapters(manga_id); CREATE INDEX chapters_unread_by_manga_index ON chapters(manga_id, read) WHERE read = 0; CREATE INDEX idx_chapters_url ON chapters(url); CREATE TRIGGER update_last_modified_at_chapters AFTER UPDATE ON chapters FOR EACH ROW BEGIN UPDATE chapters SET last_modified_at = strftime('%s', 'now') WHERE _id = new._id; END; CREATE TRIGGER update_chapter_and_manga_version AFTER UPDATE ON chapters WHEN new.is_syncing = 0 AND ( new.read != old.read OR new.bookmark != old.bookmark OR new.last_page_read != old.last_page_read ) BEGIN -- Update the chapter version UPDATE chapters SET version = version + 1 WHERE _id = new._id; -- Update the manga version UPDATE mangas SET version = version + 1 WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0; END; getChapterById: SELECT * FROM chapters WHERE _id = :id; getChaptersByMangaId: SELECT C.* FROM chapters C LEFT JOIN excluded_scanlators ES ON C.manga_id = ES.manga_id AND C.scanlator = ES.scanlator WHERE C.manga_id = :mangaId AND ( :applyScanlatorFilter = 0 OR ES.scanlator IS NULL ); getScanlatorsByMangaId: SELECT scanlator FROM chapters WHERE manga_id = :mangaId; getBookmarkedChaptersByMangaId: SELECT * FROM chapters WHERE bookmark AND manga_id = :mangaId; getChapterByUrl: SELECT * FROM chapters WHERE url = :chapterUrl; getChapterByUrlAndMangaId: SELECT * FROM chapters WHERE url = :chapterUrl AND manga_id = :mangaId; removeChaptersWithIds: DELETE FROM chapters WHERE _id IN :chapterIds; resetIsSyncing: UPDATE chapters SET is_syncing = 0 WHERE is_syncing = 1; insert: INSERT INTO chapters(manga_id, url, name, scanlator, read, bookmark, last_page_read, chapter_number, source_order, date_fetch, date_upload, last_modified_at, version, is_syncing) VALUES (:mangaId, :url, :name, :scanlator, :read, :bookmark, :lastPageRead, :chapterNumber, :sourceOrder, :dateFetch, :dateUpload, 0, :version, 0); update: UPDATE chapters SET manga_id = coalesce(:mangaId, manga_id), url = coalesce(:url, url), name = coalesce(:name, name), scanlator = coalesce(:scanlator, scanlator), read = coalesce(:read, read), bookmark = coalesce(:bookmark, bookmark), last_page_read = coalesce(:lastPageRead, last_page_read), chapter_number = coalesce(:chapterNumber, chapter_number), source_order = coalesce(:sourceOrder, source_order), date_fetch = coalesce(:dateFetch, date_fetch), date_upload = coalesce(:dateUpload, date_upload), version = coalesce(:version, version), is_syncing = coalesce(:isSyncing, is_syncing) WHERE _id = :chapterId; selectLastInsertedRowId: SELECT last_insert_rowid(); ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/excluded_scanlators.sq ================================================ CREATE TABLE excluded_scanlators( manga_id INTEGER NOT NULL, scanlator TEXT NOT NULL, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); CREATE INDEX excluded_scanlators_manga_id_index ON excluded_scanlators(manga_id); CREATE INDEX idx_excluded_scanlators_scanlator ON excluded_scanlators(scanlator); insert: INSERT INTO excluded_scanlators(manga_id, scanlator) VALUES (:mangaId, :scanlator); remove: DELETE FROM excluded_scanlators WHERE manga_id = :mangaId AND scanlator IN :scanlators; getExcludedScanlatorsByMangaId: SELECT scanlator FROM excluded_scanlators WHERE manga_id = :mangaId; ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/extension_repos.sq ================================================ CREATE TABLE extension_repos ( base_url TEXT NOT NULL PRIMARY KEY, name TEXT NOT NULL, short_name TEXT, website TEXT NOT NULL, signing_key_fingerprint TEXT UNIQUE NOT NULL ); findOne: SELECT * FROM extension_repos WHERE base_url = :base_url; findOneBySigningKeyFingerprint: SELECT * FROM extension_repos WHERE signing_key_fingerprint = :fingerprint; findAll: SELECT * FROM extension_repos; count: SELECT COUNT(*) FROM extension_repos; insert: INSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint) VALUES (:base_url, :name, :short_name, :website, :fingerprint); upsert: INSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint) VALUES (:base_url, :name, :short_name, :website, :fingerprint) ON CONFLICT(base_url) DO UPDATE SET name = :name, short_name = :short_name, website =: website, signing_key_fingerprint = :fingerprint WHERE base_url = base_url; replace: INSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint) VALUES (:base_url, :name, :short_name, :website, :fingerprint) ON CONFLICT(signing_key_fingerprint) DO UPDATE SET base_url = :base_url, name = :name, short_name = :short_name, website =: website WHERE signing_key_fingerprint = signing_key_fingerprint; delete: DELETE FROM extension_repos WHERE base_url = :base_url; ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/history.sq ================================================ import java.util.Date; CREATE TABLE history( _id INTEGER NOT NULL PRIMARY KEY, chapter_id INTEGER NOT NULL UNIQUE, last_read INTEGER AS Date, time_read INTEGER NOT NULL, FOREIGN KEY(chapter_id) REFERENCES chapters (_id) ON DELETE CASCADE ); CREATE INDEX history_history_chapter_id_index ON history(chapter_id); CREATE INDEX idx_history_last_read ON history(last_read); getHistoryByMangaId: SELECT H._id, H.chapter_id, H.last_read, H.time_read FROM history H JOIN chapters C ON H.chapter_id = C._id WHERE C.manga_id = :mangaId AND C._id = H.chapter_id; getHistoryByChapterUrl: SELECT H._id, H.chapter_id, H.last_read, H.time_read FROM history H JOIN chapters C ON H.chapter_id = C._id WHERE C.url = :chapterUrl AND C._id = H.chapter_id; resetHistoryById: UPDATE history SET last_read = 0 WHERE _id = :historyId; resetHistoryByMangaId: UPDATE history SET last_read = 0 WHERE _id IN ( SELECT H._id FROM mangas M INNER JOIN chapters C ON M._id = C.manga_id INNER JOIN history H ON C._id = H.chapter_id WHERE M._id = :mangaId ); removeAllHistory: DELETE FROM history; removeResettedHistory: DELETE FROM history WHERE last_read = 0; upsert: INSERT INTO history(chapter_id, last_read, time_read) VALUES (:chapterId, :readAt, :time_read) ON CONFLICT(chapter_id) DO UPDATE SET last_read = :readAt, time_read = time_read + :time_read WHERE chapter_id = :chapterId; getReadDuration: SELECT coalesce(sum(time_read), 0) FROM history; ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/manga_sync.sq ================================================ import kotlin.Boolean; CREATE TABLE manga_sync( _id INTEGER NOT NULL PRIMARY KEY, manga_id INTEGER NOT NULL, sync_id INTEGER NOT NULL, remote_id INTEGER NOT NULL, library_id INTEGER, title TEXT NOT NULL, last_chapter_read REAL NOT NULL, total_chapters INTEGER NOT NULL, status INTEGER NOT NULL, score REAL NOT NULL, remote_url TEXT NOT NULL, start_date INTEGER NOT NULL, finish_date INTEGER NOT NULL, private INTEGER AS Boolean DEFAULT 0 NOT NULL, UNIQUE (manga_id, sync_id) ON CONFLICT REPLACE, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); CREATE INDEX idx_manga_sync_manga_id ON manga_sync(manga_id); delete: DELETE FROM manga_sync WHERE manga_id = :mangaId AND sync_id = :syncId; getTracks: SELECT * FROM manga_sync; getTrackById: SELECT * FROM manga_sync WHERE _id = :id; getTracksByMangaId: SELECT * FROM manga_sync WHERE manga_id = :mangaId; insert: INSERT INTO manga_sync(manga_id,sync_id,remote_id,library_id,title,last_chapter_read,total_chapters,status,score,remote_url,start_date,finish_date,private) VALUES (:mangaId,:syncId,:remoteId,:libraryId,:title,:lastChapterRead,:totalChapters,:status,:score,:remoteUrl,:startDate,:finishDate,:private); update: UPDATE manga_sync SET manga_id = coalesce(:mangaId, manga_id), sync_id = coalesce(:syncId, sync_id), remote_id = coalesce(:mediaId, remote_id), library_id = coalesce(:libraryId, library_id), title = coalesce(:title, title), last_chapter_read = coalesce(:lastChapterRead, last_chapter_read), total_chapters = coalesce(:totalChapter, total_chapters), status = coalesce(:status, status), score = coalesce(:score, score), remote_url = coalesce(:trackingUrl, remote_url), start_date = coalesce(:startDate, start_date), finish_date = coalesce(:finishDate, finish_date), private = coalesce(:private, private) WHERE _id = :id; ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/mangas.sq ================================================ import eu.kanade.tachiyomi.source.model.UpdateStrategy; import kotlin.collections.List; import kotlin.Boolean; import kotlin.String; CREATE TABLE mangas( _id INTEGER NOT NULL PRIMARY KEY, source INTEGER NOT NULL, url TEXT NOT NULL, artist TEXT, author TEXT, description TEXT, genre TEXT AS List, title TEXT NOT NULL, status INTEGER NOT NULL, thumbnail_url TEXT, favorite INTEGER AS Boolean NOT NULL, last_update INTEGER, next_update INTEGER, initialized INTEGER AS Boolean NOT NULL, viewer INTEGER NOT NULL, chapter_flags INTEGER NOT NULL, cover_last_modified INTEGER NOT NULL, date_added INTEGER NOT NULL, update_strategy INTEGER AS UpdateStrategy NOT NULL DEFAULT 0, calculate_interval INTEGER DEFAULT 0 NOT NULL, last_modified_at INTEGER NOT NULL DEFAULT 0, favorite_modified_at INTEGER, version INTEGER NOT NULL DEFAULT 0, is_syncing INTEGER NOT NULL DEFAULT 0, notes TEXT NOT NULL DEFAULT "" ); CREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1; CREATE INDEX mangas_url_index ON mangas(url); CREATE INDEX idx_mangas_source ON mangas(source); CREATE TRIGGER update_last_favorited_at_mangas AFTER UPDATE OF favorite ON mangas BEGIN UPDATE mangas SET favorite_modified_at = strftime('%s', 'now') WHERE _id = new._id; END; CREATE TRIGGER update_last_modified_at_mangas AFTER UPDATE ON mangas FOR EACH ROW BEGIN UPDATE mangas SET last_modified_at = strftime('%s', 'now') WHERE _id = new._id; END; CREATE TRIGGER update_manga_version AFTER UPDATE ON mangas BEGIN UPDATE mangas SET version = version + 1 WHERE _id = new._id AND new.is_syncing = 0 AND ( new.url != old.url OR new.description != old.description OR new.favorite != old.favorite ); END; getMangaById: SELECT * FROM mangas WHERE _id = :id; -- TODO: this should ideally never really have more than 1 result getMangaByUrlAndSource: SELECT * FROM mangas WHERE url = :url AND source = :source LIMIT 1; getFavorites: SELECT * FROM mangas WHERE favorite = 1; getReadMangaNotInLibrary: SELECT * FROM mangas WHERE favorite = 0 AND _id IN ( SELECT DISTINCT chapters.manga_id FROM chapters WHERE read = 1 OR last_page_read != 0 ); getAllManga: SELECT * FROM mangas; getAllMangaSourceAndUrl: SELECT source, url FROM mangas; getMangasWithFavoriteTimestamp: SELECT * FROM mangas WHERE favorite_modified_at IS NOT NULL; getSourceIdWithFavoriteCount: SELECT source, count(*) FROM mangas WHERE favorite = 1 GROUP BY source; getFavoriteBySourceId: SELECT * FROM mangas WHERE favorite = 1 AND source = :sourceId; getDuplicateLibraryManga: WITH track_dupes AS ( SELECT DISTINCT S2.manga_id FROM manga_sync S1 INNER JOIN manga_sync S2 ON S1.sync_id = S2.sync_id AND S1.remote_id = S2.remote_id AND S1.manga_id != S2.manga_id WHERE S1.manga_id = :id ), duplicates AS ( SELECT M.* FROM mangas M LEFT JOIN track_dupes D ON D.manga_id = _id WHERE favorite = 1 AND _id != :id AND (lower(title) LIKE '%' || lower(:title) || '%' OR D.manga_id IS NOT NULL) ), chapter_counts AS ( SELECT M._id AS manga_id, count(*) AS chapter_count FROM duplicates M JOIN chapters C ON M._id = C.manga_id LEFT JOIN excluded_scanlators ES ON C.manga_id = ES.manga_id AND C.scanlator = ES.scanlator WHERE ES.scanlator IS NULL GROUP BY M._id ) SELECT M.*, coalesce(CC.chapter_count, 0) AS chapter_count FROM duplicates M LEFT JOIN chapter_counts CC ON M._id = CC.manga_id; getUpcomingManga: SELECT * FROM mangas WHERE next_update >= :startOfDay AND favorite = 1 AND status IN :statuses ORDER BY next_update ASC; resetViewerFlags: UPDATE mangas SET viewer = 0; resetIsSyncing: UPDATE mangas SET is_syncing = 0 WHERE is_syncing = 1; getSourceIdsWithNonLibraryManga: SELECT source, COUNT(*) AS manga_count FROM mangas WHERE favorite = 0 GROUP BY source; deleteNonLibraryManga: DELETE FROM mangas WHERE favorite = 0 AND source IN :sourceIds AND ( :keepReadManga = 0 OR _id NOT IN ( SELECT DISTINCT manga_id FROM chapters WHERE read = 1 OR last_page_read != 0 ) ); insert: INSERT INTO mangas(source, url, artist, author, description, genre, title, status, thumbnail_url, favorite, last_update, next_update, initialized, viewer, chapter_flags, cover_last_modified, date_added, update_strategy, calculate_interval, last_modified_at, version, notes) VALUES (:source, :url, :artist, :author, :description, :genre, :title, :status, :thumbnailUrl, :favorite, :lastUpdate, :nextUpdate, :initialized, :viewerFlags, :chapterFlags, :coverLastModified, :dateAdded, :updateStrategy, :calculateInterval, 0, :version, :notes); update: UPDATE mangas SET source = coalesce(:source, source), url = coalesce(:url, url), artist = coalesce(:artist, artist), author = coalesce(:author, author), description = coalesce(:description, description), genre = coalesce(:genre, genre), title = coalesce(:title, title), status = coalesce(:status, status), thumbnail_url = coalesce(:thumbnailUrl, thumbnail_url), favorite = coalesce(:favorite, favorite), last_update = coalesce(:lastUpdate, last_update), next_update = coalesce(:nextUpdate, next_update), initialized = coalesce(:initialized, initialized), viewer = coalesce(:viewer, viewer), chapter_flags = coalesce(:chapterFlags, chapter_flags), cover_last_modified = coalesce(:coverLastModified, cover_last_modified), date_added = coalesce(:dateAdded, date_added), update_strategy = coalesce(:updateStrategy, update_strategy), calculate_interval = coalesce(:calculateInterval, calculate_interval), version = coalesce(:version, version), is_syncing = coalesce(:isSyncing, is_syncing), notes = coalesce(:notes, notes) WHERE _id = :mangaId; selectLastInsertedRowId: SELECT last_insert_rowid(); insertNetworkManga { -- Insert the manga if it doesn't exist already INSERT INTO mangas( source, url, artist, author, description, genre, title, status, thumbnail_url, favorite, last_update, next_update, initialized, viewer, chapter_flags, cover_last_modified, date_added, update_strategy, calculate_interval, last_modified_at, version ) SELECT :source, :url, :artist, :author, :description, :genre, :title, :status, :thumbnailUrl, :favorite, :lastUpdate, :nextUpdate, :initialized, :viewerFlags, :chapterFlags, :coverLastModified, :dateAdded, :updateStrategy, :calculateInterval, 0, :version WHERE NOT EXISTS(SELECT 0 FROM mangas WHERE source = :source AND url = :url); -- Update the relevant details if applicable and not favorite UPDATE mangas SET title = CASE WHEN :updateTitle THEN :title ELSE title END, thumbnail_url = CASE WHEN :updateCover THEN :thumbnailUrl ELSE thumbnail_url END, author = CASE WHEN :updateDetails THEN :author ELSE author END, artist = CASE WHEN :updateDetails THEN :artist ELSE artist END, description = CASE WHEN :updateDetails THEN :description ELSE description END, genre = CASE WHEN :updateDetails THEN :genre ELSE genre END, status = CASE WHEN :updateDetails THEN :status ELSE status END, update_strategy = CASE WHEN :updateDetails THEN :updateStrategy ELSE update_strategy END, initialized = :updateDetails WHERE source = :source AND url = :url AND favorite = 0; -- Finally return the manga SELECT * FROM mangas WHERE source = :source AND url = :url LIMIT 1; } ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/mangas_categories.sq ================================================ CREATE TABLE mangas_categories( _id INTEGER NOT NULL PRIMARY KEY, manga_id INTEGER NOT NULL, category_id INTEGER NOT NULL, FOREIGN KEY(category_id) REFERENCES categories (_id) ON DELETE CASCADE, FOREIGN KEY(manga_id) REFERENCES mangas (_id) ON DELETE CASCADE ); CREATE INDEX idx_mangas_categories_manga_id ON mangas_categories(manga_id); CREATE INDEX idx_mangas_categories_category_id ON mangas_categories(category_id); CREATE TRIGGER insert_manga_category_update_version AFTER INSERT ON mangas_categories BEGIN UPDATE mangas SET version = version + 1 WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0; END; insert: INSERT INTO mangas_categories(manga_id, category_id) VALUES (:mangaId, :categoryId); deleteMangaCategoryByMangaId: DELETE FROM mangas_categories WHERE manga_id = :mangaId; ================================================ FILE: data/src/main/sqldelight/tachiyomi/data/sources.sq ================================================ CREATE TABLE sources( _id INTEGER NOT NULL PRIMARY KEY, lang TEXT NOT NULL, name TEXT NOT NULL ); findAll: SELECT * FROM sources; findOne: SELECT * FROM sources WHERE _id = :id; upsert: INSERT INTO sources(_id, lang, name) VALUES (:id, :lang, :name) ON CONFLICT(_id) DO UPDATE SET lang = :lang, name = :name WHERE _id = :id; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/1.sqm ================================================ -- MangaUpdates score fixing -- UPDATE manga_sync SET score = max(score, 0) WHERE sync_id = 7; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/10.sqm ================================================ -- Migration to add performance indexes CREATE INDEX IF NOT EXISTS idx_mangas_source ON mangas(source); CREATE INDEX IF NOT EXISTS idx_chapters_url ON chapters(url); CREATE INDEX IF NOT EXISTS idx_mangas_categories_manga_id ON mangas_categories(manga_id); CREATE INDEX IF NOT EXISTS idx_mangas_categories_category_id ON mangas_categories(category_id); CREATE INDEX IF NOT EXISTS idx_excluded_scanlators_scanlator ON excluded_scanlators(scanlator); CREATE INDEX IF NOT EXISTS idx_manga_sync_manga_id ON manga_sync(manga_id); CREATE INDEX IF NOT EXISTS idx_history_last_read ON history(last_read); ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/2.sqm ================================================ -- Mangas table ALTER TABLE mangas ADD COLUMN version INTEGER NOT NULL DEFAULT 0; ALTER TABLE mangas ADD COLUMN is_syncing INTEGER NOT NULL DEFAULT 0; -- Chapters table ALTER TABLE chapters ADD COLUMN version INTEGER NOT NULL DEFAULT 0; ALTER TABLE chapters ADD COLUMN is_syncing INTEGER NOT NULL DEFAULT 0; -- Mangas triggers DROP TRIGGER IF EXISTS update_manga_version; CREATE TRIGGER update_manga_version AFTER UPDATE ON mangas BEGIN UPDATE mangas SET version = version + 1 WHERE _id = new._id AND new.is_syncing = 0 AND ( new.url != old.url OR new.description != old.description OR new.favorite != old.favorite ); END; -- Chapters triggers DROP TRIGGER IF EXISTS update_chapter_and_manga_version; CREATE TRIGGER update_chapter_and_manga_version AFTER UPDATE ON chapters WHEN new.is_syncing = 0 AND ( new.read != old.read OR new.bookmark != old.bookmark OR new.last_page_read != old.last_page_read ) BEGIN -- Update the chapter version UPDATE chapters SET version = version + 1 WHERE _id = new._id; -- Update the manga version UPDATE mangas SET version = version + 1 WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0; END; -- manga_categories table DROP TRIGGER IF EXISTS insert_manga_category_update_version; CREATE TRIGGER insert_manga_category_update_version AFTER INSERT ON mangas_categories BEGIN UPDATE mangas SET version = version + 1 WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0; END; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/3.sqm ================================================ -- Create ExtensionRepo table -- CREATE TABLE extension_repos ( base_url TEXT NOT NULL PRIMARY KEY, name TEXT NOT NULL, short_name TEXT, website TEXT NOT NULL, signing_key_fingerprint TEXT UNIQUE NOT NULL ); ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/4.sqm ================================================ import kotlin.Boolean; -- Add private field for tracking ALTER TABLE manga_sync ADD COLUMN private INTEGER AS Boolean DEFAULT 0 NOT NULL; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/5.sqm ================================================ -- Add notes column ALTER TABLE mangas ADD notes TEXT NOT NULL DEFAULT ""; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/6.sqm ================================================ DROP VIEW IF EXISTS libraryView; CREATE VIEW libraryView AS SELECT M.*, coalesce(C.total, 0) AS totalCount, coalesce(C.readCount, 0) AS readCount, coalesce(C.latestUpload, 0) AS latestUpload, coalesce(C.fetchedAt, 0) AS chapterFetchedAt, coalesce(C.lastRead, 0) AS lastRead, coalesce(C.bookmarkCount, 0) AS bookmarkCount, coalesce(MC.categories, '0') AS categories FROM mangas M LEFT JOIN ( SELECT chapters.manga_id, count(*) AS total, sum(read) AS readCount, coalesce(max(chapters.date_upload), 0) AS latestUpload, coalesce(max(history.last_read), 0) AS lastRead, coalesce(max(chapters.date_fetch), 0) AS fetchedAt, sum(chapters.bookmark) AS bookmarkCount FROM chapters LEFT JOIN excluded_scanlators ON chapters.manga_id = excluded_scanlators.manga_id AND chapters.scanlator = excluded_scanlators.scanlator LEFT JOIN history ON chapters._id = history.chapter_id WHERE excluded_scanlators.scanlator IS NULL GROUP BY chapters.manga_id ) AS C ON M._id = C.manga_id LEFT JOIN ( SELECT manga_id, group_concat(category_id) AS categories FROM mangas_categories GROUP BY manga_id ) AS MC ON MC.manga_id = M._id WHERE M.favorite = 1; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/7.sqm ================================================ -- Add chapter urls to updates view DROP VIEW IF EXISTS updatesView; CREATE VIEW updatesView AS SELECT mangas._id AS mangaId, mangas.title AS mangaTitle, chapters._id AS chapterId, chapters.name AS chapterName, chapters.scanlator, chapters.url AS chapterUrl, chapters.read, chapters.bookmark, chapters.last_page_read, mangas.source, mangas.favorite, mangas.thumbnail_url AS thumbnailUrl, mangas.cover_last_modified AS coverLastModified, chapters.date_upload AS dateUpload, chapters.date_fetch AS datefetch FROM mangas JOIN chapters ON mangas._id = chapters.manga_id WHERE favorite = 1 AND date_fetch > date_added ORDER BY date_fetch DESC; ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/8.sqm ================================================ -- Save the current remote_id as library_id, since old Kitsu tracker did not use this correctly UPDATE manga_sync SET library_id = remote_id WHERE sync_id = 3; -- Kitsu and Suwayomi aren't using the remote_id field properly, but for both the ID is present in the URL -- This parses a url and gets the ID from the trailing path part, e.g. https://kitsu.app/manga/ -- Based on https://stackoverflow.com/a/38330814 UPDATE manga_sync SET remote_id = replace(remote_url, rtrim(remote_url, replace(remote_url, '/', '')), '') WHERE sync_id IN (3, 9); ================================================ FILE: data/src/main/sqldelight/tachiyomi/migrations/9.sqm ================================================ -- Add excluded_scanlators to updatesView DROP VIEW IF EXISTS updatesView; CREATE VIEW updatesView AS SELECT mangas._id AS mangaId, mangas.title AS mangaTitle, chapters._id AS chapterId, chapters.name AS chapterName, chapters.scanlator, chapters.url AS chapterUrl, chapters.read, chapters.bookmark, chapters.last_page_read, mangas.source, mangas.favorite, mangas.thumbnail_url AS thumbnailUrl, mangas.cover_last_modified AS coverLastModified, chapters.date_upload AS dateUpload, chapters.date_fetch AS datefetch, excluded_scanlators.scanlator as excludedScanlator FROM mangas JOIN chapters ON mangas._id = chapters.manga_id LEFT JOIN excluded_scanlators ON mangas._id = excluded_scanlators.manga_id AND chapters.scanlator = excluded_scanlators.scanlator WHERE favorite = 1 AND date_fetch > date_added ORDER BY date_fetch DESC; ================================================ FILE: data/src/main/sqldelight/tachiyomi/view/historyView.sq ================================================ CREATE VIEW historyView AS SELECT history._id AS id, mangas._id AS mangaId, chapters._id AS chapterId, mangas.title, mangas.thumbnail_url AS thumbnailUrl, mangas.source, mangas.favorite, mangas.cover_last_modified, chapters.chapter_number AS chapterNumber, history.last_read AS readAt, history.time_read AS readDuration, max_last_read.last_read AS maxReadAt, max_last_read.chapter_id AS maxReadAtChapterId FROM mangas JOIN chapters ON mangas._id = chapters.manga_id JOIN history ON chapters._id = history.chapter_id JOIN ( SELECT chapters.manga_id,chapters._id AS chapter_id, MAX(history.last_read) AS last_read FROM chapters JOIN history ON chapters._id = history.chapter_id GROUP BY chapters.manga_id ) AS max_last_read ON chapters.manga_id = max_last_read.manga_id; history: SELECT id, mangaId, chapterId, title, thumbnailUrl, source, favorite, cover_last_modified, chapterNumber, readAt, readDuration FROM historyView WHERE historyView.readAt > 0 AND maxReadAtChapterId = historyView.chapterId AND lower(historyView.title) LIKE ('%' || :query || '%') ORDER BY readAt DESC; getLatestHistory: SELECT id, mangaId, chapterId, title, thumbnailUrl, source, favorite, cover_last_modified, chapterNumber, readAt, readDuration FROM historyView WHERE historyView.readAt > 0 ORDER BY readAt DESC LIMIT 1; ================================================ FILE: data/src/main/sqldelight/tachiyomi/view/libraryView.sq ================================================ CREATE VIEW libraryView AS SELECT M.*, coalesce(C.total, 0) AS totalCount, coalesce(C.readCount, 0) AS readCount, coalesce(C.latestUpload, 0) AS latestUpload, coalesce(C.fetchedAt, 0) AS chapterFetchedAt, coalesce(C.lastRead, 0) AS lastRead, coalesce(C.bookmarkCount, 0) AS bookmarkCount, coalesce(MC.categories, '0') AS categories FROM mangas M LEFT JOIN ( SELECT chapters.manga_id, count(*) AS total, sum(read) AS readCount, coalesce(max(chapters.date_upload), 0) AS latestUpload, coalesce(max(history.last_read), 0) AS lastRead, coalesce(max(chapters.date_fetch), 0) AS fetchedAt, sum(chapters.bookmark) AS bookmarkCount FROM chapters LEFT JOIN excluded_scanlators ON chapters.manga_id = excluded_scanlators.manga_id AND chapters.scanlator = excluded_scanlators.scanlator LEFT JOIN history ON chapters._id = history.chapter_id WHERE excluded_scanlators.scanlator IS NULL GROUP BY chapters.manga_id ) AS C ON M._id = C.manga_id LEFT JOIN ( SELECT manga_id, group_concat(category_id) AS categories FROM mangas_categories GROUP BY manga_id ) AS MC ON MC.manga_id = M._id WHERE M.favorite = 1; library: SELECT * FROM libraryView; ================================================ FILE: data/src/main/sqldelight/tachiyomi/view/updatesView.sq ================================================ CREATE VIEW updatesView AS SELECT mangas._id AS mangaId, mangas.title AS mangaTitle, chapters._id AS chapterId, chapters.name AS chapterName, chapters.scanlator, chapters.url AS chapterUrl, chapters.read, chapters.bookmark, chapters.last_page_read, mangas.source, mangas.favorite, mangas.thumbnail_url AS thumbnailUrl, mangas.cover_last_modified AS coverLastModified, chapters.date_upload AS dateUpload, chapters.date_fetch AS datefetch, excluded_scanlators.scanlator AS excludedScanlator FROM mangas JOIN chapters ON mangas._id = chapters.manga_id LEFT JOIN excluded_scanlators ON mangas._id = excluded_scanlators.manga_id AND chapters.scanlator = excluded_scanlators.scanlator WHERE favorite = 1 AND date_fetch > date_added ORDER BY date_fetch DESC; getRecentUpdates: SELECT * FROM updatesView WHERE dateUpload > :after LIMIT :limit; getRecentUpdatesWithFilters: SELECT * FROM updatesView WHERE dateUpload > :after AND (:read IS NULL OR read = :read) -- Started means some progress but not finished, Read means finished chapter, thus: AND ( :started IS NULL OR (:started = 1 AND last_page_read > 0 AND read = 0) OR (:started = 0 AND last_page_read = 0 AND read = 0) ) AND (:bookmarked IS NULL OR bookmark = :bookmarked) AND ( (excludedScanlator IS NULL OR :hideExcludedScanlators = 0) ) LIMIT :limit; getUpdatesByReadStatus: SELECT * FROM updatesView WHERE read = :read AND dateUpload > :after LIMIT :limit; ================================================ FILE: domain/build.gradle.kts ================================================ plugins { id("mihon.library") kotlin("android") kotlin("plugin.serialization") } android { namespace = "tachiyomi.domain" defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } } kotlin { compilerOptions { freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") } } dependencies { implementation(projects.sourceApi) implementation(projects.core.common) implementation(platform(kotlinx.coroutines.bom)) implementation(kotlinx.bundles.coroutines) implementation(kotlinx.bundles.serialization) implementation(libs.unifile) api(libs.sqldelight.android.paging) compileOnly(compose.runtime.annotation) testImplementation(libs.bundles.test) testImplementation(kotlinx.coroutines.test) testRuntimeOnly(libs.junit.platform.launcher) } ================================================ FILE: domain/consumer-rules.pro ================================================ ================================================ FILE: domain/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: domain/src/main/AndroidManifest.xml ================================================ ================================================ FILE: domain/src/main/java/mihon/domain/chapter/interactor/FilterChaptersForDownload.kt ================================================ package mihon.domain.chapter.interactor import tachiyomi.domain.category.interactor.GetCategories import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.manga.model.Manga /** * Interactor responsible for determining which chapters of a manga should be downloaded. * * @property getChaptersByMangaId Interactor for retrieving chapters by manga ID. * @property downloadPreferences User preferences related to chapter downloads. * @property getCategories Interactor for retrieving categories associated with a manga. */ class FilterChaptersForDownload( private val getChaptersByMangaId: GetChaptersByMangaId, private val downloadPreferences: DownloadPreferences, private val getCategories: GetCategories, ) { /** * Determines which chapters of a manga should be downloaded based on user preferences. * * @param manga The manga for which chapters may be downloaded. * @param newChapters The list of new chapters available for the manga. * @return A list of chapters that should be downloaded */ suspend fun await(manga: Manga, newChapters: List): List { if ( newChapters.isEmpty() || !downloadPreferences.downloadNewChapters.get() || !manga.shouldDownloadNewChapters() ) { return emptyList() } if (!downloadPreferences.downloadNewUnreadChaptersOnly.get()) return newChapters val readChapterNumbers = getChaptersByMangaId.await(manga.id) .asSequence() .filter { it.read && it.isRecognizedNumber } .map { it.chapterNumber } .toSet() return newChapters.filterNot { it.chapterNumber in readChapterNumbers } } /** * Determines whether new chapters should be downloaded for the manga based on user preferences and the * categories to which the manga belongs. * * @return `true` if chapters of the manga should be downloaded */ private suspend fun Manga.shouldDownloadNewChapters(): Boolean { if (!favorite) return false val categories = getCategories.await(id).map { it.id }.ifEmpty { listOf(DEFAULT_CATEGORY_ID) } val includedCategories = downloadPreferences.downloadNewChapterCategories.get().map { it.toLong() } val excludedCategories = downloadPreferences.downloadNewChapterCategoriesExclude.get().map { it.toLong() } return when { // Default Download from all categories includedCategories.isEmpty() && excludedCategories.isEmpty() -> true // In excluded category categories.any { it in excludedCategories } -> false // Included category not selected includedCategories.isEmpty() -> true // In included category else -> categories.any { it in includedCategories } } } companion object { private const val DEFAULT_CATEGORY_ID = 0L } } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/exception/SaveExtensionRepoException.kt ================================================ package mihon.domain.extensionrepo.exception import java.io.IOException /** * Exception to abstract over SQLiteException and SQLiteConstraintException for multiplatform. * * @param throwable the source throwable to include for tracing. */ class SaveExtensionRepoException(throwable: Throwable) : IOException("Error Saving Repository to Database", throwable) ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/interactor/CreateExtensionRepo.kt ================================================ package mihon.domain.extensionrepo.interactor import logcat.LogPriority import mihon.domain.extensionrepo.exception.SaveExtensionRepoException import mihon.domain.extensionrepo.model.ExtensionRepo import mihon.domain.extensionrepo.repository.ExtensionRepoRepository import mihon.domain.extensionrepo.service.ExtensionRepoService import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import tachiyomi.core.common.util.system.logcat class CreateExtensionRepo( private val repository: ExtensionRepoRepository, private val service: ExtensionRepoService, ) { private val repoRegex = """^https://.*/index\.min\.json$""".toRegex() suspend fun await(indexUrl: String): Result { val formattedIndexUrl = indexUrl.toHttpUrlOrNull() ?.toString() ?.takeIf { it.matches(repoRegex) } ?: return Result.InvalidUrl val baseUrl = formattedIndexUrl.removeSuffix("/index.min.json") return service.fetchRepoDetails(baseUrl)?.let { insert(it) } ?: Result.InvalidUrl } private suspend fun insert(repo: ExtensionRepo): Result { return try { repository.insertRepo( repo.baseUrl, repo.name, repo.shortName, repo.website, repo.signingKeyFingerprint, ) Result.Success } catch (e: SaveExtensionRepoException) { logcat(LogPriority.WARN, e) { "SQL Conflict attempting to add new repository ${repo.baseUrl}" } return handleInsertionError(repo) } } /** * Error Handler for insert when there are trying to create new repositories * * SaveExtensionRepoException doesn't provide constraint info in exceptions. * First check if the conflict was on primary key. if so return RepoAlreadyExists * Then check if the conflict was on fingerprint. if so Return DuplicateFingerprint * If neither are found, there was some other Error, and return Result.Error * * @param repo Extension Repo holder for passing to DB/Error Dialog */ private suspend fun handleInsertionError(repo: ExtensionRepo): Result { val repoExists = repository.getRepo(repo.baseUrl) if (repoExists != null) { return Result.RepoAlreadyExists } val matchingFingerprintRepo = repository.getRepoBySigningKeyFingerprint(repo.signingKeyFingerprint) if (matchingFingerprintRepo != null) { return Result.DuplicateFingerprint(matchingFingerprintRepo, repo) } return Result.Error } sealed interface Result { data class DuplicateFingerprint(val oldRepo: ExtensionRepo, val newRepo: ExtensionRepo) : Result data object InvalidUrl : Result data object RepoAlreadyExists : Result data object Success : Result data object Error : Result } } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/interactor/DeleteExtensionRepo.kt ================================================ package mihon.domain.extensionrepo.interactor import mihon.domain.extensionrepo.repository.ExtensionRepoRepository class DeleteExtensionRepo( private val repository: ExtensionRepoRepository, ) { suspend fun await(baseUrl: String) { repository.deleteRepo(baseUrl) } } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/interactor/GetExtensionRepo.kt ================================================ package mihon.domain.extensionrepo.interactor import kotlinx.coroutines.flow.Flow import mihon.domain.extensionrepo.model.ExtensionRepo import mihon.domain.extensionrepo.repository.ExtensionRepoRepository class GetExtensionRepo( private val repository: ExtensionRepoRepository, ) { fun subscribeAll(): Flow> = repository.subscribeAll() suspend fun getAll(): List = repository.getAll() } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/interactor/GetExtensionRepoCount.kt ================================================ package mihon.domain.extensionrepo.interactor import mihon.domain.extensionrepo.repository.ExtensionRepoRepository class GetExtensionRepoCount( private val repository: ExtensionRepoRepository, ) { fun subscribe() = repository.getCount() } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/interactor/ReplaceExtensionRepo.kt ================================================ package mihon.domain.extensionrepo.interactor import mihon.domain.extensionrepo.model.ExtensionRepo import mihon.domain.extensionrepo.repository.ExtensionRepoRepository class ReplaceExtensionRepo( private val repository: ExtensionRepoRepository, ) { suspend fun await(repo: ExtensionRepo) { repository.replaceRepo(repo) } } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/interactor/UpdateExtensionRepo.kt ================================================ package mihon.domain.extensionrepo.interactor import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import mihon.domain.extensionrepo.model.ExtensionRepo import mihon.domain.extensionrepo.repository.ExtensionRepoRepository import mihon.domain.extensionrepo.service.ExtensionRepoService class UpdateExtensionRepo( private val repository: ExtensionRepoRepository, private val service: ExtensionRepoService, ) { suspend fun awaitAll() = coroutineScope { repository.getAll() .map { async { await(it) } } .awaitAll() } suspend fun await(repo: ExtensionRepo) { val newRepo = service.fetchRepoDetails(repo.baseUrl) ?: return if ( repo.signingKeyFingerprint.startsWith("NOFINGERPRINT") || repo.signingKeyFingerprint == newRepo.signingKeyFingerprint ) { repository.upsertRepo(newRepo) } } } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/model/ExtensionRepo.kt ================================================ package mihon.domain.extensionrepo.model data class ExtensionRepo( val baseUrl: String, val name: String, val shortName: String?, val website: String, val signingKeyFingerprint: String, ) ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/repository/ExtensionRepoRepository.kt ================================================ package mihon.domain.extensionrepo.repository import kotlinx.coroutines.flow.Flow import mihon.domain.extensionrepo.model.ExtensionRepo interface ExtensionRepoRepository { fun subscribeAll(): Flow> suspend fun getAll(): List suspend fun getRepo(baseUrl: String): ExtensionRepo? suspend fun getRepoBySigningKeyFingerprint(fingerprint: String): ExtensionRepo? fun getCount(): Flow suspend fun insertRepo( baseUrl: String, name: String, shortName: String?, website: String, signingKeyFingerprint: String, ) suspend fun upsertRepo( baseUrl: String, name: String, shortName: String?, website: String, signingKeyFingerprint: String, ) suspend fun upsertRepo(repo: ExtensionRepo) { upsertRepo( baseUrl = repo.baseUrl, name = repo.name, shortName = repo.shortName, website = repo.website, signingKeyFingerprint = repo.signingKeyFingerprint, ) } suspend fun replaceRepo(newRepo: ExtensionRepo) suspend fun deleteRepo(baseUrl: String) } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/service/ExtensionRepoDto.kt ================================================ package mihon.domain.extensionrepo.service import kotlinx.serialization.Serializable import mihon.domain.extensionrepo.model.ExtensionRepo @Serializable data class ExtensionRepoMetaDto( val meta: ExtensionRepoDto, ) @Serializable data class ExtensionRepoDto( val name: String, val shortName: String?, val website: String, val signingKeyFingerprint: String, ) fun ExtensionRepoMetaDto.toExtensionRepo(baseUrl: String): ExtensionRepo { return ExtensionRepo( baseUrl = baseUrl, name = meta.name, shortName = meta.shortName, website = meta.website, signingKeyFingerprint = meta.signingKeyFingerprint, ) } ================================================ FILE: domain/src/main/java/mihon/domain/extensionrepo/service/ExtensionRepoService.kt ================================================ package mihon.domain.extensionrepo.service import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs import kotlinx.serialization.json.Json import logcat.LogPriority import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat class ExtensionRepoService( networkHelper: NetworkHelper, private val json: Json, ) { val client = networkHelper.client suspend fun fetchRepoDetails( repo: String, ): ExtensionRepo? { return withIOContext { try { with(json) { client.newCall(GET("$repo/repo.json")) .awaitSuccess() .parseAs() .toExtensionRepo(baseUrl = repo) } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to fetch repo details" } null } } } } ================================================ FILE: domain/src/main/java/mihon/domain/manga/model/SManga.kt ================================================ package mihon.domain.manga.model import eu.kanade.tachiyomi.source.model.SManga import tachiyomi.domain.manga.model.Manga fun SManga.toDomainManga(sourceId: Long): Manga { return Manga.create().copy( url = url, title = title, artist = artist, author = author, description = description, genre = getGenres(), status = status.toLong(), thumbnailUrl = thumbnail_url, updateStrategy = update_strategy, initialized = initialized, source = sourceId, ) } ================================================ FILE: domain/src/main/java/mihon/domain/upcoming/interactor/GetUpcomingManga.kt ================================================ package mihon.domain.upcoming.interactor import eu.kanade.tachiyomi.source.model.SManga import kotlinx.coroutines.flow.Flow import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class GetUpcomingManga( private val mangaRepository: MangaRepository, ) { private val includedStatuses = setOf( SManga.ONGOING.toLong(), SManga.PUBLISHING_FINISHED.toLong(), ) suspend fun subscribe(): Flow> { return mangaRepository.getUpcomingManga(includedStatuses) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/backup/service/BackupPreferences.kt ================================================ package tachiyomi.domain.backup.service import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class BackupPreferences( preferenceStore: PreferenceStore, ) { val backupInterval: Preference = preferenceStore.getInt("backup_interval", 12) val lastAutoBackupTimestamp: Preference = preferenceStore.getLong( Preference.appStateKey("last_auto_backup_timestamp"), 0L, ) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/CreateCategoryWithName.kt ================================================ package tachiyomi.domain.category.interactor import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.library.service.LibraryPreferences class CreateCategoryWithName( private val categoryRepository: CategoryRepository, private val preferences: LibraryPreferences, ) { private val initialFlags: Long get() { val sort = preferences.sortingMode.get() return sort.type.flag or sort.direction.flag } suspend fun await(name: String): Result = withNonCancellableContext { val categories = categoryRepository.getAll() val nextOrder = categories.maxOfOrNull { it.order }?.plus(1) ?: 0 val newCategory = Category( id = 0, name = name, order = nextOrder, flags = initialFlags, ) try { categoryRepository.insert(newCategory) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) Result.InternalError(e) } } sealed interface Result { data object Success : Result data class InternalError(val error: Throwable) : Result } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt ================================================ package tachiyomi.domain.category.interactor import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences class DeleteCategory( private val categoryRepository: CategoryRepository, private val libraryPreferences: LibraryPreferences, private val downloadPreferences: DownloadPreferences, ) { suspend fun await(categoryId: Long) = withNonCancellableContext { try { categoryRepository.delete(categoryId) } catch (e: Exception) { logcat(LogPriority.ERROR, e) return@withNonCancellableContext Result.InternalError(e) } val categories = categoryRepository.getAll() val updates = categories.mapIndexed { index, category -> CategoryUpdate( id = category.id, order = index.toLong(), ) } val defaultCategory = libraryPreferences.defaultCategory.get() if (defaultCategory == categoryId.toInt()) { libraryPreferences.defaultCategory.delete() } val categoryPreferences = listOf( libraryPreferences.updateCategories, libraryPreferences.updateCategoriesExclude, downloadPreferences.removeExcludeCategories, downloadPreferences.downloadNewChapterCategories, downloadPreferences.downloadNewChapterCategoriesExclude, ) val categoryIdString = categoryId.toString() categoryPreferences.forEach { preference -> val ids = preference.get() if (categoryIdString !in ids) return@forEach preference.set(ids.minus(categoryIdString)) } try { categoryRepository.updatePartial(updates) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) Result.InternalError(e) } } sealed interface Result { data object Success : Result data class InternalError(val error: Throwable) : Result } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/GetCategories.kt ================================================ package tachiyomi.domain.category.interactor import kotlinx.coroutines.flow.Flow import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.repository.CategoryRepository class GetCategories( private val categoryRepository: CategoryRepository, ) { fun subscribe(): Flow> { return categoryRepository.getAllAsFlow() } fun subscribe(mangaId: Long): Flow> { return categoryRepository.getCategoriesByMangaIdAsFlow(mangaId) } suspend fun await(): List { return categoryRepository.getAll() } suspend fun await(mangaId: Long): List { return categoryRepository.getCategoriesByMangaId(mangaId) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/RenameCategory.kt ================================================ package tachiyomi.domain.category.interactor import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class RenameCategory( private val categoryRepository: CategoryRepository, ) { suspend fun await(categoryId: Long, name: String) = withNonCancellableContext { val update = CategoryUpdate( id = categoryId, name = name, ) try { categoryRepository.updatePartial(update) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) Result.InternalError(e) } } suspend fun await(category: Category, name: String) = await(category.id, name) sealed interface Result { data object Success : Result data class InternalError(val error: Throwable) : Result } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt ================================================ package tachiyomi.domain.category.interactor import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import logcat.LogPriority import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class ReorderCategory( private val categoryRepository: CategoryRepository, ) { private val mutex = Mutex() suspend fun await(category: Category, newIndex: Int) = withNonCancellableContext { mutex.withLock { val categories = categoryRepository.getAll() .filterNot(Category::isSystemCategory) .toMutableList() val currentIndex = categories.indexOfFirst { it.id == category.id } if (currentIndex == -1) { return@withNonCancellableContext Result.Unchanged } try { categories.add(newIndex, categories.removeAt(currentIndex)) val updates = categories.mapIndexed { index, category -> CategoryUpdate( id = category.id, order = index.toLong(), ) } categoryRepository.updatePartial(updates) Result.Success } catch (e: Exception) { logcat(LogPriority.ERROR, e) Result.InternalError(e) } } } sealed interface Result { data object Success : Result data object Unchanged : Result data class InternalError(val error: Throwable) : Result } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/ResetCategoryFlags.kt ================================================ package tachiyomi.domain.category.interactor import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.library.model.plus import tachiyomi.domain.library.service.LibraryPreferences class ResetCategoryFlags( private val preferences: LibraryPreferences, private val categoryRepository: CategoryRepository, ) { suspend fun await() { val sort = preferences.sortingMode.get() categoryRepository.updateAllFlags(sort.type + sort.direction) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/SetDisplayMode.kt ================================================ package tachiyomi.domain.category.interactor import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.service.LibraryPreferences class SetDisplayMode( private val preferences: LibraryPreferences, ) { fun await(display: LibraryDisplayMode) { preferences.displayMode.set(display) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/SetMangaCategories.kt ================================================ package tachiyomi.domain.category.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.repository.MangaRepository class SetMangaCategories( private val mangaRepository: MangaRepository, ) { suspend fun await(mangaId: Long, categoryIds: List) { try { mangaRepository.setMangaCategories(mangaId, categoryIds) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt ================================================ package tachiyomi.domain.category.interactor import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository import tachiyomi.domain.library.model.LibrarySort import tachiyomi.domain.library.model.plus import tachiyomi.domain.library.service.LibraryPreferences import kotlin.random.Random class SetSortModeForCategory( private val preferences: LibraryPreferences, private val categoryRepository: CategoryRepository, ) { suspend fun await(categoryId: Long?, type: LibrarySort.Type, direction: LibrarySort.Direction) { val category = categoryId?.let { categoryRepository.get(it) } val flags = (category?.flags ?: 0) + type + direction if (type == LibrarySort.Type.Random) { preferences.randomSortSeed.set(Random.nextInt()) } if (category != null && preferences.categorizedDisplaySettings.get()) { categoryRepository.updatePartial( CategoryUpdate( id = category.id, flags = flags, ), ) } else { preferences.sortingMode.set(LibrarySort(type, direction)) categoryRepository.updateAllFlags(flags) } } suspend fun await( category: Category?, type: LibrarySort.Type, direction: LibrarySort.Direction, ) { await(category?.id, type, direction) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/interactor/UpdateCategory.kt ================================================ package tachiyomi.domain.category.interactor import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.domain.category.model.CategoryUpdate import tachiyomi.domain.category.repository.CategoryRepository class UpdateCategory( private val categoryRepository: CategoryRepository, ) { suspend fun await(payload: CategoryUpdate): Result = withNonCancellableContext { try { categoryRepository.updatePartial(payload) Result.Success } catch (e: Exception) { Result.Error(e) } } sealed interface Result { data object Success : Result data class Error(val error: Exception) : Result } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/model/Category.kt ================================================ package tachiyomi.domain.category.model import java.io.Serializable data class Category( val id: Long, val name: String, val order: Long, val flags: Long, ) : Serializable { val isSystemCategory: Boolean = id == UNCATEGORIZED_ID companion object { const val UNCATEGORIZED_ID = 0L } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/model/CategoryUpdate.kt ================================================ package tachiyomi.domain.category.model data class CategoryUpdate( val id: Long, val name: String? = null, val order: Long? = null, val flags: Long? = null, ) ================================================ FILE: domain/src/main/java/tachiyomi/domain/category/repository/CategoryRepository.kt ================================================ package tachiyomi.domain.category.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.category.model.Category import tachiyomi.domain.category.model.CategoryUpdate interface CategoryRepository { suspend fun get(id: Long): Category? suspend fun getAll(): List fun getAllAsFlow(): Flow> suspend fun getCategoriesByMangaId(mangaId: Long): List fun getCategoriesByMangaIdAsFlow(mangaId: Long): Flow> suspend fun insert(category: Category) suspend fun updatePartial(update: CategoryUpdate) suspend fun updatePartial(updates: List) suspend fun updateAllFlags(flags: Long?) suspend fun delete(categoryId: Long) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/GetBookmarkedChaptersByMangaId.kt ================================================ package tachiyomi.domain.chapter.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.repository.ChapterRepository class GetBookmarkedChaptersByMangaId( private val chapterRepository: ChapterRepository, ) { suspend fun await(mangaId: Long): List { return try { chapterRepository.getBookmarkedChaptersByMangaId(mangaId) } catch (e: Exception) { logcat(LogPriority.ERROR, e) emptyList() } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/GetChapter.kt ================================================ package tachiyomi.domain.chapter.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.repository.ChapterRepository class GetChapter( private val chapterRepository: ChapterRepository, ) { suspend fun await(id: Long): Chapter? { return try { chapterRepository.getChapterById(id) } catch (e: Exception) { logcat(LogPriority.ERROR, e) null } } suspend fun await(url: String, mangaId: Long): Chapter? { return try { chapterRepository.getChapterByUrlAndMangaId(url, mangaId) } catch (e: Exception) { logcat(LogPriority.ERROR, e) null } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/GetChapterByUrlAndMangaId.kt ================================================ package tachiyomi.domain.chapter.interactor import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.repository.ChapterRepository class GetChapterByUrlAndMangaId( private val chapterRepository: ChapterRepository, ) { suspend fun await(url: String, sourceId: Long): Chapter? { return try { chapterRepository.getChapterByUrlAndMangaId(url, sourceId) } catch (e: Exception) { null } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/GetChaptersByMangaId.kt ================================================ package tachiyomi.domain.chapter.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.repository.ChapterRepository class GetChaptersByMangaId( private val chapterRepository: ChapterRepository, ) { suspend fun await(mangaId: Long, applyScanlatorFilter: Boolean = false): List { return try { chapterRepository.getChapterByMangaId(mangaId, applyScanlatorFilter) } catch (e: Exception) { logcat(LogPriority.ERROR, e) emptyList() } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/SetMangaDefaultChapterFlags.kt ================================================ package tachiyomi.domain.chapter.interactor import tachiyomi.core.common.util.lang.withNonCancellableContext import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.interactor.SetMangaChapterFlags import tachiyomi.domain.manga.model.Manga class SetMangaDefaultChapterFlags( private val libraryPreferences: LibraryPreferences, private val setMangaChapterFlags: SetMangaChapterFlags, private val getFavorites: GetFavorites, ) { suspend fun await(manga: Manga) { withNonCancellableContext { with(libraryPreferences) { setMangaChapterFlags.awaitSetAllFlags( mangaId = manga.id, unreadFilter = filterChapterByRead.get(), downloadedFilter = filterChapterByDownloaded.get(), bookmarkedFilter = filterChapterByBookmarked.get(), sortingMode = sortChapterBySourceOrNumber.get(), sortingDirection = sortChapterByAscendingOrDescending.get(), displayMode = displayChapterByNameOrNumber.get(), ) } } } suspend fun awaitAll() { withNonCancellableContext { getFavorites.await().forEach { await(it) } } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/ShouldUpdateDbChapter.kt ================================================ package tachiyomi.domain.chapter.interactor import tachiyomi.domain.chapter.model.Chapter class ShouldUpdateDbChapter { fun await(dbChapter: Chapter, sourceChapter: Chapter): Boolean { return dbChapter.scanlator != sourceChapter.scanlator || dbChapter.name != sourceChapter.name || dbChapter.dateUpload != sourceChapter.dateUpload || dbChapter.chapterNumber != sourceChapter.chapterNumber || dbChapter.sourceOrder != sourceChapter.sourceOrder } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/interactor/UpdateChapter.kt ================================================ package tachiyomi.domain.chapter.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.ChapterUpdate import tachiyomi.domain.chapter.repository.ChapterRepository class UpdateChapter( private val chapterRepository: ChapterRepository, ) { suspend fun await(chapterUpdate: ChapterUpdate) { try { chapterRepository.update(chapterUpdate) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } suspend fun awaitAll(chapterUpdates: List) { try { chapterRepository.updateAll(chapterUpdates) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/model/Chapter.kt ================================================ package tachiyomi.domain.chapter.model data class Chapter( val id: Long, val mangaId: Long, val read: Boolean, val bookmark: Boolean, val lastPageRead: Long, val dateFetch: Long, val sourceOrder: Long, val url: String, val name: String, val dateUpload: Long, val chapterNumber: Double, val scanlator: String?, val lastModifiedAt: Long, val version: Long, ) { val isRecognizedNumber: Boolean get() = chapterNumber >= 0f fun copyFrom(other: Chapter): Chapter { return copy( name = other.name, url = other.url, dateUpload = other.dateUpload, chapterNumber = other.chapterNumber, scanlator = other.scanlator?.ifBlank { null }, ) } companion object { fun create() = Chapter( id = -1, mangaId = -1, read = false, bookmark = false, lastPageRead = 0, dateFetch = 0, sourceOrder = 0, url = "", name = "", dateUpload = -1, chapterNumber = -1.0, scanlator = null, lastModifiedAt = 0, version = 1, ) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/model/ChapterUpdate.kt ================================================ package tachiyomi.domain.chapter.model data class ChapterUpdate( val id: Long, val mangaId: Long? = null, val read: Boolean? = null, val bookmark: Boolean? = null, val lastPageRead: Long? = null, val dateFetch: Long? = null, val sourceOrder: Long? = null, val url: String? = null, val name: String? = null, val dateUpload: Long? = null, val chapterNumber: Double? = null, val scanlator: String? = null, val version: Long? = null, ) fun Chapter.toChapterUpdate(): ChapterUpdate { return ChapterUpdate( id, mangaId, read, bookmark, lastPageRead, dateFetch, sourceOrder, url, name, dateUpload, chapterNumber, scanlator, version, ) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/model/NoChaptersException.kt ================================================ package tachiyomi.domain.chapter.model class NoChaptersException : Exception() ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/repository/ChapterRepository.kt ================================================ package tachiyomi.domain.chapter.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.ChapterUpdate interface ChapterRepository { suspend fun addAll(chapters: List): List suspend fun update(chapterUpdate: ChapterUpdate) suspend fun updateAll(chapterUpdates: List) suspend fun removeChaptersWithIds(chapterIds: List) suspend fun getChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean = false): List suspend fun getScanlatorsByMangaId(mangaId: Long): List fun getScanlatorsByMangaIdAsFlow(mangaId: Long): Flow> suspend fun getBookmarkedChaptersByMangaId(mangaId: Long): List suspend fun getChapterById(id: Long): Chapter? suspend fun getChapterByMangaIdAsFlow(mangaId: Long, applyScanlatorFilter: Boolean = false): Flow> suspend fun getChapterByUrlAndMangaId(url: String, mangaId: Long): Chapter? } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/service/ChapterRecognition.kt ================================================ package tachiyomi.domain.chapter.service /** * -R> = regex conversion. */ object ChapterRecognition { private const val NUMBER_PATTERN = """([0-9]+)(\.[0-9]+)?(\.?[a-z]+)?""" /** * All cases with Ch.xx * Mokushiroku Alice Vol.1 Ch. 4: Misrepresentation -R> 4 */ private val basic = Regex("""(?<=ch\.) *$NUMBER_PATTERN""") /** * Example: Bleach 567: Down With Snowwhite -R> 567 */ private val number = Regex(NUMBER_PATTERN) /** * Regex used to remove unwanted tags * Example Prison School 12 v.1 vol004 version1243 volume64 -R> Prison School 12 */ private val unwanted = Regex("""\b(?:v|ver|vol|version|volume|season|s)[^a-z]?[0-9]+""") /** * Regex used to remove unwanted whitespace * Example One Piece 12 special -R> One Piece 12special */ private val unwantedWhiteSpace = Regex("""\s(?=extra|special|omake)""") fun parseChapterNumber( mangaTitle: String, chapterName: String, chapterNumber: Double? = null, ): Double { // If chapter number is known return. if (chapterNumber != null && (chapterNumber == -2.0 || chapterNumber > -1.0)) { return chapterNumber } // Get chapter title with lower case val cleanChapterName = chapterName.lowercase() // Remove manga title from chapter title. .replace(mangaTitle.lowercase(), "").trim() // Remove comma's or hyphens. .replace(',', '.') .replace('-', '.') // Remove unwanted white spaces. .replace(unwantedWhiteSpace, "") val numberMatch = number.findAll(cleanChapterName) when { numberMatch.none() -> { return chapterNumber ?: -1.0 } numberMatch.count() > 1 -> { // Remove unwanted tags. unwanted.replace(cleanChapterName, "").let { name -> // Check base case ch.xx basic.find(name)?.let { return getChapterNumberFromMatch(it) } // need to find again first number might already removed number.find(name)?.let { return getChapterNumberFromMatch(it) } } } } // return the first number encountered return getChapterNumberFromMatch(numberMatch.first()) } /** * Check if chapter number is found and return it * @param match result of regex * @return chapter number if found else null */ private fun getChapterNumberFromMatch(match: MatchResult): Double { return match.let { val initial = it.groups[1]?.value?.toDouble()!! val subChapterDecimal = it.groups[2]?.value val subChapterAlpha = it.groups[3]?.value val addition = checkForDecimal(subChapterDecimal, subChapterAlpha) initial.plus(addition) } } /** * Check for decimal in received strings * @param decimal decimal value of regex * @param alpha alpha value of regex * @return decimal/alpha float value */ private fun checkForDecimal(decimal: String?, alpha: String?): Double { if (!decimal.isNullOrEmpty()) { return decimal.toDouble() } if (!alpha.isNullOrEmpty()) { if (alpha.contains("extra")) { return 0.99 } if (alpha.contains("omake")) { return 0.98 } if (alpha.contains("special")) { return 0.97 } val trimmedAlpha = alpha.trimStart('.') if (trimmedAlpha.length == 1) { return parseAlphaPostFix(trimmedAlpha[0]) } } return 0.0 } /** * x.a -> x.1, x.b -> x.2, etc */ private fun parseAlphaPostFix(alpha: Char): Double { val number = alpha.code - ('a'.code - 1) if (number >= 10) return 0.0 return number / 10.0 } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/service/ChapterSort.kt ================================================ package tachiyomi.domain.chapter.service import tachiyomi.core.common.util.lang.compareToWithCollator import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga fun getChapterSort( manga: Manga, sortDescending: Boolean = manga.sortDescending(), ): ( Chapter, Chapter, ) -> Int { return when (manga.sorting) { Manga.CHAPTER_SORTING_SOURCE -> when (sortDescending) { true -> { c1, c2 -> c1.sourceOrder.compareTo(c2.sourceOrder) } false -> { c1, c2 -> c2.sourceOrder.compareTo(c1.sourceOrder) } } Manga.CHAPTER_SORTING_NUMBER -> when (sortDescending) { true -> { c1, c2 -> c2.chapterNumber.compareTo(c1.chapterNumber) } false -> { c1, c2 -> c1.chapterNumber.compareTo(c2.chapterNumber) } } Manga.CHAPTER_SORTING_UPLOAD_DATE -> when (sortDescending) { true -> { c1, c2 -> c2.dateUpload.compareTo(c1.dateUpload) } false -> { c1, c2 -> c1.dateUpload.compareTo(c2.dateUpload) } } Manga.CHAPTER_SORTING_ALPHABET -> when (sortDescending) { true -> { c1, c2 -> c2.name.compareToWithCollator(c1.name) } false -> { c1, c2 -> c1.name.compareToWithCollator(c2.name) } } else -> throw NotImplementedError("Invalid chapter sorting method: ${manga.sorting}") } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/chapter/service/MissingChapters.kt ================================================ package tachiyomi.domain.chapter.service import tachiyomi.domain.chapter.model.Chapter import kotlin.math.floor fun List.missingChaptersCount(): Int { if (this.isEmpty()) { return 0 } val chapters = this // Ignore unknown chapter numbers .filterNot { it == -1.0 } // Convert to integers, as we cannot check if 16.5 is missing .map(Double::toInt) // Only keep unique chapters so that -1 or 16 are not counted multiple times .distinct() .sorted() if (chapters.isEmpty()) { return 0 } var missingChaptersCount = 0 var previousChapter = 0 // The actual chapter number, not the array index // We go from 0 to lastChapter - Make sure to use the current index instead of the value for (i in chapters.indices) { val currentChapter = chapters[i] if (currentChapter > previousChapter + 1) { // Add the amount of missing chapters missingChaptersCount += currentChapter - previousChapter - 1 } previousChapter = currentChapter } return missingChaptersCount } fun calculateChapterGap(higherChapter: Chapter?, lowerChapter: Chapter?): Int { if (higherChapter == null || lowerChapter == null) return 0 if (!higherChapter.isRecognizedNumber || !lowerChapter.isRecognizedNumber) return 0 return calculateChapterGap(higherChapter.chapterNumber, lowerChapter.chapterNumber) } fun calculateChapterGap(higherChapterNumber: Double, lowerChapterNumber: Double): Int { if (higherChapterNumber < 0.0 || lowerChapterNumber < 0.0) return 0 return floor(higherChapterNumber).toInt() - floor(lowerChapterNumber).toInt() - 1 } ================================================ FILE: domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt ================================================ package tachiyomi.domain.download.service import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class DownloadPreferences( preferenceStore: PreferenceStore, ) { val downloadOnlyOverWifi: Preference = preferenceStore.getBoolean( "pref_download_only_over_wifi_key", true, ) val saveChaptersAsCBZ: Preference = preferenceStore.getBoolean("save_chapter_as_cbz", true) val splitTallImages: Preference = preferenceStore.getBoolean("split_tall_images", true) val autoDownloadWhileReading: Preference = preferenceStore.getInt("auto_download_while_reading", 0) val removeAfterReadSlots: Preference = preferenceStore.getInt("remove_after_read_slots", -1) val removeAfterMarkedAsRead: Preference = preferenceStore.getBoolean( "pref_remove_after_marked_as_read_key", false, ) val removeBookmarkedChapters: Preference = preferenceStore.getBoolean("pref_remove_bookmarked", false) val removeExcludeCategories: Preference> = preferenceStore.getStringSet( REMOVE_EXCLUDE_CATEGORIES_PREF_KEY, emptySet(), ) val downloadNewChapters: Preference = preferenceStore.getBoolean("download_new", false) val downloadNewChapterCategories: Preference> = preferenceStore.getStringSet( DOWNLOAD_NEW_CATEGORIES_PREF_KEY, emptySet(), ) val downloadNewChapterCategoriesExclude: Preference> = preferenceStore.getStringSet( DOWNLOAD_NEW_CATEGORIES_EXCLUDE_PREF_KEY, emptySet(), ) val downloadNewUnreadChaptersOnly: Preference = preferenceStore.getBoolean( "download_new_unread_chapters_only", false, ) val parallelSourceLimit: Preference = preferenceStore.getInt("download_parallel_source_limit", 5) val parallelPageLimit: Preference = preferenceStore.getInt("download_parallel_page_limit", 5) companion object { private const val REMOVE_EXCLUDE_CATEGORIES_PREF_KEY = "remove_exclude_categories" private const val DOWNLOAD_NEW_CATEGORIES_PREF_KEY = "download_new_categories" private const val DOWNLOAD_NEW_CATEGORIES_EXCLUDE_PREF_KEY = "download_new_categories_exclude" val categoryPreferenceKeys = setOf( REMOVE_EXCLUDE_CATEGORIES_PREF_KEY, DOWNLOAD_NEW_CATEGORIES_PREF_KEY, DOWNLOAD_NEW_CATEGORIES_EXCLUDE_PREF_KEY, ) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/interactor/GetHistory.kt ================================================ package tachiyomi.domain.history.interactor import kotlinx.coroutines.flow.Flow import tachiyomi.domain.history.model.History import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.history.repository.HistoryRepository class GetHistory( private val repository: HistoryRepository, ) { suspend fun await(mangaId: Long): List { return repository.getHistoryByMangaId(mangaId) } fun subscribe(query: String): Flow> { return repository.getHistory(query) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/interactor/GetNextChapters.kt ================================================ package tachiyomi.domain.history.interactor import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.service.getChapterSort import tachiyomi.domain.history.repository.HistoryRepository import tachiyomi.domain.manga.interactor.GetManga import kotlin.math.max class GetNextChapters( private val getChaptersByMangaId: GetChaptersByMangaId, private val getManga: GetManga, private val historyRepository: HistoryRepository, ) { suspend fun await(onlyUnread: Boolean = true): List { val history = historyRepository.getLastHistory() ?: return emptyList() return await(history.mangaId, history.chapterId, onlyUnread) } suspend fun await(mangaId: Long, onlyUnread: Boolean = true): List { val manga = getManga.await(mangaId) ?: return emptyList() val chapters = getChaptersByMangaId.await(mangaId, applyScanlatorFilter = true) .sortedWith(getChapterSort(manga, sortDescending = false)) return if (onlyUnread) { chapters.filterNot { it.read } } else { chapters } } suspend fun await( mangaId: Long, fromChapterId: Long, onlyUnread: Boolean = true, ): List { val chapters = await(mangaId, onlyUnread) val currChapterIndex = chapters.indexOfFirst { it.id == fromChapterId } val nextChapters = chapters.subList(max(0, currChapterIndex), chapters.size) if (onlyUnread) { return nextChapters } // The "next chapter" is either: // - The current chapter if it isn't completely read // - The chapters after the current chapter if the current one is completely read val fromChapter = chapters.getOrNull(currChapterIndex) return if (fromChapter != null && !fromChapter.read) { nextChapters } else { nextChapters.drop(1) } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/interactor/GetTotalReadDuration.kt ================================================ package tachiyomi.domain.history.interactor import tachiyomi.domain.history.repository.HistoryRepository class GetTotalReadDuration( private val repository: HistoryRepository, ) { suspend fun await(): Long { return repository.getTotalReadDuration() } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/interactor/RemoveHistory.kt ================================================ package tachiyomi.domain.history.interactor import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.domain.history.repository.HistoryRepository class RemoveHistory( private val repository: HistoryRepository, ) { suspend fun awaitAll(): Boolean { return repository.deleteAllHistory() } suspend fun await(history: HistoryWithRelations) { repository.resetHistory(history.id) } suspend fun await(mangaId: Long) { repository.resetHistoryByMangaId(mangaId) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/interactor/UpsertHistory.kt ================================================ package tachiyomi.domain.history.interactor import tachiyomi.domain.history.model.HistoryUpdate import tachiyomi.domain.history.repository.HistoryRepository class UpsertHistory( private val historyRepository: HistoryRepository, ) { suspend fun await(historyUpdate: HistoryUpdate) { historyRepository.upsertHistory(historyUpdate) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/model/History.kt ================================================ package tachiyomi.domain.history.model import java.util.Date data class History( val id: Long, val chapterId: Long, val readAt: Date?, val readDuration: Long, ) { companion object { fun create() = History( id = -1L, chapterId = -1L, readAt = null, readDuration = -1L, ) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/model/HistoryUpdate.kt ================================================ package tachiyomi.domain.history.model import java.util.Date data class HistoryUpdate( val chapterId: Long, val readAt: Date, val sessionReadDuration: Long, ) ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/model/HistoryWithRelations.kt ================================================ package tachiyomi.domain.history.model import tachiyomi.domain.manga.model.MangaCover import java.util.Date data class HistoryWithRelations( val id: Long, val chapterId: Long, val mangaId: Long, val title: String, val chapterNumber: Double, val readAt: Date?, val readDuration: Long, val coverData: MangaCover, ) ================================================ FILE: domain/src/main/java/tachiyomi/domain/history/repository/HistoryRepository.kt ================================================ package tachiyomi.domain.history.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.history.model.History import tachiyomi.domain.history.model.HistoryUpdate import tachiyomi.domain.history.model.HistoryWithRelations interface HistoryRepository { fun getHistory(query: String): Flow> suspend fun getLastHistory(): HistoryWithRelations? suspend fun getTotalReadDuration(): Long suspend fun getHistoryByMangaId(mangaId: Long): List suspend fun resetHistory(historyId: Long) suspend fun resetHistoryByMangaId(mangaId: Long) suspend fun deleteAllHistory(): Boolean suspend fun upsertHistory(historyUpdate: HistoryUpdate) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/library/model/Flag.kt ================================================ package tachiyomi.domain.library.model interface Flag { val flag: Long } interface Mask { val mask: Long } interface FlagWithMask : Flag, Mask operator fun Long.contains(other: Flag): Boolean { return if (other is Mask) { other.flag == this and other.mask } else { other.flag == this } } operator fun Long.plus(other: Flag): Long { return if (other is Mask) { this and other.mask.inv() or (other.flag and other.mask) } else { this or other.flag } } operator fun Flag.plus(other: Flag): Long { return if (other is Mask) { this.flag and other.mask.inv() or (other.flag and other.mask) } else { this.flag or other.flag } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/library/model/LibraryDisplayMode.kt ================================================ package tachiyomi.domain.library.model sealed interface LibraryDisplayMode { data object CompactGrid : LibraryDisplayMode data object ComfortableGrid : LibraryDisplayMode data object List : LibraryDisplayMode data object CoverOnlyGrid : LibraryDisplayMode object Serializer { fun deserialize(serialized: String): LibraryDisplayMode { return LibraryDisplayMode.deserialize(serialized) } fun serialize(value: LibraryDisplayMode): String { return value.serialize() } } companion object { val values by lazy { setOf(CompactGrid, ComfortableGrid, List, CoverOnlyGrid) } val default = CompactGrid fun deserialize(serialized: String): LibraryDisplayMode { return when (serialized) { "COMFORTABLE_GRID" -> ComfortableGrid "COMPACT_GRID" -> CompactGrid "COVER_ONLY_GRID" -> CoverOnlyGrid "LIST" -> List else -> default } } } fun serialize(): String { return when (this) { ComfortableGrid -> "COMFORTABLE_GRID" CompactGrid -> "COMPACT_GRID" CoverOnlyGrid -> "COVER_ONLY_GRID" List -> "LIST" } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/library/model/LibraryManga.kt ================================================ package tachiyomi.domain.library.model import tachiyomi.domain.manga.model.Manga data class LibraryManga( val manga: Manga, val categories: List, val totalChapters: Long, val readCount: Long, val bookmarkCount: Long, val latestUpload: Long, val chapterFetchedAt: Long, val lastRead: Long, ) { val id: Long = manga.id val unreadCount get() = totalChapters - readCount val hasBookmarks get() = bookmarkCount > 0 val hasStarted = readCount > 0 } ================================================ FILE: domain/src/main/java/tachiyomi/domain/library/model/LibrarySortMode.kt ================================================ package tachiyomi.domain.library.model import tachiyomi.domain.category.model.Category data class LibrarySort( val type: Type, val direction: Direction, ) : FlagWithMask { override val flag: Long get() = type + direction override val mask: Long get() = type.mask or direction.mask val isAscending: Boolean get() = direction == Direction.Ascending sealed class Type( override val flag: Long, ) : FlagWithMask { override val mask: Long = 0b00111100L data object Alphabetical : Type(0b00000000) data object LastRead : Type(0b00000100) data object LastUpdate : Type(0b00001000) data object UnreadCount : Type(0b00001100) data object TotalChapters : Type(0b00010000) data object LatestChapter : Type(0b00010100) data object ChapterFetchDate : Type(0b00011000) data object DateAdded : Type(0b00011100) data object TrackerMean : Type(0b00100000) data object Random : Type(0b00111100) companion object { fun valueOf(flag: Long): Type { return types.find { type -> type.flag == flag and type.mask } ?: default.type } } } sealed class Direction( override val flag: Long, ) : FlagWithMask { override val mask: Long = 0b01000000L data object Ascending : Direction(0b01000000) data object Descending : Direction(0b00000000) companion object { fun valueOf(flag: Long): Direction { return directions.find { direction -> direction.flag == flag and direction.mask } ?: default.direction } } } object Serializer { fun deserialize(serialized: String): LibrarySort { return LibrarySort.deserialize(serialized) } fun serialize(value: LibrarySort): String { return value.serialize() } } companion object { val types by lazy { setOf( Type.Alphabetical, Type.LastRead, Type.LastUpdate, Type.UnreadCount, Type.TotalChapters, Type.LatestChapter, Type.ChapterFetchDate, Type.DateAdded, Type.TrackerMean, Type.Random, ) } val directions by lazy { setOf(Direction.Ascending, Direction.Descending) } val default = LibrarySort(Type.Alphabetical, Direction.Ascending) fun valueOf(flag: Long?): LibrarySort { if (flag == null) return default return LibrarySort( Type.valueOf(flag), Direction.valueOf(flag), ) } fun deserialize(serialized: String): LibrarySort { if (serialized.isEmpty()) return default return try { val values = serialized.split(",") val type = when (values[0]) { "ALPHABETICAL" -> Type.Alphabetical "LAST_READ" -> Type.LastRead "LAST_MANGA_UPDATE" -> Type.LastUpdate "UNREAD_COUNT" -> Type.UnreadCount "TOTAL_CHAPTERS" -> Type.TotalChapters "LATEST_CHAPTER" -> Type.LatestChapter "CHAPTER_FETCH_DATE" -> Type.ChapterFetchDate "DATE_ADDED" -> Type.DateAdded "TRACKER_MEAN" -> Type.TrackerMean "RANDOM" -> Type.Random else -> Type.Alphabetical } val ascending = if (values[1] == "ASCENDING") Direction.Ascending else Direction.Descending LibrarySort(type, ascending) } catch (e: Exception) { default } } } fun serialize(): String { val type = when (type) { Type.Alphabetical -> "ALPHABETICAL" Type.LastRead -> "LAST_READ" Type.LastUpdate -> "LAST_MANGA_UPDATE" Type.UnreadCount -> "UNREAD_COUNT" Type.TotalChapters -> "TOTAL_CHAPTERS" Type.LatestChapter -> "LATEST_CHAPTER" Type.ChapterFetchDate -> "CHAPTER_FETCH_DATE" Type.DateAdded -> "DATE_ADDED" Type.TrackerMean -> "TRACKER_MEAN" Type.Random -> "RANDOM" } val direction = if (direction == Direction.Ascending) "ASCENDING" else "DESCENDING" return "$type,$direction" } } val Category?.sort: LibrarySort get() = LibrarySort.valueOf(this?.flags) ================================================ FILE: domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt ================================================ package tachiyomi.domain.library.service import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.getEnum import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibrarySort import tachiyomi.domain.manga.model.Manga class LibraryPreferences( private val preferenceStore: PreferenceStore, ) { val displayMode: Preference = preferenceStore.getObjectFromString( "pref_display_mode_library", LibraryDisplayMode.default, LibraryDisplayMode.Serializer::serialize, LibraryDisplayMode.Serializer::deserialize, ) val sortingMode: Preference = preferenceStore.getObjectFromString( "library_sorting_mode", LibrarySort.default, LibrarySort.Serializer::serialize, LibrarySort.Serializer::deserialize, ) val randomSortSeed: Preference = preferenceStore.getInt("library_random_sort_seed", 0) val portraitColumns: Preference = preferenceStore.getInt("pref_library_columns_portrait_key", 0) val landscapeColumns: Preference = preferenceStore.getInt("pref_library_columns_landscape_key", 0) val lastUpdatedTimestamp: Preference = preferenceStore.getLong( Preference.appStateKey("library_update_last_timestamp"), 0L, ) val autoUpdateInterval: Preference = preferenceStore.getInt("pref_library_update_interval_key", 0) val autoUpdateDeviceRestrictions: Preference> = preferenceStore.getStringSet( "library_update_restriction", setOf( DEVICE_ONLY_ON_WIFI, ), ) val autoUpdateMangaRestrictions: Preference> = preferenceStore.getStringSet( "library_update_manga_restriction", setOf( MANGA_HAS_UNREAD, MANGA_NON_COMPLETED, MANGA_NON_READ, MANGA_OUTSIDE_RELEASE_PERIOD, ), ) val autoUpdateMetadata: Preference = preferenceStore.getBoolean("auto_update_metadata", false) val showContinueReadingButton: Preference = preferenceStore.getBoolean( "display_continue_reading_button", false, ) val markDuplicateReadChapterAsRead: Preference> = preferenceStore.getStringSet( "mark_duplicate_read_chapter_read", emptySet(), ) // region Filter val filterDownloaded: Preference = preferenceStore.getEnum( "pref_filter_library_downloaded_v2", TriState.DISABLED, ) val filterUnread: Preference = preferenceStore.getEnum("pref_filter_library_unread_v2", TriState.DISABLED) val filterStarted: Preference = preferenceStore.getEnum( "pref_filter_library_started_v2", TriState.DISABLED, ) val filterBookmarked: Preference = preferenceStore.getEnum( "pref_filter_library_bookmarked_v2", TriState.DISABLED, ) val filterCompleted: Preference = preferenceStore.getEnum( "pref_filter_library_completed_v2", TriState.DISABLED, ) val filterIntervalCustom: Preference = preferenceStore.getEnum( "pref_filter_library_interval_custom", TriState.DISABLED, ) fun filterTracking(id: Int): Preference = preferenceStore.getEnum( "pref_filter_library_tracked_${id}_v2", TriState.DISABLED, ) // endregion // region Badges val downloadBadge: Preference = preferenceStore.getBoolean("display_download_badge", false) val unreadBadge: Preference = preferenceStore.getBoolean("display_unread_badge", true) val localBadge: Preference = preferenceStore.getBoolean("display_local_badge", true) val languageBadge: Preference = preferenceStore.getBoolean("display_language_badge", false) val newShowUpdatesCount: Preference = preferenceStore.getBoolean("library_show_updates_count", true) val newUpdatesCount: Preference = preferenceStore.getInt( Preference.appStateKey("library_unseen_updates_count"), 0, ) // endregion // region Category val defaultCategory: Preference = preferenceStore.getInt(DEFAULT_CATEGORY_PREF_KEY, -1) val lastUsedCategory: Preference = preferenceStore.getInt(Preference.appStateKey("last_used_category"), 0) val categoryTabs: Preference = preferenceStore.getBoolean("display_category_tabs", true) val categoryNumberOfItems: Preference = preferenceStore.getBoolean("display_number_of_items", false) val categorizedDisplaySettings: Preference = preferenceStore.getBoolean("categorized_display", false) val updateCategories: Preference> = preferenceStore.getStringSet( LIBRARY_UPDATE_CATEGORIES_PREF_KEY, emptySet(), ) val updateCategoriesExclude: Preference> = preferenceStore.getStringSet( LIBRARY_UPDATE_CATEGORIES_EXCLUDE_PREF_KEY, emptySet(), ) // endregion // region Chapter val filterChapterByRead: Preference = preferenceStore.getLong( "default_chapter_filter_by_read", Manga.SHOW_ALL, ) val filterChapterByDownloaded: Preference = preferenceStore.getLong( "default_chapter_filter_by_downloaded", Manga.SHOW_ALL, ) val filterChapterByBookmarked: Preference = preferenceStore.getLong( "default_chapter_filter_by_bookmarked", Manga.SHOW_ALL, ) // and upload date val sortChapterBySourceOrNumber: Preference = preferenceStore.getLong( "default_chapter_sort_by_source_or_number", Manga.CHAPTER_SORTING_SOURCE, ) val displayChapterByNameOrNumber: Preference = preferenceStore.getLong( "default_chapter_display_by_name_or_number", Manga.CHAPTER_DISPLAY_NAME, ) val sortChapterByAscendingOrDescending: Preference = preferenceStore.getLong( "default_chapter_sort_by_ascending_or_descending", Manga.CHAPTER_SORT_DESC, ) fun setChapterSettingsDefault(manga: Manga) { filterChapterByRead.set(manga.unreadFilterRaw) filterChapterByDownloaded.set(manga.downloadedFilterRaw) filterChapterByBookmarked.set(manga.bookmarkedFilterRaw) sortChapterBySourceOrNumber.set(manga.sorting) displayChapterByNameOrNumber.set(manga.displayMode) sortChapterByAscendingOrDescending.set( if (manga.sortDescending()) Manga.CHAPTER_SORT_DESC else Manga.CHAPTER_SORT_ASC, ) } val autoClearChapterCache: Preference = preferenceStore.getBoolean("auto_clear_chapter_cache", false) val hideMissingChapters: Preference = preferenceStore.getBoolean( "pref_hide_missing_chapter_indicators", false, ) // endregion // region Swipe Actions val swipeToStartAction: Preference = preferenceStore.getEnum( "pref_chapter_swipe_end_action", ChapterSwipeAction.ToggleBookmark, ) val swipeToEndAction: Preference = preferenceStore.getEnum( "pref_chapter_swipe_start_action", ChapterSwipeAction.ToggleRead, ) val updateMangaTitles: Preference = preferenceStore.getBoolean("pref_update_library_manga_titles", false) val disallowNonAsciiFilenames: Preference = preferenceStore.getBoolean( "disallow_non_ascii_filenames", false, ) // endregion enum class ChapterSwipeAction { ToggleRead, ToggleBookmark, Download, Disabled, } companion object { const val DEVICE_ONLY_ON_WIFI = "wifi" const val DEVICE_NETWORK_NOT_METERED = "network_not_metered" const val DEVICE_CHARGING = "ac" const val MANGA_NON_COMPLETED = "manga_ongoing" const val MANGA_HAS_UNREAD = "manga_fully_read" const val MANGA_NON_READ = "manga_started" const val MANGA_OUTSIDE_RELEASE_PERIOD = "manga_outside_release_period" const val MARK_DUPLICATE_CHAPTER_READ_NEW = "new" const val MARK_DUPLICATE_CHAPTER_READ_EXISTING = "existing" const val DEFAULT_CATEGORY_PREF_KEY = "default_category" private const val LIBRARY_UPDATE_CATEGORIES_PREF_KEY = "library_update_categories" private const val LIBRARY_UPDATE_CATEGORIES_EXCLUDE_PREF_KEY = "library_update_categories_exclude" val categoryPreferenceKeys = setOf( DEFAULT_CATEGORY_PREF_KEY, LIBRARY_UPDATE_CATEGORIES_PREF_KEY, LIBRARY_UPDATE_CATEGORIES_EXCLUDE_PREF_KEY, ) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/FetchInterval.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import java.time.Instant import java.time.ZoneId import java.time.ZonedDateTime import java.time.temporal.ChronoUnit import kotlin.math.absoluteValue class FetchInterval( private val getChaptersByMangaId: GetChaptersByMangaId, ) { suspend fun toMangaUpdate( manga: Manga, dateTime: ZonedDateTime, window: Pair, ): MangaUpdate { val interval = manga.fetchInterval.takeIf { it < 0 } ?: calculateInterval( chapters = getChaptersByMangaId.await(manga.id, applyScanlatorFilter = true), zone = dateTime.zone, ) val currentWindow = if (window.first == 0L && window.second == 0L) { getWindow(ZonedDateTime.now()) } else { window } val nextUpdate = calculateNextUpdate(manga, interval, dateTime, currentWindow) return MangaUpdate(id = manga.id, nextUpdate = nextUpdate, fetchInterval = interval) } fun getWindow(dateTime: ZonedDateTime): Pair { val today = dateTime.toLocalDate().atStartOfDay(dateTime.zone) val lowerBound = today.minusDays(GRACE_PERIOD) val upperBound = today.plusDays(GRACE_PERIOD) return Pair(lowerBound.toEpochSecond() * 1000, upperBound.toEpochSecond() * 1000 - 1) } internal fun calculateInterval(chapters: List, zone: ZoneId): Int { val chapterWindow = if (chapters.size <= 8) 3 else 10 val uploadDates = chapters.asSequence() .filter { it.dateUpload > 0L } .sortedByDescending { it.dateUpload } .map { ZonedDateTime.ofInstant(Instant.ofEpochMilli(it.dateUpload), zone) .toLocalDate() .atStartOfDay() } .distinct() .take(chapterWindow) .toList() val fetchDates = chapters.asSequence() .sortedByDescending { it.dateFetch } .map { ZonedDateTime.ofInstant(Instant.ofEpochMilli(it.dateFetch), zone) .toLocalDate() .atStartOfDay() } .distinct() .take(chapterWindow) .toList() val interval = when { // Enough upload date from source uploadDates.size >= 3 -> { val ranges = uploadDates.windowed(2).map { x -> x[1].until(x[0], ChronoUnit.DAYS) }.sorted() ranges[(ranges.size - 1) / 2].toInt() } // Enough fetch date from client fetchDates.size >= 3 -> { val ranges = fetchDates.windowed(2).map { x -> x[1].until(x[0], ChronoUnit.DAYS) }.sorted() ranges[(ranges.size - 1) / 2].toInt() } // Default to 7 days else -> 7 } return interval.coerceIn(1, MAX_INTERVAL) } private fun calculateNextUpdate( manga: Manga, interval: Int, dateTime: ZonedDateTime, window: Pair, ): Long { if (manga.nextUpdate in window.first.rangeTo(window.second + 1)) { return manga.nextUpdate } val latestDate = ZonedDateTime.ofInstant( if (manga.lastUpdate > 0) Instant.ofEpochMilli(manga.lastUpdate) else Instant.now(), dateTime.zone, ) .toLocalDate() .atStartOfDay() val timeSinceLatest = ChronoUnit.DAYS.between(latestDate, dateTime).toInt() val cycle = timeSinceLatest.floorDiv( interval.absoluteValue.takeIf { interval < 0 } ?: increaseInterval(interval, timeSinceLatest, increaseWhenOver = 10), ) return latestDate.plusDays((cycle + 1) * interval.absoluteValue.toLong()).toEpochSecond(dateTime.offset) * 1000 } private fun increaseInterval(delta: Int, timeSinceLatest: Int, increaseWhenOver: Int): Int { if (delta >= MAX_INTERVAL) return MAX_INTERVAL // double delta again if missed more than 9 check in new delta val cycle = timeSinceLatest.floorDiv(delta) + 1 return if (cycle > increaseWhenOver) { increaseInterval(delta * 2, timeSinceLatest, increaseWhenOver) } else { delta } } companion object { const val MAX_INTERVAL = 28 private const val GRACE_PERIOD = 1L } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/GetDuplicateLibraryManga.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaWithChapterCount import tachiyomi.domain.manga.repository.MangaRepository class GetDuplicateLibraryManga( private val mangaRepository: MangaRepository, ) { suspend operator fun invoke(manga: Manga): List { return mangaRepository.getDuplicateLibraryManga(manga.id, manga.title.lowercase()) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/GetFavorites.kt ================================================ package tachiyomi.domain.manga.interactor import kotlinx.coroutines.flow.Flow import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class GetFavorites( private val mangaRepository: MangaRepository, ) { suspend fun await(): List { return mangaRepository.getFavorites() } fun subscribe(sourceId: Long): Flow> { return mangaRepository.getFavoritesBySourceId(sourceId) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/GetLibraryManga.kt ================================================ package tachiyomi.domain.manga.interactor import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.retry import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.repository.MangaRepository import kotlin.time.Duration.Companion.seconds class GetLibraryManga( private val mangaRepository: MangaRepository, ) { suspend fun await(): List { return mangaRepository.getLibraryManga() } fun subscribe(): Flow> { return mangaRepository.getLibraryMangaAsFlow() .retry { if (it is NullPointerException) { delay(0.5.seconds) true } else { false } }.catch { this@GetLibraryManga.logcat(LogPriority.ERROR, it) } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/GetManga.kt ================================================ package tachiyomi.domain.manga.interactor import kotlinx.coroutines.flow.Flow import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class GetManga( private val mangaRepository: MangaRepository, ) { suspend fun await(id: Long): Manga? { return try { mangaRepository.getMangaById(id) } catch (e: Exception) { logcat(LogPriority.ERROR, e) null } } suspend fun subscribe(id: Long): Flow { return mangaRepository.getMangaByIdAsFlow(id) } fun subscribe(url: String, sourceId: Long): Flow { return mangaRepository.getMangaByUrlAndSourceIdAsFlow(url, sourceId) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/GetMangaByUrlAndSourceId.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class GetMangaByUrlAndSourceId( private val mangaRepository: MangaRepository, ) { suspend fun await(url: String, sourceId: Long): Manga? { return mangaRepository.getMangaByUrlAndSourceId(url, sourceId) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/GetMangaWithChapters.kt ================================================ package tachiyomi.domain.manga.interactor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.repository.ChapterRepository import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class GetMangaWithChapters( private val mangaRepository: MangaRepository, private val chapterRepository: ChapterRepository, ) { suspend fun subscribe(id: Long, applyScanlatorFilter: Boolean = false): Flow>> { return combine( mangaRepository.getMangaByIdAsFlow(id), chapterRepository.getChapterByMangaIdAsFlow(id, applyScanlatorFilter), ) { manga, chapters -> Pair(manga, chapters) } } suspend fun awaitManga(id: Long): Manga { return mangaRepository.getMangaById(id) } suspend fun awaitChapters(id: Long, applyScanlatorFilter: Boolean = false): List { return chapterRepository.getChapterByMangaId(id, applyScanlatorFilter) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.repository.MangaRepository class NetworkToLocalManga( private val mangaRepository: MangaRepository, ) { suspend operator fun invoke(manga: Manga): Manga { return invoke(listOf(manga)).single() } suspend operator fun invoke(manga: List): List { return mangaRepository.insertNetworkManga(manga) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/ResetViewerFlags.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.repository.MangaRepository class ResetViewerFlags( private val mangaRepository: MangaRepository, ) { suspend fun await(): Boolean { return mangaRepository.resetViewerFlags() } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/SetMangaChapterFlags.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.repository.MangaRepository class SetMangaChapterFlags( private val mangaRepository: MangaRepository, ) { suspend fun awaitSetDownloadedFilter(manga: Manga, flag: Long): Boolean { return mangaRepository.update( MangaUpdate( id = manga.id, chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_DOWNLOADED_MASK), ), ) } suspend fun awaitSetUnreadFilter(manga: Manga, flag: Long): Boolean { return mangaRepository.update( MangaUpdate( id = manga.id, chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_UNREAD_MASK), ), ) } suspend fun awaitSetBookmarkFilter(manga: Manga, flag: Long): Boolean { return mangaRepository.update( MangaUpdate( id = manga.id, chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_BOOKMARKED_MASK), ), ) } suspend fun awaitSetDisplayMode(manga: Manga, flag: Long): Boolean { return mangaRepository.update( MangaUpdate( id = manga.id, chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_DISPLAY_MASK), ), ) } suspend fun awaitSetSortingModeOrFlipOrder(manga: Manga, flag: Long): Boolean { val newFlags = manga.chapterFlags.let { if (manga.sorting == flag) { // Just flip the order val orderFlag = if (manga.sortDescending()) { Manga.CHAPTER_SORT_ASC } else { Manga.CHAPTER_SORT_DESC } it.setFlag(orderFlag, Manga.CHAPTER_SORT_DIR_MASK) } else { // Set new flag with ascending order it .setFlag(flag, Manga.CHAPTER_SORTING_MASK) .setFlag(Manga.CHAPTER_SORT_ASC, Manga.CHAPTER_SORT_DIR_MASK) } } return mangaRepository.update( MangaUpdate( id = manga.id, chapterFlags = newFlags, ), ) } suspend fun awaitSetAllFlags( mangaId: Long, unreadFilter: Long, downloadedFilter: Long, bookmarkedFilter: Long, sortingMode: Long, sortingDirection: Long, displayMode: Long, ): Boolean { return mangaRepository.update( MangaUpdate( id = mangaId, chapterFlags = 0L.setFlag(unreadFilter, Manga.CHAPTER_UNREAD_MASK) .setFlag(downloadedFilter, Manga.CHAPTER_DOWNLOADED_MASK) .setFlag(bookmarkedFilter, Manga.CHAPTER_BOOKMARKED_MASK) .setFlag(sortingMode, Manga.CHAPTER_SORTING_MASK) .setFlag(sortingDirection, Manga.CHAPTER_SORT_DIR_MASK) .setFlag(displayMode, Manga.CHAPTER_DISPLAY_MASK), ), ) } private fun Long.setFlag(flag: Long, mask: Long): Long { return this and mask.inv() or (flag and mask) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/interactor/UpdateMangaNotes.kt ================================================ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.repository.MangaRepository class UpdateMangaNotes( private val mangaRepository: MangaRepository, ) { suspend operator fun invoke(mangaId: Long, notes: String): Boolean { return mangaRepository.update( MangaUpdate( id = mangaId, notes = notes, ), ) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt ================================================ package tachiyomi.domain.manga.model import androidx.compose.runtime.Immutable import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.UpdateStrategy import tachiyomi.core.common.preference.TriState import java.io.Serializable import java.time.Instant @Immutable data class Manga( val id: Long, val source: Long, val favorite: Boolean, val lastUpdate: Long, val nextUpdate: Long, val fetchInterval: Int, val dateAdded: Long, val viewerFlags: Long, val chapterFlags: Long, val coverLastModified: Long, val url: String, val title: String, val artist: String?, val author: String?, val description: String?, val genre: List?, val status: Long, val thumbnailUrl: String?, val updateStrategy: UpdateStrategy, val initialized: Boolean, val lastModifiedAt: Long, val favoriteModifiedAt: Long?, val version: Long, val notes: String, ) : Serializable { val expectedNextUpdate: Instant? get() = nextUpdate .takeIf { status != SManga.COMPLETED.toLong() } ?.let { Instant.ofEpochMilli(it) } val sorting: Long get() = chapterFlags and CHAPTER_SORTING_MASK val displayMode: Long get() = chapterFlags and CHAPTER_DISPLAY_MASK val unreadFilterRaw: Long get() = chapterFlags and CHAPTER_UNREAD_MASK val downloadedFilterRaw: Long get() = chapterFlags and CHAPTER_DOWNLOADED_MASK val bookmarkedFilterRaw: Long get() = chapterFlags and CHAPTER_BOOKMARKED_MASK val unreadFilter: TriState get() = when (unreadFilterRaw) { CHAPTER_SHOW_UNREAD -> TriState.ENABLED_IS CHAPTER_SHOW_READ -> TriState.ENABLED_NOT else -> TriState.DISABLED } val bookmarkedFilter: TriState get() = when (bookmarkedFilterRaw) { CHAPTER_SHOW_BOOKMARKED -> TriState.ENABLED_IS CHAPTER_SHOW_NOT_BOOKMARKED -> TriState.ENABLED_NOT else -> TriState.DISABLED } fun sortDescending(): Boolean { return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC } companion object { // Generic filter that does not filter anything const val SHOW_ALL = 0x00000000L const val CHAPTER_SORT_DESC = 0x00000000L const val CHAPTER_SORT_ASC = 0x00000001L const val CHAPTER_SORT_DIR_MASK = 0x00000001L const val CHAPTER_SHOW_UNREAD = 0x00000002L const val CHAPTER_SHOW_READ = 0x00000004L const val CHAPTER_UNREAD_MASK = 0x00000006L const val CHAPTER_SHOW_DOWNLOADED = 0x00000008L const val CHAPTER_SHOW_NOT_DOWNLOADED = 0x00000010L const val CHAPTER_DOWNLOADED_MASK = 0x00000018L const val CHAPTER_SHOW_BOOKMARKED = 0x00000020L const val CHAPTER_SHOW_NOT_BOOKMARKED = 0x00000040L const val CHAPTER_BOOKMARKED_MASK = 0x00000060L const val CHAPTER_SORTING_SOURCE = 0x00000000L const val CHAPTER_SORTING_NUMBER = 0x00000100L const val CHAPTER_SORTING_UPLOAD_DATE = 0x00000200L const val CHAPTER_SORTING_ALPHABET = 0x00000300L const val CHAPTER_SORTING_MASK = 0x00000300L const val CHAPTER_DISPLAY_NAME = 0x00000000L const val CHAPTER_DISPLAY_NUMBER = 0x00100000L const val CHAPTER_DISPLAY_MASK = 0x00100000L fun create() = Manga( id = -1L, url = "", title = "", source = -1L, favorite = false, lastUpdate = 0L, nextUpdate = 0L, fetchInterval = 0, dateAdded = 0L, viewerFlags = 0L, chapterFlags = 0L, coverLastModified = 0L, artist = null, author = null, description = null, genre = null, status = 0L, thumbnailUrl = null, updateStrategy = UpdateStrategy.ALWAYS_UPDATE, initialized = false, lastModifiedAt = 0L, favoriteModifiedAt = null, version = 0L, notes = "", ) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/model/MangaCover.kt ================================================ package tachiyomi.domain.manga.model /** * Contains the required data for MangaCoverFetcher */ data class MangaCover( val mangaId: Long, val sourceId: Long, val isMangaFavorite: Boolean, val url: String?, val lastModified: Long, ) fun Manga.asMangaCover(): MangaCover { return MangaCover( mangaId = id, sourceId = source, isMangaFavorite = favorite, url = thumbnailUrl, lastModified = coverLastModified, ) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/model/MangaUpdate.kt ================================================ package tachiyomi.domain.manga.model import eu.kanade.tachiyomi.source.model.UpdateStrategy data class MangaUpdate( val id: Long, val source: Long? = null, val favorite: Boolean? = null, val lastUpdate: Long? = null, val nextUpdate: Long? = null, val fetchInterval: Int? = null, val dateAdded: Long? = null, val viewerFlags: Long? = null, val chapterFlags: Long? = null, val coverLastModified: Long? = null, val url: String? = null, val title: String? = null, val artist: String? = null, val author: String? = null, val description: String? = null, val genre: List? = null, val status: Long? = null, val thumbnailUrl: String? = null, val updateStrategy: UpdateStrategy? = null, val initialized: Boolean? = null, val version: Long? = null, val notes: String? = null, ) fun Manga.toMangaUpdate(): MangaUpdate { return MangaUpdate( id = id, source = source, favorite = favorite, lastUpdate = lastUpdate, nextUpdate = nextUpdate, fetchInterval = fetchInterval, dateAdded = dateAdded, viewerFlags = viewerFlags, chapterFlags = chapterFlags, coverLastModified = coverLastModified, url = url, title = title, artist = artist, author = author, description = description, genre = genre, status = status, thumbnailUrl = thumbnailUrl, updateStrategy = updateStrategy, initialized = initialized, version = version, notes = notes, ) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/model/MangaWithChapterCount.kt ================================================ package tachiyomi.domain.manga.model data class MangaWithChapterCount( val manga: Manga, val chapterCount: Long, ) ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/model/TriState.kt ================================================ package tachiyomi.domain.manga.model import tachiyomi.core.common.preference.TriState inline fun applyFilter(filter: TriState, predicate: () -> Boolean): Boolean = when (filter) { TriState.DISABLED -> true TriState.ENABLED_IS -> predicate() TriState.ENABLED_NOT -> !predicate() } ================================================ FILE: domain/src/main/java/tachiyomi/domain/manga/repository/MangaRepository.kt ================================================ package tachiyomi.domain.manga.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.model.MangaWithChapterCount interface MangaRepository { suspend fun getMangaById(id: Long): Manga suspend fun getMangaByIdAsFlow(id: Long): Flow suspend fun getMangaByUrlAndSourceId(url: String, sourceId: Long): Manga? fun getMangaByUrlAndSourceIdAsFlow(url: String, sourceId: Long): Flow suspend fun getFavorites(): List suspend fun getReadMangaNotInLibrary(): List suspend fun getLibraryManga(): List fun getLibraryMangaAsFlow(): Flow> fun getFavoritesBySourceId(sourceId: Long): Flow> suspend fun getDuplicateLibraryManga(id: Long, title: String): List suspend fun getUpcomingManga(statuses: Set): Flow> suspend fun resetViewerFlags(): Boolean suspend fun setMangaCategories(mangaId: Long, categoryIds: List) suspend fun update(update: MangaUpdate): Boolean suspend fun updateAll(mangaUpdates: List): Boolean suspend fun insertNetworkManga(manga: List): List } ================================================ FILE: domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt ================================================ package tachiyomi.domain.release.interactor import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.domain.release.model.Release import tachiyomi.domain.release.service.ReleaseService import java.time.Instant import java.time.temporal.ChronoUnit class GetApplicationRelease( private val service: ReleaseService, private val preferenceStore: PreferenceStore, ) { private val lastChecked: Preference by lazy { preferenceStore.getLong(Preference.appStateKey("last_app_check"), 0) } suspend fun await(arguments: Arguments): Result { val now = Instant.now() // Limit checks to once every 3 days at most val nextCheckTime = Instant.ofEpochMilli(lastChecked.get()).plus(3, ChronoUnit.DAYS) if (!arguments.forceCheck && now.isBefore(nextCheckTime)) { return Result.NoNewUpdate } val release = service.latest(arguments) ?: return Result.NoNewUpdate lastChecked.set(now.toEpochMilli()) // Check if latest version is different from current version val isNewVersion = isNewVersion( arguments.isPreview, arguments.commitCount, arguments.versionName, release.version, ) return when { isNewVersion -> Result.NewUpdate(release) else -> Result.NoNewUpdate } } private fun isNewVersion( isPreview: Boolean, commitCount: Int, versionName: String, versionTag: String, ): Boolean { // Removes prefixes like "r" or "v" val newVersion = versionTag.replace("[^\\d.]".toRegex(), "") return if (isPreview) { // Preview builds: based on releases in "mihonapp/mihon-preview" repo // tagged as something like "r1234" newVersion.toInt() > commitCount } else { // Release builds: based on releases in "mihonapp/mihon" repo // tagged as something like "v0.1.2" val oldVersion = versionName.replace("[^\\d.]".toRegex(), "") val newSemVer = newVersion.split(".").map { it.toInt() } val oldSemVer = oldVersion.split(".").map { it.toInt() } oldSemVer.mapIndexed { index, i -> if (newSemVer[index] > i) { return true } } false } } data class Arguments( val isFoss: Boolean, val isPreview: Boolean, val commitCount: Int, val versionName: String, val repository: String, val forceCheck: Boolean = false, ) sealed interface Result { data class NewUpdate(val release: Release) : Result data object NoNewUpdate : Result data object OsTooOld : Result } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/release/model/Release.kt ================================================ package tachiyomi.domain.release.model /** * Contains information about the latest release. */ data class Release( val version: String, val info: String, val releaseLink: String, val downloadLink: String, ) ================================================ FILE: domain/src/main/java/tachiyomi/domain/release/service/ReleaseService.kt ================================================ package tachiyomi.domain.release.service import tachiyomi.domain.release.interactor.GetApplicationRelease import tachiyomi.domain.release.model.Release interface ReleaseService { suspend fun latest(arguments: GetApplicationRelease.Arguments): Release? } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/interactor/GetRemoteManga.kt ================================================ package tachiyomi.domain.source.interactor import eu.kanade.tachiyomi.source.model.FilterList import tachiyomi.domain.source.repository.SourcePagingSource import tachiyomi.domain.source.repository.SourceRepository class GetRemoteManga( private val repository: SourceRepository, ) { operator fun invoke(sourceId: Long, query: String, filterList: FilterList): SourcePagingSource { return when (query) { QUERY_POPULAR -> repository.getPopular(sourceId) QUERY_LATEST -> repository.getLatest(sourceId) else -> repository.search(sourceId, query, filterList) } } companion object { const val QUERY_POPULAR = "eu.kanade.domain.source.interactor.POPULAR" const val QUERY_LATEST = "eu.kanade.domain.source.interactor.LATEST" } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/interactor/GetSourcesWithNonLibraryManga.kt ================================================ package tachiyomi.domain.source.interactor import kotlinx.coroutines.flow.Flow import tachiyomi.domain.source.model.SourceWithCount import tachiyomi.domain.source.repository.SourceRepository class GetSourcesWithNonLibraryManga( private val repository: SourceRepository, ) { fun subscribe(): Flow> { return repository.getSourcesWithNonLibraryManga() } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/model/Pin.kt ================================================ package tachiyomi.domain.source.model sealed class Pin(val code: Int) { data object Unpinned : Pin(0b00) data object Pinned : Pin(0b01) data object Actual : Pin(0b10) } inline fun Pins(builder: Pins.PinsBuilder.() -> Unit = {}): Pins { return Pins.PinsBuilder().apply(builder).flags() } fun Pins(vararg pins: Pin) = Pins { pins.forEach { +it } } data class Pins(val code: Int = Pin.Unpinned.code) { operator fun contains(pin: Pin): Boolean = pin.code and code == pin.code operator fun plus(pin: Pin): Pins = Pins(code or pin.code) operator fun minus(pin: Pin): Pins = Pins(code xor pin.code) companion object { val unpinned = Pins(Pin.Unpinned) val pinned = Pins(Pin.Pinned, Pin.Actual) } class PinsBuilder(var code: Int = 0) { operator fun Pin.unaryPlus() { this@PinsBuilder.code = code or this@PinsBuilder.code } operator fun Pin.unaryMinus() { this@PinsBuilder.code = code or this@PinsBuilder.code } fun flags(): Pins = Pins(code) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/model/Source.kt ================================================ package tachiyomi.domain.source.model data class Source( val id: Long, val lang: String, val name: String, val supportsLatest: Boolean, val isStub: Boolean, val pin: Pins = Pins.unpinned, val isUsedLast: Boolean = false, ) { val visualName: String get() = when { lang.isEmpty() -> name else -> "$name (${lang.uppercase()})" } val key: () -> String = { when { isUsedLast -> "$id-lastused" else -> "$id" } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/model/SourceWithCount.kt ================================================ package tachiyomi.domain.source.model data class SourceWithCount( val source: Source, val count: Long, ) { val id: Long get() = source.id val name: String get() = source.name } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/model/StubSource.kt ================================================ package tachiyomi.domain.source.model import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga class StubSource( override val id: Long, override val lang: String, override val name: String, ) : Source { private val isInvalid: Boolean = name.isBlank() || lang.isBlank() override suspend fun getMangaDetails(manga: SManga): SManga = throw SourceNotInstalledException() override suspend fun getChapterList(manga: SManga): List = throw SourceNotInstalledException() override suspend fun getPageList(chapter: SChapter): List = throw SourceNotInstalledException() override fun toString(): String = if (!isInvalid) "$name (${lang.uppercase()})" else id.toString() companion object { fun from(source: Source): StubSource { return StubSource(id = source.id, lang = source.lang, name = source.name) } } } class SourceNotInstalledException : Exception() ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/repository/SourceRepository.kt ================================================ package tachiyomi.domain.source.repository import androidx.paging.PagingSource import eu.kanade.tachiyomi.source.model.FilterList import kotlinx.coroutines.flow.Flow import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.model.Source import tachiyomi.domain.source.model.SourceWithCount typealias SourcePagingSource = PagingSource interface SourceRepository { fun getSources(): Flow> fun getOnlineSources(): Flow> fun getSourcesWithFavoriteCount(): Flow>> fun getSourcesWithNonLibraryManga(): Flow> fun search(sourceId: Long, query: String, filterList: FilterList): SourcePagingSource fun getPopular(sourceId: Long): SourcePagingSource fun getLatest(sourceId: Long): SourcePagingSource } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/repository/StubSourceRepository.kt ================================================ package tachiyomi.domain.source.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.source.model.StubSource interface StubSourceRepository { fun subscribeAll(): Flow> suspend fun getStubSource(id: Long): StubSource? suspend fun upsertStubSource(id: Long, lang: String, name: String) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/source/service/SourceManager.kt ================================================ package tachiyomi.domain.source.service import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow import tachiyomi.domain.source.model.StubSource interface SourceManager { val isInitialized: StateFlow val catalogueSources: Flow> fun get(sourceKey: Long): Source? fun getOrStub(sourceKey: Long): Source fun getOnlineSources(): List fun getCatalogueSources(): List fun getStubSources(): List } ================================================ FILE: domain/src/main/java/tachiyomi/domain/storage/service/StorageManager.kt ================================================ package tachiyomi.domain.storage.service import android.content.Context import androidx.core.net.toUri import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.util.storage.DiskUtil import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.shareIn class StorageManager( private val context: Context, storagePreferences: StoragePreferences, ) { private val scope = CoroutineScope(Dispatchers.IO) private var baseDir: UniFile? = getBaseDir(storagePreferences.baseStorageDirectory.get()) private val _changes: Channel = Channel(Channel.UNLIMITED) val changes = _changes.receiveAsFlow() .shareIn(scope, SharingStarted.Lazily, 1) init { storagePreferences.baseStorageDirectory.changes() .drop(1) .distinctUntilChanged() .onEach { uri -> baseDir = getBaseDir(uri) baseDir?.let { parent -> parent.createDirectory(AUTOMATIC_BACKUPS_PATH) parent.createDirectory(LOCAL_SOURCE_PATH) parent.createDirectory(DOWNLOADS_PATH).also { DiskUtil.createNoMediaFile(it, context) } } _changes.send(Unit) } .launchIn(scope) } private fun getBaseDir(uri: String): UniFile? { return UniFile.fromUri(context, uri.toUri()) .takeIf { it?.exists() == true } } fun getAutomaticBackupsDirectory(): UniFile? { return baseDir?.createDirectory(AUTOMATIC_BACKUPS_PATH) } fun getDownloadsDirectory(): UniFile? { return baseDir?.createDirectory(DOWNLOADS_PATH) } fun getLocalSourceDirectory(): UniFile? { return baseDir?.createDirectory(LOCAL_SOURCE_PATH) } } private const val AUTOMATIC_BACKUPS_PATH = "autobackup" private const val DOWNLOADS_PATH = "downloads" private const val LOCAL_SOURCE_PATH = "local" ================================================ FILE: domain/src/main/java/tachiyomi/domain/storage/service/StoragePreferences.kt ================================================ package tachiyomi.domain.storage.service import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.storage.FolderProvider class StoragePreferences( folderProvider: FolderProvider, preferenceStore: PreferenceStore, ) { val baseStorageDirectory: Preference = preferenceStore.getString( Preference.appStateKey("storage_dir"), folderProvider.path(), ) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/track/interactor/DeleteTrack.kt ================================================ package tachiyomi.domain.track.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.track.repository.TrackRepository class DeleteTrack( private val trackRepository: TrackRepository, ) { suspend fun await(mangaId: Long, trackerId: Long) { try { trackRepository.delete(mangaId, trackerId) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/track/interactor/GetTracks.kt ================================================ package tachiyomi.domain.track.interactor import kotlinx.coroutines.flow.Flow import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.track.model.Track import tachiyomi.domain.track.repository.TrackRepository class GetTracks( private val trackRepository: TrackRepository, ) { suspend fun awaitOne(id: Long): Track? { return try { trackRepository.getTrackById(id) } catch (e: Exception) { logcat(LogPriority.ERROR, e) null } } suspend fun await(mangaId: Long): List { return try { trackRepository.getTracksByMangaId(mangaId) } catch (e: Exception) { logcat(LogPriority.ERROR, e) emptyList() } } fun subscribe(mangaId: Long): Flow> { return trackRepository.getTracksByMangaIdAsFlow(mangaId) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/track/interactor/GetTracksPerManga.kt ================================================ package tachiyomi.domain.track.interactor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import tachiyomi.domain.track.model.Track import tachiyomi.domain.track.repository.TrackRepository class GetTracksPerManga( private val trackRepository: TrackRepository, ) { fun subscribe(): Flow>> { return trackRepository.getTracksAsFlow().map { tracks -> tracks.groupBy { it.mangaId } } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/track/interactor/InsertTrack.kt ================================================ package tachiyomi.domain.track.interactor import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.track.model.Track import tachiyomi.domain.track.repository.TrackRepository class InsertTrack( private val trackRepository: TrackRepository, ) { suspend fun await(track: Track) { try { trackRepository.insert(track) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } suspend fun awaitAll(tracks: List) { try { trackRepository.insertAll(tracks) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/track/model/Track.kt ================================================ package tachiyomi.domain.track.model import java.io.Serializable data class Track( val id: Long, val mangaId: Long, val trackerId: Long, val remoteId: Long, val libraryId: Long?, val title: String, val lastChapterRead: Double, val totalChapters: Long, val status: Long, val score: Double, val remoteUrl: String, val startDate: Long, val finishDate: Long, val private: Boolean, ) : Serializable ================================================ FILE: domain/src/main/java/tachiyomi/domain/track/repository/TrackRepository.kt ================================================ package tachiyomi.domain.track.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.track.model.Track interface TrackRepository { suspend fun getTrackById(id: Long): Track? suspend fun getTracksByMangaId(mangaId: Long): List fun getTracksAsFlow(): Flow> fun getTracksByMangaIdAsFlow(mangaId: Long): Flow> suspend fun delete(mangaId: Long, trackerId: Long) suspend fun insert(track: Track) suspend fun insertAll(tracks: List) } ================================================ FILE: domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt ================================================ package tachiyomi.domain.updates.interactor import kotlinx.coroutines.flow.Flow import tachiyomi.domain.updates.model.UpdatesWithRelations import tachiyomi.domain.updates.repository.UpdatesRepository import java.time.Instant class GetUpdates( private val repository: UpdatesRepository, ) { suspend fun await(read: Boolean, after: Long): List { return repository.awaitWithRead(read, after, limit = 500) } fun subscribe( instant: Instant, unread: Boolean?, started: Boolean?, bookmarked: Boolean?, hideExcludedScanlators: Boolean, ): Flow> { return repository.subscribeAll( instant.toEpochMilli(), limit = 500, unread = unread, started = started, bookmarked = bookmarked, hideExcludedScanlators = hideExcludedScanlators, ) } fun subscribe(read: Boolean, after: Long): Flow> { return repository.subscribeWithRead(read, after, limit = 500) } } ================================================ FILE: domain/src/main/java/tachiyomi/domain/updates/model/UpdatesWithRelations.kt ================================================ package tachiyomi.domain.updates.model import tachiyomi.domain.manga.model.MangaCover data class UpdatesWithRelations( val mangaId: Long, val mangaTitle: String, val chapterId: Long, val chapterName: String, val scanlator: String?, val chapterUrl: String, val read: Boolean, val bookmark: Boolean, val lastPageRead: Long, val sourceId: Long, val dateFetch: Long, val coverData: MangaCover, ) ================================================ FILE: domain/src/main/java/tachiyomi/domain/updates/repository/UpdatesRepository.kt ================================================ package tachiyomi.domain.updates.repository import kotlinx.coroutines.flow.Flow import tachiyomi.domain.updates.model.UpdatesWithRelations interface UpdatesRepository { suspend fun awaitWithRead(read: Boolean, after: Long, limit: Long): List fun subscribeAll( after: Long, limit: Long, unread: Boolean?, started: Boolean?, bookmarked: Boolean?, hideExcludedScanlators: Boolean, ): Flow> fun subscribeWithRead(read: Boolean, after: Long, limit: Long): Flow> } ================================================ FILE: domain/src/main/java/tachiyomi/domain/updates/service/UpdatesPreferences.kt ================================================ package tachiyomi.domain.updates.service import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.getEnum class UpdatesPreferences( preferenceStore: PreferenceStore, ) { val filterDownloaded: Preference = preferenceStore.getEnum( "pref_filter_updates_downloaded", TriState.DISABLED, ) val filterUnread: Preference = preferenceStore.getEnum( "pref_filter_updates_unread", TriState.DISABLED, ) val filterStarted: Preference = preferenceStore.getEnum( "pref_filter_updates_started", TriState.DISABLED, ) val filterBookmarked: Preference = preferenceStore.getEnum( "pref_filter_updates_bookmarked", TriState.DISABLED, ) val filterExcludedScanlators: Preference = preferenceStore.getBoolean( "pref_filter_updates_hide_excluded_scanlators", false, ) } ================================================ FILE: domain/src/test/java/tachiyomi/domain/chapter/service/ChapterRecognitionTest.kt ================================================ package tachiyomi.domain.chapter.service import io.kotest.matchers.shouldBe import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Execution import org.junit.jupiter.api.parallel.ExecutionMode @Execution(ExecutionMode.CONCURRENT) class ChapterRecognitionTest { @Test fun `Basic Ch prefix`() { val mangaTitle = "Mokushiroku Alice" assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch.4: Misrepresentation", 4.0) } @Test fun `Basic Ch prefix with space after period`() { val mangaTitle = "Mokushiroku Alice" assertChapter(mangaTitle, "Mokushiroku Alice Vol. 1 Ch. 4: Misrepresentation", 4.0) } @Test fun `Basic Ch prefix with decimal`() { val mangaTitle = "Mokushiroku Alice" assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch.4.1: Misrepresentation", 4.1) assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch.4.4: Misrepresentation", 4.4) } @Test fun `Basic Ch prefix with alpha postfix`() { val mangaTitle = "Mokushiroku Alice" assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch.4.a: Misrepresentation", 4.1) assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch.4.b: Misrepresentation", 4.2) assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch.4.extra: Misrepresentation", 4.99) } @Test fun `Name containing one number`() { val mangaTitle = "Bleach" assertChapter(mangaTitle, "Bleach 567 Down With Snowwhite", 567.0) } @Test fun `Name containing one number and decimal`() { val mangaTitle = "Bleach" assertChapter(mangaTitle, "Bleach 567.1 Down With Snowwhite", 567.1) assertChapter(mangaTitle, "Bleach 567.4 Down With Snowwhite", 567.4) } @Test fun `Name containing one number and alpha`() { val mangaTitle = "Bleach" assertChapter(mangaTitle, "Bleach 567.a Down With Snowwhite", 567.1) assertChapter(mangaTitle, "Bleach 567.b Down With Snowwhite", 567.2) assertChapter(mangaTitle, "Bleach 567.extra Down With Snowwhite", 567.99) } @Test fun `Chapter containing manga title and number`() { val mangaTitle = "Solanin" assertChapter(mangaTitle, "Solanin 028 Vol. 2", 28.0) } @Test fun `Chapter containing manga title and number decimal`() { val mangaTitle = "Solanin" assertChapter(mangaTitle, "Solanin 028.1 Vol. 2", 28.1) assertChapter(mangaTitle, "Solanin 028.4 Vol. 2", 28.4) } @Test fun `Chapter containing manga title and number alpha`() { val mangaTitle = "Solanin" assertChapter(mangaTitle, "Solanin 028.a Vol. 2", 28.1) assertChapter(mangaTitle, "Solanin 028.b Vol. 2", 28.2) assertChapter(mangaTitle, "Solanin 028.extra Vol. 2", 28.99) } @Test fun `Extreme case`() { val mangaTitle = "Onepunch-Man" assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 028", 28.0) } @Test fun `Extreme case with decimal`() { val mangaTitle = "Onepunch-Man" assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 028.1", 28.1) assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 028.4", 28.4) } @Test fun `Extreme case with alpha`() { val mangaTitle = "Onepunch-Man" assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 028.a", 28.1) assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 028.b", 28.2) assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 028.extra", 28.99) } @Test fun `Chapter containing dot v2`() { val mangaTitle = "random" assertChapter(mangaTitle, "Vol.1 Ch.5v.2: Alones", 5.0) } @Test fun `Number in manga title`() { val mangaTitle = "Ayame 14" assertChapter(mangaTitle, "Ayame 14 1 - The summer of 14", 1.0) } @Test fun `Space between ch x`() { val mangaTitle = "Mokushiroku Alice" assertChapter(mangaTitle, "Mokushiroku Alice Vol.1 Ch. 4: Misrepresentation", 4.0) } @Test fun `Chapter title with ch substring`() { val mangaTitle = "Ayame 14" assertChapter(mangaTitle, "Vol.1 Ch.1: March 25 (First Day Cohabiting)", 1.0) } @Test fun `Chapter containing multiple zeros`() { val mangaTitle = "random" assertChapter(mangaTitle, "Vol.001 Ch.003: Kaguya Doesn't Know Much", 3.0) } @Test fun `Chapter with version before number`() { val mangaTitle = "Onepunch-Man" assertChapter(mangaTitle, "Onepunch-Man Punch Ver002 086 : Creeping Darkness [3]", 86.0) } @Test fun `Version attached to chapter number`() { val mangaTitle = "Ansatsu Kyoushitsu" assertChapter(mangaTitle, "Ansatsu Kyoushitsu 011v002: Assembly Time", 11.0) } /** * Case where the chapter title contains the chapter * But wait it's not actual the chapter number. */ @Test fun `Number after manga title with chapter in chapter title case`() { val mangaTitle = "Tokyo ESP" assertChapter(mangaTitle, "Tokyo ESP 027: Part 002: Chapter 001", 027.0) } /** * Case where the chapter title contains the unwanted tag * But follow by chapter number. */ @Test fun `Number after unwanted tag`() { val mangaTitle = "One-punch Man" assertChapter(mangaTitle, "Mag Version 195.5", 195.5) } @Test fun `Unparseable chapter`() { val mangaTitle = "random" assertChapter(mangaTitle, "Foo", -1.0) } @Test fun `Chapter with time in title`() { val mangaTitle = "random" assertChapter(mangaTitle, "Fairy Tail 404: 00:00", 404.0) } @Test fun `Chapter with alpha without dot`() { val mangaTitle = "random" assertChapter(mangaTitle, "Asu No Yoichi 19a", 19.1) } @Test fun `Chapter title containing extra and vol`() { val mangaTitle = "Fairy Tail" assertChapter(mangaTitle, "Fairy Tail 404.extravol002", 404.99) assertChapter(mangaTitle, "Fairy Tail 404 extravol002", 404.99) } @Test fun `Chapter title containing omake (japanese extra) and vol`() { val mangaTitle = "Fairy Tail" assertChapter(mangaTitle, "Fairy Tail 404.omakevol002", 404.98) assertChapter(mangaTitle, "Fairy Tail 404 omakevol002", 404.98) } @Test fun `Chapter title containing special and vol`() { val mangaTitle = "Fairy Tail" assertChapter(mangaTitle, "Fairy Tail 404.specialvol002", 404.97) assertChapter(mangaTitle, "Fairy Tail 404 specialvol002", 404.97) } @Test fun `Chapter title containing commas`() { val mangaTitle = "One Piece" assertChapter(mangaTitle, "One Piece 300,a", 300.1) assertChapter(mangaTitle, "One Piece Ch,123,extra", 123.99) assertChapter(mangaTitle, "One Piece the sunny, goes swimming 024,005", 24.005) } @Test fun `Chapter title containing hyphens`() { val mangaTitle = "Solo Leveling" assertChapter(mangaTitle, "ch 122-a", 122.1) assertChapter(mangaTitle, "Solo Leveling Ch.123-extra", 123.99) assertChapter(mangaTitle, "Solo Leveling, 024-005", 24.005) assertChapter(mangaTitle, "Ch.191-200 Read Online", 191.200) } @Test fun `Chapters containing season`() { assertChapter("D.I.C.E", "D.I.C.E[Season 001] Ep. 007", 7.0) } @Test fun `Chapters in format sx - chapter xx`() { assertChapter("The Gamer", "S3 - Chapter 20", 20.0) } @Test fun `Chapters ending with s`() { assertChapter("One Outs", "One Outs 001", 1.0) } @Test fun `Chapters containing ordinals`() { val mangaTitle = "The Sister of the Woods with a Thousand Young" assertChapter(mangaTitle, "The 1st Night", 1.0) assertChapter(mangaTitle, "The 2nd Night", 2.0) assertChapter(mangaTitle, "The 3rd Night", 3.0) assertChapter(mangaTitle, "The 4th Night", 4.0) } private fun assertChapter(mangaTitle: String, name: String, expected: Double) { ChapterRecognition.parseChapterNumber(mangaTitle, name) shouldBe expected } } ================================================ FILE: domain/src/test/java/tachiyomi/domain/chapter/service/MissingChaptersTest.kt ================================================ package tachiyomi.domain.chapter.service import io.kotest.matchers.shouldBe import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Execution import org.junit.jupiter.api.parallel.ExecutionMode import tachiyomi.domain.chapter.model.Chapter @Execution(ExecutionMode.CONCURRENT) class MissingChaptersTest { @Test fun `missingChaptersCount returns 0 when empty list`() { emptyList().missingChaptersCount() shouldBe 0 } @Test fun `missingChaptersCount returns 0 when all unknown chapter numbers`() { listOf(-1.0, -1.0, -1.0).missingChaptersCount() shouldBe 0 } @Test fun `missingChaptersCount handles repeated base chapter numbers`() { listOf(1.0, 1.0, 1.1, 1.5, 1.6, 1.99).missingChaptersCount() shouldBe 0 } @Test fun `missingChaptersCount returns number of missing chapters`() { listOf(-1.0, 1.0, 2.0, 2.2, 4.0, 6.0, 10.0, 11.0).missingChaptersCount() shouldBe 5 } @Test fun `calculateChapterGap returns difference`() { calculateChapterGap(chapter(10.0), chapter(9.0)) shouldBe 0f calculateChapterGap(chapter(10.0), chapter(8.0)) shouldBe 1f calculateChapterGap(chapter(10.0), chapter(8.5)) shouldBe 1f calculateChapterGap(chapter(10.0), chapter(1.1)) shouldBe 8f calculateChapterGap(10.0, 9.0) shouldBe 0f calculateChapterGap(10.0, 8.0) shouldBe 1f calculateChapterGap(10.0, 8.5) shouldBe 1f calculateChapterGap(10.0, 1.1) shouldBe 8f } @Test fun `calculateChapterGap returns 0 if either are not valid chapter numbers`() { calculateChapterGap(chapter(-1.0), chapter(10.0)) shouldBe 0 calculateChapterGap(chapter(99.0), chapter(-1.0)) shouldBe 0 calculateChapterGap(-1.0, 10.0) shouldBe 0 calculateChapterGap(99.0, -1.0) shouldBe 0 } private fun chapter(number: Double) = Chapter.create().copy( chapterNumber = number, ) } ================================================ FILE: domain/src/test/java/tachiyomi/domain/library/model/LibraryFlagsTest.kt ================================================ package tachiyomi.domain.library.model import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Execution import org.junit.jupiter.api.parallel.ExecutionMode @Execution(ExecutionMode.CONCURRENT) class LibraryFlagsTest { @Test fun `Check the amount of flags`() { LibraryDisplayMode.values.size shouldBe 4 LibrarySort.types.size shouldBe 10 LibrarySort.directions.size shouldBe 2 } @Test fun `Test Flag plus operator (LibrarySort)`() { val current = LibrarySort(LibrarySort.Type.LastRead, LibrarySort.Direction.Ascending) val new = LibrarySort(LibrarySort.Type.DateAdded, LibrarySort.Direction.Ascending) val flag = current + new flag shouldBe 0b01011100 } @Test fun `Test Flag plus operator`() { val sort = LibrarySort(LibrarySort.Type.DateAdded, LibrarySort.Direction.Ascending) sort.flag shouldBe 0b01011100 } @Test fun `Test Flag plus operator with old flag as base`() { val currentSort = LibrarySort( LibrarySort.Type.UnreadCount, LibrarySort.Direction.Descending, ) currentSort.flag shouldBe 0b00001100 val sort = LibrarySort(LibrarySort.Type.DateAdded, LibrarySort.Direction.Ascending) val flag = currentSort.flag + sort flag shouldBe 0b01011100 flag shouldNotBe currentSort.flag } @Test fun `Test default flags`() { val sort = LibrarySort.default val flag = sort.type + sort.direction flag shouldBe 0b01000000 } } ================================================ FILE: domain/src/test/java/tachiyomi/domain/manga/interactor/FetchIntervalTest.kt ================================================ package tachiyomi.domain.manga.interactor import io.kotest.matchers.shouldBe import io.mockk.mockk import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Execution import org.junit.jupiter.api.parallel.ExecutionMode import tachiyomi.domain.chapter.model.Chapter import java.time.ZoneOffset import java.time.ZonedDateTime import kotlin.time.Duration import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours import kotlin.time.DurationUnit import kotlin.time.toDuration import kotlin.time.toJavaDuration @Execution(ExecutionMode.CONCURRENT) class FetchIntervalTest { private val testTime = ZonedDateTime.parse("2020-01-01T00:00:00Z") private val testZoneId = ZoneOffset.UTC private var chapter = Chapter.create().copy( dateFetch = testTime.toEpochSecond() * 1000, dateUpload = testTime.toEpochSecond() * 1000, ) private val fetchInterval = FetchInterval(mockk()) @Test fun `returns default interval of 7 days when not enough distinct days`() { val chaptersWithUploadDate = (1..50).map { chapterWithTime(chapter, 1.days) } fetchInterval.calculateInterval(chaptersWithUploadDate, testZoneId) shouldBe 7 val chaptersWithoutUploadDate = chaptersWithUploadDate.map { it.copy(dateUpload = 0L) } fetchInterval.calculateInterval(chaptersWithoutUploadDate, testZoneId) shouldBe 7 } @Test fun `returns interval based on more recent chapters`() { val oldChapters = (1..5).map { chapterWithTime(chapter, (it * 7).days) // Would have interval of 7 days } val newChapters = (1..10).map { chapterWithTime(chapter, oldChapters.lastUploadDate() + it.days) } val chapters = oldChapters + newChapters fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1 } @Test fun `returns interval based on smaller subset of recent chapters if very few chapters`() { val oldChapters = (1..3).map { chapterWithTime(chapter, (it * 7).days) } // Significant gap between chapters val newChapters = (1..3).map { chapterWithTime(chapter, oldChapters.lastUploadDate() + 365.days + (it * 7).days) } val chapters = oldChapters + newChapters fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 7 } @Test fun `returns interval of 7 days when multiple chapters in 1 day`() { val chapters = (1..10).map { chapterWithTime(chapter, 10.hours) } fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 7 } @Test fun `returns interval of 7 days when multiple chapters in 2 days`() { val chapters = (1..2).map { chapterWithTime(chapter, 1.days) } + (1..5).map { chapterWithTime(chapter, 2.days) } fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 7 } @Test fun `returns interval of 1 day when chapters are released every 1 day`() { val chapters = (1..20).map { chapterWithTime(chapter, it.days) } fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1 } @Test fun `returns interval of 1 day when delta is less than 1 day`() { val chapters = (1..20).map { chapterWithTime(chapter, (15 * it).hours) } fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1 } @Test fun `returns interval of 2 days when chapters are released every 2 days`() { val chapters = (1..20).map { chapterWithTime(chapter, (2 * it).days) } fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 2 } @Test fun `returns interval with floored value when interval is decimal`() { val chaptersWithUploadDate = (1..5).map { chapterWithTime(chapter, (25 * it).hours) } fetchInterval.calculateInterval(chaptersWithUploadDate, testZoneId) shouldBe 1 val chaptersWithoutUploadDate = chaptersWithUploadDate.map { it.copy(dateUpload = 0L) } fetchInterval.calculateInterval(chaptersWithoutUploadDate, testZoneId) shouldBe 1 } @Test fun `returns interval of 2 days when chapters are released just below every 2 days`() { val chapters = (1..20).map { chapterWithTime(chapter, (43 * it).hours) } fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 2 } private fun chapterWithTime(chapter: Chapter, duration: Duration): Chapter { val newTime = testTime.plus(duration.toJavaDuration()).toEpochSecond() * 1000 return chapter.copy(dateFetch = newTime, dateUpload = newTime) } private fun List.lastUploadDate() = last().dateUpload.toDuration(DurationUnit.MILLISECONDS) } ================================================ FILE: domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt ================================================ package tachiyomi.domain.release.interactor import io.kotest.matchers.shouldBe import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every import io.mockk.mockk import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.domain.release.model.Release import tachiyomi.domain.release.service.ReleaseService import java.time.Instant class GetApplicationReleaseTest { private lateinit var getApplicationRelease: GetApplicationRelease private lateinit var releaseService: ReleaseService private lateinit var preference: Preference @BeforeEach fun beforeEach() { val preferenceStore = mockk() preference = mockk() every { preferenceStore.getLong(any(), any()) } returns preference releaseService = mockk() getApplicationRelease = GetApplicationRelease(releaseService, preferenceStore) } @Test fun `When has update but is preview expect new update`() = runTest { every { preference.get() } returns 0 every { preference.set(any()) }.answers { } val release = Release( "r2000", "info", "http://example.com/release_link", "http://example.com/release_link.apk", ) coEvery { releaseService.latest(any()) } returns release val result = getApplicationRelease.await( GetApplicationRelease.Arguments( isFoss = false, isPreview = true, commitCount = 1000, versionName = "", repository = "test", ), ) (result as GetApplicationRelease.Result.NewUpdate).release shouldBe GetApplicationRelease.Result.NewUpdate( release, ).release } @Test fun `When has update expect new update`() = runTest { every { preference.get() } returns 0 every { preference.set(any()) }.answers { } val release = Release( "v2.0.0", "info", "http://example.com/release_link", "http://example.com/release_link.apk", ) coEvery { releaseService.latest(any()) } returns release val result = getApplicationRelease.await( GetApplicationRelease.Arguments( isFoss = false, isPreview = false, commitCount = 0, versionName = "v1.0.0", repository = "test", ), ) (result as GetApplicationRelease.Result.NewUpdate).release shouldBe GetApplicationRelease.Result.NewUpdate( release, ).release } @Test fun `When has no update expect no new update`() = runTest { every { preference.get() } returns 0 every { preference.set(any()) }.answers { } val release = Release( "v1.0.0", "info", "http://example.com/release_link", "http://example.com/release_link.apk", ) coEvery { releaseService.latest(any()) } returns release val result = getApplicationRelease.await( GetApplicationRelease.Arguments( isFoss = false, isPreview = false, commitCount = 0, versionName = "v2.0.0", repository = "test", ), ) result shouldBe GetApplicationRelease.Result.NoNewUpdate } @Test fun `When now is before three days expect no new update`() = runTest { every { preference.get() } returns Instant.now().toEpochMilli() every { preference.set(any()) }.answers { } val release = Release( "v1.0.0", "info", "http://example.com/release_link", "http://example.com/release_link.apk", ) coEvery { releaseService.latest(any()) } returns release val result = getApplicationRelease.await( GetApplicationRelease.Arguments( isFoss = false, isPreview = false, commitCount = 0, versionName = "v2.0.0", repository = "test", ), ) coVerify(exactly = 0) { releaseService.latest(any()) } result shouldBe GetApplicationRelease.Result.NoNewUpdate } } ================================================ FILE: gradle/androidx.versions.toml ================================================ [versions] agp_version = "8.13.2" lifecycle_version = "2.10.0" paging_version = "3.4.2" interpolator_version = "1.0.0" sqlite = "2.6.2" [libraries] gradle = { module = "com.android.tools.build:gradle", version.ref = "agp_version" } annotation = "androidx.annotation:annotation:1.9.1" appcompat = "androidx.appcompat:appcompat:1.7.1" biometricktx = "androidx.biometric:biometric-ktx:1.2.0-alpha05" constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.1" corektx = "androidx.core:core-ktx:1.18.0" splashscreen = "androidx.core:core-splashscreen:1.2.0" recyclerview = "androidx.recyclerview:recyclerview:1.4.0" viewpager = "androidx.viewpager:viewpager:1.1.0" profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1" lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref = "lifecycle_version" } lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycle_version" } lifecycle-runtimektx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle_version" } workmanager = "androidx.work:work-runtime:2.11.1" paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "paging_version" } paging-compose = { module = "androidx.paging:paging-compose", version.ref = "paging_version" } interpolator = { group = "androidx.interpolator", name = "interpolator", version.ref = "interpolator_version" } benchmark-macro = "androidx.benchmark:benchmark-macro-junit4:1.4.1" test-ext = "androidx.test.ext:junit-ktx:1.3.0" test-espresso-core = "androidx.test.espresso:espresso-core:3.7.0" test-uiautomator = "androidx.test.uiautomator:uiautomator:2.3.0" sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" } [bundles] lifecycle = ["lifecycle-common", "lifecycle-process", "lifecycle-runtimektx"] ================================================ FILE: gradle/compose.versions.toml ================================================ [versions] compose-bom = "2026.03.00" [libraries] activity = "androidx.activity:activity-compose:1.13.0" bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" } foundation = { module = "androidx.compose.foundation:foundation" } animation = { module = "androidx.compose.animation:animation" } animation-graphics = { module = "androidx.compose.animation:animation-graphics" } runtime = { module = "androidx.compose.runtime:runtime" } runtime-annotation = { module = "androidx.compose.runtime:runtime-annotation" } ui-tooling = { module = "androidx.compose.ui:ui-tooling" } ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } ui-util = { module = "androidx.compose.ui:ui-util" } material3-core = { module = "androidx.compose.material3:material3" } material-icons = { module = "androidx.compose.material:material-icons-extended" } glance = "androidx.glance:glance-appwidget:1.1.1" ================================================ FILE: gradle/kotlinx.versions.toml ================================================ [versions] kotlin_version = "2.3.20" serialization_version = "1.10.0" xml_serialization_version = "0.91.3" [libraries] reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin_version" } gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin_version" } compose-compiler-gradle = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin_version" } immutables = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.4.0" } coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version = "1.10.2" } coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core" } coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android" } coroutines-guava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava" } coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test" } serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization_version" } serialization-json-okio = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-okio", version.ref = "serialization_version" } serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "serialization_version" } serialization-xml-core = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xml_serialization_version" } serialization-xml = { module = "io.github.pdvrieze.xmlutil:serialization", version.ref = "xml_serialization_version" } [bundles] coroutines = ["coroutines-core", "coroutines-android", "coroutines-guava"] serialization = ["serialization-json", "serialization-json-okio", "serialization-protobuf", "serialization-xml-core", "serialization-xml"] [plugins] android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin_version" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin_version" } serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin_version" } ================================================ FILE: gradle/libs.versions.toml ================================================ [versions] aboutlib_version = "13.2.1" leakcanary = "2.14" moko = "0.26.1" okhttp_version = "5.3.2" shizuku_version = "13.1.5" sqldelight = "2.3.2" voyager = "1.1.0-beta03" spotless = "8.4.0" ktlint-core = "1.8.0" firebase-bom = "34.11.0" markdown = "0.39.2" junit = "6.0.3" materialKolor = "5.0.0-alpha07" [libraries] desugar = "com.android.tools:desugar_jdk_libs:2.1.5" android-shortcut-gradle = "com.github.zellius:android-shortcut-gradle-plugin:0.1.2" rxjava = "io.reactivex:rxjava:1.3.8" okhttp-core = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp_version" } okhttp-logging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp_version" } okhttp-brotli = { module = "com.squareup.okhttp3:okhttp-brotli", version.ref = "okhttp_version" } okhttp-dnsoverhttps = { module = "com.squareup.okhttp3:okhttp-dnsoverhttps", version.ref = "okhttp_version" } okio = "com.squareup.okio:okio:3.17.0" conscrypt-android = "org.conscrypt:conscrypt-android:2.5.3" quickjs-android = { group = "com.github.zhanghai.quickjs-java", name = "quickjs-android", version = "547f5b1597" } jsoup = "org.jsoup:jsoup:1.22.1" disklrucache = "com.jakewharton:disklrucache:2.0.2" unifile = "com.github.tachiyomiorg:unifile:e0def6b3dc" libarchive = "me.zhanghai.android.libarchive:library:1.1.6" preferencektx = "androidx.preference:preference-ktx:1.2.1" injekt = "com.github.mihonapp:injekt:91edab2317" coil-bom = { module = "io.coil-kt.coil3:coil-bom", version = "3.4.0" } coil-core = { module = "io.coil-kt.coil3:coil" } coil-gif = { module = "io.coil-kt.coil3:coil-gif" } coil-compose = { module = "io.coil-kt.coil3:coil-compose" } coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp" } subsamplingscaleimageview = "com.github.tachiyomiorg:subsampling-scale-image-view:66e0db195d" image-decoder = "com.github.tachiyomiorg:image-decoder:41c059e540" natural-comparator = "com.github.gpanther:java-nat-sort:natural-comparator-1.1" richeditor-compose = "com.mohamedrejeb.richeditor:richeditor-compose:1.0.0-rc13" material = "com.google.android.material:material:1.12.0" flexible-adapter-core = "com.github.arkon.FlexibleAdapter:flexible-adapter:c8013533" photoview = "com.github.chrisbanes:PhotoView:2.3.0" directionalviewpager = "com.github.tachiyomiorg:DirectionalViewPager:1.0.0" compose-materialmotion = "io.github.fornewid:material-motion-compose-core:2.0.1" compose-webview = "io.github.kevinnzou:compose-webview:0.33.6" compose-grid = "io.woong.compose.grid:grid:1.2.2" reorderable = { module = "sh.calvin.reorderable:reorderable", version = "3.0.0" } swipe = "me.saket.swipe:swipe:1.3.0" moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" } logcat = "com.squareup.logcat:logcat:0.4" firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" } firebase-analytics = { module = "com.google.firebase:firebase-analytics" } firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" } aboutLibraries-compose = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlib_version" } shizuku-api = { module = "dev.rikka.shizuku:api", version.ref = "shizuku_version" } shizuku-provider = { module = "dev.rikka.shizuku:provider", version.ref = "shizuku_version" } leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" } leakcanary-plumber = { module = "com.squareup.leakcanary:plumber-android", version.ref = "leakcanary" } sqldelight-androidx-driver = { module = "com.eygraber:sqldelight-androidx-driver", version = "0.0.17" } sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions-jvm", version.ref = "sqldelight" } sqldelight-android-paging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" } sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" } junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" } kotest-assertions = "io.kotest:kotest-assertions-core:6.1.7" mockk = "io.mockk:mockk:1.14.9" voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" } voyager-tab-navigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" } voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } spotless-gradle = { group = "com.diffplug.spotless", name = "spotless-plugin-gradle", version.ref = "spotless" } ktlint-core = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint-core" } markdown-core = { module = "com.mikepenz:multiplatform-markdown-renderer", version.ref = "markdown" } markdown-coil = { module = "com.mikepenz:multiplatform-markdown-renderer-coil3", version.ref = "markdown" } stringSimilarity = { module = "com.aallam.similarity:string-similarity-kotlin", version = "0.1.0" } materialKolor = { module = "com.materialkolor:material-kolor", version.ref = "materialKolor" } [plugins] google-services = { id = "com.google.gms.google-services", version = "4.4.4" } aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutlib_version" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } moko = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.6" } [bundles] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] js-engine = ["quickjs-android"] coil = ["coil-core", "coil-gif", "coil-compose", "coil-network-okhttp"] shizuku = ["shizuku-api", "shizuku-provider"] sqldelight = ["sqldelight-androidx-driver", "sqldelight-coroutines", "sqldelight-android-paging"] voyager = ["voyager-navigator", "voyager-screenmodel", "voyager-tab-navigator", "voyager-transitions"] test = ["junit-jupiter", "kotest-assertions", "mockk"] markdown = ["markdown-core", "markdown-coil"] ================================================ FILE: gradle/wrapper/gradle-wrapper.properties ================================================ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists ================================================ FILE: gradle.properties ================================================ android.nonTransitiveRClass=false android.useAndroidX=true kotlin.code.style=official kotlin.mpp.androidSourceSetLayoutVersion=2 org.gradle.caching=true org.gradle.configureondemand=true org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 org.gradle.parallel=true ================================================ FILE: gradlew ================================================ #!/bin/sh # # Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # SPDX-License-Identifier: Apache-2.0 # ############################################################################## # # Gradle start up script for POSIX generated by Gradle. # # Important for running: # # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is # noncompliant, but you have some other compliant shell such as ksh or # bash, then to run this script, type that shell name before the whole # command line, like: # # ksh Gradle # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», # «${var#prefix}», «${var%suffix}», and «$( cmd )»; # * compound commands having a testable exit status, especially «case»; # * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # # (2) This script targets any POSIX shell, so it avoids extensions provided # by Bash, Ksh, etc; in particular arrays are avoided. # # The "traditional" practice of packing multiple parameters into a # space-separated string is a well documented source of bugs and security # problems, so this is (mostly) avoided, by progressively accumulating # options in "$@", and eventually passing that to Java. # # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; # see the in-line comments for details. # # There are tweaks for specific operating systems such as AIX, CygWin, # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. # ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link app_path=$0 # Need this for daisy-chained symlinks. while APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path [ -h "$app_path" ] do ls=$( ls -ld "$app_path" ) link=${ls#*' -> '} case $link in #( /*) app_path=$link ;; #( *) app_path=$APP_HOME$link ;; esac done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum warn () { echo "$*" } >&2 die () { echo echo "$*" echo exit 1 } >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "$( uname )" in #( CYGWIN* ) cygwin=true ;; #( Darwin* ) darwin=true ;; #( MSYS* | MINGW* ) msys=true ;; #( NONSTOP* ) nonstop=true ;; esac CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD=$JAVA_HOME/jre/sh/java else JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD=java if ! command -v java >/dev/null 2>&1 then die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi # Collect all arguments for the java command, stacking in reverse order: # * args from the command line # * the main class name # * -classpath # * -D...appname settings # * --module-path (only if needed) # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) # Now convert the arguments - kludge to limit ourselves to /bin/sh for arg do if case $arg in #( -*) false ;; # don't mess with options #( /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath [ -e "$t" ] ;; #( *) false ;; esac then arg=$( cygpath --path --ignore --mixed "$arg" ) fi # Roll the args list around exactly as many times as the number of # args, so each arg winds up back in the position where it started, but # possibly modified. # # NB: a `for` loop captures its iteration list before it begins, so # changing the positional parameters here affects neither the number of # iterations, nor the values presented in `arg`. shift # remove old arg set -- "$@" "$arg" # push replacement arg done fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. if ! command -v xargs >/dev/null 2>&1 then die "xargs is not available" fi # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. # # In Bash we could simply go: # # readarray ARGS < <( xargs -n1 <<<"$var" ) && # set -- "${ARGS[@]}" "$@" # # but POSIX shell has neither arrays nor command substitution, so instead we # post-process each arg (as a line of input to sed) to backslash-escape any # character that might be a shell metacharacter, then use eval to reverse # that process (while maintaining the separation between arguments), and wrap # the whole thing up as a single "set" statement. # # This will of course break if any of these variables contains a newline or # an unmatched quote. # eval "set -- $( printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | xargs -n1 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | tr '\n' ' ' )" '"$@"' exec "$JAVACMD" "$@" ================================================ FILE: gradlew.bat ================================================ @rem @rem Copyright 2015 the original author or authors. @rem @rem Licensed under the Apache License, Version 2.0 (the "License"); @rem you may not use this file except in compliance with the License. @rem You may obtain a copy of the License at @rem @rem https://www.apache.org/licenses/LICENSE-2.0 @rem @rem Unless required by applicable law or agreed to in writing, software @rem distributed under the License is distributed on an "AS IS" BASIS, @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem @rem SPDX-License-Identifier: Apache-2.0 @rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Resolve any "." and ".." in APP_HOME to make it shorter. for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute echo. 1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute echo. 1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line set CLASSPATH= @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! set EXIT_CODE=%ERRORLEVEL% if %EXIT_CODE% equ 0 set EXIT_CODE=1 if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal :omega ================================================ FILE: i18n/README.md ================================================ # i18n This module houses the string resources and translations. Original English strings are managed in `src/commonMain/moko-resources/base/`. Translations are done externally via Weblate. See [our website](https://mihon.app/docs/contribute#translation) for more details. ================================================ FILE: i18n/build.gradle.kts ================================================ import mihon.buildlogic.generatedBuildDir import mihon.buildlogic.tasks.getLocalesConfigTask import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi plugins { id("mihon.library") kotlin("multiplatform") alias(libs.plugins.moko) } kotlin { androidTarget() applyDefaultHierarchyTemplate() sourceSets { commonMain { dependencies { api(libs.moko.core) } } } @OptIn(ExperimentalKotlinGradlePluginApi::class) compilerOptions { freeCompilerArgs.add("-Xexpect-actual-classes") } } val generatedAndroidResourceDir = generatedBuildDir.resolve("android/res") android { namespace = "tachiyomi.i18n" sourceSets { val main by getting main.res.srcDirs( "src/commonMain/resources", generatedAndroidResourceDir, ) } lint { disable.addAll(listOf("MissingTranslation", "ExtraTranslation")) } } multiplatformResources { resourcesPackage.set("tachiyomi.i18n") } tasks { val localesConfigTask = project.getLocalesConfigTask(generatedAndroidResourceDir) preBuild { dependsOn(localesConfigTask) } } ================================================ FILE: i18n/src/androidMain/AndroidManifest.xml ================================================ ================================================ FILE: i18n/src/commonMain/moko-resources/am/plurals.xml ================================================ %d ምድብ %d ምድቦች ከ %1$s ደቂቃ በኋላ ከ %1$s ደቂቃዎች በኋላ ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል ================================================ FILE: i18n/src/commonMain/moko-resources/am/strings.xml ================================================ ይህ ቅጥያ ከእንግዲህ አይገኝም። ይህ ቅጥያ ባልታመነ የእውቅና ማረጋገጫ ተፈርሟል እና አልነቃም። \n \nተንኮል አዘል ቅጥያ በታቺሚሚ ውስጥ የተከማቸውን ማንኛውንም የመግቢያ ማስረጃዎችን በማንበብ ወይም የዘፈቀደ ኮድን ሊፈጽም ይችላል ፡፡ \n \nበዚህ የምስክር ወረቀት በመተማመን እነዚህን አደጋዎች ይቀበላሉ ፡፡ የማይታመን ቅጥያ ማራገፍ የማይታመን አደራ ተጭኗል በመጫን ላይ በማውረድ ላይ በመጠባበቅ ላይ ጫን ጊዜ ያለፈበት አዘምን ዝመናዎች በመጠባበቅ ላይ ናቸው ሁሉም ሁል ጊዜም ይጠይቁ ነባሪ ምድብ ቤተ-መጽሐፍትን ሲያዘምኑ አዲስ ሽፋን እና ዝርዝሮችን ይፈልጉ ዲበ ውሂብን በራስ-ሰር አድስ ቀጣይ ማንጋን ብቻ ያዘምኑ ኃይል በመሙላት ላይ የቤተ-መጽሐፍት ዝመና ገደቦች ሳምንታዊ በየ 2 ቀኑ በየቀኑ በየ 12 ሰዓቱ በየ 6 ሰዓቱ መመሪያ የቤተ-መጽሐፍት ማዘመኛ ድግግሞሽ ዝመናዎች የመሬት ገጽታ የቁም ስዕል ዕቃዎች በአንድ ረድፍ ማሳያ ይህ በይፋዊ ወይም በስህተት የተጠቆሙ ሊሆኑ የሚችሉ ቅጥያዎች በመተግበሪያው ውስጥ 18+ ይዘትን እንዳያሳዩ አያግደውም ፡፡ የማሳወቂያ ይዘትን ደብቅ መተግበሪያዎችን ሲቀይሩ የመተግበሪያ ይዘቶችን ደብቅ እና ቅጽበታዊ ገጽ እይታዎችን ያግዳል ደህንነቱ የተጠበቀ ማያ ገጽ በጭራሽ ሁል ጊዜ ስራ ሲፈታ ቆልፍ በባዮሜትሪክስ ቆልፍ ደህንነት ማሳወቂያዎችን ያቀናብሩ የቀን ቅርጸት በርቷል ጠፍቷል ስርዓት ይከተሉ ገጽታ ስለ የላቀ መከታተል ውርዶች አንባቢ ቤተ መጻሕፍት ጄኔራል መተግበሪያ አይገኝም በመጫን ላይ… አድስ ወደፊት ተመለስ እነበረበት መልስ መዝገብ ይክፈቱ ቀልብስ ዳግም አስጀምር አስቀምጥ ሼር ጫን ወደ ታች ውሰድ ወደ ላይ ውሰድ በጣም ጥንታዊ በጣም አዲስ ደርድር ሁሉንም ሰርዝ ሰርዝ ይንቀሉ ሚስማር አሰናክል የምድብ ትሮችን አሳይ ባጆችን ያውርዱ ምቹ ፍርግርግ ዝርዝር የታመቀ ፍርግርግ ማሳያ የማሳያ ሁነታ ፍልሰት በድር እይታ ውስጥ ክፈት በአሳሽ ውስጥ ክፈት የራስ መግለጫ ይጀምሩ አስወግድ እንደገና ሞክር ቀጣይ ምዕራፍ ቀዳሚ ምዕራፍ ለአፍታ አቁም ምዕራፎችን ይመልከቱ ሽፋን አርትዕ ምድቦችን ያዘጋጁ ምድብ እንደገና ይሰይሙ ምድቦችን ያርትዑ ምድብ አክል አክል አርትዕ ሁሉንም ያሰናክሉ ሁሉንም አንቃ ቤተ-መጽሐፍት ያዘምኑ ደምስስ የደንበኝነት ምዝገባ ምልክት ያድርጉበት ዕልባት አውርድ የቀደመውን እንደተነበበ ምልክት ያድርጉበት እንዳልተነበበ ምልክት ያድርጉ እንደተነበበ ምልክት ያድርጉ ተገላቢጦሽ ምረጥ ሁሉንም ምረጥ ዓለም አቀፍ ፍለጋ የፍለጋ ቅንብሮች ፈልግ ቀን ታክሏል የቅርብ ጊዜ ምዕራፍ ለመጨረሻ ጊዜ የተነበበው ጠቅላላ ምዕራፎች ማጣሪያውን ያስወግዱ ያልተነበበ ዕልባት ተደርጓል ማጣሪያ ምናሌ ማስተካከያዎች ኢክስቴንሽኖች ታሪክ መከታተል ምዕራፎች ማንጋ ምድቦች ምንም ምድቦች የሉዎትም። ቤተ-መጽሐፍትዎን ለማደራጀት አንድ ለመፍጠር የመደመር አዝራሩን መታ ያድርጉ። ቤተ-መጽሐፍትዎ ባዶ ነው ተከታታዮችን ከአሰሳ ወደ ቤተ-መጽሐፍትዎ ያክሉ። በቅርቡ የተነበበ ነገር የለም የቅርብ ጊዜ ዝመናዎች የሉም ምንም የሚወርድ የለም እገዛ የኤክስቴንሽን መረጃ ፍልሰት ምትኬ ምንጮች ታሪክ ዝመናዎች ቤተ መጻሕፍት የሚወርድ ወረፋ ማስተካከያዎች ተጨማሪ ስም ዕልባት የተደረገባቸውን ምዕራፎች ሰርዝ ካነበብኩ በኋላ በእጅ እንደተነበበ ምልክት ከተደረገ በኋላ ምዕራፎችን ሰርዝ የጎን ሽፋን ንባብ የንባብ ሁነታ ሁልጊዜ የምዕራፍ ሽግግርን ያሳዩ የመሬት ገጽታን ያስገድዱ የግዳጅ ምስል ፍርይ ማሽከርከር በፍጥነት መደበኛ ምንም እነማ የለም ማዕከል ቀኝ ግራ ራስ-ሰር የመነሻ አቀማመጥን ያጉሉ ብልጥ ብቃት የመጀመሪያ መጠን የአካል ብቃት ቁመት የአካል ብቃት ስፋት ዘርጋ የአካል ብቃት ማያ ገጽ ልኬት ዓይነት ተለጠፈ ቀጣይነት ያለው አቀባዊ ዌብቱን አቀባዊ ከቀኝ ወደ ግራ ከግራ ወደ ቀኝ ነባሪ የንባብ ሁነታ ጥቁር ግራጫ ነጭ የጀርባ ቀለም ረጅም መታ መገናኛ የድምጽ ቁልፎችን ገልብጥ የድምፅ ቁልፎች አሰሳ የተጣራ ምዕራፎችን ይዝለሉ የተነበቡ ምልክት የተደረገባቸውን ምዕራፎች ይዝለሉ ማያ ገጹን ያብሩ ማቃጠል / ጨለማ ዶጅ / መብረቅ ማያ ገጽ ተባዙ ተደራቢ የቀለም ማጣሪያ ድብልቅ ሁነታ ብጁ ቀለም ማጣሪያ ብጁ ብሩህነት የሰብል ድንበሮች አንባቢ ሲከፈት የአሁኑን ሁነታ በአጭሩ ያሳዩ የንባብ ሁነታን አሳይ የገጽ ቁጥርን አሳይ ሁለቴ መታ የአኒሜሽን ፍጥነት የገጽ ሽግግሮች በመቁረጥ አካባቢ ውስጥ ይዘትን አሳይ ሙሉ ማያ 18+ ይዘትን ይያዝ 18+ በፊደል ደርድር ለታቺዮሚ የድር እይታ ያስፈልጋል ክላዉድ ፍሌር ን ማለፍ አልተሳካም ምንም የአውታረ መረብ ግንኙነት አይገኝም ሁለቱም አቀባዊ አግድም የለም ተገልብጦ መታ ማድረግ የቅጥያ ዝመናዎች የምዕራፍ ዝመናዎች ስህተቶች ተጠናቀቀ እድገት የተለመደ ማውረድ ለአፍታ ቆሟል ልክ ያልሆነ የመጠባበቂያ ፋይል ምትኬ ተፈጥሯል የመጠባበቂያ ድግግሞሽ ቤተ-መጽሐፍት ከመጠባበቂያ ፋይል ይመልሱ ምትኬ ወደነበረበት የአሁኑን ቤተ-መጽሐፍት ወደነበረበት ለመመለስ ሊያገለግል ይችላል ምትኬን ይፍጠሩ በክትትል አገልግሎቶች ውስጥ የምዕራፍ እድገትን ለማዘመን የአንድ-መንገድ ማመሳሰል። ከመከታተያ አዝራራቸው የግለሰቦችን የማንጋ ግቤቶች መከታተልን ያዘጋጁ። አገልግሎቶች ካነበቡ በኋላ የምዕራፍ እድገትን ያዘምኑ አዳዲስ ምዕራፎችን ያውርዱ አምስተኛው እስከ መጨረሻው ምዕራፍ ከአራተኛ እስከ መጨረሻው ምዕራፍ ሦስተኛው እስከ መጨረሻው ምዕራፍ ሁለተኛ እስከ መጨረሻው ምዕራፍ ለመጨረሻ ጊዜ የተነበበው ምዕራፍ ተሰናክሏል ምንም የ ዋይ-ፋይ ግንኙነት የለም ባልተጠበቀ ስህተት ምክንያት ምዕራፍ ማውረድ አልተቻለም ስህተት አውራጅ ነባሪ የምዕራፍ ቅንጅቶች ተዘምነዋል ለተሻለ ተኳኋኝነት እባክዎ የድር እይታን መተግበሪያውን ያዘምኑ ኩኪዎችን ያጽዱ አውታረ መረብ ተሰርዟል ወደነበረበት መመለስ ምትኬን ወደነበረበት መመለስ አልተሳካም ምትኬን ወደነበረበት መመለስ እነበረበት መልስ ቀድሞውኑ በሂደት ላይ ነው ምትኬ አልተሳካም ምትኬን መፍጠር ምትኬ ለማስቀመጥ ምን ይፈልጋሉ? ምትኬ ቀድሞውኑ በሂደት ላይ ነው %1$02d ደቂቃ ፣ %2$02d ሰከንድ እነበረበት መልስ ተጠናቅቋል መከታተያዎች አልገቡም: የጠፋ ምንጮች: ምትኬ ማንኛውንም ማንጋ አልያዘም ፡፡ ================================================ FILE: i18n/src/commonMain/moko-resources/ar/plurals.xml ================================================ لايوجد تحديث للإضافة يتوفر تحديث لإضافة يتوفر تحديث لإضافتان يتوفر تحديث %d إضافات يتوفر تحديث %d إضافات يتوفر تحديث %d إضافات الفصول %1$s الفصول %1$s وفصل آخر الفصول %1$s و%2$d فصول أخرى الفصول %1$s و%2$d فصول أخرى الفصول %1$s و%2$d فصول أخرى الفصول %1$s و%2$d فصول أخرى لا توجد فصول جديدة فصل جديد فصلان جديدان %1$d فصول جديدة %1$d فصول جديدة %1$d فصول جديدة لا شيء إدخال واحد إدخالين ادخالات %d ل ادخالات %d ل ادخالات %d ل %1$s عنصر متبقي عنصر واحد متبقي عنصران متبقيان %1$s عناصر متبقية %1$s عناصر متبقية %1$s عناصر متبقية بعد أقل من دقيقة بعد دقيقة بعد دقيقتين بعد %1$s دقائق بعد %1$s دقائق بعد %1$s دقائق لا يوجد فئات فئة فئتان %d فئات %d فئات %d فئات تمَّ في %1$s وبدون أخطاء تمَّ في %1$s وفيه خطأ تمَّ في %1$s وفيه خطآن تمَّ في %1$s وفيه %2$s أخطاء تمَّ في %1$s وفيه %2$s خطأً تمَّ في %1$s وفيه %2$s خطأ لا متتبّع متتبّع واحد متتبعان بضعة متتبّعين (%d) عدّة متتبّعين (%d) %d متتبّعاً لا فصول فصل واحد فصلين %1$s فصول %1$s فصول %1$s فصول لا يُتخطَّى أيُّ فصل يُتخطَّى فصل، وذلك إما لأن المصدر مفقود أو لأنه مصفًّى يُتخطَّى فصلان، وذلك إما لأن المصدر مفقود أو لأنهما مصفَّان تُتخطَّى %d فصول، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون يُتخطَّى %d فصلًا، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون يُتخطَّى %d فصل، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون الأمس منذ يوم منذ يومين منذ %1$d أيام منذ %1$d أيام منذ %1$d أيام لا يوجد فصل تالٍ لم يُقرأ الفصل غير المقروء التالي الفصلان غير المقروءين التاليان %d فصول تالية لم تُقرأ %d فصلًا تاليًا لم يُقرؤوا %d فصل تالٍ لم يُقرؤوا لا فصل تالي الفصل التالي %d فصول تالية %d فصول تالية %d فصل تالي %d فصل تالي لا يوجد أيُّ فصل مفقود فصل واحد مفقود فصلان مفقودان %1$s فصول مفقودة %1$s فصلًا مفقودًا %1$s فصل مفقود لا يوم يوم واحد يومان %d أيام %d يومًا %d يوم لا مستودعات مستودع مستودعان %d مستودعات %d مستودعات %d مستودعات %1$s صفحات صفحة صفحتان %1$s صفحات %1$s صفحات %1$s صفحات اليوم غداً بعد غد بعد %1$d أيام بعد %1$d أيام بعد %1$d أيام نقل %1$d مدخل؟ نقل مدخل؟ نقل مدخلان؟ نقل %1$d مداخل؟ نقل %1$d مدخل؟ نقل %1$d مدخل؟ نسخ %1$d مدخل؟ نسخ مدخل؟ نسخ مدخلان؟ نسخ %1$d مداخل؟ نسخ %1$d مدخل؟ نسخ %1$d مدخل؟ لا مدخل ثم تجاوزه مدخل ثم تجاوزه مدخلان ثم تجاوزه %1$d مدخل ثم تجاوزه %1$d مدخل ثم تجاوزه %1$d مدخل ثم تجاوزه ================================================ FILE: i18n/src/commonMain/moko-resources/ar/strings.xml ================================================ الاسم الفئات إدخالات المكتبة فصول تعقب تاريخ اﻹعدادات قائمة التنزيلات المكتبة السجل التحديثات النسخ الاحتياطي والاستعادة اﻹعدادات الترتيب حسب المحفوظة غير مقروءة إزالة الترتيب أبجديًا عدد الفصول آخر ما قرأت بحث تحديد الكل تحديد كمقروء تحديد كغير مقروء تحديد السابق كمقروء تنزيل احفظ الفصل كإشارة مرجعية إزالة الإشارة المرجعية حذف تحديث المكتبة تعديل أضف إضافة فئة تعديل الفئات إعادة تسمية الفئة حدد الفئات تعديل صورة الغلاف إيقاف موقت الفصل السابق الفصل التالي إعادة المحاولة إزالة استئناف فتح فى المتصفح وضع العرض العرض شبكة مدمجة قائمة إلغاء فرز تثبيت مشاركة حفظ إعادة تعيين تراجع فتح السجل إستعادة جار التحميل… التطبيق غير متوفر عام القارئ التنزيلات التتبع اﻹعدادات المتقدمة حول التطبيق العناصر لكل صف طوليٌّ عرضيٌّ التحديثات التلقائية إيقاف كل ٦ ساعات كل ١٢ ساعة يومياً كل يومان أسبوعياً الكل تقييد التحديث التلقائي للجهاز عند الشحن حالها «تمَّت» تحديث تقدّم الفصول بعد القراءة الفئة المبدئية السؤال دائماً وضع الشاشة الكاملة مؤثرات الانتقال بين الصفحات عرض رقم الصفحة اقتصاص الحدود سطوع مُخصّص مُرشح الألوان المخصص ابقاء الشاشة مفتوحة التنقل أزرار الصوت أزرار الصوت المعكوسة لون الخلفية أبيض أسود وضع القراءة الافتراضي صفحيٌّ (يسارًا فيمينًا) صفحيٌّ (يمينًا فيسارًا) صفحيٌّ (عموديٌّ) شريط طويل كيفية ضبط الأبعاد ملائمة الشاشة التمدد ملائمة العرض ملائمة الطول الحجم اﻷصلى الملائمة الذكية موضع بدء التكبير تلقائي اليسار اليمين المركز التدوير الافتراضي حر الوضع الرأسي اﻹجباري الوضع الأفقي الإجباري بعد وضع علامة \"مقروءة\" يدوياً الحذف تلقائيا بعد القراءة معطل آخر فصل مقروء من الفصل الثاني قبل الأخير ‪من الفصل الثالث قبل اﻷخير من الفصل الرابع قبل اﻷخير من الفصل الخامس قبل اﻷخير تنزيل الفصول الجديدة المتتبِّعات إنشاء نسخة إحتياطية يمكن استخدامها لإستعادة المكتبة الحالية إستعادة النسخة الإحتياطية إستعادة مكتبة من ملف نسخة إحتياطية معدل النسخ الاحتياطي التلقائي أُنشئت نسخة احتياطية اكتملت الاستعادة ما الذي تريد نسخه احتياطيّاً؟ تُستعاد النسخة الاحتياطية تُنشأ النسخة الاحتياطية بحث شامل احمر اخضر أزرق ألفا مسح الذاكرة المؤقتة للفصول المستخدمة: %1$s تم محو الذاكرة المؤقتة. %1$d ملف تم محوه حدث خطأ أثناء محو ذاكرة التخزين المؤقت محو ملفات تعريف الارتباط تم محو ملفات تعريف الارتباط محو قاعدة البيانات مسح سجلّ الإدخالات التي ليست محفوظة في مكتبتك تم حذف المدخلات اﻹصدار إرسال تقارير الأعطال هذا يساعد فى حل أي مشاكل. لن يتم إرسال أيّة بيانات حساسة تسجيل الدخول إلى %1$s اسم المستخدم كلمة المرور تسجيل الدخول تم تسجيل الدخول خطأ غير معروف جار تحديث الفئة لا توجد نتائج أخرى مصدر محلِّي أخرى البحث الشامل… الأحدث تصفَّح مستمرَّة مجهول مرخَّصة أزل من المكتبة حذف الفصول المنزلة؟ الفصل %1$s جاري التنزيل (%1$d/%2$d) خطأ متوقّف عنوان المصدر رقم الفصل حسب المصدر حسب رقم الفصل تنزيل غير مقروء هل أنت متأكد من أنك تريد حذف الفصول المحددة؟ التتبع القراءة مكتملة متروكة معلَّقة أنوي قراءتها التقييم العنوان الحال توجد بالفعل فئة بهذا الاسم! تم حذف الفئات سيؤدي هذا إلى إزالة تاريخ قراءة هذا الفصل. هل أنت متأكد؟ إعادة تعيين جميع الفصول لهذا الإدخال إضافة إلى المكتبة؟ تم حفظ الصورة مُرشح مخصص عيِّنها غلافًا حُدِّث الغلاف الصفحة: %1$d لم يتم العثور على الفصل التالي تعذَّر تحميل هذه الصورة هل تريد تعيين هذه الصورة كغلاف؟ فشل تنزيل الفصول. يمكنك إعادة المحاولة في قسم التنزيلات تم إيجاد فصول جديدة فشل تحديث الغلاف الرجاء إضافة الإدخال إلى مكتبتك قبل القيام بذلك اختر صورة الغلاف اختر ملف النسخة الاحتياطية تنزيل لا تتوفر تحديثات جديدة جار التنزيل… اضغط لتثبيت التحديث حدث خطأ في التنزيل نسخة جديدة متوفرة! لا توجد تنزيلات لا توجد تحديثات جديدة لم تقرأ شيئًا مؤخَّرًا مكتبتك فارغة مدير التنزيل خطأ فشل تنزيل الفصل بسبب حدوث خطأ غير متوقع لا يتوفر اتصال واي فاي لا يتوفر اتصال بالشبكة توقفت التنزيلات عام نقل الإضافات معلومات الإضافة الفصول المحملة حدث تثبيت المُعلقة جارى التنزيل جاري التثبيت تم التثبيت الثقة غير موثوق فيه إلغاء التثبيت إضافة ذات ريبة يمكن للملحقات الخبيثة قراءة أي بيانات اعتماد مخزنة لتسجيل الدخول أو تنفيذ تعليمات برمجية عشوائية. \n \nمن خلال الوثوق بهذا الامتداد، فإنك تقبل هذه المخاطر. سرعة مؤثر النقر المزدوج عارض الصفحات لا مؤثرات طبيعي سريع تم الإضافة إلى المكتبة تم الإزالة من المكتبة نُسخ إلى الحافظة: \n%1$s المصدر غير مثبت: %1$s إعادة القراءة الحالة النوع اختر بيانات لتضمينها نقل نسخ ليست لديك أيّة فئات، اضغط زر اﻹضافة لإنشاء واحدة لتنظيم مكتبتك. تمَّ الانتهاء من: الحالي: التّالي: السّابق: لا يوجدُ فصل تالي لا يوجدُ فصل سابق جار تحميل الصّفحات… فشل تحميل الصّفحات: %1$s أظهر الإجراءات عند الضغط المطوَّل فتح في WebView تخطي الفصول المقروءة التراكب مضاعفة الشاشة المساعدة مُرشح الألوان ”وضع الألوان الممزوجة“ مراوغة / تفتيح حرق / تغميق لم يُعثر على أيِّ نتائج اختيار مصدر للنقل من عودة تقدم تحديث المكتبة المزيد نقل إلى الأعلى الأقدم الأَحدثْ إلغاء الكل عرض الفصول أحدث فصل القائمة المصادر نقل إلى الأسفل أبدًا دائماً أوصد في حالة السكون اطلب فتح القفل الأمان و الخصوصية أدر الإشعارات صيغة التاريخ النظام داكن فاتح تم إلغاء وضع تحسين البطارية مُسبقاً يساعد في عملية تحديث المكتبة والنسخ الإحتياطي في الخلفية إطفاء وضع تحسين البطارية اعدادات القرآءة اظهار فواصل الانتقال بين الفصول تخطي الفصول المُرشحة اظهار محتوى المناطق المقطوعة هذه الإضافة لم تعد متوفرة. قد لا تعمل بشكل صحيح ويمكن أن تسبب بمشاكل في التطبيق. يوصى بإلغائه. قديم جدًا التحديثات معلقة التحديث العام العرض أخفِ محتوى الإشعارات تُخفي الشاشة الآمنة محتوى التطبيق عند التبديل بين التطبيقات، وتمنع التقاط الشاشة كذلك الشاشة الآمنة المُنزل فقط تحقَّق من وجود تحديثات التراخيص مفتوحة المصدر الموقع الإلكتروني أُلغيت الاستعادة فشل استعادة النسخ الاحتياطي الاستعادة قيد التقدم بالفعل فشل النسخ الاحتياطي يُنسخ احتياطيًّا بالفعل %1$02dدقيقة،%2$02dثانية إلغاء التثبيت تثبيت عكس التحديد تحديثات اﻹضافات تحديثات الفصول يرجى تحديث تطبيق WebView لتوافق أفضل إن وجود WebView لازم ليعمل التطبيق فشل في تجاوز Cloudflare الفصول %1$s الفصل %1$s و%2$d فصول أخرى الفصل %1$s الفصل %1$s - %2$s تَحديثُ المكتبة وضع القراءة القسم الخاص بهذه السلسلة متوقِّفة أضف تتبُّعًا أقل المزيد في المكتبة إضافة إلى المكتبة دليل استخدام المصادر المحلية المثبتة آخر مصدر مُستخدم تم تسجيل الخروج تسجيل الخروج تسجيل الخروج من %1$s؟ البريد الإلكتروني تصفية جميع الإدخالات في مكتبتك الإزاحة الجانبية شريط طويل بين أجزائه فجوات رمادي تعذر فتح إعدادات الجهاز نقل البيانات المصادر المفقودة: النسخة الإحتياطية لا تحتوي على أيّة إدخالات المكتبة. ملف النسخ الاحتياطي غير صالح: مزامنة أحادية تُحدِّث قراءة الفصول في المتتبعات الخارجية، ولك تعيين التتبِّع لكلِّ مدخلة على حدى، وذلك من زرِّ التتبع فيهم. تحقق من وجود غلاف جديد وتفاصيل جديدة عند تحديث المكتبة تحديث البيانات الوصفية تلقائياً حسب تاريخ الرفع حدّث صور اغلفة المكتبة شبكة مريحة قوائم إظهار قوائم الفئة لم يتم العثور على أيّة صفحات تفعيل الكل تعطيل الكل إظهار الوضع الحالي لفترةٍ وجيزةٍ عند فتح القارئ إظهار وضع القراءة السمة تعطيل ابدأ تاريخ الإضافة ما الجديد يتطلب إعادة تشغيل التطبيق ليتم تفعيله التشبيك أجهزة التتبع التي لم يتم تسجيل الدخول إليها: حذف الفصول ذات العلامة المرجعية حذف الفصول وضع القراءة بعض المصادر من هذا الامتداد قد تحتوى على محتوى للبالغين (+18) محتوى غير لائق هذا لا يمنع الإضافات غير الرسمية أو التي تم وضع علامة عليها بشكل غير صحيح من إظهار محتوى غير لائق داخل التطبيق. كليهما عمودي أفقي لا شيء عكس مناطق اللمس أخطاء مُكتمل التقدّم تعذّر تنزيل الفصول بسبب انخفاض مساحة التخزين لم يتم العثور على المصدر حالة غير معروفة مؤلّف غير معروف لا تمتلك أيّة مصادر مثبّتة إبحث عن \"%1$s\" بشكلٍ شامل حُدِّث إلى الإصدار v%1$s لم يُعثر على فصول %1$s: %2$s, صفحة %3$d إعدادات الفصل الإفتراضية المُحدثة تعيين كافتراضي تنطبق أيضًا على جميع الإدخالات في مكتبتي هل أنت متأكد أنك تريد حفظ هذه الإعدادات كافتراضي؟ إعدادات الفصل إعدادات البحث الفصول المنزَّلة من المكتبة أمتأكِّد؟ سوف يُحذف التاريخ. حُذف التاريخ إيقاف سجل القراءة الوضع المخفي مسح السجل الصفحة التالية الصفحة السابقة دليل نقل المصدر محتوى +18 اعرض في قوائم المصادر والامتدادات رجاء سجل دخولك في MAL مجدداً لم يتم العثور على تطبيق منتقي الملفات مناطق اللمس في شكل حرف L حافَّة كأنه كِندِل مُتتبَعة إظهار عدد العناصر تاريخ انهاء القراءة تاريخ بدء القراءة يحفظ سجلات الأخطاء في ملف للمشاركة مع المطورين شارك سجلَّات الاعطال يميناً ويساراً إذا كان موضع تقسيم الصفحات العريضة لا يتطابق مع اتجاه القراءة عكس موضع تقسيم الصفحة تقسيم الصفحات العريضة تنازلياً تصاعدياً حسب تاريخ الرفع حسب رقم الفصل إستخدام DNS عبر HTTPS (DoH) قد تحتاج إلى تثبيت أي إضافات مفقودة وتسجيل الدخول إلى خدمات التتبع بعد ذلك لاستخدامها. يمين يسار التالي السابق عرض مناطق اللمس للتنقل عند فتح القارئ لفترة وجيزة إظهار مناطق اللمس تاريخ الرفع افقي رأسي التدوير تلقائيًّا يُنشِئ مجلدات وفقًا لعناوين المدخلات احفظ الصفحات في مجلدات منفصلة الإجراءات تدرج رمادي إستثناء: %s تضمين: %s لا شيء الإدخالات في الفئات المستبعدة لن يتم تحديثها حتى و ان كانت أيضا في الفئات المضمنة. اضغط لإظهار التفاصيل التنزيل التلقائي لن يتم تنزيل الإدخالات في الفئات المستبعدة حتى إذا كانت موجودة أيضًا في الفئات المضمنة. إلغاء تفعيل الوضع الخفي فشل النسخ إلى الحافظة نسخة الاندرويد هذه اصبحت غير مدعومة المصدر غير مدعوم لم يُقرأ التاريخ ترتيب حسب لم يُعثر على الفصل إيقاف تشغيل قيود: %s لا يوجد مطابقات فشلت مشاركة الغلاف خطأ في حفظ الغلاف حُفظ الغلاف غُلاف تنسيق الفصل غير صالح تعليمات التعقب إعدادات فرز كل صنف إلغاء الكل لهذه السلسلة مصدر محلّي ليس لديك اي قوائم بعد. ابدأ التحميل الآن أحمر منتصف الليل أخضر مظهر التطبيق أدنى دنيا عالية أعلى حساسية التمرير لإخفاء القائمة وضع داكن الأسود النقي يوتسوبا ين & يانغ تاكو ديناميك تقوم بعض الشركات المصنعة بوضع قيود إضافية على التطبيقات التي قد تقضي على الخدمات التي تعمل في الخلفية. يحتوي هذا الموقع على مزيد من المعلومات حول كيفية إصلاحه. قد لا يعمل النسخ الاحتياطيُّ أو الاستعادة إن عطِّلت أمثَلَة MIUI. يُحسِّن مصادر معينة، وتُتابَع المدخلات حال إضافتها للمكتبة. المتتبِّعات المحسَّنة اليوم المصادقة لتأكيد التغيير الافتراضي الأنشطة التي تعمل في الخلفية تتبع معكوس ازرق مخضر و فيروز المظهر دليل البدء ساعد بالترجمة واجهة مستخدم الجهاز اللوحي الفئات المستثناة المثبِّت إجمالي الإدخالات تحذير اللغة زد على ذلك حفظ الاحتياط في غير هذا المكان، وتنبَّه لوجود الخطير فيها ككلمات السر، وتحفَّظ من مشاركتها. التحديثات الكبيرة تضر بالمصادر، وتؤدي لتحديثات أبطأ، وقد تسبب زيادة في استهلاك البطارية۔ اضغط لمعرفة المزيد۔ التسجيل المطول معلومات التطبيق جارٍ تثبيت الإضافة … طباعة السجلات المطولة في سجل النظام (يقلل من أداء التطبيق) تحديثات التطبيق تحديث الكل كل ثلاثة ايام فقط على شبكة WI-FI «Shizuku» لا يعمل انتهى النشر أُلغيت متوقفة للحصول على المساعده في إصلاح أخطاء تحديث المكتبة، أنظر هنا%1$s احفظ كأرشيف CBZ سياسة الخصوصية فيها فصول لم تُقرأ قياسي امسح ملفات التخزين المؤقت عند فتح التطبيق لا شئ للتنظيف %1$d مدخلةً في قاعدة البيانات وليست في المكتبة فشل الحصول على قائمة الملحقات ثبِّت «شيزوكو» وشغِّله لتستخدمه مثبِّت إضافات. تحذير: يمكن أن تؤدِّي التنزيلات كبيرة الحجم والعدد إلى إبطاء المصادر، وقد يُحظر %s منها بسبب ذلك. اضغط لمعرفة المزيد۔ إظهار الدخول شبكة بالاغلفة تُخُطِّيت بسبب عدم وجود فصول قُرئت تُخُطِّيت لوجود فصول لم تُقرأ لم يبدأ هذا بعد تُخُطِّيت لأنها مكتملة حرِّك الصور الواسعة كبِّر الصور العريضة تلقائيًّا خطأ أثناء حفظ الصورة معطل رأسي بالعكس فشل %1$d تحديث أو تحديثات اضغط لمعرفة المزيد نقل سلسلة الفصول للأعلى لا توجد مدخلات في المكتبة لإجراء نسخة احتياطي‮‮ة اغلاق فتح في GitHub احذف بيانات WebView حُذفت بيانات WebView لا يوجد مصادر مثبته لا يوجد مصدر المانجا الغير مقروءة آخر فحص للتحديث يحسِّن أداء القارئ لم يُعثر على الصفحة %d أثناء التقسيم لم يتم العثور على مسار الصفخة %d اعادة تعيين جميع اعدادات القارئ إعادة تعيين اعدادات القراءه لكل القصص اللغة التقييم العمري الإصدار لم يمكن إعادة تعيين إعدادات القارئ هذا محرج قائمة غير المنتهية على الشبكات غير المحدودة فقط إعادة ضبط إعدادات قراءة السلسلة قائمة القراءة قائمة الرغبات قائمة المكتملة قائمة المعلَّقة غلاف مخصص غير قادر على فتح آخر فصل تم قراءته غير مثبت لغة تطبيق هل تُريد محو هذه الفئة \"%s\"؟ خطأ داخلي: تحقق من سجل الاعطال لمزيداً من المعلومات اعادة ضبط وتر وكيل ألمستخدم الإفتراضي وتر وكيل المستخدم الافتراضي مسح الفئة لا وصف أُرجواني لا تتاح الأداة حال تمكين قفل التطبيق اطَّلع على ما حُدِّث مؤخَّرًا في مكتبتك حذف كل شيء موجة مد و جزر متعدد هنالك تحديث جارٍ بالفعل التنزيل المسبق ينفع حين كون الفصل الحاليِّ والذي يليه منزَّلين. التحميل تلقائيا أثناء القراءة هل أنت واثق؟ آخر تحديث للمكتبة: %s سلسلة وكيل المستخدم لا يمكن أن تكون فارغة شائع أنت على وشك أن تحذف \"%s\" من مكتبتك لم يتم منح أذن التخزين بحث… تُخُطِّيت لأن السلسلة لا تتطلب تحديثات واجه %s خطأً غير متوقَّع. تنبغي لك مشاركة سجلَّات الانهيار في قناة الدعم في دسكورد. عفوًا! أعد تشغيل التطبيق مظهر، التاريخ والوقت الفئات، التحديث الشامل، تمرير الفصول وضع القراءة، العرض، التنقل التحميل التلقائي، التحميل مقدما تزامن التقدم أحادي الاتجاه، مزامنة محسّنة المصادر، الامتدادات، البحث العالمي النسخ الاحتياطي اليدوي والآلي وحيِّز التخزين قفل التطبيق، شاشة آمنة تفريغ سجلات الأعطال وتحسينات البطارية لا يتم دعم إصدارات F-Droid رسميا. \nانقر لمعرفة المزيد. موقع غير صالح: %s فرض التطبيق على إعادة التحقق من الفصول التي تم تنزيلها إزالة التاريخ؟ %s سيؤدي هذا إلى إزالة تاريخ البدء المحدد مسبقًا من زرُّ متابعة القراءة في هذه اللحظة %s سيؤدي ذلك إلى إزالة تاريخ الانتهاء المحدد مسبقا من فهرس التنزيلات غير صالح عنوان غير معروف التحقق من التنزيلات فتح إدخال عشوائي سلسلة وكيل المستخدم المبدئية غير صالحة لم يتم العثور على إدخالات في هذه الفئة إحصائيات بدأت محلي المنزَّل نظرة عامة إدخالات مكتملة مدة القرائة إدخالات في التحديث العام الكل إقرا متتبعين إدخالات متتبعة يعني النتيجة مستعمل غير متوفر %d ي %d س %d د %d ث الفئة فارغة ليس الان إظهار عدد الادخالات غير المقروءة في ايقونة التحديثات تجاوز الفصول المكررة متوفر ولكن المصدر غير مثبت: %s نسخ الى الحافظة %1$s خطأ: %2$s *مطلوب نسخ إلى الحافظة إخفاء الإدخالات الموجودة بالفعل في المكتبة تحديث الفئة افصل الصور الطويلة التراكب دوِّر الصفحات العريضة لتلائم الشاشة اعكس اتِّجاه الصفحات العريضة المدوَّرة معلومات التنقيح انقر مرتين لتكبِّر إجراء التمرير الى اليمين إجراء التمرير الى اليسار عيِّد المدة مدة جلب مخصَّصة قدِّر كلَّ ليس ضمن مدة الإصدار المتوقعة تُخُطِّيت بسبب عدم توقع صدور اليوم عيِّن التحديث كلَّ المدة التحديث المتوقع القادم أأزيل تتبع %s؟ هذا يزيل التتبع محليًّا. حسنًا وكذلك أزله من %s حذف التنزيلات تُزامن المكتبة انتهت مزامنة المكتبة وُجدت نتائج تعذَّر إنشاء ملفِّ نسخ احتياطيِّ ولوج المتتبِّع أُفسد فهرس التنزيلات اضغط هنا للمساعدة فى Cloudflare لا اتصال بالإنترنت خطأ HTTP %d، انظر في WebView لا يمكن الوصول إلى %s افتح %s انقل السلسلة للقعر التوقيت النسبي «%1$s» بدلًا عن «%2$s» تحديث المكتبة… (%s) إعدادات المصادر إعدادات التطبيق لا ملفات حُدِّدت البيانات والتخزين أبدًا يخفِّف الحرق في شاشات الحبر آخر احتياط تلقائي: %s أشرق الشاشة إذا تغيرت الصفحة التخزين نقاط المتتبع أنشئ نفِّذ صفِّر لم يُعثَر على مترجمين سكانليتور احجب بعض المترجمين خيارات أكثر محدَّد غير مُحدَّد تصفح الاعلى مكان التخزين يُستخدَم في الاحتياط وتنزيل الفصول والمصدر المحليِّ. حدِّد مجلَّدًا دليل البدء أحديث العهد بـ%s؟ طالع دليل البدء. ابدأ لا بد من تحديد مجلَّد أهلًا وسهلًا! أستخدمتَ %s قبلًا؟ تخطَّ التالي أول أمرنا أن نضبط بعض الأمور، ولك أن تغيرها في الإعدادات لاحقًا. لم يُعيَّن موضع للتخزين حدِّد مجلَّدًا يُخزِّن فيه %1$s الفصول المنزَّلة والاحتياطات وغيرها. \n \nوالأحسن أن يكون المجلَّد مخصوصًا لذلك. \n \nالمجلَّد المحدَّد: %2$s إذن تثبيت التطبيقات لتثبيت ملحقات المصدر. إذن الإشعار احصل على تنبيهات لتحديثات المكتبة والمزيد. استخدام البطارية في الخلفية منح الأذونات مطلوبة لتثبيت الإضافات. انقر هنا لمنحها. إبطال الإضافات غير الموثوق بها مستودع الإضافات رابط المستودع إضافة مستودعات إضافية إلى %s. يجب أن يكون هذا الرابط ينتهي بـ \"index.min.json\". هذا المستودع موجود بالفعل! حذف المستودع رابط المستودع غير صالح هل ترغب في حذف \"%s\" من المستودع؟ مستودع مفتوح المصدر الخطأ الكامل: تضمين إعدادات حساسة (على سبيل المثال، رموز تسجيل دخول المتتبع) قريباً تكرار تحديث مخصص: هل تقوم بالتحديث من إصدار أقدم ولست متأكداً مما تختاره؟ ارجع إلى دليل التخزين لمزيد من المعلومات. دليل التخزين تجنّب الانقطاعات في تحديثات المكتبة الطويلة الأمد والتنزيلات واستعادة النسخ الاحتياطية. تحديث ذكي Nord لم يتم تعيين أي مستودع . إضافة مستودع من المتوقع أن يتم إصدار فصول جديدة في حوالي 1%1$s، والتحقق من كل 2%2$s . متاح: %1$s / الكل: %2$s الشهر السابق الدليل القادم الشهر القادم القادم عرض الثحديثات القادمة أضف على أي حال استبدل بصمة مفتاح التوقيع موجودة بالفعل تعطيل التصغير المانجا اما منتهية او لا يوجد تاريخ اصدار متوقع. أبيض وأسود فشل في الحصول على الوصول المستمر إلى المجلد. قد يتصرف التطبيق بشكل غير متوقع. %1$s مث مدة الوميض يومض كل(مدة) أسود أبيض يومض مع يحتوي المستودع %1$s على نفس بصمة مفتاح التوقيع الموجودة في %2$s. \nإذا كان هذا متوقعًا، فسيتم استبدال %2$s، وإلا فاتصل بمشرف الرابطالخاص بك. ملف تعريف عرض خاص نسخ الرابط مستودع الإضافات ملف النسخة الإحتياطية معطل أو لا يعمل لا يتم دعم النسخ الاحتياطي لـ JSON فنان الكاتب تلقائي أرسل بيانات بشكل مخفي للمساهمة في تطوير البرنامج. الأمن سجلات التحليلات و الأخطاء عشوائي أرسل سجلات الخطأ أرسل سجلات الخطأ للمطورين بشكل خفي. السماح للتحليلات ملاحظات تعديل الملاحظات فصول غير مقروءة أحادي اللون سيسمح لنا إرسال سجلات الأعطال والتحليلات بتحديد المشكلات وإصلاحها وتحسين الأداء وجعل التحديثات المستقبلية أكثر ملاءمة لاحتياجاتك بعد قرائة الفصل فشل في انشاء المكتبة:%s فشل في تحميل المكتبة التتبع العلني تصرف بعد نقل الفصل الجديد احدف حدف الإمتداد؟ هل تريد اضافة الفهرس \"%s\"؟ تحديث عنوان المانغا لتطابق المصدر جاري الدخول… تحذير: إذا تمت إعادة تسمية المانجا، فسيتم إزالتها من قائمة التنزيل (إن وجدت). التتبع الخاص استمتعت بالجزء حين … تحديث المتابعات إلى الفصل %d استخدم فك التشفير القديم لقارئ الشرائط الطويلة اعتبر الفصول المقروئة مرتين مقروئة هل تريد فعلا حدف الامتداد \"%s\"؟ ادا تم تحميل صورة فارغة قلل الحد تدريجيا لحل المشكلة.\nتم تحديد:%s قائمة المكتبات جميع الإدخالات المقروئة عتبة خريطة الصورة النقطية للأجهزة المخصصة افتراضي (%d) لديك مداخلات متشابهة في مكتبك بنفس الاسم.\n\nحدد واحدة للنقل أو الإضافة على أي حال. التكرارات المحتملة تحديث المتابعات إلى الفصل %d؟ إيقاف قراءة التاريخ مؤقتًا للتمديد تبرع كاتبوتشين ­تقديم الصور في أوصاف المانجا إخفاء مؤشرات الفصل المفقودة يؤثر على الأداء. فعّله فقط إذا لم يُحل تقليل عتبة الخريطة النقطية مشاكل الصورة الفارغة تخطي تنزيل الفصول المقروءة المكررة تحديث التقدم عند وضع علامة عليه كمقروء يصدّر تم تصدير المكتبة أنت على وشك إزالة الإدخالات من قاعدة البيانات سيتم فقدان قراءة الفصول وتقدم الإدخالات غير الموجودة في المكتبة الاحتفاظ بالإدخالات مع الفصول المقروءة تم تعقبها بشكل خاص مُختار متاح تحديد الكل لا تحدد ­حدد المصادر الممكنة تحديد المصادر المثبتة اكمل البيانات المراد نقلها حذف التنزيلات الخاصة بالإدخال الحالي بعد الترحيل ­كلمات رئيسية إضافية (اختياري) يساعد في تضييق نتائج البحث عن طريق إضافة كلمات رئيسية إضافية إخفاء الإدخالات التي لا تحتوي على تطابق إخفاء الإدخالات بدون فصول أحدث إظهار الإدخال فقط إذا كانت المباراة تحتوي على فصول إضافية هذه الخيارات بطيئة وخطيرة وقد تؤدي إلى فرض قيود من المصادر وضع البحث المتقدم يقسم العنوان إلى كلمات رئيسية لإجراء بحث أوسع المطابقة على أساس رقم الفصل في حال تفعيله، يتم اختيار المطابقة الأبعد. وإلا، يتم اختيار المطابقة الأولى حسب أولوية المصدر. ‎نقل نقل (%1$d/%2$d) قطع نقل لم يتم العثور على بدائل الأحدث: %1$s مجهول البحث اليدوي لا تنقل نقل الآن نسخ الآن وقف النقل؟ إيقاف إلغاء نسخ نقل إلغاء إلغاء لم يتم العثور على فصول، لا يمكن استخدام هذا الإدخال للنقل أغلق التبويب منع استخدام أسماء ملفات بغير الحروف اللاتينية يضمن التوافق مع بعض وسائط التخزين التي لا تدعم الترميز الموحد. عند تفعيل هذا الخيار، ستحتاج إلى إعادة تسمية مجلدات المصدر والمانغا يدويًا عبر استبدال الأحرف غير التابعة لـ ASCII (المحارف اللاتينية) بتمثيلها السداسي العشري (hex) بنظام UTF-8 وبحروف صغيرة. ملفات الفصول لا تحتاج إلى إعادة تسمية. تنزيل مصادر متعددة في وقت واحد تنزيل صفحات متعددة في وقت واحد عدد الصفحات التي يتم تنزيلها في وقت واحد لكل مصدر ================================================ FILE: i18n/src/commonMain/moko-resources/as/plurals.xml ================================================ এক্সটেনচন আপডেট উপলব্ধ %d এক্সটেনচন আপডেটসমূহ উপলব্ধ %d ৰেপো %d ৰেপোসমূহ %1$s মিনিট পিছত %1$s মিনিটৰ পিছত কালি %1$d দিনৰ আগতে কাইলৈ %1$d দিনত %d শিতান %d শিতানসমূহ পৰৱৰ্তী অপঠিত অধ্যায় পৰৱৰ্তী %d অপঠিত অধ্যায়সমূহ %1$sত %2$s ত্ৰুটি সৈতে সমাপ্ত %1$sত %2$s ত্ৰুটিৰ সৈতে সমাপ্ত %1$s বাকী আছে %1$s বাকী আছে ১ দিন %d দিন ১ পৃষ্ঠা %1$s পৃষ্ঠাসমূহ অপস্থিত %1$s অধ্যায় অপস্থিত %1$s অধ্যায়সমূহ %1$s অধ্যায় %1$s অধ্যায়সমূহ পৰৱৰ্তী অধ্যায় পৰৱৰ্তী %d অধ্যায়সমূহ %d ট্ৰেকাৰ %d ট্ৰেকাৰসমূহ %d অধ্যায় স্কিপ কৰা হৈছে, উৎসত নাইবা ফিল্টাৰ কৰি আঁতৰোৱা হৈছে %d অধ্যায়সমূহ স্কিপ কৰা হৈছে, উৎসত নাইবা ফিল্টাৰ কৰি আঁতৰোৱা হৈছে %d প্ৰৱিষ্টিৰ বাবে %d প্ৰৱিষ্টিসমূহৰ বাবে %1$d নতুন অধ্যায় %1$d নতুন অধ্যায়সমূহ অধ্যায়সমূহ %1$s আৰু 1 অধিক অধ্যায়সমূহ %1$s আৰু %2$d অধিক %1$d প্ৰৱেশ প্ৰব্ৰজন কৰক? %1$d প্ৰবিষ্টসমূহ প্ৰব্ৰজন কৰক? ================================================ FILE: i18n/src/commonMain/moko-resources/as/strings.xml ================================================ চালু বন্ধ পুথিভঁৰাল আপডেটসমূহ আসন্ন আৰম্ভ হৈছে স্থানীয় ডাউনলোড কৰা %s আনলক কৰক সামনে পুনৰপ্ৰাপ্তি কৰক পৰৱৰ্তী সাধাৰণ দেখাত ট্ৰেকিং উন্নত বিষয়ে আনলকৰ প্ৰয়োজন নিশ্ক্ৰিয় হৈ থাকিলে লক কৰক উল্লম্ব অনুভূমিক সৰ্বসাধাৰণ সন্মিলনী স্বয়ংক্ৰিয় আপডেটৰ যন্ত্ৰৰ সীমাবদ্ধতা কেৱল Wi-Fi ত কেৱল অবিমিত নেটৱৰ্কত চাৰ্জিং সময়ত স্মাৰ্ট আপডেট অপঠিত অধ্যায়ৰ পৰা আঁতৰাওক সম্পূৰ্ণ অৱস্থাৰ পৰা আঁতৰাওক ডিফল্ট শ্ৰেণী সকলো অচল বয়সৰ মূল্যাংকন ইন্সটলাৰ পুৰণি এই ৰেপো ইতিমধ্যে আছে! উৎস ৰেপো খোলক প্ৰতিস্থাপন কৰক পঢ়ুৱৈ খোলাৰ সময়ত ক্ষণেকৰ বাবে দেখুৱাওক ধূসর ৰং উলটাই দিয়া ৰং আৱৰণ বগা কোন বাঁও পঢ়া পৰ্দা পৰিসৰ স্ক্ৰ\'ল কৰিলে মেনু লুকুৱাবৰ সংবেদনশীলতা জুম আউট বন্ধ কৰক চতুৰ্থ শেহতীয়া পঢ়া অধ্যায় বহিঃস্তৰিত শ্ৰেণীবিভাগত থকা প্ৰৱিষ্টসমূহ ডাউনলোড নহ\'ব, যদিও সেয়া অন্তৰ্ভুক্ত শ্ৰেণীবিভাগত থাকে। আগৰ অধ্যায় ডাউনলোড কৰক বেকআপ ফাইলৰ পৰা গ্ৰন্থাগাৰ পুনৰুদ্ধাৰ কৰক সৃষ্টি কৰক বেকআপত কোনো গ্ৰন্থাগাৰ প্ৰৱিষ্ট নাই। পুনৰুদ্ধাৰ সম্পূৰ্ণ %1$02d মিনিট, %2$02d ছেকেণ্ড সংৰক্ষণ অনুমতি প্ৰদান কৰা হোৱা নাই লাইব্ৰেৰীত লাইব্ৰেৰীলৈ যোগ কৰা হৈছে %s পৰা আপোনাৰ আগৰ নিৰ্বাচিত শেষৰ তাৰিখ মচি দিব শ্রেণীবোৰ মচি দিয়া হৈছে এই প্ৰৱিষ্টৰ বাবে সকলো অধ্যায়ৰ পুনৰ চেক কৰক GitHub ত খোলক কোনো ডাউনলোড নাই ত্ৰুটিসমূহ অধ্যায় আপডেট HTTP %d, WebView ত ৱেবছাইট পৰীক্ষা কৰক বাচনি কৰা বাচনি নকৰা অধিক বিকল্প উৰ্ধে নেভিগেট কৰক নাম শ্ৰেণীবিভাগসমূহ পুথিভঁৰালৰ উপাদানসমূহ অধ্যায়সমূহ ট্ৰেকিং ডাউনলোড কৰা মচক ইতিহাস স্কেনলেটৰ অধিক ছেটিংছ ডাউনলোড ক্ৰমানুসাৰী ইতিহাস উৎসসমূহ ব্যাকআপ আৰু পুনৰুদ্ধাৰ ডাটা আৰু সংৰক্ষণ পৰিসংখ্যা স্থানান্তৰ এক্সটেনশ্বনসমূহ এক্সটেনশ্বন তথ্য সহায় সতৰ্কবাণী পৰিবৰ্তন নিশ্চিত কৰিবলৈ প্ৰমাণীকৰণ কৰক পূৰ্বনির্ধাৰিত সেটিংচ মেনু ফিল্টাৰ সময় অন্তৰ্বাল স্থাপন কৰক বুকমাৰ্ক কৰা ট্ৰেক কৰা অপঢ়া অনুকূলিত আপডেট মাৰ্জিন ফিল্টাৰ আঁতৰাওক বৰ্ণানুক্ৰমিকভাৱে মুঠ প্ৰৱিষ্টি মুঠ অধ্যায় শেষ পঢ়া শেষ আপডেট পৰীক্ষা অপঢ়া সংখ্যাৰ ভিত্তিত পৰৱৰ্তী আপডেট আশা কৰা হৈছে শেষ অধ্যায় অধ্যায় আহৰণ তাৰিখ যোগ কৰা তাৰিখ সন্ধান কৰক ট্ৰেকাৰ স্ক\'ৰ সন্ধান কৰক… সন্ধান সেটিংচ সৰ্বভৌম সন্ধান সকলো বাছক বিপৰীত বাছক পঢ়া বুলি চিহ্নিত কৰক অপঢ়া বুলি চিহ্নিত কৰক পূৰ্বৰটো পঢ়া বুলি চিহ্নিত কৰক ডাউনলোড কৰক অধ্যায় বুকমাৰ্ক কৰক অধ্যায়ৰ বুকমাৰ্ক আঁতৰাওক মচক পুথিভঁৰাল আপডেট কৰক সকলো সক্ৰিয় কৰক সকলো নিষ্ক্ৰিয় কৰক সম্পাদনা কৰক যোগ কৰক শ্ৰেণী আপডেট কৰক এটা যিকোনো প্ৰৱিষ্টি খুলক শ্ৰেণী যোগ কৰক শ্ৰেণীবোৰ সম্পাদনা কৰক শ্ৰেণীৰ নাম সলনি কৰক শ্ৰেণীবোৰ স্থাপন কৰক আপুনি কি %s শ্ৰেণী মচিব বিচাৰে? শ্ৰেণী মচক মুৰৰ পৃষ্ঠাটী সম্পাদনা কৰক অধ্যায়বোৰ চাওক থামক পূৰ্বৰ অধ্যায় পৰবৰ্তী অধ্যায় আনুষ্ঠানিক প্ৰয়াস কৰক আঁতৰাওক ক্লিপবোর্ডত কপি কৰক সকলো আঁতৰাওক আৰম্ভ কৰক পুনৰ আৰম্ভ কৰক লিংক কপি কৰক ব্ৰাউজাৰত খোলক প্ৰৱিষ্টি দেখুৱাওক WebViewত খোলক স্থানান্তৰ কৰক প্ৰদৰ্শন মোড প্ৰদৰ্শন সঙ্কলিত গ্ৰিড সুবিধাজনক গ্ৰিড তালিকা ক\'ভাৰ-মাত্ৰ গ্ৰিড ডাউনলোড কৰা অধ্যায় স্থানীয় উৎস ভাষা শ্ৰেণীৰ ট্যাব দেখুৱাওক পদাৰ্থৰ সংখ্যা দেখুৱাওক পঢ়া অব্যাহত থকাক বোতাম নিষ্ক্ৰিয় কৰক পিন কৰক আনপিন কৰক প্ৰয়োগ কৰক বাতিল কৰক ঠিক আছে সকলো বাতিল কৰক এই চিৰিজৰ বাবে সকলো বাতিল কৰক বাছনি কৰক আপলোডৰ তাৰিখ অনুসাৰে অধ্যায়ৰ নম্বৰ অনুসাৰে সৰ্বনৱীন সৰ্বপুৰণি উৰ্ধ্বমুখী অধোগামী শীৰ্ষলৈ লৈ যাওক চিৰিজটো শীৰ্ষলৈ লৈ যাওক নিম্নলৈ লৈ যাওক চিৰিজটো নিম্নলৈ লৈ যাওক ইন্সটল কৰক শ্বেয়াৰ কৰক সংৰক্ষণ কৰক ৰিচছেট কৰক ডিফল্টলৈ উভতাওক পিছলৈ যাওক বন্ধ কৰক লগ খোলক বিস্তারিত চাবলৈ টিপক পুনৰুদ্ধাৰ কৰক পিছলৈ অতৈৰাই ডাউনলোড আৰম্ভ কৰক এতিয়া নহয় যিকোনো ক্ষেত্ৰত যোগ কৰক লোডিং… আন্তৰিক সমস্যাঃ অধিক তথ্যৰ বাবে ক্ৰেশ লগচ চাওক এপ উপলব্ধ নাই অ\'নব’ৰ্ডিং গাইড স্বাগতম! প্ৰথমে কিছুমান বস্তু ঠিক কৰি লওঁ আহক। এইবোৰ আপুনি পাছত ছেটিংছত গ’ই সলনি কৰিব পাৰে। আৰম্ভ কৰক স্কিপ কৰক %1$s-এ অধ্যায় ডাউনলোড, বেকআপ আৰু আন বহু বস্তু সংৰক্ষণ কৰিব পৰাকৈ এখন ফ’ল্ডাৰ বাচি লওঁক। \n \nএখন সজোৱা ফ’ল্ডাৰ বাচনি কৰা সুচিত। \n \nবাচনি কৰা ফ’ল্ডাৰ: %2$s এখন ফ’ল্ডাৰ বাচনি কৰক এখন ফ’ল্ডাৰ বাচনি কৰিবই লাগিব আগৰ সংস্কৰণৰ পৰা আপডেট কৰি আছেনে আৰু কি বাচি ল’ব নাজানে? অধিক তথ্যৰ বাবে সঞ্চয় গাইডটো চাওক। সঞ্চয় গাইড এপ স্থাপন অনুমতি উৎস এক্সটেনচনসমূহ স্থাপন কৰিবলৈ। নটিফিকেচনৰ অনুমতি লাইব্ৰেৰীৰ আপডেট আৰু আন বহু বস্তুৰ বাবে সতৰ্কতা পাব। পটভূমি বেটাৰী ব্যৱহাৰ দীৰ্ঘম্যাদী লাইব্ৰেৰী আপডেট, ডাউনলোড আৰু বেকআপ পুনৰ স্থাপনৰ অন্তৰায় নোহোৱাৰ বাবে। অনুমতি দিয়ক %s-ৰ নতুন ব্যৱহাৰকাৰী নেকি? আৰম্ভণি গাইড চাবলৈ আমাক সুপারিশ কৰা হৈছে। %s পুনৰ ইনষ্টল কৰি আছেনে? পাঠক ডাউনলোড থীম, তাৰিখ আৰু সময়ৰ ফৰ্মেট লাইব্ৰেৰী শ্ৰেণীবিভাজন, গ্ল\'বেল আপডেট, অধ্যায়ৰ সোয়াইপ পঢ়া ম\'ড, প্ৰদৰ্শন, নেভিগেচন একে-পথৰ প্ৰগতি ছিঙ্ক, উন্নত ছিঙ্ক স্বয়ংক্ৰিয় ডাউনলোড, আগতীয়া ডাউনলোড উৎসসমূহ, এক্সটেনচন, গ্ল\'বেল অনুসন্ধান ক্ৰেশ লগসমূহ ডাম্প কৰক, বেটাৰী অপ্টিমাইজেশ্বন ম্যানুৱেল আৰু স্বয়ংক্ৰিয় বেকআপ, সঞ্চয় স্থান এপ লক, সুৰক্ষিত পৰ্দা থীম এপ থীম পদ্ধতি হালধীয়া গাঢ় ডাইনামিক সেউজ আপেল লাভেণ্ডাৰ মধ্যৰাতি দুঃখ ন\'ৰ্ড ষ্ট্ৰ’বেৰী ডাইকুৱাৰী তাকো টীল আৰু টাৰকুৱইজ ইন আৰু ইয়াং ইয়তছুবা টাইডেল ৱেভ বিশুদ্ধ ক\'লা গাঢ় ম’ড আপেক্ষিক টাইমষ্টেম্প %1$sৰ সলনি %2$s তাৰিখৰ ফৰ্মেট নটিফিকেচনসমূহ পৰিচালনা কৰক এপৰ ভাষা নিরাপত্তা আৰু গোপনীয়তা সদায় কেতিয়াও নহয় নটিফিকেশনৰ সামগ্ৰী লুকুৱাওক সুৰক্ষিত পৰ্দা সুৰক্ষিত পৰ্দাই এপৰ সামগ্ৰীসমূহক এপ সলনি কৰাৰ সময়ত লুকুৱায় আৰু স্ক্ৰীনশ্বট ব্লক কৰে NSFW (১৮+) উৎসসমূহ উৎস আৰু এক্সটেনচনৰ তালিকাত দেখুৱাওক এইটো আনুষ্ঠানিকভাৱে অনুমোদিত নহয় বা ভুলকৈ চিহ্নিত কৰা এক্সটেনচনে NSFW (১৮+) বিষয়বস্তু দেখুৱাব পাৰে। আজি প্ৰদৰ্শন শাৰীপ্ৰতি বস্তুসমূহ স্বয়ংক্ৰিয় আপডেট বন্ধ প্ৰতি ১২ ঘণ্টা প্ৰতি ৬ ঘণ্টা প্ৰতি দিন প্ৰতি ২ দিন প্ৰতি ৩ দিন প্ৰতি সপ্তাহ সীমাবদ্ধতা: %s অ আৰম্ভিত প্ৰৱিষ্টিসমূহ আঁতৰাওক পৰৱৰ্তী মুক্তিৰ সময় অনুমান কৰক আপডেট আইকনৰ ওপৰত অপঠিত গণনা দেখুৱাওক স্বয়ংক্ৰিয়ভাৱে মেটাডাটা ৰিফ্ৰেশ কৰক লাইব্ৰেৰী আপডেট কৰাৰ সময়ত নতুন কাভাৰ আৰু বিৱৰণৰ সন্ধান কৰক সদায় সোধা হব শ্ৰেণী অনুসৰি ছাঁটকৰণৰ বাবে বিৱৰণী ছেটিংছ অন্তৰ্ভুক্ত শ্ৰেণীত থাকিলেও বাদ দিয়া শ্ৰেণীসমূহৰ প্ৰৱিষ্টিসমূহ আপডেট নহ’ব। কোনোও নহয় অন্তৰ্ভুক্ত: %s বাদ দিয়া: %s সোঁফালে চুইপ কৰা কাৰ্য বাওঁফালে চুইপ কৰা কাৰ্য বহুভাষী আপডেট মুলতুবি আছে আপডেট কৰক ইন্সটল কৰক সকলো আপডেট কৰক মুলতুবি ডাউনলোড কৰি আছে ইন্সটল কৰি আছে ইন্সটল কৰা হৈছে বিশ্বাস কৰক অবিশ্বাস্য আনইন্সটল কৰক এপৰ তথ্য অবিশ্বাস্য এক্সটেনশন এই এক্সটেনচন এতিয়া উপলব্ধ নাই। ই হয়তো সঠিকভাৱে কাম নকৰে আৰু এপৰ লগত সমস্যা সৃষ্টি কৰিব পাৰে। ই আনইন্সটল কৰাৰ পৰামৰ্শ দিয়া হৈছে। উপলব্ধ এক্সটেনচনসমূহ পোৱা বিফল দুৰভিসন্ধি এক্সটেনচনে সংৰক্ষিত যিকোনো লগইন প্ৰমাণপত্ৰ পঢ়িব পাৰে বা যিকোনো কোড চলাব পাৰে। \n \nএই এক্সটেনশন বিশ্বাস কৰিলে, আপুনি এই বিপদসমূহ স্বীকাৰ কৰিছে। সংস্কৰণ এই এক্সটেনচনৰ উৎসসমূহত NSFW (১৮+) বিষয়বস্তু থাকিব পাৰে ভাষা ১৮+ এক্সটেনচন ইন্সটল কৰিবলৈ অনুমতিৰ প্ৰয়োজন। ইয়াত টিপক। এক্সটেনচন ইন্সটল কৰি আছে… Shizuku চলি নাই অজ্ঞাত এক্সটেনচন বিশ্বাসৰ অধিকার বাতিল কৰক এক্সটেনচন ৰেপোৰসমূহ আপোনাৰ কোনো ৰেপো নাই। Shizuku ইন্সটল কৰক আৰু আৰম্ভ কৰক Shizuku এক্সটেনচন ইন্সটলাৰ হিচাপে ব্যৱহাৰ কৰিবলৈ। ৰেপো যোগ কৰক ৰেপো URL %s-ত অতিৰিক্ত ৰেপো যোগ কৰক। এইটো এনেকুৱা এটা URL হ\'ব লাগিব যাৰ শেষত index.min.json থাকে। ৰেপো মচক অবৈধ ৰেপো URL আপুনি কি ৰেপো %s মচিব বিচাৰে? আপুনি কি ৰেপো %s যোগ কৰিব বিচাৰে? স্বাক্ষৰ কি ফিংগাৰপ্ৰিন্ট ইতিমধ্যে আছে ৰেপ’জিটৰী %1$s ৰ %2$s স্বাক্ষৰ কী ফিংগাৰপ্ৰিন্টৰ সৈতে একে। \nযদি ই আশা কৰা হয়, %2$s প্রতিস্থাপন কৰা হ\'ব, নহ\'লে আপোনাৰ ৰেপো ৰক্ষণাবেক্ষকক যোগাযোগ কৰক। সম্পূৰ্ণ পর্দা টেপৰ অঞ্চলসমূহ দেখুৱাওক ব্যাপক পৃষ্ঠাবোৰ ভাগ কৰা পৃষ্ঠাৰ স্থান বিপৰীত কৰক যদি ব্যাপক পৃষ্ঠাবোৰৰ স্থান পঢ়া দিশৰ সৈতে মিল নাখায় ব্যাপক পৃষ্ঠাবোৰ ফিট কৰিবলৈ ঘুৰাওক ঘূৰোৱা ব্যাপক পৃষ্ঠাৰ অভিমুখ উলটাই দিয়া জুম কৰিবলৈ দ্বৈত টেপ কৰক কণ্টেন্ট কেটাৰ অঞ্চলত দেখুৱাওক পৃষ্ঠা স্থানান্তৰৰ অ্যানিমেচন পৃষ্ঠা পৰিবৰ্তনৰ সময়ত ফ্লেচ ই-ইঙ্ক স্ক্ৰিনত ঘোস্টিং কমায় ফ্লেচৰ সময়সীমা %1$s মি.চি. প্ৰতি পৃষ্ঠা ফ্লেচ ফ্লেচ কৰক ক\'লা বগা দ্বৈত টেপৰ অ্যানিমেচনৰ গতি বগা আৰু ক\'লা পৃষ্ঠা নম্বৰ দেখুৱাওক পঢ়া মোড দেখুৱাওক পঢ়ুৱৈ খোলাৰ সময়ত ক্ষণেকৰ বাবে বৰ্তমান মোড দেখুৱাওক নিজস্ব প্ৰদৰ্শন প্ৰফাইল কোনবোৰ কটক নিজস্ব উজ্জ্বলতা ৰং চাবনি মিশ্ৰণ মোড গুণন স্ক্ৰিন নিজস্ব ৰং চাবনি ডজ/পোহৰ কৰা জ্বলাই/অন্ধকাৰ কৰা পৰ্দা চালু ৰাখক পঢ়া অধ্যায়সমূহ বাদ দিয়ক ফিল্টাৰ কৰা অধ্যায়সমূহ বাদ দিয়ক ডুপ্লিকেট অধ্যায়সমূহ বাদ দিয়ক সংক্ৰান্তি টেপৰ অঞ্চলসমূহ উলটাই দিয়া একো নহয় আনুভূমিক ভলিউম কী ভলিউম কী উলটাই দিয়া দুয়োটা কৰ্মসমূহ প্ৰবিষ্ট শিৰোনামৰ অনুসৰি ফোল্ডাৰ সৃষ্টি কৰে দীৰ্ঘ টেপত কৰ্মসমূহ দেখুৱাওক প্ৰতি মাঙ্গাৰ বাবে পৃথক ফোল্ডাৰ সংৰক্ষণ কৰক পটভূমি ৰং ধূসৰ ক\'লা এল আকৃতিৰ স্বয়ংক্ৰিয় ডিফল্ট পঢ়া মোড কিন্ডল-যুক্ত সোঁমুখ আৰু বাঁওমুখ অক্ষম পূৰ্বৱৰ্তী পৰৱৰ্তী সোঁ পৃষ্ঠা (বাঁওৰ পৰা সোঁ) পৃষ্ঠা (সোঁৰ পৰা বাঁও) পৃষ্ঠা (উল্লম্ব) দীঘল ফিতা ফাক থকা দীঘল ফিতা পৃষ্ঠা কৰা টেপৰ অঞ্চলসমূহ স্কেল প্ৰকাৰ পৰ্দাত ফিট কৰক প্ৰসাৰিত কৰক পলমাই ফিট কৰক উচ্চতাই ফিট কৰক মূল আকাৰ চতুৰ ফিট ব্যাপক চিত্ৰসমূহ পেন কৰক স্বয়ংক্ৰিয়ভাৱে ব্যাপক চিত্ৰত জুম কৰক জুম আৰম্ভ স্থান স্বয়ংক্ৰিয় বাঁও সোঁ মধ্যম অ্যানিমেচন নাই সাধাৰণ দ্ৰুত ডিফল্ট ঘূৰণ ঘূৰণ মুক্ত প’ৰট্ৰেইট ল্যান্ডস্কেপ প’ৰট্ৰেইট তালাচি ল্যান্ডস্কেপ তালাচি প’ৰট্ৰেইট বিপৰীত ৰঙা সেউজীয়া নীলা আলফা সৰ্বদা অধ্যায় পৰিবৰ্তন দেখুৱাও পঢ়াৰ মোড সৰ্বোচ্চ উচ্চ নিম্ন সৰ্বনিম্ন অধ্যায় মচা হস্তচালিতভাবে পঢ়া চিহ্নিত কৰাৰ পিছত পঢ়াৰ পিছত স্বয়ংক্ৰিয়ভাৱে মচা বুকমাৰ্ক কৰা অধ্যায় মচাৰ অনুমতি দিয়ক বহিঃস্তৰিত শ্ৰেণীবিভাগসমূহ কোনো সংৰক্ষণ স্থান নিৰ্ধাৰিত নহয় অবৈধ স্থান: %s বন্‌ধ শেহতীয়া পঢ়া অধ্যায় দ্বিতীয় শেহতীয়া পঢ়া অধ্যায় তৃতীয় শেহতীয়া পঢ়া অধ্যায় পঞ্চম শেহতীয়া পঢ়া অধ্যায় স্বয়ংক্ৰিয় ডাউনলোড নতুন অধ্যায় ডাউনলোড কৰক পঢ়া অধ্যায়ৰ অনুলিপি ডাউনলোড এৰাব পঢ়াৰ সময়ত স্বয়ংক্ৰিয় ডাউনলোড মাত্ৰ কাৰ্যকৰী যদি বৰ্তমান অধ্যায় আৰু পৰৱৰ্তী অধ্যায় ইতিমধ্যে ডাউনলোড কৰা হৈছে। CBZ আর্কাইভ হিচাপে সংৰক্ষণ কৰক দীঘল চিত্ৰসমূহ ভাগ কৰক পঢ়াৰ কাৰ্যক্ষমতা উন্নত কৰে ট্ৰেকাৰসমূহ ট্ৰেকিং গাইড পঢ়াৰ পাছত অগ্ৰগতি সৰ্পণ কৰক বাহ্যিক ট্ৰেকাৰ সেৱাত অধ্যায়ৰ অগ্ৰগতি সৰ্পণ কৰিবলৈ একপথৰ সমন্বয়। তেওঁলোকৰ ট্ৰেকিং বুটামৰ পৰা ব্যক্তিগত প্ৰৱিষ্টৰ বাবে ট্ৰেকিং সেট আপ কৰক। উন্নত ট্ৰেকাৰসমূহ উপলব্ধ কিন্তু উৎস ইন্সটল কৰা নাই: %s বিশেষ উৎসৰ বাবে উন্নত বৈশিষ্ট্য প্ৰদান কৰে। আপোনাৰ গ্ৰন্থাগাৰত যোগ কৰা হ\'ল পৰিসৰটো স্বয়ংক্ৰিয়ভাৱে ট্ৰেক কৰা হয়। ট্ৰেক কৰক ট্ৰেকাৰ লগইন গ্ৰন্থাগাৰত ইতিমধ্যে থকা প্ৰৱিষ্টসমূহ লুকুৱাও স্বয়ংক্ৰিয় বেকআপ, অধ্যায় ডাউনলোড, আৰু স্থানীয় উৎসৰ বাবে ব্যৱহৃত। সংৰক্ষণ স্থান বেকআপ সৃষ্টি কৰক বেকআপ পুনৰুদ্ধাৰ কৰক স্বয়ংক্ৰিয় বেকআপৰ সঁত্ৰণ বেকআপ সৃষ্টি কৰা হৈছে বৰ্তমান গ্ৰন্থাগাৰ পুনৰুদ্ধাৰ কৰিবলৈ ব্যৱহৃত হ\'ব অবৈধ বেকআপ ফাইল: সম্পূৰ্ণ ত্ৰুটি: JSON বেকআপ সমৰ্থিত নহয় বেকআপ ফাইলৰ ত্ৰুটি অপেক্ষিত উৎসসমূহ: ট্ৰেকাৰসমূহ লগইন হোৱা নাই: আপোনাৰ গ্ৰন্থাগাৰ ব্যৱহাৰ কৰিবলৈ যিকোনো অনুপস্থিত এক্সটেনচনসমূহ ইনষ্টল কৰিবলৈ আৰু তাৰপিছত ট্ৰেকিং সেৱাসমূহত লগইন কৰিবলৈ লাগিব। বেকআপ ইতিমধ্যে চলিত আছে আপুনি কি বেকআপ কৰিব বিচাৰে? এপ্পৰ ছেটিংছ উৎসৰ ছেটিংছ এক্সটেনচন ৰেপ\'জ সংবেদনশীল ছেটিংছ অন্তৰ্ভুক্ত কৰক (যেনে, ট্ৰেকাৰ লগইন টোকেন) বেকআপ সৃষ্টি কৰা হৈছে বেকআপ ব্যৰ্থ বেকআপ কৰিবলৈ কোনো গ্ৰন্থাগাৰ প্ৰৱিষ্ট নাই বেকআপ ফাইল সৃষ্টি কৰিব নোৱাৰিলে MIUI অপটিমাইজেশ্বন বন্ধ থাকিলে বেকআপ/পুনৰুদ্ধাৰ সঠিকভাৱে কাৰ্য কৰিব নোৱাৰে। পুনৰুদ্ধাৰ ইতিমধ্যে চলিত আছে বেকআপ পুনৰুদ্ধাৰ কৰা হৈছে বেকআপ পুনৰুদ্ধাৰ ব্যৰ্থ পুনৰুদ্ধাৰ বাতিল শেষ স্বয়ংক্ৰিয় বেকআপ: %s আপোনাৰ বেকআপৰ কপি অন্য ঠাইত ৰাখিব লাগে। বেকআপসমূহত সংবেদনশীল তথ্য অন্তৰ্ভুক্ত থাকিব পাৰে, যাৰ ভিতৰত কোনো সংৰক্ষিত পাসৱৰ্ড; ভাগ দিবৰ ক্ষেত্ৰত সাৱধান হ\'ব। ডাটা উপলব্ধ: %1$s / মুঠ: %2$s অধ্যায় কেছ ক্লিয়াৰ কৰক সংৰক্ষণ ব্যৱহাৰ ব্যৱহৃত: %1$s কেছ ক্লিয়াৰ কৰা হৈছে, %1$d ফাইল মচা হৈছে ক্লিয়াৰ কৰাৰ সময়ত ত্ৰুটি এপ্লিকেচন আৰম্ভণিৰ সময়ত অধ্যায় কেছ ক্লিয়াৰ কৰক গ্ৰন্থাগাৰ সমন্বয় কৰা হৈছে গ্ৰন্থাগাৰ সমন্বয় সম্পূৰ্ণ নেটৱৰ্কিং কুকি মচা DNS HTTPSৰ ওপৰত (DoH) ডিফল্ট ইউজাৰ এজেন্ট ষ্ট্ৰিং ইউজাৰ এজেন্ট ষ্ট্ৰিং খালী নহ\'ব পাৰে অবৈধ ইউজাৰ এজেন্ট ষ্ট্ৰিং ডিফল্ট ইউজাৰ এজেন্ট ষ্ট্ৰিং পুনৰ চমা কাৰ্য্যকৰী হবলৈ এপ পুনৰ আৰম্ভণি প্ৰয়োজন কুকি মচা হৈছে ডাউনলোডসমূহ পুনৰ সূচীভুক্ত কৰক ডাউনলোড কেচ অবৈধ কৰা হৈছে ডাউনলোড কৰা অধ্যায়সমূহ পুনৰ পৰীক্ষা কৰিবলৈ এপটো বাধ্য কৰা ডাটাবেচ মচা আপোনাৰ লাইব্ৰেৰিত সংৰক্ষণ কৰা হোৱা নথিৰ ইতিহাস মচা ডাটাবেচত %1$d লাইব্ৰেৰিত নথিৰ সংখ্যা নথি মচা হৈছে মচাৰ বাবে কিবা নাই WebView ডাটা মচা WebView ডাটা মচা হৈছে লাইব্ৰেৰীৰ কভাৰসমূহ পুনৰ পূৰ্ণ কৰা প্ৰতি-সিৰিজ পাঠক স্থিতি পুনৰ চমা সকল সিৰিজৰ পঢ়াৰ মড আৰু দিশ পুনৰ চমা সকলো পাঠক স্থিতি পুনৰ চমা পাঠক স্থিতি পুনৰ চমা হোৱা নাই ক্রাশ লগসমূহ ভাগ কৰক ডেভেলপাৰসকলৰ সৈতে ভাগ কৰিবলৈ ত্ৰুটি লগসমূহ ফাইলত সংৰক্ষণ কৰক পটভূমি কাৰ্যকলাপ বেটাৰী অপ্টিমাইজেশন বন্ধ কৰক পটভূমি লাইব্ৰেৰী আপডেট আৰু বেকআপত সহায় কৰে বেটাৰী অপ্টিমাইজেশন ইতিমধ্যে বন্ধ হৈছে ডিভাইচৰ ছেটিংচ খোলাত অক্ষম কিছুমান নিৰ্মাতাৰ অতিরিক্ত এপ নিষেধাজ্ঞা থাকে যি পটভূমি সেৱাসমূহ বন্ধ কৰে। ইয়াত অধিক তথ্য উপলব্ধ হৈছে কিদৰে সুৰ কৰক। টেবলেট UI বিৱৰণযুক্ত লগিং ব্যৱস্থাৰ লগত বিৱৰণযুক্ত লগ প্ৰিন্ট কৰে (এপৰ কাৰ্যক্ষমতা হ্ৰাস কৰে) ডিবাগ তথ্য নতুন কি ৱেবছাইট সংস্কৰণ অনুবাদ কৰিবলৈ সহায় কৰক খুলা উৎস লাইচেন্স গোপনীয়তা নীতি আপডেট চাওক v%1$s ত আপডেট কৰা হৈছে ক্রাশ ৰিপ\'ৰ্ট পঠিয়াব যিকোনো বাগ মেলাবলৈ সহায় কৰে। কোনো সংবেদনশীল তথ্য পঠিয়াব নোৱাৰি F-Droid নিৰ্মাণসমূহৰ আনুষ্ঠানিক সমৰ্থন নাই। \nঅধিক জানিবলৈ টেপ কৰক। মাত্ৰ ডাউনলোড কৰা ইনকগনিটো মড নিষ্ক্ৰিয় কৰক ইনকগনিটো মড পঢ়াৰ ইতিহাস থামায় আপোনাৰ লাইব্ৰেৰীৰ সকলো নথি ফিল্টাৰ কৰে %1$s ত লগ ইন কৰক ইউজাৰনেম ইমেইল ঠিকনা পাছৱাৰ্ড লগইন লগ ইন হৈছে %1$s পৰা লগ আউট কৰিবলৈ? লগ আউট আপুনি এতিয়া লগ আউট হৈছে ডাউনলোড কৰা অধ্যায় অন্তৰালসমূহ অজ্ঞাত ত্ৰুটি অৱলম্বন শ্ৰেণী আপডেট কৰা লাইব্ৰেৰীৰ পৰা টেব অধিক ফলাফল নাই ফলাফল কোৱা হোৱা নাই স্থানীয় উৎস অন্য শেহতীয়াকৈ ব্যৱহৃত পিন কৰা বিশ্ববিদ্যালয় অনুসন্ধান… “%1$s” বিশ্বব্যাপী অনুসন্ধান কৰক সৰ্বশেষ ব্ৰাউজ কৰক ফলাফল আছে জনপ্ৰিয় স্থানীয় উৎস গাইড আপোনাৰ কোনো পিন কৰা উৎস নাই অধ্যায় পোৱা নগ\'ল অবৈধ অধ্যায় ফৰ্মেট অৰ্ডাৰ বায় অজানা অৱস্থা লাইচেঞ্চ কৰা প্ৰকাশনাৰ সমাপ্তি বাতিল কৰা হৈছে তাৰিখ চলি আছে অজানা অজানা লেখক বিৰতিত লাইব্ৰেৰীলৈ যোগ কৰক লাইব্ৰেৰী পৰা মচি দিয়ক লাইব্ৰেৰী পৰা মচি দিয়া হৈছে অজানা শিৰোনাম অধিক সৰু ডাউনলোড কৰা অধ্যায়সমূহ মচি দিব নেকি? ক্লিপবোর্ডত কপি কৰা হৈছে ক্লিপবোর্ডত কপি কৰা হৈছে: \n%1$s ক্লিপবোর্ডত কপি কৰিবলৈ ব্যর্থ উৎস স্থাপন কৰা হোৱা নাই: %1$s লাইব্ৰেৰীলৈ যোগ কৰিব নেকি? বৰ্ণনা নাই অধ্যায় %1$s প্ৰতি কিমান সময়ত প্ৰতি কিমান সময়ত আপডেট কৰিব %1$sৰ ভিতৰত নতুন অধ্যায়ৰ মুক্তি আশা কৰা হৈছে, প্ৰতি %2$sত পৰীক্ষা কৰা হৈছে। সোনকালে নিজস্ব আপডেটৰ সঘনতা: ডাউনলোড কৰা হৈছে (%1$d/%2$d) এই মাঙ্গা সম্পূৰ্ণ হৈছে, বা কিবা মুক্তিৰ তাৰিখ নাই। ভূল বিৰত উৎসৰ শিৰোনাম অধ্যায় নম্বৰ উৎসৰ দ্বাৰা অধ্যায় নম্বৰ দ্বাৰা আপলোড তাৰিখৰ দ্বাৰা ডাউনলোড অপঢ়া নিজস্ব কভাৰ কভাৰ কভাৰ সংৰক্ষিত কভাৰ সংৰক্ষণ কৰাত ভূল কভাৰ শ্বেয়াৰ কৰাত ভূল আপুনি নিশ্চিতনে যে নিৰ্বাচিত অধ্যায়সমূহ মচিব পৰা যাব? অধ্যায়ৰ ছেটিংচ আপুনি নিশ্চিতনে যে এই ছেটিংচ ডিফল্ট হিচাপে সংৰক্ষণ কৰিব? মোৰ লাইব্ৰেৰীৰ সকলো প্ৰৱিষ্টলৈও প্ৰয়োগ কৰক ডিফল্ট হিচাপে ছেট কৰক অধ্যায় কোৱা হোৱা নাই অধ্যায় %dলৈ ট্রেকাৰ আপডেট কৰিবনে? ট্রেকিং ট্রেকিং যোগ কৰক অপঢ়া পঢ়া আপুনি নিশ্চিতনে? স্কেনলেটৰসমূহ বাদ দিয়ক কোনো স্কেনলেটৰ পোৱা নগ\'ল সম্পূৰ্ণ নিস্পত্তি কৰা হৈছে স্থগিত বিৰত পঢ়াৰ পরিকল্পনা পুনৰ পঢ়া পঢ়াৰ তালিকা ইচ্ছাৰ তালিকা সম্পূৰ্ণ তালিকা স্থগিত তালিকা অসম্পূৰ্ণ তালিকা স্ক\'ৰ শিৰোনাম অৱস্থা অৱস্থা আৰম্ভৰ তাৰিখ শেষৰ তাৰিখ প্ৰকাৰ দয়া কৰি MAL পুনৰ লগইন কৰক উৎস সমৰ্থিত নহয় কোনো মেচ নাই %1$s ত ভূল: %2$s তাৰিখ মচিবনে? %s পৰা আপোনাৰ আগৰ নিৰ্বাচিত আৰম্ভৰ তাৰিখ মচি দিব %s ট্রেকিং মচিবনে? এইটো স্থানীয়ভাৱে ট্রেকিং মচিব। %s তো মচিব এই নামৰ এটা শ্রেণী ইতিমধ্যে আছে! এইটো অধ্যায়ৰ পঢ়া তাৰিখ মচি দিব। আপুনি নিশ্চিতনে? ছবি সংৰক্ষিত ছবি সংৰক্ষণ কৰাত ভূল নিজৰ ফিল্টাৰ কভাৰ হিচাপে নিৰ্ধাৰণ কৰক কভাৰ আপডেট কৰা হৈছে %1$s: %2$s, পৃষ্ঠা %3$d পৃষ্ঠা: %1$d পৰৱৰ্তী অধ্যায় পোৱা নগ\'ল চিত্রটো লোড কৰিব পৰা নগ\'ল এই চিত্ৰটো কভাৰ শিল্প হিচাপে ব্যৱহাৰ কৰিবনে? এই শ্ৰেণীৰ বাবে পঢ়াৰ মোড সম্পন্ন: বর্তমান: পৰৱৰ্তী: পূৰ্বৰ: পৰৱৰ্তী অধ্যায় নাই পূৰ্বৰ অধ্যায় নাই কোনো পৃষ্ঠা পোৱা নগ\'ল পৃষ্ঠা লোড হৈ আছে… পৃষ্ঠা লোড কৰাত ব্যৰ্থ: %1$s মূলটো পোৱা নগ\'ল লাইব্রেৰী আপডেট হৈ আছে এটা আপডেট ইতিমধ্যে চলি আছে শেষ পঢ়া অধ্যায় খোলাটো সম্ভব নহয় লাইব্রেৰী শেষ আপডেট: %s এতিয়া কদাচিৎ পৰৱৰ্তী আপডেট চাওক পৰৱৰ্তী গাইড পৰৱৰ্তী মাহ পূৰ্বৰ মাহ চ. %1$s - %2$s ইতিহাস সাফ কৰক ইতিহাস মচি পেলোৱা হৈছে আপুনি নিশ্চিত? সকলো ইতিহাস হেৰুৱাই যাব। কোনো মূলে পোৱা নগ\'ল স্থানান্তৰ কৰক নকল কৰক ভাল, এইটো অলপ অদ্ভুত কোনো প্ৰতিস্থাপন কৰা মূলে পোৱা নগ\'ল মূল স্থানান্তৰ গাইড অন্তৰ্ভুক্ত কৰাৰ বাবে তথ্য বাচনি কৰক স্থানান্তৰ কৰিবলৈ মূল বাচনি কৰক স্থাপন কৰা নহ\'ব ওহো! অনুগ্রহ কৰি এপ্লিকেশ্বন পুনৰ আৰম্ভ কৰক %s অপ্ৰত্যাশিত ত্ৰুটিৰ সন্মুখীন হৈছে। আমি আপোনাক সুপারিশ কৰোঁ যে, Discord ত আমাৰ সহায় চেনেলত ক্ৰাশ লগবোৰ শ্বেয়াৰ কৰক। সাৰাংশ সম্পন্ন ৰেকৰ্ড পঢ়াৰ সময় ৰেকৰ্ড মুঠ পঢ়া আন্তৰাষ্ট্ৰীয় আপডেটত ট্রেকাৰ ট্রেক কৰা ৰেকৰ্ড মধ্যম নম্বৰ ব্যৱহৃত প্ৰযোজ্য নহয় %dd %dh %dm %ds অধ্যায়সমূহ ডাউনলোড কৰিবলৈ সক্ষম নহ\'ল। আপুনি ডাউনলোডৰ অংশত পুনৰ চেষ্টা কৰিব পাৰে পৰ্যাপ্ত স্থান নাথাকাৰ বাবে অধ্যায়সমূহ ডাউনলোড কৰিবলৈ সক্ষম নহ\'ল সতৰ্কতা: ডাঙৰ বাল্ক ডাউনলোডে মূলে ধীৰগতিত পৰিণত কৰিব পাৰে আৰু/অথবা %s ব্লক কৰিব পাৰে। অধিক জানিবলৈ টেপ কৰক। লাইব্রেৰী আপডেট হৈ আছে… (%s) ডাঙৰ আপডেটসমূহে মূলে ক্ষতি কৰে আৰু ধীৰ গতিত আপডেট হব পাৰে আৰু বেটাৰী ব্যৱহাৰ বৃদ্ধি পাব পাৰে। অধিক জানিবলৈ টেপ কৰক। নতুন অধ্যায় পোৱা গৈছে অধ্যায় %1$s অধ্যায় %1$s আৰু %2$d অধিক অধ্যায়সমূহ %1$s %1$d আপডেট(s) ব্যৰ্থ অধিক জানিবলৈ টেপ কৰক কভাৰ আপডেট কৰিবলৈ ব্যৰ্থ এইটো কৰিবলৈ আগত অনুগ্ৰহ কৰি ৰেকৰ্ডটো আপোনাৰ লাইব্রেৰীত যোগ কৰক লাইব্রেৰী আপডেট ত্ৰুটিসমূহ মাকৰ বাবে সহায়ৰ বাবে চাওক %1$s পঢ়া অধ্যায়ৰ অভাৱৰ বাবে বাদ দিয়া হৈছে কোনো অধ্যায় পঢ়া হোৱা নাই ধাৰা সম্পন্নৰ বাবে বাদ দিয়া হৈছে ধাৰা আপডেটৰ প্রয়োজন নাই আজিৰ বাবে কোনো মুক্তিৰ আশা নাছিল আৱৰণ চিত্ৰ বাচক বেকআপ ফাইল বাচক ফাইল বাচনিৰ এপ পোৱা নগ\'ল স্থায়ী ফোল্ডাৰ প্ৰৱেশ লাভ কৰা নগ\'ল। এপটো আশাহীনভাৱে আচৰণ কৰিব পাৰে। কোনো ফাইল বাচা হোৱা নাই ডাউনলোড কৰক এই Android সংস্কৰণটো এতিয়া সমৰ্থিত নহয় আপডেট ইনষ্টল কৰিবলৈ টেপ কৰক ডাউনলোড ত্ৰুটি নতুন আপডেট উপলব্ধ নাই ডাউনলোড হৈছে… নতুন সংস্কৰণ উপলব্ধ! কোনো নতুন আপডেট নাই সম্প্ৰতি কিবা পঢ়া হোৱা নাই আপোনাৰ লাইব্ৰেৰী খালী বিভাগ খালী এই বিভাগত কোনো প্ৰৱেশ পোৱা নগ\'ল আৰম্ভ কৰিবলৈ গাইড আপোনাৰ কোনো বিভাগ নাই। আপোনাৰ লাইব্ৰেৰী পৰিচালনা কৰিবলৈ এখন সৃষ্টি কৰিবলৈ প্লাছ বুটামত টেপ কৰক। আপোনাৰ এতিয়াও কোনো বিভাগ নাই। Cloudflare পাৰ হোৱাৰ চেষ্টা বিফল Cloudflare সহায়ৰ বাবে ইয়াত টেপ কৰক *আৱশ্যক এপটো কাম কৰিবলৈ WebView আৱশ্যক ভাল সামঞ্জস্যৰ বাবে WebView এপটো আপডেট কৰক ডিফল্ট অধ্যায় সজাও বুজাই দিয়া হৈছে ডাউনলোডাৰ ত্ৰুটি অপ্ৰত্যাশিত ত্ৰুটিৰ বাবে অধ্যায় ডাউনলোড কৰিব পৰা নগ\'ল কোনো Wi-Fi সংযোগ উপলব্ধ নাই কোনো নেটৱৰ্ক সংযোগ উপলব্ধ নাই ডাউনলোড ৰোকা পাতা %d বিচ্ছিন্নৰ সময়ত পোৱা নগ\'ল পাতা %d ৰ ফাইল পথ পোৱা নগ\'ল ডাউনলোড পৰীক্ষা কৰা হৈছে সাধাৰণ অগ্ৰগতি সম্পূৰ্ণ এপ আপডেট এক্সটেনচন আপডেট পূৰ্বৰ পৃষ্ঠা আপোনাৰ সাম্প্ৰতিক আপডেট কৰা লাইব্ৰেৰী প্ৰৱেশসমূহ চাওক এপ লক সক্ৰিয় থাকোতে উইজেট উপলব্ধ নহয় আপুনি আপোনাৰ লাইব্ৰেৰীৰ পৰা \"%s\" মচাৰ বাবে সাজু হৈছে পৰৱৰ্তী পৃষ্ঠা ইণ্টাৰনেট সংযোগ নাই %s পৌঁছাব পৰা নগ\'ল উলম্ব সকলো পঢ়া প্ৰৱেশ ৰেণ্ডম এপৰ বৈশিষ্ট্য উন্নত কৰাৰ বাবে নামৰহিত ব্যৱহাৰ তথ্য পঠাওক। সুৰক্ষা এনেলিটিক্স আৰু ক্ৰেছ লগসমূহ এনেলিটিক্সৰ অনুমতি দিয়ক ক্ৰেছ লগ আৰু এনেলিটিক্স পঠাওঁতে আমাক সমস্যাবোৰ চিনাক্ত কৰি সমাধান কৰিবলৈ, কাৰ্যক্ষমতা উন্নত কৰিবলৈ আৰু আপোনাৰ প্ৰয়োজনৰ অনুসাৰে ভৱিষ্যতৰ আপডেটসমূহ অধিক প্ৰাসংগিক কৰিবলৈ সহায় কৰিব। ডেভেলপাৰসকললৈ নামৰহিত ক্ৰেছ লগসমূহ পঠাওক| ক্ৰেছ লগসমূহ পঠাওক আঁতৰাওক এক্সটেনচন আঁতৰাবনে? আপুনি কি \"%s\" এক্সটেনচনটো আঁতৰাব খুজিছে? পঢ়া হিচাপে চিহ্নিত কৰাৰ সময়ত অগ্ৰগতি আপডেইট কৰক ট্ৰেকাৰসমূহ অধ্যায় %d লৈ আপডেইট কৰা হৈছে কাষ্টম হাৰ্ডৱেৰ বিটম্যাপ থ্ৰেশহোল্ড যদি পাঠকে এটা খালী ছবি লোড কৰে ক্ৰমান্বয়ে থ্ৰেছহোল্ড হ্ৰাস কৰক। \nবাচনি কৰা: %s ডিফল্ট (%d) কাৰ্য্যক্ষমতাক প্ৰভাৱিত কৰে। কেৱল সামৰ্থবান কৰক যদি বিটমেপ থ্ৰেছহোল্ড হ্ৰাস কৰিলে খালী প্ৰতিমুৰ্তি সমস্যা সমাধান নহয় সম্প্ৰসাৰণৰ বাবে ইতিহাস পঢ়া বন্ধ কৰক অটো একবৰ্ণী পঢ়া অধ্যায়সহ এন্ট্ৰিসমূহ ৰক্ষা কৰক লেখক কলা ================================================ FILE: i18n/src/commonMain/moko-resources/base/plurals.xml ================================================ After %1$s minute After %1$s minutes Yesterday %1$d days ago Tomorrow In %1$d days %d category %d categories Next unread chapter Next %d unread chapters Done in %1$s with %2$s error Done in %1$s with %2$s errors %1$s remaining %1$s remaining 1 day %d days 1 page %1$s pages Missing %1$s chapter Missing %1$s chapters %1$s chapter %1$s chapters Next chapter Next %d chapters %d tracker %d trackers Skipping %d chapter, either the source is missing it or it has been filtered out Skipping %d chapters, either the source is missing them or they have been filtered out For %d entry For %d entries %1$d new chapter %1$d new chapters Chapters %1$s and 1 more Chapters %1$s and %2$d more Extension update available %d extension updates available %d repo %d repos Migrate %1$d entry? Migrate %1$d entries? Copy %1$d entry? Copy %1$d entries? An entry was skipped %1$d entries were skipped ================================================ FILE: i18n/src/commonMain/moko-resources/base/strings.xml ================================================ Mihon On Off Selected Not selected More options Navigate up Name Categories Library entries Chapters Tracking Delete downloaded History Scanlator More Settings Download queue Library Updates Upcoming History Sources Backup and restore Data and storage Statistics Migrate Extensions Extension info Help Donate Default Warning Auto Started Local Downloaded Unlock %s Authenticate to confirm change Settings Menu Filter Set interval Bookmarked Tracked Unread Customized update frequency Remove filter Alphabetically Total entries Total chapters Last read Last update check Unread count Next expected update Latest chapter Chapter fetch date Date added Tracker score Random Search Search… Search settings Global search Select all Select inverse Mark as read Mark as unread Mark previous as read Download Bookmark chapter Unbookmark chapter Delete Update library Enable all Disable all Edit Add Update category Open random entry Add category Edit categories Rename category Set categories Do you wish to delete the category \"%s\"? Delete category Edit cover View chapters Pause Previous chapter Next chapter Retry Remove Remove everything Start Resume Open in browser Show entry Copy to clipboard Copy link Open in WebView WebView Migrate Display mode Display Compact grid Comfortable grid List Cover-only grid Downloaded chapters Unread chapters Local source Language Show category tabs Show number of items Continue reading button Disable Pin Unpin Apply Cancel OK Cancel all Cancel all for this series Sort By upload date By chapter number Newest Oldest Ascending Descending Move to top Move series to top Move to bottom Move series to bottom Notes Edit notes Install Share Save Reset Revert to default Undo Close Open log Tap to see details Restore Back Forward Refresh Close tab Start downloading now Not now Add anyway Loading… InternalError: Check crash logs for further information App not available Onboarding guide Welcome! Let\'s set some things up first. You can always change these in the settings later too. Next Get started Skip Select a folder where %1$s will store chapter downloads, backups, and more.\n\nA dedicated folder is recommended.\n\nSelected folder: %2$s Select a folder A folder must be selected Updating from an older version and not sure what to select? Refer to the storage guide for more information. Storage guide Install apps permission To install source extensions. Notification permission Get notified for library updates and more. Background battery usage Avoid interruptions to long-running library updates, downloads, and backup restores. Send crash logs Send anonymized crash logs to the developers. Allow analytics Send anonymized usage data to improve app features. Grant New to %s? We recommend checking out the getting started guide. Reinstalling %s? General Appearance Library Reader Downloads Tracking Advanced About Theme, date & time format Categories, global update, chapter swipe Reading mode, display, navigation Automatic download, download ahead One-way progress sync, enhanced sync Sources, extensions, global search Manual & automatic backups, storage space App lock, secure screen Dump crash logs, battery optimizations Theme App theme System Light Dark Dynamic Catppuccin Green Apple Lavender Midnight Dusk Monochrome Nord Strawberry Daiquiri Tako Teal & Turquoise Yin & Yang Yotsuba Tidal Wave Pure black dark mode Relative timestamps \"%1$s\" instead of \"%2$s\" Date format Render images in manga descriptions Manage notifications App language Security and privacy Security Analytics and Crash logs Require unlock Lock when idle Always Never Hide notification content Secure screen Secure screen hides app contents when switching apps and block screenshots Sending crash logs and analytics will allow us to identify and fix issues, improve performance, and make future updates more relevant to your needs NSFW (18+) sources Show in sources and extensions lists This does not prevent unofficial or potentially incorrectly flagged extensions from surfacing NSFW (18+) content within the app. Today Display Items per row Portrait Landscape Global update Automatic updates Off Every 6 hours Every 12 hours Daily Every 2 days Every 3 days Weekly Automatic updates device restrictions Only on Wi-Fi Only on unmetered network When charging Restrictions: %s Smart update Skip entries with unread chapter(s) Skip entries with \"Completed\" status Skip unstarted entries Predict next release time Show unread count on Updates icon Automatically refresh metadata Check for new cover and details when updating library Default category Always ask Per-category settings for sort Entries in excluded categories will not be updated even if they are also in included categories. All None Include: %s Exclude: %s Behavior Chapter on swipe to right Chapter on swipe to left Mark duplicate read chapter as read After reading a chapter After fetching new chapter Hide missing chapter indicators Disallow non-ASCII filenames Ensures compatibility with certain storage media that don't support Unicode. When this is enabled, you'll need to manually rename source and manga folders by replacing non-ASCII characters with their lowercase UTF-8 hexadecimal representations. Chapter files don't need to be renamed. Multi Updates pending Update Update all Obsolete Install Pending Downloading Installing Installed Trust Untrusted Uninstall Remove Remove Extension? App info Untrusted extension Malicious extensions can read any stored login credentials or execute arbitrary code.\n\nBy trusting this extension, you accept these risks. This extension is no longer available. It may not function properly and can cause issues with the app. Uninstalling it is recommended. Do you really want to remove \"%s\" extension? Failed to fetch available extensions Version Language Age rating 18+ Sources from this extension may contain NSFW (18+) content Permissions are needed to install extensions. Tap here to grant. Installing extension… Installer Legacy PackageInstaller Shizuku Private Shizuku is not running Install and start Shizuku to use Shizuku as extension installer. Revoke trusted unknown extensions Extension repos You have no repos set. Add repo Repo URL Add additional repos to %s. This should be a URL that ends with \"index.min.json\". This repo already exists! Delete repo Invalid repo URL Do you wish to delete the repo \"%s\"? Do you wish to add the repo \"%s\"? Open source repo Replace Signing Key Fingerprint Already Exists Repository %1$s has the same Signing Key Fingerprint as %2$s.\nIf this is expected, %2$s will be replaced, otherwise contact your repo maintainer. Fullscreen Show tap zones overlay Briefly show when reader is opened Split wide pages Invert split page placement If the placement of the split wide pages don\'t match reading direction Rotate wide pages to fit Flip orientation of rotated wide pages Double tap to zoom Show content in cutout area Animate page transitions Flash on page change Reduces ghosting on e-ink displays Flash duration %1$s ms Flash every Flash with Black White White and Black Double tap animation speed Show page number Show reading mode Briefly show current mode when reader is opened Custom hardware bitmap threshold Default (%d) If reader loads a blank image incrementally reduce the threshold.\nSelected: %s Use legacy decoder for long strip reader Affects performance. Only enable if reducing bitmap threshold doesn\'t fix blank image issues Custom display profile Crop borders Custom brightness Grayscale Inverted Custom color filter Color filter blend mode Overlay Multiply Screen Dodge / Lighten Burn / Darken Keep screen on Skip chapters marked read Skip filtered chapters Skip duplicate chapters Navigation Volume keys Invert volume keys Invert tap zones None Horizontal Vertical Both Actions Show actions on long tap Save pages into separate folders Creates folders according to entries\' title Background color White Gray Black Auto Default reading mode L shaped Kindle-ish Edge Right and Left Disabled Prev Next Left Right Paged (left to right) Paged (right to left) Paged (vertical) Long strip Long strip with gaps Paged Tap zones Scale type Fit screen Stretch Fit width Fit height Original size Smart fit Pan wide images Automatically zoom into wide images Zoom start position Automatic Left Right Center No animation Normal Fast Default rotation Rotation Free Portrait Reverse portrait Landscape Locked portrait Locked landscape Red Green Blue Alpha Always show chapter transition Reading mode Reading Side padding Sensitivity for hiding menu on scroll Highest High Low Lowest Disable zoom out Delete chapters After manually marked as read After reading automatically delete Allow deleting bookmarked chapters Excluded categories No storage location set Invalid location: %s Failed to create download directory Failed to create directory: %s Disabled Last read chapter Second to last read chapter Third to last read chapter Fourth to last read chapter Fifth to last read chapter Auto-download Download new chapters Skip downloading duplicate read chapters Entries in excluded categories will not be downloaded even if they are also in included categories. Download ahead Auto download while reading Only works if the current chapter + the next one are already downloaded. Save as CBZ archive Split tall images Improves reader performance Concurrent source downloads Concurrent page downloads Pages downloaded simultaneously per source Tracking guide Update progress after reading Update progress when marked as read Trackers One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button. Enhanced trackers Available but source not installed: %s Provides enhanced features for specific sources. Entries are automatically tracked when added to your library. Tracker login Hide entries already in library Storage location Used for automatic backups, chapter downloads, and local source. Create backup Can be used to restore current library Restore backup Restore library from backup file Automatic backup frequency Create Backup created Invalid backup file: Full error: Backup does not contain any library entries. JSON backup not supported Backup file is corrupted Missing sources: Trackers not logged into: You may need to install any missing extensions and log in to tracking services afterwards to use them. Restore completed %1$02d min, %2$02d sec Backup is already in progress What do you want to backup? App settings Source settings Extension repos Include sensitive settings (e.g., tracker login tokens) All read entries Creating backup Backup failed Storage permissions not granted No library entries to back up Couldn\'t create a backup file Backup/restore may not function properly if MIUI Optimization is disabled. Restore is already in progress Restoring backup Restoring backup failed Canceled restore You should keep copies of backups in other places as well. Backups may contain sensitive data including any stored passwords; be careful if sharing. Last automatically backed up: %s Data Storage usage Available: %1$s / Total: %2$s Clear chapter cache Used: %1$s Cache cleared, %1$d files deleted Error occurred while clearing Clear chapter cache on app launch Export Library List Library Exported Syncing library Library sync complete Networking Clear cookies DNS over HTTPS (DoH) Default user agent string User agent string can not be blank Invalid user agent string Reset default user agent string Requires app restart to take effect Cookies cleared Reindex downloads Force app to recheck downloaded chapters Recreating download index Clear database Delete history for entries that are not saved in your library %1$d non-library entries in database You’re about to remove entries from the database Read chapters and progress of non-library entries will be lost Keep entries with read chapters Entries deleted Nothing to clear Clear WebView data WebView data cleared Refresh library covers Reset per-series reader settings Resets reading mode and orientation of all series All reader settings reset Couldn\'t reset reader settings Share crash logs Saves error logs to a file for sharing with the developers Background activity Disable battery optimization Helps with background library updates and backups Battery optimization is already disabled Couldn\'t open device settings Some manufacturers have additional app restrictions that kill background services. This website has more info on how to fix it. Tablet UI Verbose logging Print verbose logs to system log (reduces app performance) Debug info Update library manga titles to match source Warning: if a manga is renamed, it will be removed from the download queue (if present). Website Version What\'s new Help translate Open source licenses Privacy policy Check for updates Updated to v%1$s Send crash reports Helps fix any bugs. No sensitive data will be sent F-Droid builds are not officially supported.\nTap to learn more. Downloaded only Incognito mode Pauses reading history Pause reading history for extension Disable incognito mode Filters all entries in your library Log in to %1$s Username Email address Password Login Logging in… Logged in Log out from %1$s? Log out You are now logged out Unknown error Updating category From library Downloaded chapters Intervals Overlay Tabs No more results No results found Local source Other Last used Pinned Global search… Search for \"%1$s\" globally Latest Popular Browse Has results Local source guide You have no pinned sources Chapter not found Invalid chapter format Order by Date Ongoing Unknown Unknown author Author Artist Unknown status Licensed Publishing finished Cancelled On hiatus Add to library In library Remove from library Unknown title Possible duplicates You have entries in your library with a similar name.\n\nSelect an entry to migrate or add anyway. Added to library Removed from library More Less Delete downloaded chapters? Copied to clipboard Copied to clipboard:\n%1$s Failed to copy to clipboard Source not installed: %1$s Add to library? No description Chapter %1$s Estimate every Set to update every New chapters predicted to be released in around %1$s, checking around every %2$s. This manga is either completed, or there is no predicted release date. Soon Custom update frequency: Downloading (%1$d/%2$d) Error Paused Source title Chapter number By source By chapter number By upload date Download Unread Bookmarked Custom cover Cover Cover saved Error saving cover Error sharing cover Are you sure you want to delete the selected chapters? Chapter settings Are you sure you want to save these settings as default? Also apply to all entries in my library Set as default No chapters found Are you sure? Exclude scanlators No scanlators found Update trackers to chapter %d? Trackers updated to chapter %d Tracking Add tracking Track Unread Reading Completed Dropped On hold Paused Plan to read Rereading Reading List Wish List Complete List On Hold List Unfinished List Score Title Status Status Start date Finish date Tracked privately Track privately Track publicly Type Please login to MAL again Source is not supported No match found %1$s error: %2$s Remove date? This will remove your previously selected start date from %s This will remove your previously selected finish date from %s Remove %s tracking? This will remove the tracking locally. Also remove from %s A category with this name already exists! Categories deleted This will remove the read date of this chapter. Are you sure? Reset all chapters for this entry Picture saved Error saving picture Custom filter Set as cover Cover updated %1$s: %2$s, page %3$d Page: %1$d Next chapter not found The image couldn\'t be loaded Use this image as cover art? For this series Reading mode Finished: Current: Next: Previous: There\'s no next chapter There\'s no previous chapter Loading pages… Failed to load pages: %1$s No pages found Source not found Updating library An update is already running Unable to open last read chapter Library last updated: %s Just now Never View Upcoming Updates Filter excluded scanlators Upcoming Guide Next Month Previous Month Ch. %1$s - %2$s Clear history History deleted Are you sure? All history will be lost. No source found No installed source found Source migration guide Select data to include Select a source to migrate from Migrate Copy Well, this is awkward Not installed Whoops! %s ran into an unexpected error. We suggest you share the crash logs in our support channel on Discord. Restart the application Overview Completed entries Read duration Entries In global update Total Read Trackers Tracked entries Mean score Used N/A %dd %dh %dm %ds Couldn\'t download chapters. You can try again in the downloads section Couldn\'t download chapters due to low storage space Warning: large bulk downloads may lead to sources becoming slower and/or blocking %s. Tap to learn more. Updating library… (%s) Large updates harm sources and may lead to slower updates and also increased battery usage. Tap to learn more. New chapters found Chapter %1$s Chapter %1$s and %2$d more Chapters %1$s %1$d update(s) failed Tap to learn more Failed to update cover Please add the entry to your library before doing this For help on how to fix library update errors, see %1$s Skipped because series is complete Skipped because there are unread chapters Skipped because no chapters are read Skipped because series does not require updates Skipped because no release was expected today Select cover image Select backup file No file picker app found Failed to acquire persistent folder access. The app may behave unexpectedly. No file selected Download Open on GitHub This Android version is no longer supported No new updates available Downloading… Tap to install update Download error New version available! No downloads No recent updates Nothing read recently Your library is empty Category is empty No entries found in this category Getting started guide You have no categories. Tap the plus button to create one for organizing your library. You don\'t have any categories yet. Failed to bypass Cloudflare Tap here for help with Cloudflare *required WebView is required for the app to function Please update the WebView app for better compatibility Updated default chapter settings Downloader Error Could not download chapter due to unexpected error No Wi-Fi connection available No network connection available Downloads paused Page %d not found while splitting Couldn\'t find file path of page %d Checking downloads Common Progress Complete Errors Chapter updates App updates Extension updates Previous page Next page See your recently updated library entries Widget not available when app lock is enabled You are about to remove \"%s\" from your library HTTP %d, check website in WebView No Internet connection Couldn\'t reach %s Enjoyed the part where… Selected Available Select all Select none Select enabled sources Select pinned sources Continue Data to migrate Delete downloads of current entry after migration Additional keywords (optional) Helps narrow down search results by adding additional keywords Hide entries without a match Hide entries without newer chapters Only show entry if the match has additional chapters These options are slow and dangerous and may lead to restrictions from sources Advanced search mode Breaks down the title into keywords for a wider search Match based on chapter number If enabled, chooses the match furthest ahead. Otherwise, picks the first match by source priority. Migration Migration (%1$d/%2$d) Copy Migrate No alternatives found Latest: %1$s Unknown Search manually Don\'t migrate Migrate now Copy now Copy now Stop migrating? Stop Cancel Copy Migrate Cancel Cancel No chapters found, this entry cannot be used for migration ================================================ FILE: i18n/src/commonMain/moko-resources/be/plurals.xml ================================================ %d катэгорыя %d катэгорыі %d катэгорый %d катэгорый Пасля %1$s хвіліны Пасля %1$s хвілін Пасля %1$s хвілін Пасля %1$s хвілін Учора %1$d дні таму %1$d дзён таму %1$d дзён таму Наступная непрачытаная глава Наступныя %d непрачытаныя главы Наступныя %d непрачытаных глав Наступныя %d непрачытаных глав ================================================ FILE: i18n/src/commonMain/moko-resources/be/strings.xml ================================================ Перайсці да пачатку Сыходны Узыходзячы Найстарэйшы Найноўшы Па нумару часткi Па даце загрузкі Сартаваць Адмяніце ўсе для гэтай серыі Адмяніць усе Адмена Адмацаваць Замацаваць Адключыць Паказаць колькасць прадметаў Паказаць укладкі катэгорый Значкі лакальных Значкі загружаных Спіс Зручная сетка Кампактная сетка Выгляд Рэжым адлюстравання Міграваць Адкрыць у WebView Адкрыць у браўзэры Прадоўжыць Пачаць Выдаляць Паўтарыць Наступная частка Папярэдняя частка Паўза Прагляд частак Рэдагаваць вокладку Дадаць у катэгорыі Перайменаваць катэгорыю Рэдагаваць катэгорыі Дадаць катэгорыю Дадаць Рэдагаваць Адключыць усе Ўключыць усе Абнавіць бібліятэку Выдаліць Зняць закладку з часткi Закладка часткi Скачаць Пазначыць папярэдняе як прачытанае Пазначыць як непрачытанае Адзначыць як прачытанае Выбраць наадварот Выбраць усе Глабальны пошук Пошук налад Пошук Дата дадання Дата атрымання Апошняя частка Апошняе чытанне Усяго частак У алфавітным парадку Зняць фільтр Непрачытаны Адсочваецца Паведамленні ў закладкі Фільтр Меню Налады Дапамога Інфармацыя аб пашырэнні Назва Пашырэння перанесці дадзеныя Рэзервовае капіяванне і аднаўленне Крыніцы Гісторыя Абнаўленні Бібліятэка Чарга загрузак Налады Яшчэ Гісторыя Адсочванне Часткi Манга Катэгорыі Выдаліць Ненадзейны Надзейны Усталяваны Устаноўка Загрузка Чаканне Усталяваць Састарэла Абнаўленне Даступны абнаўлення Выключыць: %s Уключаць: %s Ніхто Усе Манга ў выключаных катэгорыях не будзе абнаўляцца, нават калі яны таксама знаходзяцца ў уключаных катэгорыях. Налады для кожнай катэгорыі для сартавання і адлюстравання Заўсёды пытацца Катэгорыя па змаўчанні Правераць наяўнасць новай вокладкі і дэталяў пры абнаўленні бібліятэкі Аўтаматычнае абнаўленне метададзеных Абнаўляць толькі незавершаную мангу Абмежаванні: %s Зарадка Абмежаванні на абнаўленне Штотыдзень Кожныя 2 дні Штодня Кожныя 12 гадзін Кожныя 6 гадзін Уручную Частата абнаўлення Глабальнае абнаўленне Гарызантальная Партрэтная Элементы ў радку Адлюстраванне Гэта не перашкаджае таму, каб неафіцыйныя або патэнцыйна няправільна пазначаныя пашырэння адлюстроўвалі змесціва NSFW (18+) у дадатку. Паказаць у спісе крыніц Крыніцы NSFW (18+) Схаваць змесціва апавяшчэнняў Схаваць змесціва прыкладання пры пераключэнні на іншыя прыкладання і блакаваць скрыншоты Абарона экрана Ніколі Заўсёды Блакаванне пры бяздзейнасці Патрабаваць разблакоўку Бяспека Кіраванне апавяшчэннямі Фармат даты Чысты чорны цёмны рэжым Ёцуба Інь і Ян Тако Клубнічны дайкiры Паўночнае змярканне Зялёны яблык Дынамічная Тэма прыкладання Уключаны Выключаны У адпаведнасці з сістэмнай тэмай Тэма Інфармацыя Дадаткова Адсочванне Загрузкi Чыталка Бібліятэка Агульныя Дадатак недаступны Пагрузка… Пачаць загрузку прама зараз Асвяжыць Наперад Назад Аднавіць Паказваць памылкі Адкрыць часопіс Адмяніць Скід Захаваць Падзяліцца Усталяваць Перайсцi на дно Ніякіх апошніх абнаўленняў Няма загрузак Анімацыя пераходаў паміж старонкамі Паказваць змесціва ў галіне выраза Калі размяшчэнне падзелу на дзве старонкі не адпавядае кірунку чытання Інвертаваць размяшчэнне з падзелам на дзве старонкі Падзел на дзве старонкі Паказваць зоны дотыку калі чыталка адкрыта Паказваць накладанне схемы навігацыі Поўнаэкранны рэжым Можа ўтрымліваць кантэнт NSFW (18+) 18+ Гэта пашырэнне больш недаступна. Гэта пашырэнне было падпісана ненадзейным сертыфікатам і не было актывавана. \n \nШкоднаснае пашырэнне можа счытваць любыя ўліковыя дадзеныя для ўваходу, якія захоўваюцца ў Mihon, або выконваць адвольны код. \n \nДавяраючы гэтаму сертыфікату, вы прымаеце на сябе гэтыя рызыкі. Ненадзейнае пашырэнне Схема навігацыі Пастаронкава Бесперапынна вертыкальна Вэб-комікс Вертыкальна Справа налева Злева направа Справа Злева Наступная Папярэдняя Справа і злева Край Kindle-падобная L-вобразная форма Рэжым чытання па змаўчанні Аўтаматычна Чорны Шэры Белы Колер фону Ствараць тэчкі ў адпаведнасці з назвай мангі Захоўваць старонкі ў асобныя тэчкі Паказаць пры доўгім націску Дзеяння Абодва Вертыкальна Гарызантальна Не Націск наадварот Інвертаваць клавішы рэгулявання гучнасці Клавішы рэгулявання гучнасці Навігацыя Прапусціць адфільтраваныя часткi Прапусціць часткi, адзначаныя як прачытаныя Трымаць экран уключаным Зацямненьне Асвятленне Экран Множанне Перакрыцце Рэжым накладання каляровага фільтра Карыстацкі каляровы фільтр Адценні шэрага Карыстацкая яркасць Выключаны Уключаны Абрэзаць поля Ненадоўга адлюстраваць бягучы рэжым пры адкрыцці чыталкі Паказаць рэжым чытання Паказаць нумар старонкі Хуткасць анімацыі падвойнага націску Хуткая Звычайная Ніякай анімацыі Цэнтральная Справа Злева Аўтаматычная Стартавая пазіцыя павелічэння Разумны Зыходны памер Па вышыні Па шырыні Расцягнуць Змясціць у экран Маштабаванне Колеры наадварот Сёння Бірузовы Знешнасць Аўтэнтыфікацыя для пацверджання змяненняў Па змаўчанні У вас няма катэгорый. Націсніце кнопку \"Плюс\", каб стварыць яе для арганізацыі вашай бібліятэкі. Ваша бібліятэка пустая У апошні час нічога не прачытана Адсочваць Службы, якія прадстаўляюць пашыраныя функцыі для пэўных крыніц. Манга аўтаматычна адсочваецца пры даданні ў вашу бібліятэку. Пашыраныя паслугі Аднабаковая сінхранізацыя для абнаўлення прагрэсу частак у службах адсочвання. Наладзьце адсочванне асобных запісаў мангі з дапамогай кнопкі адсочвання. Паслугi Абнаўляць прагрэс пасля чытання Кіраўніцтва па адсочванні Манга ў выключаных катэгорыях не будзе загружана, нават калі яны таксама знаходзяцца ў уключаных катэгорыях. Спампаваць новыя часткi Аўтаматычная загрузка Пятая ад прачытанай часткi Чацвёртая ад прачытанай часткi Трэцяя ад прачытанай часткі Перадапошняя частка Апошняя прачытаная частка Адключана Дазволіць выдаленне частак з закладкамі Аўтаматычна пасля чытання Пасля таго, як пазначана як \"Прачытанае\" Выдаліць часткі Найнізкая Нізкая Высокая Найвышэйшая Аўтаматычнае утойванне меню пры адчувальнасці да прагортцы Бакавой водступ Чытаньне Рэжым чытання Заўсёды паказваць пераход паміж часткамі A B G R Заблакаваная альбомная Свабодная Партрэтная Альбомная Заблакаваная партрэтная Тып арыентацыі Тып арыентацыі па змаўчанні папярэджанне Выдаліць катэгорыю Вы хочаце выдаліць катэгорыю \"%s\"? InternalError: Праверце журнал збояў для атрымання дадатковай інфармацыі Абнавіць усё Узроставае абмежаванне Не пачата Паказаць мангу Версія Апошняе абнаўленне мангі Колькасць непрачытаных Не ўдалося атрымаць спіс пашырэнняў Сетка без назвы Аб дадатку Колькасць мангі Мова Толькі ў безлемітнай сетцы Мова Лаванда Мова дадатку Ёсць непрачытаныя главы Shizuku не працуе Закрыць Устаноўка пашырэнняў… Перамясціць у пачатак спісу Усталёўнік па змаўчанні Выдаліць усё Кожныя 3 дні Толькі па Wi-Fi Не выбрана Перайсці ўверх Разблакіраваць %s Пачата Выбрана Другія опцыі Выдаліць загружанае Даныя і хаванне Статыстыка На ўстройстве Задаць інтэрвал Наладжвальная частата абнаўлення Наступнае Перакладчык Загружана ================================================ FILE: i18n/src/commonMain/moko-resources/bg/plurals.xml ================================================ 1 налично обновление за разширение %d налични обновления за разширения Глави %1$s и още 1 Глави %1$s и още %2$d 1 нова глава %1$d нови глави За 1 заглавие За %d заглавия 1 оставаща %1$s оставащи След 1 минута След %1$s минути Направено за %1$s с %2$s грешка Направено за %1$s с %2$s грешки %d категория %d категории 1 глава %1$s глави 1 тракер %d тракери Има 1 липсваща глава, източникът липса или е филтриран Има %d липсващи глави, източникът липса или е филтриран Вчера Преди %1$d дни Следващата непрочетена глава Следващите %d непрочетени глави 1 ден %d дни Липсваща %1$s глава Липсващи %1$s глави Следваща глава Следващи %d глави %d хранилище %d хранилища 1 страница %1$s страници Утре След %1$d дни ================================================ FILE: i18n/src/commonMain/moko-resources/bg/strings.xml ================================================ Име Настройки Изтегляния Библиотека История Нови глави Запази и възстанови Настройки Филтрирай Отбелязани Непрочетени Премахни филтрирането Азбучен ред Последно четене Търсене Избери всички Отбележи като прочетена Отбележи като непрочетена Отбележи предните глави като прочетени Изтегли Отметни Премахни отметнатата глава Изтрий Обнови библиотеката Редактирай Добави Добави категория Редактирай категории Преименувай категория Запиши в категории Промени корица Паузирай Предишна глава Следваща глава Опитай пак Премахни Продължи Отвори в браузър Режим на показване Покажи Компактна решетка Списък Отмени Сортирай Инсталирай Сподели Запази Изчисти Върни Зареждане… Основни настройки Четец Изтегляния Следене Разширени настройки За приложението Манга на ред Портретно Пейзажно Автоматини ъпдейти Изключено На всеки 6 часа На всеки 12 часа Ежедневно През ден Всички Автоматични актуализации на ограниченията на устройството На зарядно устройство Със статус \"Завършена\" Обнови прогреса след прочитане Цял екран Анимирани преходи Номер на страница Персонализирана яркост Персонализиран цветен филтър Не изключвай екрана Навигация Бутони за звука Цвят на фона Бял Черен Режим на четене по подразбиране От ляво надясно От дясно наляво Вертикално Уебкомикс Увеличение Запълване Разтегляне По ширина По височина Оригинален размер Умно увеличение Начална позиция при увеличаване Автоматична Ляво Дясно Центрирано Стандартна ориентация Свободно Заключено - портрет Заключено - пейзаж R G B A След маркиране като прочетено След прочитане автоматично изтрийте Изключено Последно прочетена глава Предпоследна прочетена глава Предпоследна трета прочетена глава Четвърта предпоследна прочетена глава Пета предпоследна прочетена глава Изтегляй нови глави Услуги Изчисти кеша на главите Използвани: %1$s Кеш изчистен. %1$d файла бяха изчистени Възникна грешка при изчистването на кеша Изчисти бисквитки Бисквитки изчистени Изчисти базата данни Изтрий историята на манги, които не са запазени в библиотеката Базата данни изчистена Версия Изпращай данни за сривове Помага за оправянето на бъгове. Няма да се изпращат лични данни Влизане в %1$s Потребителско име Парола Влез Влязохте Неизвестна грешка Обновяване на категорията Няма повече резултати Излизаща Неизвестно Лицензирана Премахни от библиотеката Глава %1$s Изтегляне (%1$d/%2$d) Грешка Оригинално заглавие Номер на главата По източник По ред на главите Изтегли Непрочетени Сигурни ли сте, че искате да изтриете избраните глави? Следене Чета Завършена Изоставена На заден план Планирам да чета Оценка Заглавие Статус Глави Категория със същото име вече съществува! Категориите бяха изтрити Това ще премахне датата на прочитане на главата. Сигурни ли сте? Изчисти всички дати за тази манга Добавяне на мангата към библиотеката? Изображението запазено Персонализиран филтър Постави за корица Корицата обновена Страница: %1$d Не беше намерена следваща глава Неуспешно декодиране на изображението Желаете ли да използвате това изображение за корица? Не можахме да изтеглим главите. Може да опитате пак в секцията на изтеглянията Нови глави Грешка при обновяването на корицата Моля, добавете мангата в библиотеката си, преди да направите това Изберете корица Изберете резервно копие Изтегли Няма налични актуализации Изтегля се… Изтегляне завършено Грешка при изтегляне Има нова версия! Нямате изтегляния Нямате нови глави Не сте чели нищо наскоро Библиотеката Ви е празна Изтегли Грешка Получи се неочаквана грешка при изтеглянето на главата Няма налична Wi-Fi връзка Няма налична мрежова връзка Категории Манга Следене История Общ брой глави Отвори лога Възстанови Приложението не е достъпно Ежеседмично Категория по подразбиране Питай всеки път Изрязвай границите Обърнати бутони за звука Създай резервно копие Може да се използва за възстановяване на текущата библиотека Възстанови резервно копие Възстанови библиотеката от резервно копие Честота на запазване Резервно копие създадено Възстановяването завършено Какво искате да запазите? Възстановяване на копие Създаване на резервно копие Локални Да се изтрият ли изтеглените глави? На пауза Изтеглянето спряно Глобално търсене Други Глобално търсене… Последни Търсене Общи Изтеглени глави Нямате категории. Натиснете плюса, за да създадете такава и да организирате библиотеката си. Мигриране Разширения Информация Обнови Инсталирай На изчакване Изтегля се Инсталира се Инсталирани Потвърдени Непотвърдени Деинсталирай Непотвърдено разширение Следното разширение имаше непотвърден сертификат и не беше активирано. \n \nЗлонамереното разширение може да види всичката информация за вход в системата на Mihon или да компилира неблагонадежден код. \n \nПотвърждавайки този сертификат, вие приемате тези рискове. Скорост на анимацията Без анимация Нормална Бързо Добавена към библиотеката Премахната от библиотеката Копирано към клипборда: \n%1$s Изберете кои данни ще мигрирате Мигрирай Копирай Страница Източникът не е инсталиран: %1$s Препрочитане Статус Тип Завършени: Текущи: Следва: Предишна: Няма повече глави Няма предишна глава Зареждане на страниците… Не бяха заредени успешно: %1$s страници Покажи при задържане върху екрана Отвори в WebView Пропускай прочетените глави Режим на цветовия филтър Наложен Умножен Екранен Осветен Затъмнен Помощ Не бяха намерени резултати Изберете източник, от който да мигрирате Назад Напред Обнови Библиотека Остарял Това разширение вече не е достъпно. Формат на датата Глобалния обновявания Искате ли да излезете от %1$s? Излез Излязохте успешно На пауза Сигурност Ъпдейти на разширенията Нови глави Моля, обновете WebView за по-добра съвместимост WebView е необходим за Mihon Грешка при минаването през Cloudflare Глави %1$s Глава %1$s и %2$d още Глава %1$s Гл. %1$s - %2$s Обновяване на библиотеката Добави проследяване По-малко Повече В библиотеката Добави към библиотеката Помощ за локални източници Закачени Последно използвани Имейл адрес Филтрира мангата в цялата Ви библиотека Само изтеглени Провери за ъпдейт Лицензи за отворен код Уебсайт Оптимизацията на батерията е изключена Помага при фонови обновявания на библиотеката и резервни копия Изключи оптимизация на батерията Отменено възстановяване Възстановяването неуспешно Възстановяването е в процес Съхраняването неуспешно Архивирането вече е в ход %1$02d мин, %2$02d сек Странично разстояние Четене Винаги показвай прехода между главите Безкраен вертикален изглед Пропускай филтрирани глави Показвай съдържанието в изрязаната част Налични ъпдейти Показване Скривай съдържанието на уведомленията Скрий съдържанието на приложението и блокирай снимките на екрана Никога Винаги Заключи при неактивност Изискване на отключване Сигурност Уведомления Система на абонаментите Включено Изключено Премести най-горе Премести най-долу Най-стари Най-нови Отмени всичко Откачи Закачи Преглед на глави Избери обратно Последна глава Меню Източници Още Режим на четене За тази поредица Системните настройки не бяха отворени Обнови кориците Еднопосочна синхронизация на прочетените глави. Установи проследяване за отделни манги от индивидуалния бутон за проследяване. Сиво Мигрирай Източникът не е намерен Няма намерени страници По дата на качване Раздели Данни Изисква рестартиране, за да влезе в сила Мрежа Липсващи източници: Резервното копие не съдържа манга. Невалиден резервен файл Накратко показване на текущия режим при отваряне на четеца Покажи режим на четене Провери за нова корица и подробности при актуализиране на библиотеката Автоматично обновяване на метаданните Деактивирай Показване на раздели за категории Удобна решетка Започни Деактивирай всички Активира всички Без И двете Вертикално Хоризонтално Грешки Готово Прогрес Главите не можаха да бъдат изтеглени поради недостатъчно място Неизвестен статус Неизвестен автор Нямате отметнати източници Търси „%1$s“ глобално Обновена до v%1$s Какво е новото Не сте влезли като потребител в: Позволи изтриване на отметнати глави Изтрий глави Режим на четене Може да съдържа неприлично (18+) съдържание 18+ Тази настройка няма да спре неофициални или потенциално неправилно маркирани разширения да позволяват достъп до съдържание за възрастни (18+) в апликацията. Тема Добавено на Не са намерени глави NSFW (18+) източници Низходящ Възходящ По брой на главите По дата на качване Покажи номера на предметите Настройки за търсене Следени Край Дата Чисто черен режим По подразбиране Ще бъдат възстановени данните от резервното копие. \n \nТрябва да инсталирате липсващи разширения, ако има такива, и да се впишете в услугите за тракинг, за да ги ползвате. Проследи Съхраняването/възстановяването може да не функционира правилно, ако MIUI Optimization е изключено. Някои производители ограничават приложенията, за да убият задноплановите услуги. Следният уебсайт съдържа информация за разрешаването на проблема. Инкогнито режим Не записва история, докато трае режимът Нареди по Настройки за главите Започни изтеглянето сега Инсталиране на разширение… Стара версия Инсталатор Разтовари записите от сривовете Не Пейзаж Работа на заден план Изключи инкогнито Облик Да L-образно Kindle-подобно Създава папки според заглавието на мангата Автоматично Схема на навигацията Преди След Ляво Дясно Висока Нямате никакви категории. DNS пред HTTPS Общ брой манга Дата на получаване Локална манга Чувствителност за скриване на менюто при превъртане Най-висока Непрочетена Корица Предупреждение Удостоверете, за да потвърдите промяната Премахни всичко от тази серия Вижте пълните подробности за грешката Тема Динамично Зелена ябълка Нощен здрач Дайкири ягода Тако Циан и тюркоаз Ин и Янг Йоцуба Ограничения: %s Различно сортиране и показване за всяка категоря Манга в изключените категории няма да бъде обновявана дори ако се намира във включените категории. Никоя Включва: %s Изключва: %s Shizuku не работи Инсталирайте и стартирайте Shizuku, за да използвате Shizuku като инсталатор на разширения. Покажи оформлението на навигацията Разделяне на широки страници Ако позицията на разделението на широката страница не съвпада с посоката на четене Черно-бяло Инвертирай докосване Действия Запазвай страниците в отделни папки Дясно и Ляво Ориентация Портрет Ниска Най-ниска Изключени категории Автоматично изтегляне Манга в изключени категории няма да бъде изтеглена, дори да се намира във включени категории. Наръчник при проследяване Подобрени услуги Услуги, предлагащи подобрени особености за определени източници. Манга се проследява автоматично, щом бъде добавена към библиотеката Ви. Автоматичното запазване е препоръчително. Препоръчваме да съхранявате резервните копия на няколко места. Описателно записване Помогни с превода Манга от библиотеката Изтеглени глави Не можа да се копира върху клипборда Корицата запазена Сигурни ли сте, че искате да наложите тези настройки? Също приложи към всяка манга в библиотеката ми Направи по подразбиране Дата на започване Изчисти историята Историята изтрита Напълно ли сте сигурен? Всичката ви история ще бъде загубена. Наръчник за мигриране между източници Предупреждение: големите актуализации вредят на източниците и могат да доведат до по-бавни актуализации, както и до повишено използване на батерията. Натиснете тук, за да научите повече. Не бе намерено приложение за подбор на файлове Първи стъпки Стандартните настройки на главите бяха обновени Предишна страница Следваща страница Език Показвай в списъка с източници и разширения Днес Информация Покажи зони за натискане, когато четецът се отвори Обърни позициите на разделените широки страници Инвертирани цветове Запазва записи от сривове, които може да бъдат споделени с разработчиците Принтирай описателните записи в системните записи (ограничава производителността на приложението) Главата не е намерена Невалиден формат на главата Грешка при запазването на корицата Грешка при споделянето на корицата Дата на завършване Моля, впишете се наново в MAL Източникът не се поддържа Не е намерено съвпадение %1$s: %2$s, страница %3$d Тази версия на Android повече не се поддържа Потребителски интерфейс на таблет %1$d небиблиотечна манга в базата данни Нищо за почистване Актуализации на приложението Изчистване на кеша на главата при затваряне на приложението Политика за поверителност С непрочетени глави Обнови всички Неуспешно получаване на списък с разширения На всеки 3 дена Само през Wi-Fi Предупреждение: големите масови изтегляния могат да доведат до забавяне на източниците и/или блокиране на %s. Натиснете тук, за да научите повече. Покажи манга Решетка само с корици Искате ли да изтриете категорията \"%s\"? InternalError: Провери записите за крашове за повече информация Грешка при запазването на изображението Обновява се Не е инсталиран Обърнат портрет Език Случи се неочаквана грешка Автоматично изтегляне при четене Няма описание Няма заглавия в библиотеката за резервно копие Нулирай режима на четене и ориентацията на всички поредици Сигурни ли сте? Популярни Списък с незавършени %s се сблъска с неочаквана грешка. Препоръчваме да заснемете това съобщение, да запазите записите от крашовете и да ги споделите в нашия канал за поддръжка в Discord. Последно обновяване на библиотеката: %s Списък за четене Не може да се отвори последната прочетена глава Не беше намерен източник Рестартирай приложението Пропусната, понеже поредицата е завършена Приставката не е достъпна, когато е активирано заключване на приложението Пропусната, понеже поредицата не изисква обновления Пропусната, понеже не е започната Отвори в GitHub Незапочнати Нулирай отделните настройки на четеца Пропусната, понеже има непрочетени глави User agent string по подразбиране User agent string-ът не може да бъде празен Нулирай user agent string-a по подразбиране Увеличи пейзажно изображение Списък със завършени Списък със спрени Предстоящо изтегляне Работи само със заглавия в библиотеката и ако текущата и следващата глава са вече изтеглени Виж наскоро обновената манга Не можа да бъде намерен файловият път на страница %d Последно обновяване Изчисти данните на WebView Това е неудобно Отменена За помощ при оправянето на грешки с обновленията, виж %1$s Приливна вълна Брой непрочетени Само през неограничена мрежа Премести поредицата най-горе Лавандула Език на приложението Изтрий категория Възрастово ограничение Списък с желания Запази като CBZ архив Данните на WebView изчистени Настройките на четеца не можаха да бъдат нулирани Не беше намерен инсталиран източник Премахни всичко Версия В хиатус Корица по избор %1$d провалени обновление/я Търсене… Деактивирано Натисни, за да научиш повече Искате да премахнете \"%s\" от библиотеката си Затвори Всички настройки на четеца нулирани Тема, формат на датата и времето Категории, глобални обновления Режим на четене, показване, навигация Автоматични изтегляния, предстоящи изтегляния Еднопосочна синхронизация, подобрена синхронизация Източници, разширения, глобално търсене Ръчно и автоматично създаване на бекъп Заключване на приложението, екран за сигурност Покажи записи от крашове, оптимизации за батерията Мулти Увеличи широките изображения при натискане Подобрява производителността на четеца Не е дадено разрешение за съхранение Приключено издаване Страница %d не беше намерена при разделяне Скоро Глава на ляво плъзгане Избрано Продължи да четеш Копирай връзка Следващо очаквано обновление Избери папка Обновяваш от по-стара версия и не си сигурен какво да избереш? Объръни се към ръководството за съхранение за повече информация. Норд Монохром \"%1$s\" вместо \"%2$s\" Бяло Бяло и черно Налични: %1$s / Общо: %2$s Задай обновление на всеки Автоматично Локален Случайно Добре дошли! Първо хайде да настрим някои неща. Можеш по всяко време да ги промениш от настройките. Започни Пропусни Трябва да бъде избрана папка Ръководство за съхранение Да инсталира разширения за източници. Разрешение за известия Получавай известия за обновления в библиотеката и други Умно обновяване След прочитане на глава Има резултати Непознато заглавие Възможни дубликати Добави все пак Създай Пълна грешка: %1$s грешка: %2$s Току що Общ преглед Прочетено %dч Обновяване на библиотеката... (%s) Натисни тук за помощ с Cloudflare %dд Пропусни изтегляне на дублиращи се прочетени глави Интервали Никога Задай интервал Отвори случайна манга Обнови категория Няма намерени манги в тази категория Върни към начални настройки Не сега Не е избрано Маркирай дубликатите като прочетени Бележки Редактирай бележки Следващ Преинсталираш %s? Скрий манги, които са вече в библиотеката Настройки на източници Нови глави предвидени да бъдат качени след около %1$s, проверяване около всеки %2$s. Предишен месец Премахни Премахни разширение? Още настройки Изтрий Данни и съхранение Статистики Изтеглени Отключи %s Изтрий хранилище Предстоящи Премахни дата? Синхронизиране на библиотеката ОК Добави хрнилише Следващ месец Завършени манги %dсек Няма връзка с интернет Линк към хранилището Пропусни дублиращи се глави Резервното копие е повредено Общо Преглед на предстоящите обновления Манги Премести най-долу Започнати Автор Глава на дясно плъзгане Заместване Натисни два пъти за увеличение Черно По подразбиране (%d) Невалидно местоположение: %s Не можа да достигне %s Непрочетени глави Художник След извличане на нова глава Наистина ли искаш да премахнеш \"%s\" разширение? Неподдържано JSON резервно копие Настройки за приложението *задължително Също премахни от %s Продължителност на четене %dмин Категорията е празна Неможа да създаде деректория за изтегляния Неможа да създаде директория: %s Всички прочетени манги Не можа да създаде резервно копие Сихронизиране на библиотеката завършено Разрешение за инсталиране на приложения Фоново потребление на батерията Избери папка, където %1$s ще съхранява изтеглени глави, резервни копия и други.\n\nПрепоръчва се специална папка.\nИзбрана папка: %2$s ================================================ FILE: i18n/src/commonMain/moko-resources/bn/plurals.xml ================================================ অধ্যায় %1$s এবং আরও ১টি অধ্যায় %1$s এবং আরও %2$dটি %1$s-এ সম্পন্ন হয়েছে, তবে %2$s ত্রুটি ছিল %1$s-এ সম্পন্ন হয়েছে, তবে %2$sটি ত্রুটি ছিল %dটি বিভাগ %dটি বিভাগসমূহ %1$s মিনিট পর %1$s মিনিট পর এক্সটেনশন হালনাগাদ উপলব্ধ %d এক্সটেনশন হালনাগাদ উপলব্ধ ১টি নতুন অধ্যায় %1$dটি নতুন অধ্যায় ১টি শিরোনামের জন্য %dটি শিরোনামের জন্য 1 অধ্যায় এড়িয়ে জাছি, হয় উৎসটি অনুপস্থিত বা এটি ফিল্টার করা হয়েছে %d অধ্যায় কিপ করা হচ্ছে, হয় উৎসটি তাদের অনুপস্থিত অথবা সেগুলি ফিল্টার করা হয়েছে 1টি ট্র্যাকার %dটি ট্র্যাকার ১টি অধ্যায় %1$sটি অধ্যায় %1$sটি বাকি আছে %1$sটি বাকি আছে গতকাল %1$d দিন আগে পরবর্তী অপঠিত অধ্যায় পরবর্তী %d টি অপঠিত অধ্যায় পরবর্তী অধ্যায় পরবর্তী %d অধ্যায় ১টি অধ্যায় নেই %1$s টি অধ্যায় নেই ১ দিন %d দিন ১ রিপো %d রিপো আগামীকাল %1$d দিনে ১ পৃষ্ঠা %1$s পৃষ্ঠা %1$dটি এন্ট্রি স্থানান্তর? %1$dটি এন্ট্রি স্থানান্তর? %1$dটি এন্ট্রি কপি করবেন? %1$dটি এন্ট্রি কপি করবেন? একটি এন্ট্রি বাদ দেওয়া হয়েছে %1$dটি এন্ট্রি বাদ দেওয়া হয়েছে ================================================ FILE: i18n/src/commonMain/moko-resources/bn/strings.xml ================================================ নাম বিভাগসমূহ পুস্তক সংগ্রহ অধ্যায়সমূহ ট্র্যাকিং ইতিহাস সেটিংস ডাউনলোড সারি লাইব্রেরি ইতিহাস আপডেট ব্যাকআপ এবং পুনরুদ্ধার সেটিংস বিশোধন বুকমার্ককৃত অপঠিত ফিল্টার সরান বর্ণানুক্রমে মোট অধ্যায় সর্বশেষ পঠিত খুঁজুন সর্বত্র খুঁজুন সব নির্বাচন করুন পঠিত হিসেবে চিহ্নিত করুন অপঠিত হিসাবে চিহ্নিত করুন পূর্ববর্তী গুলো পঠিত হিসাবে চিহ্নিত করুন ডাউনলোড বুকমার্ক অধ্যায় বুকমার্ক সরান মুছুন লাইব্রেরি আপডেট সম্পাদন করুন যোগ করুন ক্যাটাগরি অ্যাড ক্যাটাগরি এডিট ক্যাটাগরির নাম পরিবর্তন ক্যাটাগরি সেট করুন মোড়ক সম্পাদনা করুন বিরতি দিন পূর্ববর্তী অধ্যায় পরবর্তী আধ্যায় পুনরায় চেষ্টা করুন সরান রিজিউম ব্রাউজারে খুলুন প্রদর্শনের ধরন প্রদর্শন কমপ্যাক্ট গ্রিড তালিকা ডাউনলোড করা অধ্যায় বাতিল সাজান ইন্সটল করুন শেয়ার সংরক্ষণ করুন পুন:স্থাপন পূর্বাবস্থায় ফিরুন লগ খুলুন পুনরুদ্ধার করুন লোড হচ্ছে… অ্যাপটি অনুপলব্ধ সাধারণ রিডার ডাউনলোডস ট্র্যাকিং অ্যাডভান্সড সম্বন্ধে প্রতি সারিতে আইটেম প্রতিকৃতি ভূদৃশ্য নিজেথেকে আপডেট বন্ধ প্রতি ৬ ঘন্টায় প্রতি ১২ ঘন্টায় প্রতিদিন প্রতি ২ দিন সাপ্তাহিক সব নিজেথেকে আপডেটের সীমাবদ্ধতা চার্জ হচ্ছে \"সম্পূর্ন\" শর্তসহিত পড়ার পরে অগ্রগতি আপডেট করুন সাধারণ বিভাগ সর্বদা জিজ্ঞাসা করুন সম্পূর্ণ পর্দা পৃষ্ঠা পালটানো এনিমেট করুন পৃষ্ঠা নম্বর দেখান প্রান্তগুলো কাটুন স্বনির্ধারিত উজ্জ্বলতা স্বনির্ধারিত রঙ ফিল্টার পর্দা চালু রাখুন ন্যাভিগেশন ভলিউম বোতামগুলো ভলিউম বোতামগুলো ওল্টান ব্যাকগ্রাউন্ড রঙ সাদা কালো প্রকৃত পঠন ধরন বাম থেকে ডানে (পেজড) ডান থেকে বামে (পেজড) উল্লম্বভাবে (পেজড) লং স্ট্রিপ স্কেল ধরণ সম্পূর্ণ পর্দা জুড়ে প্রসারন সম্পূর্ণ প্রস্থ সম্পূর্ণ দৈর্ঘ্য আসল আকার উপযুক্ত ফিট জুম শুরুর অবস্থান স্বয়ংক্রিয় বামে ডানে মাঝে ডিফল্ট ঘূর্ণন মুক্ত লক করা পোর্ট্রেট লক করা ল্যান্ডস্কেপ সবুজ নীল আলফা পঠিত হিসেবে চিহ্নিত করার পর পড়ার পর স্বয়ংক্রিয়ভাবে নিষ্ক্রিয় শেষ পঠিত অধ্যায় ২য় থেকে শেষ অধ্যায় ৩য় থেকে শেষ অধ্যায় ৪র্থ থেকে শেষ অধ্যায় ৫ম থেকে শেষ অধ্যায় নতুন অধ্যায়গুলো ডাউনলোড করুন সেবা সমূহ ব্যাকআপ তৈরী করুন বর্তমান সংগ্রহশালা পুনরুদ্ধারের জন্য ব্যাবহার করা যাবে ব্যাকআপ পুনরুদ্ধার ব্যাকআপ ফাইল থেকে সংগ্রহশালা পুনরুদ্ধার করুন ব্যাকআপ ফ্রিকোয়েন্সি ব্যাকআপ তৈরী হয়েছে পুনরুদ্ধার সম্পন্ন হয়েছে আপনি কি ব্যাকআপ করতে ইচ্ছুক? ব্যাকআপ পুনরুদ্ধার হচ্ছে ব্যাকআপ তৈরী হচ্ছে অধ্যায়ের ক্যাচি পরিষ্কার করুন ব্যাবহৃত হয়েছে: %1$s ক্যাচি পরিষ্কার হয়েছে. %1$d ফাইল মুছে ফেলা হয়েছে ক্যাচ পরিষ্কারের সময় একটি ত্রুটি দেখা দিয়েছে কুকিস পরিষ্কার করুন কুকিস পরিষ্কার হয়েছে ডাটাবেজ পরিষ্কার করুন আপনার সংগ্রহশালাতে যেসব মাংগা সংরক্ষিত নেই সেগুলোর ইতিহাস মুছে ফেলুন এন্ট্রিগুলো মুছে ফেলা হয়েছে ভার্সন ক্র‍্যাশের প্রতিবেদন পাঠান বাগ ঠিক করার জন্য সাহায্য করুন। কোন সংবেদনশীল তথ্য পাঠানো হবে না প্রবেশ করুন %1$sতে ব্যাবহারকারীর নাম গোপন শব্দ প্রবেশ করুন প্রবেশ হয়েছে অজানা ত্রুটি বিভাগের হালনাগাদ হচ্ছে আর কোনও ফলাফল নেই লোকাল সোর্স অন্যান্য সার্বজনীন খোঁজ… লেটেস্ট অনুসন্ধান চলমান অজানা লাইসেন্সকৃত সংগ্রহশালা থেকে অপসারণ করুন ডাউনলোডকৃত অধ্যায়গুলো মুছে ফেলতে চান? অধ্যায় %1$s ডাউনলোড হচ্ছে (%1$d/%2$d) ত্রুটি থেমে আছে উৎস শিরোনাম অধ্যায় নাম্বার উৎস অনুযায়ী অধ্যায়ের নাম্বার অনুযায়ী ডাউনলোড অপঠিত আপনি কি নিশ্চিত যে আপনি নির্বাচিত অধ্যায়গুলো মুছে ফেলতে চান? অনুসরিত পড়া হচ্ছে সম্পন্ন বাদ পড়েছে স্থগিত পড়ার জন্য পরিকল্পিত স্কোর শিরোনাম স্থিতি এই নামের একটি বিভাগ ইতিমধ্যে বিদ্যমান! বিভাগগুলি মোছা হয়েছে এটা এই অধ্যায়ের পড়ার সময়কাল সরিয়ে ফেলবে। আপনি নিশ্চিত? এই মাংগার জন্য সব অধ্যায় পুনঃবিন্যাস করুন লাইব্রেরিতে যোগ করবেন? ছবি সংরক্ষিত হয়েছে স্বনির্ধারিত ফিল্টার প্রচ্ছদ হিসাবে সংরক্ষণ করুন প্রচ্ছদ আপডেট হয়েছে পৃষ্ঠা: %1$d পরবর্তী অধ্যায় খুঁজে পাওয়া যায়নি ছবিটি লোড করা যাচ্ছে না এই চিত্রটি কভার আর্ট হিসাবে ব্যবহার করবেন? অধ্যায়গুলি ডাউনলোড করা যায়নি। ডাউনলোড বিভাগে আপনি আবার চেষ্টা করতে পারেন নতুন অধ্যায় পাওয়া গিয়েছে প্রচ্ছদ হালনাগাদ করতে ব্যর্থ এটা করার আগে দয়া করে মাংগাটি আপনার সংগ্রহশালায় যোগ করুন প্রচ্ছদ চিত্র নির্বাচন করুন ব্যাকআপ ফাইল নির্বাচন করুন ডাউনলোড নতুন কোন হালনাগাদ নেই ডাউনলোড হচ্ছে… ডাউনলোড সম্পন্ন হয়ে গেছে ডাউনলোড ত্রুটি দেখা গিয়েছে নতুন সংস্করণ উপলভ্য! ডাউনলোড নেই কোন নতুন হালনাগাদ নেই সম্প্রতি কিছু পড়া হয়নি আপনার সংগ্রহশালা খালি আপনার কোন বিভাগ নেই। আপনার সংগ্রহশালা সাজাতে যোগ চিহ্ন বাটনে চেপে একটি বিভাগ তৈরী করুন। ডাউনলোডার ত্রুটি অপ্রত্যাশিত ত্রুটির কারণে অধ্যায় ডাউনলোড করা যায়নি কোন ওয়াই-ফাই সংযোগ খুঁজে পাওয়া যায়নি কোন নেটওয়ার্ক সংযোগ খুঁজে পাওয়া যায়নি ডাউনলোড বিরতি সাধারণ মাইগ্রেট এক্সটেনশন এক্সটেনশনের বিবরন হালনাগাদ ইন্সটল প্রক্রিয়াধীন ডাউনলোড হচ্ছে ইন্সটল হচ্ছে ইনস্টল করা বিশ্বাস অনির্ভরযোগ্য আন ইন্সটল অনির্ভর‍যোগ্য এক্সটেনশন ক্ষতিকর এক্সটেনশন সংরক্ষিত লগইন তথ্য পড়তে পারে বা ইচ্ছেমতো কোড চালাতে পারে।\n\nএই এক্সটেনশনটিকে বিশ্বাস করলে আপনি এসব ঝুঁকি মেনে নিচ্ছেন। দুই টোকার এনিমেশনের গতি এনিমেশন নেই সাধারণ দ্রুত সংগ্রহশালায় যোগ করা হয়েছে সংগ্রহশালা থেকে অপসারণ করা হয়েছে ক্লিপবোর্ডে কপি হয়েছে: \n%1$s যোগ করার জন্য উপাত্ত নির্বাচন করুন মাইগ্রেট অনুলিপি পেজড উৎস ইন্সটল করা নেই: %1$s পুনরায় পড়া স্থিতি ধরণ শেষ: বর্তমান: পরবর্তী: পূর্ববর্তী : পরবর্তী কোন অধ্যায় নেই কোন পূর্ববর্তী অধ্যায় নেই পৃষ্ঠা লোড হচ্ছে … পৃষ্ঠাগুলো লোড করতে ব্যর্থ হয়েছে: %1$s দীর্ঘ ট্যাপে দেখান WebView তে খুলুন পঠিত অধ্যায়গুলো এড়িয়ে যান রঙ ফিল্টার মিশ্রন মোড আস্তরণ পর্দা ডডজ / হালকা বার্ন/অন্ধকার গুণ সাহায্য কোন ফলাফল পাওয়া যায়নি মাইগ্রেট করার জন্য একটি সোর্স সিলেক্ট করুন পেছনে অগ্রবর্তী রিফ্রেশ লাইব্রেরি অচল এই এক্সটেনশন আর উপলব্ধ নয়। ইমেল ঠিকানা লাইব্রেরিতে আছে লাইব্রেরিতে যুক্ত করুন আরও কম উল্টো নির্বাচন করুন তারিখে যোগকৃত সর্বশেষ অধ্যায় তালিকা সোর্স আরও প্রদর্শন এটি অ্যাপের মধ্যে প্রাপ্তবয়স্কদের (18+) বিষয়বস্তু সারফেস করা থেকে অনানুষ্ঠানিক বা সম্ভাব্য ভুলভাবে পতাকাঙ্কিত এক্সটেনশানগুলিকে বাধা দেয় না। বিজ্ঞপ্তির বিষয়বস্তু লুকান পর্দা নিরাপদ করুন কখনই না সবসময় আনলক প্রয়োজন নিরাপত্তা ও গোপনীয়তা বিজ্ঞপ্তি ব্যবস্থাপনা তারিখের রীতি ডার্ক লাইট সিস্টেম থিম নীচে সরান শীর্ষে সরান প্রবীণতম নবীনতম সব বাতিল করুন আলগা করুন আটকান অক্ষম ক্যাটাগরি ট্যাবগুলি দেখান আরামপ্রদ গ্রিড মাইগ্রেট স্টার্ট অধ্যায়গুলি দেখুন সব অক্ষম করুন সব সক্রিয় করুন মেটাডাটা স্বয়ংক্রিয়ভাবে রিফ্রেশ ব্যাপক আপডেট অ্যাপ পাল্টানোর সময় অ্যাপের কন্টেন্ট লুকান ও স্ক্রিনসট ব্লক করুন সেটিংসে খুঁজুন কর্মহীন হলে লক হবে হালনাগাদকৃত প্রকৃত শ্রেণির সেটিংস প্রকৃত হিসেবে সংরক্ষণ করুন আপনি কি নিশ্চিত সেটিংসগুলো প্রকৃত হিসেবে সংরক্ষণ করবেন? তথ্য কার্যকর করতে অ্যাপ পুনরারম্ভ করা লাগে নেটওয়ার্ক পুনরুদ্ধার বাতিল করা হয়েছে ব্যাকআপ পুনরুদ্ধার ব্যর্থ হয়েছে বর্তমানে পুনরুদ্ধার চলছে ব্যাকআপ ব্যর্থ হয়েছে ব্যাকআপ ইতিমধ্যেই চলছে %1$02d মিনিট, %2$02d সেকেন্ড উৎস অনুপলব্ধ: ব্যাকআপে কোনো মাংগা নেই। ব্যাকআপ ফাইল গ্রহণযোগ্য নয়: বুকমার্ক করা অধ্যায়গুলি মুছে ফেলার অনুমতি দিন অধ্যায় মুছুন পার্শ্ব প্যাডিং পড়া হচ্ছে পঠন ধরন সবসময় অধ্যায় পরিবর্তন দেখান ফাঁকসহ লং স্ট্রিপ পঠন ধরন দেখান ধূসর ফিলটারড অধ্যায় গুলো এড়িয়ে যান বিষয়বস্তু কাটআউটে দেখুন প্রাপ্তবয়স্কদের (18+) কন্টেন্ট থাকতে পারে ১৮+ অনিষ্পন্ন হালনাগাদ সংগ্রহশালা হালনাগেদের সময় নতুন মোড়ক এবং বর্ণনা খুঁজুন পিন করা ট্র্যাকারগুলিতে প্রবেশ হয়নি: রিডার খোলা থাকলে বর্তমান মোড সংক্ষেপে দেখান উভয় উল্লম্ব অনুভূমিক কিছুই না উল্টানো ট্যাপিং এক্সটেনশনের হালনাগাদগুলো অধ্যায়ের হালনাগাদগুলো ত্রুটিসমূহ সম্পূর্ণ অগ্রগতি অনুগ্রহ করে উন্নততর সামঞ্জস্যতার জন্য ওয়েবভিউ অ্যাপটি হালনাগাদ করুন টাচিয়ামির জন্য ওয়েবভিউ প্রয়োজন ক্লাউডফ্লেয়ার বাইপাস করতে ব্যর্থ অধ্যায়গুলি %1$s অধ্যায় %1$s এবং %2$d আরও অধ্যায় %1$s কম সঞ্চয়স্থানের কারণে অধ্যায়গুলি ডাউনলোড করা যায়নি অঃ %1$s - %2$s সংগ্রহশালার হালনাগাদ হচ্ছে উৎস খুঁজে পাওয়া যায়নি কোনও পৃষ্ঠা পাওয়া যায় নি পঠন ধরন এই সিরিজের জন্য %1$s: %2$s, পৃষ্ঠা %3$d বিরতি ট্র্যাকিং যোগ করুন কোনও অধ্যায় পাওয়া যায় নি এছাড়াও আমার সংগ্রহশালার মাঙ্গাতে প্রয়োগ করুন অধ্যায় সেটিংস আপলোডের তারিখ অনুযায়ী লাইব্রেরির কভারগুলো রিফ্রেশ অজানা অবস্থা অজানা লেখক আপনার কোন পিন করা উৎস নেই লোকাল সোর্স গাইড \"%1$s\" সার্বজনীনভাবে খুঁজুন সর্বশেষ ব্যবহৃত ট্যাব গুলি ডাউনলোড করা অধ্যায় লাইব্রেরীর মাঙ্গা আপনি এখন প্রস্থান করেছেন প্রস্থান প্রস্থান করবেন %1$s থেকে? লাইব্রেরির সব এন্ট্রি ফিল্টার হবে পড়ার ইতিহাসে বিরতি দেয় ছদ্মবেশী মোড শুধু ডাউনলোড v%1$s এ আপডেট হয়েছে সংস্করণ যাচাই ওপেন সোর্স লাইসেন্স নতুন কি ওয়েবসাইট ইতিহাস সাফ করুন আপনি নিশ্চিত? সব ইতিহাস মুছে যাবে। ইতিহাস মুছে ফেলা হয়েছে যন্ত্রের সেটিংস খোলা সম্ভব হয়নি ব্যাটারি অপ্টিমাইজেশন ইতিমধ্যে অক্ষম করা আছে পিছেনে লাইব্রেরী হালনাগাদ ও ব্যাকআপে সাহায্য করে ব্যাটারি অপ্টিমাইজেশন অক্ষম করুন ট্র্যাকিং সার্ভিসে অধ্যায়ের অগ্রগতি হালনাগাদের একমুখী পথ। স্বতন্ত্র মাঙ্গার ট্র্যকিং সেটাপের জন্য তাদের নিজস্ব ট্র্যাকিং বাটন ব্যবহার করুন। উৎস এবং এক্সটেনশন তালিকায় প্রদর্শন করুন প্রাপ্তবয়স্কদের জন্য (18+) উৎস ট্র্যাক করা হয়েছে ন্যাভিগেশন নকশা আইটেমের সংখ্যা প্রদর্শন করুন পরের পৃষ্ঠা আগের পৃষ্ঠা কোনো ফাইল বাছাইকারী অ্যাপ পাওয়া যায় নি উৎস স্থানান্তর গাইড দয়া করে MAL এ আবার লগইন করুন শেষ করার তারিখ শুরু করার তারিখ বিকাশকারীদের সাথে সেয়ার করার জন্য এরর লগগুলো একটি ফাইলে সংরক্ষণ করে ডান ও বাম কিনার কিন্ডেলের মতো L আকারের অধোগামী ঊর্ধ্বগামী অধ্যায়ের নম্বর অনুসারে আপলোডের তারিখ অনুসারে পাওয়া যায়নি উৎস সমর্থিত নয় অপঠিত কভার শেয়ার করার সময় ত্রুটি কভার সংরক্ষণে ত্রুটি কভার সংরক্ষিত আবরণ ক্লিপবোর্ডে কপি করা যায়নি তারিখ ক্রমানুসার দুর্বল অধ্যায় বিন্যাস অধ্যায় পাওয়া যায় নি ছদ্মবেশী মোড নিষ্ক্রিয় করুন কিছু নির্মাতাদের অতিরিক্ত অ্যাপ সীমাবদ্ধতা রয়েছে যা ব্যাকগ্রাউন্ড পরিষেবাগুলিকে হত্যা করে। এই ওয়েবসাইটে কিভাবে এটি ঠিক করা যায় সে সম্পর্কে আরও তথ্য রয়েছে। পটভূমি কার্যকলাপ ক্র্যাশ লগ শেয়ার এইচটিটিপিএস এর উপর ডিএনএস এমআইইউআই অপ্টিমাইজেশন নিষ্ক্রিয় থাকলে ব্যাকআপ/রিস্টোর সঠিকভাবে কাজ নাও করতে পারে। সম্ভবত অনুপস্থিত এক্সটেনশন ইনস্টল করতে হবে এবং ট্র্যাকিং সার্ভিসগুলোতে পরে লগইন করতে হবে এগুলো ব্যবহার করতে। ট্র্যাক নির্দিষ্ট উৎসের জন্য উন্নত বৈশিষ্ট্য প্রদান করে এমন পরিষেবা। আপনার লাইব্রেরিতে যোগ করা হলে মাঙ্গা স্বয়ংক্রিয়ভাবে ট্র্যাক করা হয়। উন্নত সেবা ট্র্যাকিং গাইড বাদ দেওয়া ক্যাটাগরিতে থাকা মঙ্গা ডাউনলোড করা হবে না, যদিও সেগুলি অন্তর্ভুক্ত ক্যাটাগরিতেও আছে। স্বয়ংক্রিয়ভাবে ডাউনলোড সর্বনিম্ন নিম্ম উচ্চ সর্বোচ্চ স্ক্রলে মেনু লুকানোর জন্য সংবেদনশীলতা ভূদৃশ্য প্রতিকৃতি ঘূর্ণন ডান বাম পরবর্তী পূর্ববর্তী স্বয়ংক্রিয় মাঙ্গা শিরোনাম অনুযায়ী ফোল্ডার তৈরি করে পৃষ্ঠাগুলি পৃথক ফোল্ডারে সংরক্ষণ করুন ক্রিয়া উল্টানো ধূসর স্কেল বন্ধ চালু যদি দ্বৈত পৃষ্ঠার বিভক্তির স্থান পাঠের দিকের সাথে মেলে না ডুয়াল পেজ স্প্লিট প্লেসমেন্ট ইনভার্ট করুন দ্বৈত পৃষ্ঠা বিভক্ত পাঠক খোলা হলে ট্যাপ জোন দেখান নেভিগেশন বিন্যাস ওভারলে দেখান বাদ দিন: %s অন্তর্ভুক্ত করুন: %s শূন্য বাদ দেওয়া ক্যাটাগরিতে মঙ্গা আপডেট করা হবে না যদিও সেগুলি অন্তর্ভুক্ত ক্যাটাগরিতেও থাকে। সাজানোর এবং প্রদর্শনের জন্য প্রতি শ্রেণীর সেটিংস বিধিনিষেধ: %s সম্প্রতি খাঁটি কালো ডার্ক মোড ইয়োৎসুবা ইয়িন এবং ইয়াং টিল এবং ফিরোজা টাকো স্ট্রবেরি ডাইকুইরি মধ্যরাতের সন্ধ্যা সবুজ আপেল প্রগতিশীল অ্যাপ থিম দৃশ্য এখনই ডাউনলোড শুরু করুন সকল ত্রুটি দেখুন এই সিরিজের সব বাতিল করুন লোকাল সোর্স আপনার এখনও কোন বিভাগ নেই | এই অ্যান্ড্রয়েড সংস্করণটি আর সমর্থিত নয় পরিবর্তন নিশ্চিত করতে প্রমাণীকরণ করুন প্রাপ্তির তারিখ সাধারণ বর্জিত বিভাগ গুলি অ্যাপের তথ্য শব উপদাতে কর স্বয়ংক্রিয় ব্যাকআপ অত্যন্ত সুপারিশময়. আপনি অন্যান্য জায়গায়ও কপি রাখা উচিত। শুরু হওয়ার গাইড অ্যাপ আপডেট ইন্সটলআর লেগাছি শিজুকু চলছে না এক্সটেনশন ইন্সটল করা হচ্ছে… ভার্বোস লগিং সিস্টেম লগে ভার্বোস লগ প্রিন্ট করুন (অ্যাপের কার্যক্ষমতা হ্রাস করে) অনুবাদে সাহায্য করুন এক্সটেনশন ইনস্টলার হিসাবে Shizuku ব্যবহার করতে Shizuku ইনস্টল করুন এবং শুরু করুন। তাব্লেত উই মোট লেখা সতর্কতা ভাষা প্রতি ৩ দিন সুধু মাত্র ওয়িফি তে বেশি আপডেট সোর্সের ক্ষতি করতে পারে এবং আপডেট ধীর করে দিতে পারে, পাশাপাশি ব্যাটারি ব্যবহারের পরিমাণও বাড়াতে পারে। আরও জানতে ট্যাপ করুন। সতর্কতা: বড় আকারের ডাউনলোডের ফলে উৎসগুলি মন্থর হয়ে যেতে পারে এবং/অথবা %s ব্লক হয়ে যেতে পারে। আরও জানতে এখানে ট্যাপ করুন। অ্যাপ বন্দ্ধ করার সময় অধ্যায়ের ক্যাশে পরিষ্কার করুন তথ্যশালা পরিষ্কার তথ্যশালায় %1$d টি মাঙ্গা যেগুলি লাইব্রেরীতে নেই গোপনীয়তা নীতি এক্সটেনশন তালিকা পেতে ব্যার্থ হলো এড়িয়ে যাওয়া হয়েছে কারণ সিরিজটি সম্পূর্ণ বাতিল করা হয়েছে বিরতিতে রয়েছে %1$d আপডেট(গুলি) ব্যর্থ হয়েছে সম্পূর্ণ প্রকাশিত সর্বশেষ হালনাগাদ চেক আপনি কি “%s” ক্যাটাগরিটি মুছে ফেলতে চান? সম্প্রতি আপনার হালনাগাদকৃত মাঙ্গা দেখুন আপনি কি নিশ্চিত? অপঠিত সংখ্যা সবকিছু মুছে ফেলুন লেখা দেখান ক্যাটাগরি ডিলিট ল্যাভেণ্ডার খুঁজুন… শুধু প্রচ্ছদসহ গ্রিড সিরিজ কে উপরে তুলুন বন্ধ লিস্ট সম্পূর্ন করুন অসম্পূর্ণ তালিকা স্থগিত তালিকা পড়ার সময় সয়ংক্রিয়ভাবে ডাউনলোড অপঠিত অধ্যায়সহ যেগুলো শুরু করা হয়নি ওয়েবভিউ ডাটা মুছা হয়েছে পঠন কর্মক্ষমতা উন্নত করে ওয়েবভিইউ ডাটা মুছুন বহু বিভাগসমূহ, সার্বজনীন হালনাগাদ অ্যাপ ভাষা থিম,সময় ও তারিখের ধরন পঠনের ধরন, ডিসপ্লে,নেভিগেশন ম্যানুয়াল ও সয়ংক্রিয় ব্যাকআপ অ্যাপ লক,নিরাপদ পর্দা অপঠিত অধ্যায় থাকায় এড়িয়ে যাওয়া হয়েছে লোকাল ক্লিপবোর্ডে কপি করুন সমস্ত পাঠক সেটিংস আবার পরিসংখ্যান ডাউনলোড হয়েছে শুরু হয়েছে অ্যাপ লক চালু থাকলে Widget পাওয়া যায় না ক্যাটাগরি আপডেট যেকোনো র্যান্ডম এন্ট্রি পড়া চালিয়ে যান বোতাম ডাউনলোড চেক করা হচ্ছে পৃষ্ঠার ফাইল পাথ খুঁজে পাওয়া যায়নি %d ডাউনলোড পুনঃসূচিপত্র এখন না ডিবাগ তথ্য বাদ দেওয়া হয়েছে কারণ সিরিজের আপডেটের প্রয়োজন নেই আনলক %s সেট ইন্টারভেল ডাউনলোড করা ফাইল ডিলেট করুন আর অপশন সিলেক্টেড নট সিলেক্টেড স্ক্যানলেটর নেভিগেট আপ ডাটা অ্যান্ড স্টোরেজ কাস্টমাইজড আনার ব্যবধান ফোল্ডার নির্বাচন করুন অনবর্ডিং গাইড শুরু করুন এপ্লাই একটি ফোল্ডার অবশ্যই ঠিক করতে হবে নোটিফিকেশনের পারমিশন সকল সেটিং ডিফল্ট করুন অ্যাপের ইন্সটল করার পারমিশন স্বাগতম! নিচের দিকে সরান বাদ দিন পরবর্তী সোর্স এক্সটেনশন ইনস্টল করার জন্য। প্রথমে কিছু ঠিক করে নিন , পরবর্তীতে আপনি চাইলে সেটিং থেকে সবকিছু পরিবর্তন করতে পারবেন। ইন্টারনাল ইরর: বাকি ইনফরমেশন পেতে ক্যাশ লগ দেখুন স্কিপ করা হয়েছে কারণ আগে কোন চ্যাপ্টার পড়া হয়নি ট্রেকার স্কোর ওকে পরবর্তী আপডেটের সম্ভাব্য সময় লিংক কপি করুন স্বয়ংক্রিয় পটভূমিতে ব্যাটারি ব্যবহার এলোমেলো লাইব্রেরি আপডেট এবং আরও বিষয়ে নোটিফিকেশন পান। যাই হোক যোগ করুন স্টোরেজ গাইড পুরোনো ভার্সন থেকে আপডেট করছেন এবং কী নির্বাচন করবেন তা নিশ্চিত নন? আরও তথ্যের জন্য স্টোরেজ গাইডটি দেখুন। আসন্ন অপঠিত অধ্যায় নোটস নোট পরিবর্তন ট্যাব বন্ধ একটি ফোল্ডার নির্বাচন করুন যেখানে %1$s অধ্যায় ডাউনলোড, ব্যাকআপ এবং আরও কিছু সংরক্ষণ করবে।\n\nএকটি নির্দিষ্ট ফোল্ডার ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।\n\nনির্বাচিত ফোল্ডার: %2$s দীর্ঘস্থায়ী লাইব্রেরি আপডেট, ডাউনলোড এবং ব্যাকআপ পুনরুদ্ধারে বিঘ্ন এড়িয়ে চলুন। ক্র্যাশ লগ পাঠান ডেভেলপারদের কাছে অজ্ঞাতনামা ক্র্যাশ লগ পাঠান। অ্যানালিটিক্স অনুমতি দিন অ্যাপের ফিচার উন্নত করতে অজ্ঞাতনামা ব্যবহার ডেটা পাঠান। অনুমতি দিন %s‑এ নতুন? আমাদের শুরু হওয়ারগাইড পড়ে দেখুন। %s পুনরায় ইনস্টল করছেন? টাইডাল ওয়েভ আপেক্ষিক সময়চিহ্ন \"%1$s\" এর পরিবর্তে \"%2$s\" মাঙ্গা বিবরণে ছবি প্রদর্শন নিরাপত্তা অ্যানালিটিক্স ও ক্র্যাশ লগস ক্র্যাশ লগ ও অ্যানালিটিক্স পাঠালে আমরা সমস্যা খুঁজে বের করে ঠিক করতে পারব, কর্মক্ষমতা ভালো হবে, এবং ভবিষ্যৎ আপডেটগুলো আপনার কাজে লাগবে শুধু আনলিমিটেড নেটওয়ার্কে স্মার্ট আপডেট পরবর্তী রিলিজের সময় অনুমান করুন আপডেট আইকনে অপঠিত সংখ্যা দেখান ব্যবহার অধ্যায় ডানে সোয়াইপ করলে অধ্যায় বামে সোয়াইপ করলে ডুপ্লিকেট পড়া অধ্যায়কে পড়া হিসেবে মার্ক করুন একটি অধ্যায় পড়ার পর নতুন অধ্যায় সংগ্রহের পর অনুপস্থিত অধ্যায়ের চিহ্ন বন্ধ করুন মিলহীন এন্ট্রি সরান আরও কীওয়ার্ড যোগ করলে অনুসন্ধান ফলাফল সংকুচিত সাহায্য করে অন্য কীওয়ার্ড (ঐচ্ছিক) মাইগ্রেশনের পর বর্তমান এন্ট্রির ডাউনলোড মুছে ফেলুন মাইগ্রেট করার জন্য ডেটা অগ্রসর পিন করা সোর্স নির্বাচন করুন সক্রিয় সোর্স নির্বাচন করুন কোনোটিই নির্বাচিত নয় সব নির্বাচন করুন উপলব্ধ সিলেক্টেড ভালো লেগেছে যেখানে… ফ্ল্যাশ প্রতি কালো সাদা সাদা আর কালো যদি রিডার একটি ফাঁকা ছবি লোড করে, ধাপে ধাপে থ্রেশহোল্ড কমিয়ে দিন।\nসিলেক্টেড %s পারফরম্যান্স অ্যাফেক্ট করবে। ফাঁকা ইমেজ সমস্যা থ্রেশহোল্ড কমিয়ে ঠিক না হলে কেবল এনেবল করবে ডোনেট অটোমেটিক ডাউনলোড, আগাম ডাউনলোড ওয়ান-ওয়ে প্রগ্রেস সিঙ্ক, এনহ্যান্সড সিঙ্ক সোর্স, এক্সটেনশন, গ্লোবাল সার্চ ক্র্যাশ লগ ডাম্প, ব্যাটারি অপ্টিমাইজেশন ক্যাটপুচিন মনোক্রোম নর্ড নন‑ASCII ফাইলনেম নিষিদ্ধ কিছু স্টোরেজ মিডিয়া ইউনিকোড সমর্থন করে না। এই অপশন চালু করলে সোর্স এবং মাঙ্গা ফোল্ডারগুলো আপনাকে ম্যানুয়ালি নতুন নাম দিতে হবে। নন‑ASCII অক্ষরগুলোর পরিবর্তে ছোট হাতের UTF‑8 হেক্সাডেসিমাল কোড ব্যবহার করতে হবে। অধ্যায় ফাইলগুলো আলাদা করে নাম বদলানোর দরকার নেই। সরান এক্সটেনশন সরাতে চান? আপনি কি নিশ্চিত \"%s\" এক্সটেনশন সরাতে চান? সংস্করণ ভাষা বয়স সীমা এক্সটেনশন ইনস্টল করতে অনুমতি লাগবে। অনুমতি দিতে এখানে ট্যাপ করুন। অজানা এক্সটেনশনের ট্রাস্ট বাতিল এক্সটেনশন রিপো আপনার কোনো রিপো সেট করা নেই। রিপো অ্যাড করুন রিপো URL %s‑এ আরও রিপো যোগ করুন। এটি এমন একটি URL হতে হবে যা \"index.min.json\" দিয়ে শেষ হয়। এই রিপো ইতিমধ্যে আছে! রিপো ডিলিট ভুল রিপো URL আপনি কি “%s” রিপোটি ডিলিট করতে চান? আপনি কি “%s” রিপোটি যোগ করতে চান? রিপোর সোর্সে যান রিপ্লেস সাইনিং কী ফিঙ্গারপ্রিন্ট ইতিমধ্যেই আছে রিপোজিটরি %1$s এর সাইনিং কী ফিঙ্গারপ্রিন্ট %2$s এর সাথে একই।\nযদি এটি প্রত্যাশিত হয়, তবে %2$s রিপ্লেস হবে, অন্যথায় আপনার রিপো মেইনটেইনারের সাথে যোগাযোগ করুন। চওড়া পেজ রোটেট করে ফিট হবে রোটেট করা চওড়া পেজের অরিয়েন্টেশন উল্টানো হবে জুম করতে ডাবল ট্যাপ পেজ পরিবর্তনে ফ্ল্যাশ ই‑ইঙ্ক ডিসপ্লেতে ঘোস্টিং কমায় ফ্ল্যাশ সময়কাল %1$s মি.সেকেন্ড ফ্ল্যাশ সহ %d সেকেন্ড %d মি. %d ঘণ্টা %d দিন N/A ব্যবহৃত গড় স্কোর ট্র্যাক করা এন্ট্রি ট্র্যাকারসমূহ পড়া মোট গ্লোবাল আপডেটে এন্ট্রি সমূহ পড়ার সময়কাল সম্পন্ন এন্ট্রি সারসংক্ষেপ অ্যাপ রিস্টার্ট করুন %s অপ্রত্যাশিত ত্রুটিতে পড়েছে। ক্র্যাশ লগগুলো আমাদের Discordএর support চ্যানেলে শেয়ার করুন। উফ! ইনস্টল করা হয়নি আরে, এখানে তো কিছুই নেই কাস্টম হার্ডওয়্যার বিটম্যাপ থ্রাশহোল্ড ডিফল্ট (%d) লিগ্যাসি ডিকোডার ব্যবহার করুন লং স্ট্রিপ রিডারের জন্য কাস্টম ডিসপ্লে প্রোফাইল ডুপ্লিকেট চ্যাপ্টার বাদ নিষ্ক্রিয় চওড়া ছবি প্যান হবে অটোমেটিক জুম হবে চওড়া ছবিতে উল্টো প্রতিকৃতি জুম আউট বন্ধ স্টোরেজ লোকেশন সেট নেই ভুল লোকেশন: %s ডাউনলোড ফোল্ডার তৈরি ব্যর্থ হয়েছে ফোল্ডার তৈরি ব্যর্থ হয়েছে: %s ডুপ্লিকেট পড়া অধ্যায় ডাউনলোড বাদ হবে অধ্যায় আগাম ডাউনলোড শুধু তখনই কাজ করবে যদি বর্তমান আর পরের অধ্যায় আগে থেকেই ডাউনলোড করা থাকে। CBZ আর্কাইভ হিসেবে সেভ হবে লম্বা ছবি ভাগ হবে একসাথে কত সোর্স থেকে ডাউনলোড একসাথে পাতা ডাউনলোড প্রতি সোর্স থেকে একসাথে ক’টি পাতা ডাউনলোড হবে পড়া হিসেবে চিহ্নিত হলে অগ্রগতি আপডেট হবে উপলব্ধ কিন্তু সোর্স ইনস্টল করা নেই: %s ট্র্যাকার লগইন লাইব্রেরিতে থাকা আইটেম লুকানো হবে স্টোরেজের ঠিকানা অটোমেটিক ব্যাকআপ এর জন্য, চ্যাপ্টার ডাউনলোড ও লোকাল সোর্স এর জন্য ব্যবহার হয়। তৈরি ফুল ইরর: JSON ব্যাকআপ সমর্থিত নয় ব্যাকআপ ফাইলটি নষ্ট হয়েছে অ্যাপ সেটিংস সোর্স সেটিংস এক্সটেনশন রিপো সংবেদনশীল সেটিংস অন্তর্ভুক্ত করুন (যেমন, ট্র্যাকার লগইন টোকেন) সব পড়া এন্ট্রি স্টোরেজ অনুমতি দেওয়া হয়নি ব্যাকআপ করার মতো কোন এন্ট্রি নেই ব্যাকআপ ফাইল তৈরি করা যায়নি শেষবার স্বয়ংক্রিয়ভাবে ব্যাকআপ নেওয়া হয়েছে: %s স্টোরেজ ব্যবহার খালি: %1$s/ মোট: %2$s এক্সপোর্ট লাইব্রেরী লিস্ট লাইব্রেরী এক্সপোর্ট করা হয়েছে লাইব্রেরী সিন্ক করা হচ্ছে লাইব্রেরি সিঙ্ক সম্পন্ন হয়েছে ডিফল্ট ইউজার এজেন্ট স্ট্রিং ইউজার এজেন্ট স্ট্রিং খালি রাখা যাবে না অবৈধ ইউজার এজেন্ট স্ট্রিং অধ্যায় পড়ার তথ্য ও লাইব্রেরির বাইরে থাকা এন্ট্রিগুলোর অগ্রগতি মুছে যাবে পড়া অধ্যায়গুলোর এন্ট্রিগুলি রাখুন প্রতি সিরিজের রিডার সেটিংস রিসেট সব সিরিজের রিডিং মোড এবং অভিমুখ রিসেট রিডার সেটিংস রিসেট করা যায়নি লাইব্রেরির মাঙ্গার শিরোনাম সোর্সের সাথে মিলিয়ে আপডেট সতর্কতা: নাম পরিবর্তিত মাঙ্গা ডাউনলোড কিউ থেকে সরানো হবে (যদি থাকে)। F‑Droid বিল্ডগুলো আনুষ্ঠানিকভাবে সমর্থিত নয়।\n বিস্তারিত জানতে ট্যাপ করুন। এক্সটেনশনের জন্য রিডিং হিস্ট্রি বিরতি লগইন হচ্ছে… কোনও বর্ণনা নেই লেখক শিল্পী জনপ্রিয় ফলাফল আছে অনুমান প্রতি শীঘ্রই নিজস্ব আপডেট ঘনত্ব: নিজস্ব কভার স্ক্যানলেটর বাদ কোনো স্ক্যানলেটর পাওয়া যায়নি ব্যক্তিগত ট্র্যাকিং %1$s ত্রুটি: %2$s তারিখ মুছবেন? এটি %s থেকে পূর্বে নির্বাচিত শুরুর তারিখ মুছে ফেলবে এটি %s থেকে পূর্বে নির্বাচিত শেষ তারিখ মুছে ফেলবে %s ট্র্যাকিং মুছে ফেলা হবে? লাইব্রেরি সর্বশেষ আপডেট: %s আসন্ন আপডেটগুলো দেখুন আসন্ন গাইড আগামী মাস গত মাস এটি লোকাল ট্র্যাকিং থেকে মুছে যাবে। সর্বশেষ: %1$s অজানা লাইব্রেরিতে মিল থাকা নামে এন্ট্রি রয়েছে।\n\nমাইগ্রেট করার জন্য একটি এন্ট্রি সিলেক্ট করুন অথবা তবুও অ্যাড করুন। মাইগ্রেট মাইগ্রেট করবেন না এখনই মাইগ্রেট কপি মাইগ্রেট ক্যানসেল এই মাঙ্গাটি সম্পূর্ণ হয়েছে, অথবা পরবর্তী প্রকাশের কোনো সম্ভাব্য তারিখ নেই। ডিফল্ট ইউজার এজেন্ট স্ট্রিং রিসেট ডাউনলোড করা অধ্যায়গুলো জোরপূর্বক পুনরায় যাচাই হবে ডাউনলোড ইনডেক্স অকার্যকর হয়েছে ================================================ FILE: i18n/src/commonMain/moko-resources/ca/plurals.xml ================================================ Després d’%1$s minut Després de %1$s minuts Després de %1$s minuts %1$d capítol nou %1$d capítols nous %1$d capítols nous Capítols %1$s i 1 més Capítols %1$s i %2$d més Capítols %1$s i %2$d més Per a %d element Per a %d elements Per a %d elements Hi ha una actualització d’una extensió Hi ha actualitzacions de %d extensions Hi ha actualitzacions de %d extensions En resta %1$s En resten %1$s En resten %1$s Fet en %1$s amb %2$s error Fet en %1$s amb %2$s errors Fet en %1$s amb %2$s errors %d categoria %d categories %d categories %1$s capítol %1$s capítols %1$s capítols %d servei de seguiment %d serveis de seguiment %d serveis de seguiment S’ha omès %d capítol. És possible que manqui a la font o que hagi estat filtrat S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats Ahir Fa %1$d dies Fa %1$d dies El següent capítol no llegit Els següents %d capítols no llegits Els següents %d capítols no llegits El següent capítol Els següents %d capítols Els següents %d capítols Manca %1$s capítol Manquen %1$s capítols Manquen %1$s capítols 1 dia %d dies %d dies %d repositori %d repositoris %d repositoris Demà D’aquí a %1$d dies D’aquí a %1$d dies 1 pàgina %1$s pàgines %1$s pàgines Voleu migrar %1$d element? Voleu migrar %1$d elements? Voleu migrar %1$d elements? Voleu copiar %1$d element? Voleu copiar %1$d elements? Voleu copiar %1$d elements? S’ha omès un element S’han omès %1$d elements S’han omès %1$d elements ================================================ FILE: i18n/src/commonMain/moko-resources/ca/strings.xml ================================================ Nom Categories Elements de la biblioteca Capítols En seguiment Historial Configuració Cua de baixades Biblioteca Historial Novetats Còpia de seguretat i restauració Migració Extensions Informació de l’extensió Configuració Filtra Marcats No llegits Elimina el filtre Alfabèticament Nombre total de capítols Darrera lectura Cerca Cerca global Selecciona-ho tot Marca com a llegit Marca com a no llegit Marca els anteriors com a llegits Baixa Marca el capítol Desmarca el capítol Suprimeix Actualitza la biblioteca Edita Afegeix Afegeix una categoria Edita les categories Canvia el nom de la categoria Defineix les categories Edita la portada Pausa Capítol anterior Capítol següent Torna-ho a provar Elimina Reprèn Obre al navegador Mode de visualització Mostra Graella compacta Llista Capítols baixats Cancel·la Ordena Instal·la Comparteix Desa Reinicia Desfés Obre el registre Restaura S’està carregant… Aplicació no disponible General Lector Baixades Seguiment Avançat Quant a Elements per fila Vertical Horitzontal Actualitzacions automàtiques Desactivades Cada 6 hores Cada 12 hores Cada dia Cada 2 dies Cada setmana Tot Restriccions del dispositiu per a les actualitzacions automàtiques Quan s’estigui carregant Omet els elements amb l’estat «Completat» Actualitza el progrés després de llegir Categoria per defecte Demana-ho sempre Actualitza Instal·la Pendent S’està baixant S’està instal·lant Instal·lades Confia-hi No és de confiança Desinstal·la Extensió que no és de confiança Les extensions malicioses poden llegir qualsevol credencial d’inici de sessió desada o executar codi arbitrari.\n\nSi confieu en aquesta extensió, accepteu aquests riscos. Pantalla completa Anima les transicions de pàgina Mostra el número de pàgina Retalla les vores Brillantor personalitzada Filtre de color personalitzat Mantingues la pantalla encesa Navegació Tecles de volum Inverteix les tecles de volum Color de fons Blanc Negre Mode de lectura per defecte Paginat (d’esquerra a dreta) Paginat (de dreta a esquerra) Paginat (vertical) Tira vertical Paginat Tipus d’escalat Ajusta a la pantalla Estira Ajusta a l’amplada Ajusta a l’alçada Mida original Ajust intel·ligent Posició d’inici de l’ampliació Automàtica Esquerra Dreta Centre Sense animació Normal Ràpida Rotació per defecte Lliure Vertical forçada Horitzontal forçada Vermell Verd Blau Alfa Després de marcar com a llegit de manera manual Suprimeix automàticament després de llegir Velocitat de l’animació del doble toc Desactivat Darrer capítol llegit Penúltim capítol llegit Antepenúltim capítol llegit Anteantepenúltim capítol llegit Anteanteantepenúltim capítol llegit Baixa capítols nous Serveis de seguiment Crea una còpia de seguretat Es pot utilitzar per a restaurar la biblioteca actual Restaura una còpia de seguretat Restaura la biblioteca del fitxer de còpia de seguretat Freqüència de la còpia de seguretat automàtica S’ha creat la còpia de seguretat S’ha completat la restauració De què voleu fer una còpia de seguretat? S’està restaurant la còpia de seguretat S’està creant la còpia de seguretat Buida la memòria cau de capítols Ús: %1$s S’ha buidat la memòria cau i s’han suprimit %1$d fitxers S’ha produït un error en netejar Esborra les galetes S’han esborrat les galetes Buida la base de dades Suprimeix l’historial dels elements que no siguin a la biblioteca S’han suprimit les entrades Versió Envia informes d’errors Ajuda a solucionar errades. No s’enviaran dades sensibles Inicia la sessió a %1$s Nom d’usuari Contrasenya Inicia la sessió S’ha iniciat la sessió S’ha produït un error desconegut S’està actualitzant la categoria No hi ha més resultats Font local Altres Cerca global… Recents Explora En curs Desconegut Llicenciat Elimina de la biblioteca S’ha afegit a la biblioteca S’ha eliminat de la biblioteca Voleu suprimir els capítols baixats? S’ha copiat al porta-retalls:\n%1$s Font no instal·lada: %1$s Capítol %1$s S’està baixant (%1$d/%2$d) Error Pausat Títol de la font Número de capítol Per font Per número de capítol Baixa Els no llegits Esteu segur que voleu suprimir els capítols seleccionats? En seguiment Llegint Completats Abandonat En espera Pendent de llegir Rellegint Puntuació Títol Estat Estat Tipus Ja hi ha una categoria amb aquest nom! S’han suprimit les categories S’eliminarà la data de lectura d’aquest capítol. N’esteu segur? Reinicia tots els capítols d’aquest element Voleu afegir-lo a la biblioteca? S’ha desat la imatge Filtre personalitzat Defineix com a portada S’ha actualitzat la portada Pàgina: %1$d No s’ha trobat el capítol següent No s’ha pogut carregar la imatge Voleu fer servir aquesta imatge com a portada? Finalitzat: Actual: Següent: Anterior: No hi ha capítol següent No hi ha capítol anterior S’estan carregant les pàgines… No s’han pogut carregar les pàgines: %1$s Seleccioneu les dades a incloure Migra Copia No s’han pogut baixar els capítols. Podeu tornar-ho a provar a la secció de baixades S’han trobat nous capítols No s’ha pogut actualitzar la portada Afegiu l’element a la vostra biblioteca abans de fer això Seleccioneu la imatge de portada Seleccioneu el fitxer de còpia de seguretat Baixa No hi ha cap nova actualització disponible S’està baixant… Premeu per a instal·lar l’actualització Error de baixada Nova versió disponible! No hi ha baixades No hi ha actualitzacions recents No heu llegit res recentment La vostra biblioteca és buida No teniu categories. Premeu el botó més per a crear-ne una i organitzar la vostra biblioteca. Baixades Error No s’ha pogut baixar el capítol a causa d’un error inesperat No hi ha cap connexió Wi-Fi disponible No hi ha cap connexió de xarxa disponible Baixades pausades General Mostra les accions amb un toc llarg Obre en una WebView Omet capítols marcats com a llegits Mode de mescla del filtre de color Sobreposa Multiplica Protegeix Esquiva / Il·lumina Crema / Enfosqueix Ajuda No s’ha trobat cap resultat Seleccioneu una font a migrar Endarrere Endavant Actualitza Biblioteca Obsoleta Aquesta extensió ja no està disponible. És possible que no funcioni correctament i pot causar problemes a l’aplicació. És recomanable que la desinstal·leu. Format de data Actualització global Voleu tancar la sessió a %1$s? Tanca la sessió S’ha tancat la sessió Pausat Més Darrer capítol Mostra els capítols Cancel·la-ho tot Clar Fosc Sistema Gestiona les notificacions Seguretat i privadesa Requereix desblocatge Bloca per inactivitat Sempre Mai Mode discret Actualitzacions pendents Mostra el contingut a l’àrea de retall No s’ha pogut evitar el Cloudflare Actualitzeu l’aplicació WebView per a tenir més bona compatibilitat Novetats de capítols El mode discret amaga el contingut de l’aplicació en canviar entre aplicacions i bloca les captures de pantalla Visualització Capítol %1$s Capítol %1$s i %2$d més Capítols %1$s Amaga el contingut de les notificacions Desactiva l’optimització de la bateria Fa que funcionin millor les actualitzacions de la biblioteca en segon pla i les còpies de seguretat L’optimització de la bateria ja està desactivada Adreça electrònica Mostra sempre la transició de capítol Menú Els més nous Els més antics Mou a dalt de tot Mou a sota de tot Actualitzacions d’extensions S’està actualitzant la biblioteca Lectura Omet els capítols filtrats Fonts Inverteix la selecció Fixades Fixa Afegeix un seguiment Espaiat lateral Tira vertical amb separació Desfixa A la biblioteca Afegeix a la biblioteca La WebView és necessària per al funcionament de l’aplicació Menys Més Llicències de codi obert Lloc web Només els baixats Cap. %1$s - %2$s Ha fallat la restauració de la còpia de seguretat Ha fallat la còpia de seguretat S’ha cancel·lat la restauració Ja s’està fent una restauració Ja s’està fent una còpia de seguretat Guia de fonts locals Utilitzada per darrera vegada Comprova si hi ha actualitzacions %1$02d min i %2$02d s Filtra tots els elements de la vostra biblioteca Gris Mode de lectura Per a aquesta sèrie No s’ha pogut obrir la configuració del dispositiu La sincronització és unidireccional per a actualitzar el progrés dels capítols als serveis de seguiment externs. Configureu el seguiment d’elements individuals al seu botó de seguiment. Refresca les portades de la biblioteca Per data de pujada Dades Manquen fonts: La còpia de seguretat no conté cap element de la biblioteca. Fitxer de còpia de seguretat invàlid: Comprova si hi ha noves portades o detalls en actualitzar la biblioteca Refresca les metadades automàticament Graella confortable Migra Pestanyes Mostra les pestanyes de les categories No s’ha trobat cap pàgina Desactiva-ho tot Activa-ho tot En totes dues direccions En vertical En horitzontal Cap Inverteix les zones de toc No s’han pogut baixar els capítols perquè hi ha poc espai d’emmagatzematge No s’ha trobat la font Estat desconegut Autor desconegut Cerca «%1$s» globalment S’ha actualitzat a la v%1$s Novetats Cal reiniciar l’aplicació perquè tingui efecte Xarxa Mode de lectura Mostra breument el mode actual en obrir el lector Mostra el mode de lectura Tema Desactiva Inicia Data d’incorporació No teniu cap origen fixat Completada Progrés Errors Serveis de seguiment sense sessió iniciada: Permet la supressió dels capítols marcats Suprimeix capítols Les fonts d’aquesta extensió poden contenir contingut NSFW (+18) +18 Això no evita que les extensions no oficials o possiblement mal etiquetades puguin mostrar contingut NSFW (+18) a l’aplicació. No s’ha trobat cap capítol S’ha actualitzat la configuració per defecte dels capítols Estableix com a per defecte Aplica-ho també a tots els elements de la biblioteca Esteu segur que voleu desar aquesta configuració com a configuració per defecte? Configuració dels capítols %1$s: %2$s, pàgina %3$d Configuració de la cerca Capítols baixats De la biblioteca N’esteu segur? Es perdrà tot l’historial. Pausa l’historial de lectura Mode d’incògnit Suprimeix l’historial S’ha buidat l’historial Pàgina següent Pàgina anterior Guia de migració de fonts Fonts NSFW (+18) No s’ha trobat cap aplicació de selecció de fitxers Mostra a la llista de fonts i extensions Torneu a iniciar la sessió a MAL Data de finalització Data d’inici Desa els registres d’errors en un fitxer perquè el pugueu compartir amb els desenvolupadors Comparteix el registre d’errors Zones de toc Vora Semblant al Kindle En forma d’L Descendent Ascendent Per número de capítol Per data de pujada En seguiment Mostra el nombre d’elements A la dreta i a l’esquerra Divideix les pàgines amples Si la ubicació de les pàgines amples dividides no encaixa amb la direcció de lectura Inverteix la ubicació de la divisió de pàgines Caldrà que instal·leu les extensions que manquin i que després inicieu la sessió als serveis de seguiment per a utilitzar-los. Aquesta versió d’Android ja no està suportada No s’ha trobat cap coincidència La font no està suportada No llegit No s’ha pogut copiar al porta-retalls Desactiva el mode d’incògnit DNS sobre HTTPS (DoH) Els elements de les categories excloses no es baixaran encara que també siguin a les categories incloses. Els elements de les categories excloses no s’actualitzaran encara que també siguin a les categories incloses. Baixada automàtica Horitzontal Vertical Rotació Dreta Esquerra Següent Anterior Automàtic Crea carpetes segons el títol dels elements Desa les pàgines en carpetes separades Accions Escala de grisos Mostra breument les zones de toc en obrir el lector Mostra la superposició de les zones de toc Inclou: %s Exclou: %s Cap Premeu per a veure’n els detalls Cancel·la-ho tot per a aquesta sèrie Data d’obtenció dels capítols Data Ordena per El format del capítol no és vàlid No s’ha trobat el capítol S’ha produït un error en compartir la portada S’ha produït un error en desar la portada S’ha desat la portada Portada Guia de seguiment Desactivat Activat Opcions d’ordenació per categoria Restriccions: %s Font local La més baixa Baixa Alta La més alta Categories excloses Encara no teniu cap categoria. Serveis de seguiment millorats Avui Per defecte Advertència Autentiqueu-vos per a confirmar el canvi Verd poma Aparença Inicia la baixada ara Nombre total d’elements Tema de l’aplicació Dinàmic Llengua Capvespre Daiquiri de maduixa Tako Xarxet i turquesa Yin i yang Yotsuba Mode fosc negre pur Cada 3 dies Només amb Wi-Fi Instal·leu i inicieu el Shizuku per a utilitzar-lo com a instal·lador d’extensions. Sensibilitat a l’hora d’amagar el menú en desplaçar Registre detallat Actualitza-ho tot El Shizuku no s’està executant Invertits És possible que la còpia de seguretat i la restauració no funcionin correctament si l’Optimització del MIUI està desactivada. Activitat en segon pla Interfície de tauleta Ajudeu a traduir Guia d’introducció Política de privadesa S’està instal·lant l’extensió… Instal·lador Antic Buida la memòria cau de capítols en obrir l’aplicació Proporciona funcionalitats millorades per a fonts específiques. Els elements se segueixen automàticament en afegir-los a la vostra biblioteca. Alguns fabricants tenen restriccions addicionals per a les aplicacions que finalitzen els serveis en segon pla. Aquest lloc web té més informació de com solucionar-ho. Hi ha %1$d elements a la base de dades que no són a la biblioteca Cancel·lada Per a obtenir ajuda per a resoldre errors d’actualització de la biblioteca, vegeu %1$s No s’han pogut obtenir les extensions disponibles Omet els elements amb capítols no llegits Desa com a arxiu CBZ També hauríeu de desar còpies de les còpies de seguretat en altres llocs. Les còpies de seguretat poden contenir dades sensibles, incloent-hi les contrasenyes desades; aneu amb compte si les compartiu. No hi ha res que calgui buidar Imprimeix registres detallats al registre del sistema (redueix el rendiment de l’aplicació) Publicació finalitzada En pausa Actualitzacions de l’aplicació Segueix Informació de l’aplicació Advertència: Les baixades massa grosses poden fer que les fonts es tornin més lentes i/o bloquin el %s. Premeu per a obtenir-ne més informació. Les actualitzacions grosses perjudiquen les fonts i poden implicar actualitzacions més lentes i un augment en l’ús de bateria. Premeu per a obtenir-ne més informació. Amplia automàticament les imatges amples Mostra l’element Fes panoràmiques les imatges amples Graella només a la portada Omet els elements no començats S’ha omès perquè la sèrie està completada S’ha omès perquè no hi ha cap capítol llegit S’ha omès perquè hi ha capítols no llegits Premeu per a obtenir més informació Han fallat %1$d actualitzacions Vertical inversa Mou la sèrie a dalt de tot Desactivat Obre al GitHub S’ha produït un error en desar la imatge No hi ha cap element a la biblioteca del qual fer còpia de seguretat Neteja les dades de la WebView S’han netejat les dades de la WebView Tanca No s’ha trobat cap font instal·lada No s’ha trobat cap font Nombre de no llegits Darrera comprovació d’actualitzacions Millora el rendiment del lector No s’ha trobat la pàgina %d en dividir No s’ha trobat el camí del fitxer de la pàgina %d Restableix les opcions del lector per sèrie Restableix el mode de lectura i l’orientació de totes les sèries S’han restablert tota la configuració del lector No s’ha pogut restablir la configuració del lector Ostres, que estrany Llengua Versió Valoració d’edat Llista de lectura Llista de desitjos Llista de completats Llista de pausats Llista d’inacabats Només en xarxes sense límits de dades No s’ha pogut obrir el darrer capítol llegit Portada personalitzada No instal·lat Llengua de l’aplicació Voleu eliminar la categoria «%s»? Elimina la categoria Lavanda Sense descripció Error intern: Reviseu els registres de fallades per a més informació Cadena d’agent d’usuari per defecte Restableix la cadena d’agent d’usuari per defecte El widget no està disponible quan hi ha activat el blocatge de l’aplicació Vegeu els elements de la biblioteca actualitzats recentment Elimina-ho tot Ja s’està executant una actualització Tsunami La cadena de l’agent d’usuari no pot estar buida Tema, formats de data i hora Categories, actualitzacions globals i lliscament en capítols N’esteu segur? Ubicació invàlida: %s Baixa automàticament mentre es llegeix Només funciona si el capítol actual i el següent ja estan baixats. Ups! S’ha produït un error inesperat al %s. Us suggerim que compartiu el registre d’errors al nostre canal d’assistència al Discord. No s’han concedit permisos d’emmagatzematge Populars Còpies de seguretat automàtiques i manuals i espai d’emmagatzematge Mode de lectura, visualització i navegació Baixades automàtiques i per avançat Múltiples La cadena d’agent d’usuari no és vàlida Títol desconegut Ara mateix Baixa per avançat Sincronització en un sentit o millorada Fonts, extensions i cerca global Blocatge de l’aplicació i mode discret Bolcatge de registres d’errors i optimitzacions de la bateria Reinicia l’aplicació S’ha omès perquè no cal actualitzar la sèrie Suprimireu «%s» de la vostra biblioteca Cerca… Biblioteca actualitzada per darrera vegada: %s S’estan comprovant les baixades Obre un element aleatori Les compilacions de F-Droid no tenen assistència oficial.\nPremeu per a obtenir-ne més informació. No s’ha trobat cap element en aquesta categoria Botó per a continuar llegint Reindexa les baixades S’eliminarà la data de finalització seleccionada de %s Voleu eliminar-ne la data? S’eliminarà la data d’inici seleccionada de %s Força que l’aplicació torni a comprovar els capítols baixats Estadístiques Local Baixats Començats S’ha copiat al porta-retalls Llegits Totals Mostra el recompte de no llegits a la icona d’Actualitzacions Omet els capítols duplicats Disponible però la font no està instal·lada: %s Temps de lectura Elements Elements completats Error %1$s: %2$s Ara no A l’actualització global Resum Serveis de seguiment Elements seguits Puntuació mitjana *obligatori La categoria és buida En ús N/A %dd %dh %dm %ds Amaga els elements que ja són a la biblioteca Copia al porta-retalls Actualitza la categoria Divideix les imatges altes En lliscar cap a la dreta en un capítol En lliscar cap a l’esquerra en un capítol Toca dues vegades per a ampliar Superposició Inverteix l’orientació de les pàgines amples rotades Rota les pàgines amples perquè s’ajustin a la pantalla Informació de depuració Estableix l’interval Freqüència d’actualització personalitzat Pròxima actualització prevista D’acord Preveu el moment de la pròxima publicació Intervals Estima cada S’actualitzarà cada Voleu deixar de seguir %s? Elimina també de %s Se n’eliminarà el seguiment local. S’ha omès perquè no se n’espera cap publicació avui Suprimeix els baixats Té resultats S’està sincronitzant la biblioteca S’ha completat la sincronització de la biblioteca No s’ha pogut crear un fitxer de còpia de seguretat Inici de sessió al servei de seguiment S’està recreant l’índex de baixades Premeu aquí per a obtenir ajuda amb el Cloudflare Desbloca %s No hi ha connexió a Internet HTTP %d, comproveu el lloc web en una WebView No s’ha pogut accedir a %s Mou la sèrie a baix de tot Marques de temps relatives «%1$s» en comptes de «%2$s» S’està actualitzant la biblioteca… (%s) Configuració de la font Configuració de l’aplicació No s’ha seleccionat cap fitxer Crea Mai Redueix l’efecte fantasma en pantalles de tinta electrònica Aplica Torna a la configuració per defecte Darrera còpia de seguretat automàtica: %s No s’ha trobat cap scanlator Scanlator Centelleig en canviar de pàgina Ús de l’emmagatzematge Puntuació del servei de seguiment Dades i emmagatzematge Exclou scanlators Seleccionat No seleccionat Ubicació de l’emmagatzematge S’utilitza per a les còpies de seguretat automàtiques, les baixades de capítols i la font local. Més opcions Navega cap amunt Selecciona una carpeta Guia de benvinguda No heu fet servir mai el %s? Us recomanem que reviseu la guia de benvinguda. Comença Cal que seleccioneu una carpeta Et donem la benvinguda! Heu reinstal·lat %s? Omet Següent Primer cal configurar unes quantes coses. Sempre podràs canviar aquestes opcions a la configuració. No s’ha definit una ubicació d’emmagatzematge Seleccioneu una carpeta on el %1$s emmagatzemarà les baixades dels capítols, les còpies de seguretat i més.\n\nÉs recomanable fer servir una carpeta dedicada.\n\nCarpeta seleccionada: %2$s Permís de notificacions Permís per a instal·lar aplicacions Eviteu interrupcions en actualitzacions de la biblioteca, baixades i restauracions de còpies de seguretat que tinguin una llarga durada. Ús de la bateria en segon pla Per a instal·lar extensions de fonts. Rebeu notificacions quan hi hagi actualitzacions de la biblioteca i més. Permet Disponible: %1$s / Total: %2$s S’ha previst que se’n publicaran nous capítols d’aquí a %1$s, es comprova cada %2$s. Error complet: Calen permisos per a instal·lar extensions. Premeu aquí per a concedir-les. Inclou-hi configuració sensible (per exemple, testimonis d’autenticació dels serveis de seguiment) Repositoris d’extensions No heu definit cap repositori. Suprimeix el repositori Afegiu repositoris addicionals al %s. Ha de ser un URL que acabi amb «index.min.json». Aquest repositori ja existeix! URL del repositori invàlid Voleu suprimir el repositori «%s»? Guia d’emmagatzematge Heu actualitzat d’una versió més antiga i no sabeu què heu de seleccionar? Consulteu la guia d’emmagatzematge per a més informació. Nòrdic Actualitzacions intel·ligents Revoca les extensions de confiança desconegudes Afegeix un repositori URL del repositori Aviat Freqüència d’actualització personalitzada: Obre el repositori d’origen No s’ha pogut obtenir accés persistent a la carpeta. És possible que l’aplicació es comporti de manera inesperada. Pròxim Guia de pròximes actualitzacions Mes següent Afegeix igualment Desactiva l’allunyament Substitueix L’empremta digital de la clau de xifratge ja existeix La clau de xifratge del repositori %1$s té la mateixa empremta digital que %2$s.\nSi espereu que sigui així, se substituirà %2$s. En cas contrari, contacteu amb el mantenidor del repositori. Perfil de visualització personalitzat Mostra les pròximes actualitzacions Mes anterior Durada del flaix Blanc %1$s ms Flaix amb Negre Flaix cada Blanc i negre Aquest manga està completat o bé no té cap data de publicació prevista. Còpia de seguretat en JSON no suportada El fitxer de còpia de seguretat és corrupte Repositoris d’extensions Copia l’enllaç Omet la baixada de capítols ja llegits duplicats Voleu afegir el repositori «%s»? Voleu actualitzar els serveis de seguiment al capítol %d? Tots els elements llegits Envia dades d’ús anonimitzades per a millorar les funcionalitats de l’aplicació. Aleatòriament Envia registres d’errors Envia registres d’errors anonimitzats als desenvolupadors. Permet les analítiques Registres d’errors i analítiques Seguretat Si envieu registres d’errors i analítiques, ens permetreu identificar i solucionar problemes, millorar el rendiment i fer que les futures actualitzacions siguin més adequades a les vostres necessitats Automàtic Pausa l’historial de lectura per a aquesta extensió Els serveis de seguiment s’han actualitzat al capítol %d Actualitza el progrés en marcar com a llegit Per defecte (%d) Afecta el rendiment. Activeu-ho només si en reduir el llindar de mapes de bits no se solucionen els problemes d’imatges buides Elimina Voleu eliminar l’extensió? Segur que voleu eliminar l’extensió «%s»? Si el lector carrega una imatge buida, reduïu-ne el llindar a poc a poc.\nActual: %s Llindar personalitzat dels mapes de bits per maquinari En seguiment de manera privada Exporta S’ha exportat la biblioteca Autor Artista Segueix de manera pública Monocrom Llista de la biblioteca Segueix de manera privada Dóna Capítols no llegits Notes Edita les notes Tanca la pestanya Gatputxino Renderitza les imatges a les descripcions dels mangues Comportament Marca els capítols duplicats de llegits com a llegits Després de llegir un capítol Després d’obtenir un capítol nou Amaga els indicadors de capítols que manquen No permetis noms de fitxer que no siguin ASCII Assegura la compatibiloitat amb alguns mitjans d’emmagatzematge que no admeten Unicode. Quan ho activeu, caldrà que canvieu de nom manualment les carpetes de les fonts i dels mangues substituint-ne els caràcters que no siguin ASCII per llurs representacions hexadecimals UTF-8 en minúscules. No cal que canvieu de nom els fitxers dels capítols. Utilitza el decodificador antic per al lector de tira llarga No s’ha pogut crear el directori de baixada No s’ha pogut crear el directori: %s Baixades concurrents de fonts Baixades concurrents de pàgines Pàgines baixades simultàniament per font Suprimireu elements de la base de dades Els capítols llegits i el progrés dels elements que no siguin a la biblioteca es perdran Conserva els elements amb capítols llegits Actualitza els títols dels mangues de la biblioteca perquè encaixin amb la font Advertència: si un manga canvia de nom, se suprimirà de la cua de baixades (si hi és). S’està iniciant la sessió… Possibles duplicats Ja teniu elements a la biblioteca amb un nom similar.\n\nSeleccioneu un element per a migrar-lo o afegiu-lo igualment. M’ha agradat la part en què… Seleccionats Disponibles Selecciona-ho tot No seleccionis res Selecciona les fonts activades Selecciona les fonts fixades Continua Dades que es migraran Suprimeix les baixades de l’element actual després de la migració Paraules clau addicionals (opcional) Ajuda a acotar els resultats de la cerca afegint-hi paraules clau addicionals Amaga els elements sense coincidències Amaga els elements sense capítols nous Mostra un element només si la coincidència té capítols addicionals Aquestes opcions són lentes i perilloses, i poden implicar restriccions per part de les fonts Mode de cerca avançat Parteix el títol en paraules clau per a una cerca més àmplia Cerca coincidències basant-se en el número de capítol Si ho activeu, cerca la coincidència de més endavant. En cas contrari, agafa la primera coincidència per prioritat de les fonts. Migració S’està migrant (%1$d/%2$d) Copia Migra No s’ha trobat cap alternativa Darrer: %1$s Desconegut Cerca manualment No migris Migra ara Copia ara Voleu aturar la migració? Atura Cancel·la Copia Migra Cancel·la Cancel·la No s’ha trobat cap capítol, aquest element no es pot utilitzar per a migrar Filtra els scanlators exclosos ================================================ FILE: i18n/src/commonMain/moko-resources/ceb/plurals.xml ================================================ %d Kategoriya %d Mga kategoriya Human sa %1$s ka minuto Human sa %1$s ka minuto Kagahapon %1$d ka adlaw ang milabay Nabuhat sa %1$s nga adunay %2$s nga sayup Nabuhat sa %1$s nga adunay %2$s nga mga sayop %1$s ang nahibilin %1$s ang nahibilin Ugma Sa %1$d ka adlaw ================================================ FILE: i18n/src/commonMain/moko-resources/ceb/strings.xml ================================================ Kasaysayan Mga update Panghimatuod aron makumpirma ang pagbag-o Mga setting Menu Gi-bookmark Gisubay Wala mabasa Alpabetiko Hingpit nga mga entry Kinatibuk sa mga kapitulo Katapusan nga pagbasa Wala mabasa nga ihap Petsa sa pagkuha sa kapitulo Gidugang ang petsa Pangitaa Mga setting sa pagpangita Pangkalibutanon nga pagpangita Pilia ang tanan Pagpili inverse Markahi nga gibasa Markahi nga wala pa mabasa Markahi ang nauna nga nabasa na Pag-download Ngalan Mga kapitulo Dugang pa Mga setting Tinubdan Default Pila sa Pag-download Mga entri sa basahonan Pagsubay Librarya Mga Kategoriya Molalin Pagpadako Impormasyon sa Extension Kasaysayan Tabang ug sa Pagpasig-uli Pagsala Tabang Pasidaan Pinakabag-o nga kapitulo Kuhaa ang filter Katapusan nga update sa manga Tanan Walay bag-o nga mga update Matag-kategorya nga mga setting alang sa paghan-ay ug pagpakita Walay mga pag-download Walay nabasa bag-o lang Wala kay mga kategorya. i-tap ang plus button aron makahimo og usa para sa pag-organisar sa imong library. Walay sulod ang imong library Bookmark nga kapitulo Unbookmark nga kapitulo Pagtangtang I-enable ang tanan Idugang Idugang ang kategorya Usba ang mga kategorya Usba ang ngalan sa kategorya Usba ang hapin Tan-awa ang mga kapitulo Kuhaa Sa miaging kapitulo Pagsugod Sunod nga kapitulo Sulayi pag-usab Ipadayon Ipakita ang pagsulod Paglalin Pagpakita Cover-only grid Gi-download nga mga kapitulo Pinulongan Ipakita ang mga tab sa kategorya Ipakita ang gidaghanon sa mga butang Pag-disable Unpin Pagkanselar I-disable ang tanan Edit Pag-update sa librarya Ibutang ang mga kategorya Paghunong Ablihi sa browser Lokal nga tinubdan Ablihi sa WebView Komportable nga grid Display mode Listahan Compact nga grid Pin Cancel tanan Ikansela ang tanan alang niini nga serye Pagsunud-sunod Pinakabag-o Lihok sa ubos Pag-instalar Tipigi I-reset I-undo Suod nga Balik I-refresh Nagproseso… Dili magamit ang app Heneral Panagway Library Magbabasa Mga pag-download Pagsubay Abante Tema Sa Tema sa app Dinamiko Berde nga mansanas Sa tungang gabii sa kilumkilom Tako Teal ug Turquoise Yin ug Yang Yotsuba Pormat sa petsa Kinahanglan nga ablihan I-lock kung walay trabaho Tagoa ang sulod sa pahibalo Lig-on nga screen NSFW (18+) Mga Tinubdan Karon Pagpakita Mga butang kada laray Hulagway Landscape Tibuok kalibutan nga update Off Kada 6 ka oras Matag 12 ka oras Adlaw-adlaw Kada 2 ka adlaw Kada semana Sa dihang nag-charge Mga pagdili: %s Uban sa wala pa mabasa nga (mga) kapitulo Wala pa kana nagsugod Awtomatikong i-refresh ang metadata Pangutana kanunay Nagpaubos Pinaagi sa petsa sa pag-upload Pinaagi sa numero sa kapitulo Kinatigulangan Ibalhin sa ibabaw Ibalhin ang serye sa ibabaw I-tap aron makita ang mga detalye Pagsaka Ipaambit Bukas nga log Iuli Off Mahitungod sa Dili gayud Sa unahan Sugdi ang pag-download karon Sunda ang sistema Strawberry Daiquiri Pagdumala sa mga pahibalo Seguridad Ipakita sa mga tinubdan ug mga lista sa mga extension Purong itom nga dark mode Dili kini makapugong sa dili opisyal o posibleng sayop nga gi-flag nga mga extension gikan sa pag-surf sa NSFW (18+) nga sulod sulod sa app. Kanunay Ang luwas nga screen nagtago sa mga sulod sa app sa dihang nagbalhin-balhin og mga app ug nag-block sa mga screenshot Awtomatikong mga update Awtomatikong pag-update sa mga pagdili sa device Sa Wi-Fi lang Uban sa \"Nakumpleto\" nga kahimtang Default nga kategorya Kada 3 ka adlaw Susiha ang bag-ong hapin ug mga detalye kung mag-update sa librarya Apil ang: %s Naghulat ang mga update Update Update tanan Pag-instalar Gi-install Pagsalig Dili kasaligan I-uninstall Dili kasaligan nga extension Kini nga extension dili na magamit. Napakyas sa pagkuha sa listahan sa mga extension 18+ Ang mga tinubdan gikan niini nga extension mahimong adunay sulod nga NSFW (18+) Nag-instalar og extension… Installer Kabilin Si Shizuku wala modagan I-install ug sugdi ang Shizuku aron gamiton ang Shizuku isip extension installer. Fullscreen Duha ka panid nga bahin Balita ang duha ka panid nga pagbahin sa pagbutang Kung ang pagbutang sa doble nga panid sa panid dili motakdo sa direksyon sa pagbasa Doble nga pag-tap sa katulin sa animation Ipakita ang numero sa panid Ipakita ang mode sa pagbasa Sa daklit ipakita ang kasamtangan nga mode kung giablihan ang magbabasa Mga utlanan sa pananom Sa Grayscale Color filter blend mode Pagdaghan Dodge / Pagpagaan Pagsunog / Pagngitngit Ipadayon ang screen Laktawan ang nasala nga mga kapitulo Nabigasyon Ibalik ang mga yawe sa volume Wala Pahigda Ang duha Mga aksyon I-save ang mga panid sa lainlaing mga folder Naghimo ug mga folder sumala sa titulo sa manga Puti Gray Itom Awtomatiko Default nga mode sa pagbasa L nga porma Kindle-ish Edge Tuo ug Wala Nabaldado Prev Ipakita ang mga tap zone nga overlay Sa daklit ipakita kung giablihan ang magbabasa Balika ang mga tap zone Karaan na Dili iapil: %s Pag-instalar Nag-download Ang manga sa wala iapil nga mga kategorya dili ma-update bisan kung naa usab sila sa mga gilakip nga kategorya. Wala Naghulat Impormasyon sa app Kini nga extension gipirmahan gamit ang dili kasaligan nga sertipiko ug wala gi-aktibo. \n \nAng usa ka malisyoso nga extension mahimong makabasa sa bisan unsang mga kredensyal sa pag-login nga gitipigan sa Mihon o ipatuman ang arbitraryong code. \n \nPinaagi sa pagsalig niini nga sertipiko gidawat nimo kini nga mga risgo. Ipakita ang sulod sa ginunting nga lugar I-animate ang mga transisyon sa panid Custom nga kahayag Mga yawe sa volume Off Pasadya nga kolor nga filter Pagahal-upan Laktawan ang mga kapitulo nga gimarkahan nga nabasa Baliktad Screen Ipakita sa taas nga gripo Bertikal Kolor sa background Sunod Sa wala Husto Webtoon Wala ngadto sa tuo Tuo ngadto sa wala Bertikal Paged A Padding sa kilid Pinakataas Kinaubsan Pag-zoom sa posisyon sa pagsugod Sa wala Husto Sentro Walay animation Normal Uri sa rotation Libre B Kanunay ipakita ang transisyon sa kapitulo Mode sa pagbasa Pagbasa Taas Ubos Pagtangtang sa mga kapitulo Human gimarkahan sa mano-mano ingon nabasa na Human sa pagbasa awtomatikong tangtangon Tugoti ang pagtangtang sa gimarkahan nga mga kapitulo Wala iapil nga mga kategorya Nabaldado Ikalima hangtod sa kataposang pagbasa sa kapitulo Awtomatikong pag-download Ang manga sa wala iapil nga mga kategorya dili ma-download bisan kung naa usab sila sa mga gilakip nga kategorya. I-save ingon CBZ archive Giya sa pagsubay Lamang sa ummetered network Pinulongan sa Extension Extension nga Bersyon Rating sa Edad sa Extension Padayon nga bertikal Orihinal nga gidak-on Haom nga screen Pag-inat Haom ang gilapdon Haom nga gitas-on Landscape Naka-lock nga hulagway Paspas Naka-lock nga talan-awon Default nga tipo sa rotation Hulagway Baliktad nga hulagway R G Ikaduha hangtod sa kataposang pagbasa sa kapitulo Track Smart angay Awtomatiko Pagkasensitibo sa pagtago sa menu sa scroll Katapusan nga nabasa nga kapitulo Ikatulo hangtod sa kataposang pagbasa sa kapitulo Ika-upat hangtod sa kataposang pagbasa sa kapitulo Pag-download sa bag-ong mga kapitulo Mga serbisyo nga naghatag dugang nga mga bahin alang sa piho nga mga gigikanan. Awtomatikong gisubay ang Manga kon idugang sa imong librarya. Usa ka paagi nga pag-sync aron ma-update ang pag-uswag sa kapitulo sa mga serbisyo sa pagsubay. I-set up ang tracking para sa indibidwal nga manga entries gikan sa ilang tracking button. Gipalambo nga mga serbisyo Ang pag-uswag sa pag-update pagkahuman sa pagbasa Nagpauswag sa pasundayag sa magbabasa pinaagi sa pagbahin sa taas nga na-download nga mga imahe. Mga serbisyo Pag-tap sa mga zone Paghimo og backup Mahimong gamiton aron mapasig-uli ang kasamtangan nga librarya Uri sa sukdanan sa hulagway Ibalik ang backup Ibalik ang librarya gikan sa backup file Gihimo ang backup Kadaghanon sa pag-backup Dili balido nga backup file Ang backup walay bisan unsang manga. Nawala nga mga tinubdan: Walay mga entri sa library nga i-back up Ang pag-backup/pagpasig-uli mahimong dili molihok sa husto kung ang MIUI Optimization gi-disable. Ang pagpasig-uli nagpadayon na Napakyas ang pag-uli sa backup Gikansela ang pagpasig-uli Ang mga awtomatikong pag-backup girekomendar kaayo. Kinahanglan nimong tipigan ang mga kopya sa ubang mga dapit usab. Network Tin-aw nga cookies DNS sa HTTPS (DoH) Nagkinahanglan nga i-restart ang app aron ma-epekto Ang pag-backup nagpadayon na %1$02d minuto , %2$02d ikaduha Unsa ang gusto nimo i-backup? Ang datos gikan sa backup file mapasig-uli. \n \nKinahanglan nimo nga i-install ang bisan unsang nawala nga mga extension ug mag-log in sa mga serbisyo sa pagsubay pagkahuman aron magamit kini. Nakompleto ang pag-uli Paghimo og backup Ang mga tracker wala naka-log in: Pag-uli sa backup Gilimpyohan ang mga cookies Data Hawani ang cache sa kapitulo Napakyas ang pag-backup Gusto ba nimong papason ang kategoryang \"%s\"? Pagtangtang sa kategorya Internal nga Sayop: Susiha ang mga crash log para sa dugang nga impormasyon Pag-navigate sa pan Lavender Kuhaa ang tanan Pinulongan sa app Gigamit: %1$s Limpyo ang database I-refresh ang mga hapin sa librarya Dump crash logs I-print ang verbose logs ngadto sa system log (gipamenos ang performance sa app) Ang ubang mga tiggama adunay dugang nga mga pagdili sa app nga nagpatay sa mga serbisyo sa background. Kini nga website adunay dugang nga impormasyon kon unsaon kini pag-ayo. Hawani ang cache sa kapitulo sa pagsira sa app Klaro nga database %1$d non-library manga sa database Gitipigan ang mga log sa sayup sa usa ka file aron ipaambit sa mga nag-develop I-delete ang history para sa manga nga wala ma-save sa imong library I-disable ang pag-optimize sa baterya Tablet UI I-zoom ang hulagway sa talan-awon Ang pag-optimize sa baterya gi-disable na Dili maablihan ang mga setting sa device Default nga user agent string I-reset ang default user agent string Gitangtang ang cache. %1$d nga mga file ang natangtang Nahitabo ang sayup samtang nanglimpyo Gitangtang ang mga entry Tin-aw ang datos sa WebView Ang datos sa WebView gitangtang I-reset ang mga setting sa matag-serye nga magbabasa I-reset ang mode sa pagbasa ug oryentasyon sa tanan nga serye Ang tanan nga mga setting sa magbabasa gi-reset Dili ma-reset ang mga setting sa magbabasa Kalihokan sa background Nagtabang sa mga update sa librarya sa background ug pag-backup Verbose logging Unsay bag-o Tabang sa paghubad Polisiya sa pagkapribado Pagsala sa tanang manga sa imong library Nakatabang sa pag-ayo sa bisan unsang mga bug. Walay sensitibo nga datos nga ipadala Mga lisensya sa open source Na-download lang Paghunong sa pagbasa sa kasaysayan I-disable ang incognito mode Incognito mode Bersyon Susiha ang mga update Mga update sa v%1$s Ipadala ang mga taho sa pagkahagsa Naka-log out ka na karon Password Login Log out gikan sa %1$s? Log out Naka-log in Login sa %1$s Email Address Wala mailhi nga sayup Username Ipakita ang buton sa pagpadayon sa pagbasa Pangitaa… Abli nga random ang pagsulod Istatistika Nagsugod Gi-download Lokal Tema, format sa petsa ug panahon Dili karon Gikinahanlan ang WebView alang sa Mihon *gikinahanlan Napili ================================================ FILE: i18n/src/commonMain/moko-resources/cs/plurals.xml ================================================ Po %1$s minutě Po %1$s minutách Po %1$s minutách %1$s kapitola %1$s kapitoly %1$s kapitol %1$s zbývá %1$s zbývají %1$s zbývá Dokončeno za %1$s s %2$s chybou Dokončeno za %1$s s %2$s chybami Dokončeno za %1$s s %2$s chybami %d kategorie %d kategorie %d kategorií Je dostupná aktualizace rozšíření Jsou dostupné %d aktualizace rozšíření Je dostupných %d aktualizací rozšíření Kapitoly %1$s a 1 další Kapitoly %1$s a %2$d další Kapitoly %1$s a %2$d dalších %1$d nová kapitola %1$d nové kapitoly %1$d nových kapitol Pro %d položku Pro %d položky Pro %d položek Přeskočena %d kapitola, buď chybí ve zdroji nebo byla vyfiltrována Přeskočeny %d kapitoly, buď chybí ve zdroji nebo byly vyfiltrovány Přeskočeno %d kapitol, buď chybí ve zdroji nebo byly vyfiltrovány %d sledovač %d sledovače %d sledovačů Včera Před %1$d dny Před %1$d dny Další nepřečtená kapitola Další %d nepřečtené kapitoly Dalších %d nepřečtených kapitol Další kapitola Další %d kapitoly Dalších %d kapitol Chybí %1$s kapitola Chybí %1$s kapitoly Chybí %1$s kapitol 1 den %d dny %d dní %d repozitář %d repozitáře %d repozitářů Zítra Za %1$d dny Za %1$d dnů 1 stránka %1$s stránky %1$s stránek Migrovat %1$d položku? Migrovat %1$d položky? Migrovat %1$d položek? Migrovat %1$d položek? Zkopírovat %1$d položku? Zkopírovat %1$d položky? Zkopírovat %1$d položkek? Zkopírovat %1$d položkek? Položka byla přeskočena %1$d položky byly přeskočeny %1$d položek bylo přeskočeno %1$d položek bylo přeskočeno ================================================ FILE: i18n/src/commonMain/moko-resources/cs/strings.xml ================================================ Kategorie Záznamy v knihovně Kapitoly Historie Nastavení Knihovna Historie Záloha a obnovení Přesunout Rozšíření Informace o rozšíření Nastavení Filtr Nepřečteno Odstranit filtr Abecedně Naposledy čteno Vyhledávání Globální vyhledávání Vybrat vše Označit jako přečtené Označit jako nepřečtené Označit předchozí jako přečtené Stáhnout Odstranit Upravit Přidat Přidat kategorii Upravit kategorie Předchozí kapitola Následující kapitola Odstranit Otevřít v prohlížeči Kompaktní mřížka Seznam Zrušit Instalovat Sdílet Uložit Zpět Obnovit Načítání… Aplikace není k dispozici Stahování Každých 6 hodiny Každých 12 hodiny Denně Každé 2 dny Týdně Přeskočit položky ve stavu \"Dokončeno\" Aktualizovat počet kapitol po přečtení Aktualizovat Instalovat Čeká se Stahování Instalování Nainstalováno Důvěryhodné Nedůvěryhodné Odinstalovat Nedůvěryhodné rozšíření Škodlivé rozšíření může přečíst jakékoliv uložené přihlašovací údaje nebo spustit libovolný kód. \n \nDůvěřováním tohoto rozšířeni přijímáte tato rizika. Celá obrazovka Animovat přechody stránek Zobrazit číslo stránky Tlačítka hlasitosti Prohodit tlačítka hlasitosti Barva pozadí Bílá Černá Stránkované (zleva doprava) Stránkované (zprava doleva) Výchozí otáčení Volné Zamknuto na výšku Zamknuto na šířku Červená Zelená Modrá Průhlednost Po ručním označení jako přečtené Po přečtení automaticky smazat Stahovat nové kapitoly Uživatelské jméno Heslo Přihlásit se Přihlášení proběhlo úspěšně Neznámá chyba Žádné další výsledky Globální vyhledávání… Vycházející Odstranit z knihovny Přidáno do knihovny Odstraněno z knihovny Smazat stažené kapitoly? Zdroj není nainstalován: %1$s Kapitola %1$s Stahování (%1$d/%2$d) Chyba Pozastaveno Podle zdroje Stáhnout Stáhnout nepřečtené Opravdu chcete smazat vybrané kapitoly? Rozečtené Dokončeno Plánuji číst Znovu čtu Skóre Název Typ Obnovit všechny kapitoly pro tento záznam Přidat do knihovny? Obrázek uložen Vlastní filtr Stránka: %1$d Další kapitola nenalezena Obrázek se nepodařilo načíst Dokončeno: Aktuální: Následující: Předchozí: Žádná další kapitola Žádná předchozí kapitola Načítání stránek… Přesunout Kopírovat Došlo k chybě při stahování kapitol. Zkuste to znovu v sekci stahování Nalezeny nové kapitoly Vybrat záložní soubor Stáhnout Žádné nové aktualizace Klepnutím nainstalujte aktualizaci Chyba při stahování Dostupná aktualizace! Žádné nedávné aktualizace Nic nedávno čtené Chyba Při stahování kapitoly došlo k neznámé chybě WiFi připojení není dostupné Síťové připojení není dostupné Stahování pozastaveno Stahovací fronta Název Sledování Aktualizace Založeno Celkem kapitol Založit kapitolu Odstranit záložku Aktualizovat knihovnu Přejmenovat kategorii Vybrat kategorie Pauza Opakovat Pokračovat Režim zobrazení Zobrazení Stažené kapitoly Seřadit Resetovat Otevřít log Obecné Čtečka Sledování Pokročilé O aplikaci Položek na řádek Na výšku Na šířku Automatické aktualizace Nikdy Vše Při nabíjení Výchozí kategorie Vždy se zeptat Rychlost animace při dvojkliku Oříznout okraje Vlastní jas Vlastní barevný filtr Výchozí režim čtení Stránkovaný (svisle) Dlouhý pruh Typ úpravy velikosti Přizpůsobit obrazovce Natáhnout Přizpůsobit šířku Přizpůsobit šířku Původní velikost Chytré přizpůsobení Výchozí poloha zvětšení Automaticky Vlevo Vpravo Na střed Bez animace Normální Rychle Sledovače Vytvořit zálohu Obnovit zálohu Frekvence automatických záloh Záloha vytvořena Obnova dokončena Co chcete zálohovat? Obnovování zálohy Vytváření zálohy Vymazat mezipaměť kapitol Využito: %1$s Mezipaměť smazána, %1$d souborů odstraněno Během vymazávání došlo k chybě Vymazat cookies Cookies vymazány Vyčistit databázi Smazat historii položek, které nejsou uloženy ve vaší knihovně Položky byly smazány Verze Odesílat hlášení o pádu Pomáhá opravit chyby. Nebudou odeslány žádné citlivé údaje Aktualizuji kategorie Lokální zdroj Ostatní Nejnovější Procházet Neznámý Licencovaný Zkopírováno do schránky: \n%1$s Podle čísla kapitoly Sledování Již nečtu Pozastaveno Stav Stav Kategorie smazány Nastavit jako obal Obal aktualizován Upravit přebal Omezení zařízení pro automatické aktualizace Udržovat obrazovku zapnutou Navigování Stránkovač Zakázáno Poslední přečtená kapitola Předposlední kapitola Třetí předposlední přečtená kapitola Čtvrtá předposlední přečtená kapitola Pátá předposlední přečtená kapitola Lze použít k obnovení aktuální knihovny Obnovit knihovnu ze záložního souboru Přihlásit se do %1$s Název zdroje Číslo kapitoly Kategorie s tímto jménem již existuje! Toto odstraní datum přečtení této kapitoly. Jste si jistý? Chcete tento obrázek nastavit jako obal? Chyba při načítání stránek: %1$s Vyberte data, která chcete zahrnout Chyba při aktualizaci obalu Přidejte si prosím položku do knihovny před tím, než toto uděláte Vybrat obrázek obalu Probíhá stahování… Žádné stahování Vaše knihovna je prázdná Nemáte žádné kategorie. Klikněte na tlačítko plus a vytvořte nějakou pro zorganizování vaší knihovny. Stahovač Běžný Nápověda Otevřít ve WebView Zobrazit akce dlouhým stisknutím Přeskakovat přečtené kapitoly Režim mísení filtru barev Překrytí Násobení Obrazovka Zesvětlit Ztmavit Nenalezeny žádné výsledky Vyberte zdroj, ze kterého chcete přesouvat Zpět Vpřed Obnovit Knihovna Zastaralý Toto rozšíření již není k dispozici. Nemusí fungovat správně a může způsobit problémy s aplikací. Doporučujeme jej odinstalovat. Odhlásit se Formát data Globální aktualizace Odhlásit z %1$s? Nyní jste odhlášený Pozastaveno Více Menu Zdroje Předchozí stránka Následující stránka Skrýt obsah oznámení Nikdy Vždy Uzamknout při nečinnosti Bezpečnost a soukromí Spravovat oznámení Nejstarší Nejnovější Zobrazit kapitoly Poslední kapitola Přidat sledování Nebyly nalezeny žádné kapitoly Nastavit jako výchozí Jsi si jistý, že chceš tato nastavení uložit jako výchozí? Nastavení kapitoly Podle data nahrání Méně Více V knihovně Přidat do knihovny Neznámý stav Neznámý autor Nemáš žádné připnuté zdroje Návod pro lokální zdroj Hledat \"%1$s\" globálně Připnuté Naposledy použitý Karty Stažené kapitoly Z knihovny Emailová adresa Pozastaví historii čtení Anonymní režim Pouze staženo Aktualizováno na verzi v%1$s Zkontrolovat aktualizace Open Source licence Co je nového Webová stránka Nelze otevřít nastavení zařízení Optimalizace je již vypnuta Pomáhá s aktualizacemi knihovny a záloh na pozadí Vypnout optimalizaci baterie Uloží chybové protokoly do souboru pro sdílení s vývojáři Sdílet protokoly o selhání Obnovit přebaly v knihovně Data Pro projevení je nutný restart aplikace DNS přes HTTPS (DoH) Síť Obnova zrušena Obnova ze zálohy selhala Obnovení již probíhá Zálohování selhalo Zálohování již probíhá %1$02d min, %2$02d s Budeš poté muset doinstalovat jakékoliv chybějící rozšíření a přihlásit se do sledovacích služeb pro jejich použití. Sledovače, ve kterých nejsi přihlášený/á: Chybějící zdroje: Záloha neobsahuje žádné položky knihovny. Neplatný soubor se zálohou: Jednosměrná synchronizace pro aktualizaci počtu přečtených kapitol v externích sledovacích službách. Nastavení sledování pro každou položku je možné z jejich tlačítka sledování. Povolení mazání kapitol se záložkami Smazat kapitoly Režim čtení Oblasti dotyku Další Vpravo a Vlevo Ve tvaru písmene L Šedá Obě Vertikální Horizontální Žádné Zdroje z tohoto rozšíření mohou obsahovat NSFW (18+) obsah 18+ Kontrolovat dostupnost nových přebalů a detailů při aktualizaci knihovny Automaticky obnovovat metadata Toto nastavení nemůže zamezit neoficiálním nebo špatně označeným rozšířením v zobrazování NSFW (18+) obsahu v aplikaci. Zobrazovat v seznamu zdrojů a rozšíření NSFW (18+) zdroje Secure screen skryje obsah aplikace při přepínání aplikací a blokuje tvorbu snímků obrazovky Chráněná obrazovka Vyžadovat odemknutí Tmavý Světlý Vzhled Přesunout nahoru Sestupně Vzestupně Podle čísel kapitol Podle data nahrání Odepnout Připnout Zakázat Zobrazovat počet položek Začít Aktualizace rozšíření Aktualizace kapitol Chyby Dokončeno Postup Výchozí nastavení kapitol aktualizováno Prosím aktualizujte aplikaci WebView pro lepší kompatibilitu Je nutné mít nainstalovanou aplikaci WebView pro správné fungování aplikace Nastala chyba při obcházení služby Cloudflare Kapitoly %1$s Kapitola %1$s a %2$d dalších Kapitola %1$s Nelze stáhnout kapitoly kvůli nedostatku místa Návod k přesunu zdrojů Jste si jistý/á? Všechna historie bude navždy ztracena. Vymazat historii Historie vymazána Kap. %1$s - %2$s Aktualizuji knihovnu Zdroj nenalezen Žádné stránky nenalezeny Prosím přihlašte se do MAL znovu Datum dokončení čtení Datum zahájení čtení Vždy zobrazovat přechod mezi kapitolami Podobné Kindlu Přesunout dolů Zrušit vše Pohodlná mřížka Přesunout Zakázat vše Povolit vše Nastavení vyhledávání Datum přidání Sledováno Režim čtení Ukazovat režim čtení Pro tuto sérii %1$s: %2$s, strana %3$d Také nastavit pro všechny položky v mé knihovně Čtení Při otevření čtečky krátce zobrazí aktuální režim Čekajících aktualizací Nebyla nalezena žádná aplikace pro výběr souborů Filtruje všechnu položky ve vaší knihovně Položky ve vynechaných kategoriích nebudou staženy, i kdyby byly také v zahrnutých kategoriích. Automatické stahování Boční odsazení Přeskakovat filtrované kapitoly Zobrazovat obsah v oblasti výřezu displeje Pokud umístění rozdělených širokých stránek neodpovídá směru čtení Invertovat umístění rozdělené stránky Zobrazit překrytí oblastí dotyku Vynechat: %s Zahrnout: %s Žádné Položky ve vynechaných kategoriích nebudou aktualizovány, i kdyby byly také v zahrnutých kategoriích. Zobrazení Zobrazovat karty kategorií Tato verze systému Android již není podporována Kopírování do schránky se nezdařilo Dlouhý pruh s mezerami Okraj Invertovat oblasti dotyku Rozdělit široké stránky Krátce zobrazit, když je čtečka otevřena Systém Klepněte pro zobrazení podrobností Datum načtení kapitoly Na šířku Na výšku Otáčení Vytváří složky podle názvu položky Uložit stránky do samostatných složek Akce Vpravo Vlevo Předchozí Zakázat anonymní režim Auto Odstíny šedé Zrušit vše pro tuto sérii Žádná shoda nenalezena Zdroj není podporován Nepřečteno Datum Seřadit podle Neplatný formát kapitoly Kapitola nenalezena Omezení: %s Lokální zdroj Při sdílení přebalu došlo k chybě Při ukládání přebalu došlo k chybě Přebal uložen Přebal Vypnuto Zapnuto Nastavení řazení pro jednotlivé kategorie Nemáte žádné kategorie. Začít stahovat nyní Někteří výrobci používají další omezení aplikací, která vypíná služby na pozadí. Na této webové stránce najdete další informace o tom, jak to opravit. Pokud je MIUI optimalizace vypnutá, zálohování/obnovování nemusí fungovat správně. Poskytují rozšířené funkce pro konkrétní zdroje. Záznamy jsou po přidání do knihovny automaticky sledovány. Vylepšené sledovače Návod ke sledování Čistě černý tmavý režim Jotsuba Jin a Jang Tako Jahodové Daiquiri Půlnoční Soumrak Zelené Jablko Dynamické Motiv aplikace Činnost na pozadí Citlivost pro skrytí menu při posouvání Nejnižší Nízké Vysoké Nejvyšší Příručka Začínáme Uživatelské rozhraní tabletu Sledovat Dnes Modrozelená a Tyrkysová Vzhled Potvrďte změnu ověřením Výchozí Pomozte s překladem Vyloučené kategorie Nainstalujte a spusťte Shizuku, abyste jej mohli používat jako instalátor rozšíření. Shizuku neběží Původní Instalátor Instaluji rozšíření… Info o Aplikaci Invertované Varování Kopie záloh byste také měli uchovat na více místech. Zálohy mohou obsahovat citlivé informace, včetně jakýchkoliv uložených hesel; při sdílení buďte opatrní. Celkem položek Vybrat obráceně Jazyk Každé 3 dny Jen na Wi-Fi Podrobné protokolování Varování: hromadné stahování může vést k tomu, že zdroje zpomalí a/nebo zablokují %s. Klepnutím se dozvíte více. Aktualizovat vše Vypisovat podrobné informace do systémového protokolu (sníží výkon aplikace) Aktualizace aplikace Varování: velké aktualizace poškozují zdroje a můžou vést k pomalejším aktualizacím a zvýšenému využití baterie. Klepnutím se dozvíte více. Vymazat mezipaměť kapitol při spuštění aplikace Chyba v získání seznamu rozšíření Zásady ochrany osobních údajů %1$d položek v databázi co nejsou v knihovně Přeskočit položky s nepřečtenými kapitolami Nic k vyčištění Uložit jako CBZ archiv Nápovědu k tomu, jak opravit chyby při aktualizaci knihovny, viz %1$s Zveřejnění dokončeno Zrušeno Zobrazit položku Mřížka jen s přebaly Přeskočit nerozečtené položky %1$d aktualizace(í) selhalo Má pauzu Přeskočeno, protože obsahuje nepřečtené kapitoly Přesunout sérii na začátek Klepnutím se dozvíte více Přeskočeno, protože nebyly přečteny žádné kapitoly Přeskočeno, protože série je dokončena Zakázáno Žádné záznamy v knihovně k zálohování Žádný zdroj nenalezen Automatické přiblížení širokých obrázků Žádný nainstalovaný zdroj nenalezen Otevřít na GitHubu Chyba při ukládání obrázku Zavřít Obrácené na výšku Vyčistit data WebView Data z WebView vyčištěna Seznam četby Seznam přání Pouze na neměřené síti Všechna nastavení čtečky byla resetována Resetuje režim čtení a orientaci všech sérií Resetování nastavení čtečky pro jednotlivé série Seznam dokončených Seznam pozastavených Seznam nedokončených Jazyk Věkové hodnocení Verze Zlepšuje výkon čtečky Nastavení čtečky se nepodařilo resetovat No, tohle je trapné Stránka %d nebyla při rozdělení nalezena Nepodařilo se najít cestu k souboru stránky %d Posunutí širokých snímků Počet nepřečtených Poslední kontrola aktualizace Nelze otevřít poslední přečtenou kapitolu Vlastní obal Nenainstalováno Jazyk aplikace Bez popisu Levandule Přejete si smazat kategorii \"%s\"? Smazat kategorii InternalError: Zkontrolujte záznamy pádu pro další informace Obnovit výchozí řetězec pro user agent Výchozí řetězec pro user agent Odstranit vše Widget není k dispozici, když je povolen zámek aplikace Podívejte se na své nedávno aktualizované záznamy v knihovně Aktualizace již probíhá Řetězec uživatelského agenta nemůže být prázdný Přílivová Vlna Stáhování dopředu Automatické stahování při čtení Funguje pouze v případě, že aktuální kapitola + následující kapitola jsou již staženy. Jste si jistí? Chystáte se odstranit \"%s\" ze své knihovny Více Poslední aktualizace knihovny: %s Populární Nebyla udělena oprávnění k úložišti Přeskočeno, protože série nevyžaduje aktualizace Vyhledat… Režim čtení, displej, navigace Jednosměrná synchronizace postupu, rozšířená synchronizace Téma, formát data a času Kategorie, globální aktualizace, přejetí po kapitole Automatické stahování, stahování dopředu Zdroje, rozšíření, globální vyhledávání Zámek aplikace, zabezpečená obrazovka Výpis protokolů selhání, optimalizace baterie %s narazil na neočekávanou chybu. Doporučujeme vám sdílet protokoly o selhání a poté je sdílet v našem kanálu podpory na Discordu. Restartujte aplikaci Ruční a automatické zálohování, místo v úložišti Ups! Neplatné umístění: %s Neznámý titul Neplatný řetězec uživatelského agenta Právě teď Kontrola stahování V této kategorii nebyly nalezeny žádné položky Otevřít náhodnou položku F-Droid sestavení nejsou oficiálně podporovány. \nKlepnutím zobrazíte další informace. Tlačítko Pokračovat ve čtení Odstranit datum? Tím se odstraní dříve vybrané datum ukončení z %s Tím se odstraní dříve vybrané datum zahájení z %s Znovu prohledat stažené Vynutit aplikaci znovu zkontrolovat stažené kapitoly Započato Lokální Staženo Dokončené položky V globální aktualizaci Celkem Přečteno Sledovače Sledované položky Průměrné skóre Použité N/A %dm Položky Statistiky Přehled Doba čtení %dh %dd %ds Teď ne Kategorie je prázdná Zobrazit počet nepřečtených kapitol na ikoně Aktualizace Zkopírováno do schránky K dispozici, ale zdroj není nainstalován: %s Přeskakovat duplicitní kapitoly %1$s chyba: %2$s *vyžadováno Skrýt položky, které jsou již v knihovně Zkopírovat do schránky Aktualizovat kategorii Rozdělit vysoké obrázky Překrytí Překlopení orientace otočených širokých stránek Otočení širokých stránek tak, aby se vešly Ladící informace Kapitola po přejetí doprava Kapitola po přejetí doleva Přiblížení dvojitým klepnutím Přizpůsobený interval aktualizace Další očekávaná aktualizace Odhadovat každý Nastavit aktualizaci každých Nastavit interval Předpovědět čas příštího vydání Intervaly Přeskočeno, protože dnes nebylo očekáváno žádné vydání Tím se lokálně odstraní sledování. Odebrat také z %s OK Odebrat sledování %s? Odstranit stažené Má výsledky Synchronizace knihovny Synchronizace knihovny dokončena Přihlášení sledovače Klepněte zde pro pomoc s Cloudflare Obnovování indexu stažených Nelze vytvořit soubor zálohy Bez připojení k internetu Nelze dosáhnout %s HTTP %d, zkontrolovat web v WebView Odemknout %s Přesunout sérii na konec Relativní časová razítka \"%1$s\" namísto \"%2$s\" Nastavení aplikace Nastavení zdroje Aktualizace knihovny... (%s) Vytvořit Nikdy Snižuje vytváření artefaktů na e-ink displejích Použít Vrátit na výchozí Poslední automatická záloha: %s Žádní překladatelé nenalezeni Překladatel Bliknout při změně stránky Využití úložiště Data a úložiště Nevybrán žádný soubor Vynechat překladatele Vybrat složku Vítejte! Více možností Přeskočit Další Umístění úložiště Nástupní průvodce Používá se pro automatické zálohování, stahování kapitol a lokální zdroj. Jste v %s noví? Doporučujeme se podívat se na průvodce pro začátečníky. Začínáme Složka musí být vybrána Povolení oznámení Povolení stahovat aplikace Dostupné: %1$s / Celkem: %2$s Přeinstalováváte %s? Vybráno Nevybráno Vyhněte se přerušením dlouhých aktualizací knihovny, stahování a obnovení záloh. Využití baterie na pozadí K nainstalování rozšíření zdrojů. Navigovat nahoru Pojďme nastavit nějaké věci. Vždy můžete tyto změny později změnit v nastavení. Skóre sledovače Není nastaveno umístění úložiště Buďte upozorněni na aktualizaci knihovny atd. K instalaci rozšíření je nutné povolení. Klepněte zde pro udělení povolení. Zahrnout citlivé nastavení (např. přihlašovací tokeny sledovačů) Udělit Vyberte složku, kde %1$s bude ukládat stahování kapitol, zálohy a další. \n \nJe doporučena vyhrazená složka. \n \nVybraná složka: %2$s Úplná chyba: Chytrá aktualizace Přidat další repozitáře do %s. Měli by to být URL končící \"index.min.json\". Tento repozitář již existuje! Odstranit repozitář Neplatná URL repozitáře Přejete si odstranit repozitář \"%s\"? Předpoklad vydání nových kapitol za zhruba %1$s, kontrola co %2$s. Vlastní frekvence aktualizace: Repozitáře rozšíření URL repozitáře Nemáte nastaveny žádné repozitáře. Průvodce uložištěm Nord Přidat repozitář Zrušit důvěryhodná neznámá rozšíření Open source repozitář Brzy Aktualizujete ze starší verze a nevíte, co vybrat? Další informace naleznete v průvodci úložištěm. Přesto přidat Zakázat oddálení Nahradit Otisk podepisovacího klíče již existuje Repozitář %1$s má stejný otisk podepisovacího klíče jako %2$s \nPokud to tak je správně, bude%2$s nahrazen, v opačném případě kontaktujte správce repozitáře. %1$s ms Bílou Tato manga je buďto dokončená, nebo nemá přibližné datum vydání. Nadcházející Délka bliknutí Bliknout každých Bliknout Černou Bílou a Černou Vlastní profil zobrazení Zobrazit nadcházející aktualizace Nepodařilo se získat trvalý přístup ke složce. Aplikace se může chovat zvláštně. Aktualizovat postup po přečtení Zkopírovat odkaz Náhodně Pošle anonymizovaná chybová hlášení vývojářům. Pošle anonymizované údaje o používání pro vylepšení aplikace. Zabezpečení Analytika a záznamy o pádech Odesílání záznamů o pádech a analytických dat nám umožní identifikovat a opravit problémy, zlepšit výkon a přizpůsobit budoucí aktualizace vašim potřebám Povolit analytiku Chcete přidat repozitář \"%s\"? Má dopad na výkon. Povolte pouze pokud snížení limitu bitmapy nespraví problémy s prázdnými obrázky Repozitáře rozšíření Odstranit Odstranit rozšíření? Opravdu chcete odstranit rozšíření \"%s\"? Přeskočit stahování duplicitních přečtených kapitol Záloha do JSONu není podporována Soubor se zálohou je poškozen Vlastní limit hardwarových bitmap Výchozí (%d) Posílat chybová hlášení Jestliže čtenář načte prázdnou stránku, postupně snižuj prahovou hodnotu.\nVybráno: %s Pozastavit historii čtení pro rozšíření Sledovače aktualizovány do kapitoly %d Všechny přečtené záznamy Aktualizovat sledovače do kapitoly %d? Předchozí měsíc Následující měsíc Návod k nadcházejícím kapitolám Automaticky Označit duplicitní přečtenou kapitolu jako přečtenou Černobílý Autor Umělec Sledováno soukromě Exportovat Seznam knihoven Knihovna byla exportována Sledovat soukromě Sledovat veřejně Chování Po přečtení kapitoly Po získání nové kapitoly Použít zastaralý dekodér pro dlouhý pruh Aktualizovat názvy mangy z knihovny, aby odpovídaly zdroji Přihlašování… Užil jsem si tu část kde… Poznámky Upravit poznámky Varování: pokud se manga přejmenuje, vymaže se z fronty stahování (pokud existuje). Nepřečtené kapitoly Možné duplikáty Existují položky ve knihovně s podobným jménem.\n\nVyber položku pro migraci nebo přesto přidat. Nepodařilo se vytvořit adresář pro stahování Nepodařilo se vytvořit adresář: %s Chystáte se odstranit položky z databáze Ponechat položky s přečtenými kapitolami Přispěj Catppuccin Skrýt indikátory chybějících kapitol Nepovolovat soubory s non-ASCII znaky Zajišťuje kompatibilitu s určitými úložnými médii, která nepodporují Unicode. Pokud je tato funkce povolena, budete muset ručně přejmenovat názvy složkek source a manga tak, že nahradíte non-ASCII znaky jejich malými hexadecimálními znaky v UTF-8. Názvy souborů kapitol není nutné přejmenovávat. Souběžné stahování zdrojů Souběžné stahování stránek Zavřít okno Vypočítávání… Souběžně stahované stránky na zdroj Vybrat vše Vybrat žádné Vybrat povolené zdroje Vybrat připnuté zdroje Pokračovat Data pro migraci Smazat stažené položky po migraci Migrace Migrace (%1$d/%2$d) Kopírovat Migrovat Nebyly nalezeny žádné alternativy Poslední: %1$s Neznámý Vyhledat manuálně Nemigrovat Migrovat nyní Kopírovat nyní Zastavit migraci? Zastavit Zrušit Kopírovat Migrovat Zrušit Zrušit Žádné kapitoly nebyly nalezeny, tuto položku nelze použít pro migraci Založeno Filtrovat vyloučené scanlatory Vybrané Dostupné Dodatečná klíčová slova (volitelné) Pomáhá zúžit výsledky vyhledávání přidáním dalších klíčových slov Skrýt položky bez shody Skrýt položky bez nových kapitol Zobrazit položku, pouze pokud má shoda další kapitoly Tyto možnosti jsou pomalé, nebezpečné a mohou vést k omezení ze strany zdrojů Pokročilý režim vyhledávání Rozdělí název na klíčová slova pro rozsáhlejší vyhledávání Shoda podle čísla kapitoly Je-li povoleno, vybere shodu, která je nejdále. V opačném případě vybere první shodu podle priority zdroje. Zobrazovat obrázky v popisu mangy Přečtené kapitoly a postup u položek mimo knihovnu budou ztraceny ================================================ FILE: i18n/src/commonMain/moko-resources/cv/plurals.xml ================================================ %d пухмӑш %d пухмӑш %1$s минут хыҫҫӑн %1$s минут хыҫҫӑн %1$s хушши %2$s йӑнӑшпа тӑвӑннӑ %1$s хушши %2$s йӑнӑшпа тӑвӑннӑ Хушма валли ҫӗнетӳ пур %d хушма валли ҫӗнетӳ пур %1$s сыпӑкӗсем тата тепӗр 1 %1$s сыпӑкӗсем тата тепӗр %2$d %1$d ҫӗнӗ сыпӑк %1$d ҫӗнӗ сыпӑк %d хайлав валли %d хайлав валли %1$s сыпӑк %1$s сыпӑк %1$s йулчӗ %1$s йулчӗ %d йӗрлев %d йӗрлев %d сыпӑк ҫук %d сыпӑк ҫук Ӗнер %1$d кун кайалла Тепӗр вуламан сыпӑк Тепӗр %d вуламан сыпӑк 1 кун %d кун %1$s сыпӑк ҫук %1$s сыпӑк ҫук Тепӗр сыпӑк Тепӗр %d сыпӑк %d усрав %d усрав ================================================ FILE: i18n/src/commonMain/moko-resources/cv/strings.xml ================================================ Вулавӑшри хайлавсем Усӑ курнӑ: %1$s Куккисем катертнӗ Кукки тасат Тетел %1$02d мин, %2$02d ҫек Сервиссем Ҫӗнӗ сыпӑксене тийесе илмелле Йулашки вуланӑ сыпăк Сӳнтернӗ Вуланӑ хыҫҫӑн катертмелле Вулани Кӑвак Симӗс Хӗрлӗ Хӑвӑрт Йӗркеллӗ Варринчен Сылтӑмран Сулахайран Хӑй халлӗн Ҫулӗшпе Сарлакăшӗпе Хура Шурӑ Ӳкерчĕк хыҫӑн тӗсӗ Ыкран Хутлани Катерт Лартнӑ Лартӑнать Тийесе илӗнет Ларт Ҫӗнет Пурне те Кашнинчех ыйтмалла Петтерей тулнӑ чух Хатӗр валли хӑй-хальлӗн ҫӗнетӳ чарӑвӗсем Кашни ерне Кашни 2 кун Кашни кун Кашни 12 сехет Кашни 6 сехет Ҫӗнетни тӑтӑшлӑхӗ Пӗтӗмӗшле ҫӗнетӳ Кӑтарт Ыкран сыхлавӗ Сыхлав тата вӑрттӑнлӑх Систерӳсене ӗнер Вӑхӑт хармачӗ Тӗттӗм Ҫутӑ Тата Тийевсем Вулавӑш Тӗп Апа кӗме май ҫук Ҫӗнет Малалла Кайалла Пӑрахӑҫла Упра Пайлаш Ларт Вӗҫӗ патне куҫ Пуҫӑ патне куҫ Чи кивви Чи ҫӗнни Пурне те пӑрахӑҫла Пӑрахӑҫла Ҫаклат Сӳнтер Тийенӗ сыпӑксен шучӗ Йат-йыш Кӑтарт Кӑтарту тытӑмӗ WebView-ра уҫ Тишкерӗшре уҫ Малалла Пуҫла Катерт Ҫӗнӗрен Чар Сыпӑксене пӑх Хуплашкана улӑштар Пухмӑша кӗрт Пухмӑш йатне улӑштар Пухмӑшсене улӑштар Пухмӑша хуш Хуш Умӗнхине вуланӑ тесе палӑрт Улӑштар Пурне те сӳнтер Пурне те ҫут Вулавӑша ҫӗнет Катерт Сыпӑк картнине катерт Сыпӑка карт Тийесе ил Вуламан тесе палӑрт Вуланӑ тесе палӑрт Пурне те суйла Пур ҫӗрте те шыра Шыра Йулашки сыпӑкпа Йулашки вуланипе Сыпӑк шучӗпе Сас паллисен йӗркипе Алана катерт Вуламан Картнӑ Ала Менӳ Ӗнерӳ Кун-ҫул Сыпӑксем Пухмӑшсем Санӑн вулавӑш пушӑ Кун-ҫул Тийев черечӗ Йат Тетел ҫыхӑну ҫук Wi-Fi ҫыхӑну ҫук Йӑнӑш Ҫӗнӗ версси пур! Тийев йӑнӑшӗ Тиенсе пӗтрӗ %1$s-мӗш сыпӑк Ҫӗнӗ сыпӑксем тупӑнман Йулашки вӑхӑтра нимӗн те вуламан Пӗр ҫӗнетӳ те ҫук Пӗр тийев те ҫук Пулӑшу Хушма ҫинчен Хушмасем Ҫӑл куҫсем Ҫӗнӗлӗх Вулавӑш Ӗнерӳсем Тата Пухмӑш кантӑкӗсене кӑтарт Меллӗ сетке Ҫӑтӑ сетке Хирӗҫле суйла Сӳнтернӗ Йӗркере миҫе йапала Урлӑ Тӑрӑх Ыкран сыхлавӗ тепӗр апсем ҫине куҫнӑ чух ку апӑн мӗн пуррине пытарать тата ыкрана сӑн ҫапма чарать Систерӳсенче мӗн ҫырнине пытарни Нихӑҫан Йаланах Тӑвӑм-пулӑм кӗнекине уҫ Тасат Уйӑр Ҫиҫтемри пекех Вулӑш Йӗрлев Тийени… Тавӑр Салт Куҫар Хыҫҫӑнхи сыпӑк Умӗнхи сыпӑк Йӗрлев Чи лайӑх пӗрлӗхшӗн WebView-а ҫӗнет Cloudflare-ран иртеймерӗ Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша пухмӑшсем туса йӗркелеме «Хуш» пускӑч ҫине пус. Куҫару Йантӑлав тата тавӑру Кивелнӗ Ҫӗнетӳ пур Йаланхилле пухмӑш Вулавӑша ҫӗнетнӗ чухне ҫӗнӗ хуплашка тата вак-тӗвек пуррине тӗрӗслени Хӑй-халлӗн метта пӗлӗмсене ҫӗнетмелле Вӗҫленнисене сиктермелле Ап ҫинчен Шанчӑклӑ мар Шанчӑклӑ Кӗтет Ҫук ҫӑл куҫсем: Йӗрлев сервисӗсенче сыпӑкӑн ӳсӗмне ҫӗнетме пӗр йенлӗ килӗшӗвӗ. «Йӗрлев» пускӑч урлӑ йӗрлев ӗнерле. Вуланӑ хыҫҫӑн сыпӑксен ӳсӗме ҫӗнет Вуланӑ сыпӑкран пиллӗкмӗшӗ Вуланӑ сыпӑкран тӑваттӑмӗшӗ Вуланӑ сыпӑкран виҫҫӗмӗшӗ Йулашкинчен маларахри Вуланӑ тесе палӑртнӑ хыҫҫӑн катертмелле Хӑйӗн виҫе Елсерен Йаланхилле вулав тытӑмӗ Тӗс алипе хутӑштармалли тытӑм Вулӑш уҫӑ пулсан хальхи тытӑма кӗскен палӑртмалла Вулав тытӑма кӑтарт Тулли ыкран Шанчӑклӑ мар хушма Ним туман чух ҫаклатни %1$s-мӗш сыпӑк Ҫаклатӑва уҫма пӳрне йӗрре ыйтни Айаккинчи чаку Сыпӑксем урлӑ каҫнине йалан кӑтартмалла Тӑрӑлӑх мар Ҫаклатнӑ тӑрӑхскер Ҫаклатнӑ урлӑскер Ирӗклӗ Йаланхилле урлӑ-тӑрӑх Енимсӗр Пысӑклатни пуҫламӑш тӑрӑмӗ Тӑнлӑ Тӑс Ыкранпа Сарӑмлани Вӗҫӗмсӗрех урлӑ Вӑрӑм елсем Елсерен (урлӑ) Елсерен (сылтӑмран сулахайалла) Елсерен (сулахайран сылтӑмалла) Сӑрӑ Пусса тӑннӑ чух кӑтарт Йанравлӑх пускӑчӗсене вырӑнсемпе улӑштар Йанравлӑх пускӑчӗсем Куҫӑм Аланӑ сыпӑксене сиктермелле Вуланӑ сыпӑксене сиктермелле Ыкрана ҫутӑ тыт Тӗттӗмлетӳ Ҫутату Витӗм Усӑҫ тӗс али Усӑҫ йӑлтӑрлӑхӗ Касӑк чиккисем Ел шутне кӑтартни Икӗ хут пуссан эним хӑвӑртлӑхӗ Елсем хушшипе енимлӗ куҫни Ҫак хушмана урӑх кӗме май ҫук. Вӑл тӗрӗс мар ӗҫлеме тата апа йӑнӑшлаттарма пултарать. Ӑна катертме сӗнетпӗр. Сийенлӗ хушма упранакан кирек мӗнле шут пӗлӗмӗсене шута илме йе хӑй ирӗклӗ йума пурнӑҫлама пултарать. \n \nҪак ӗнентерӳ хутне шаннипе есӗ ҫав теветкеле йышӑнатӑн. Йӗрлев хуш Йӗрле Усӑҫ али Кирек мӗнле йӑнӑшсене тӳрлетме пулӑшать. Нимӗнле харкам пӗлӗм те ярӑнмасть Тиенӗсене ҫеҫ Янтӑв файла суйла Ҫак манкӑн пур сыпӑка тасат Каснӑ тӑрӑхра шалашне кӑтарт Пусӑмсене вырӑнсемпе улӑштар Иккӗш те Урлӑ Тӑрӑх Ҫук Хушмасен ҫӗнетӗвӗсем Сыпӑксен ҫӗнетӗвӗсем Яланхи Тийеве вӑхӑтлӑха чарнӑ Кӗтмен йӑнӑша пула сыпӑксене тийесе илеймест Тийевҫӗ Mihon валли WebView кирлӗ Тийев… Ҫӗнетӳ тупӑнман Тиесе ил Хуплашка суйла Ҫакна тӑвас умӗн манкка санӑн вулавӑша хуш-ха Хуплашкана ҫӗнетеймерӗ %1$s сыпӑкӗ тата ытти %2$d %1$s сыпӑкӗсем Сыпӑксене тийесе илме пулмасть. Тийевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн Ӑтавла Куҫар Куҫарма ҫӑл куҫ суйла Хушма пӗлӗмсене суйла %1$s-мӗш сыпӑка %2$s Вулавӑша ҫӗнетни Ҫӑл куҫ тупӑнман Пӗр ел те тупӑнман Елсем тийенеймерӗҫ: %1$s Елсене тийени… Умӗнхи сыпӑк ҫук Малалли сыпӑк ҫук Умӗнхи: Малалли: Хальхи: Вӗҫленчӗ: Вулав тытӑмӗ Ҫак серилӗх валли Ҫак сӑна хуплашка пек усӑ курмалла-и? Сӑн тийенмерӗ Малалли сыпӑк тупӑнман %1$d-мӗш ел Хуплашкана ҫӗнетнӗ Хуплашка пек ларт Ӳкерчӗке упранӑ Ҫакӑ вара сыпӑка вулани вӑхӑта катертӗ. Чӑнах катертесшӗн-и? Пухмӑшсем катертнӗ Ун пек ятпа пухмӑш пур ӗнтӗ! Тӗс Хал Хал Ят Хаклав Ҫӗнӗрен вулатӑп Вулӑп Чарнӑ Чарнӑ Пӑрахнӑ Вӗҫленӗ Вулатӑп Есӗ суйланӑ сыпӑксене катертесшӗнех-и? Вуламанине Тиесе ил Тиенӗ вӑхӑчӗпе Сыпӑк шучӗпе Ҫӑл куҫпа Сыпӑк шучӗ Ҫӑл куҫ ячӗ Вӑхӑтлӑха чарнӑ Йӑнӑш Тиенет (%1$d/%2$d) Манкка вулавăша хушмалла-и? Ҫӑл куҫа лартман: %1$s Пайлашу буфере ӑтавланӑ: \n%1$s Тиенӗ сыпӑксене катертмелле-и? Сахалрах Ытларах Вулавӑшран катерт Вулавӑша хуш Вулавӑшран катерт Вулавăшра Вулавӑша хуш Лиссенсиленӗ Паллӑ мар хал Паллӑ мар хайлавҫӑ Паллă мар Тухакан Вырӑнти ҫӑл куҫ ертӳлӗхӗ Шырав Юлашки Пур ҫӗрте шыра… Ҫакнӑ Юлашки усӑ курни Ыттисем Вырӑнти ҫӑл куҫ Пӗр тупсӑм та тупӑнман Урӑх тупсӑмсем ҫук Кантӑксем Тӗрӗс мар йантӑлав хайӑлӗ: Пухмӑша ҫӗнетни Паллӑ мар йӑнӑш Есӗ тухрӑн Тух “%1$s тухмалла-и? Ӑнӑҫлӑ кӗни Кӗр Кӗме сӑмах Ылӑккӑтрунлӑ пуштӑ тӗлӗ Усӑҫ ячӗ %1$s кӗр Санӑн вулавӑшри манкка алат Ӳкнисем ҫинчен тишереревсем ямалла Ҫӗнетӳ пуррине тӗрӗсле Уҫӑ юмлӑ лиссенсисем Версси Сайт Хатӗрӗн ӗнерлӗве уҫаймарӗ Петтерей лайӑхлатнине сӳнтернӗ ӗнтӗ Хыҫ планлӑ ҫӗнетӳпе тата янтавланипе пулӑшать Петтерей лайӑхлатнине сӳнтер Йантӑлав тунин тӑтӑшлӑхӗ Вулавӑшри манкӑсен хуплашкисене ҫӗнет Ҫыравсене катертнӗ Санӑн вулавӑшра упранман манкӑн вуланӑ кун-ҫулне катерт Пӗлӗмсен кӗлете тасат Кеше тасатнӑ чух йӑнӑш тухрӗ Кеша тастнӑ. %1$d файла катертнӗ Сыпӑксен кешне тасат Пӗлӗмсем Ҫакӑ вӑя кӗрес тесен хушӑма хупса уҫмалла Тавӑрнине пӑрахӑҫланӑ Йантӑлав тавӑрни йӑнӑшӗ Йантӑлав тавӑрни Тавӑрни пурнӑҫланать ӗнтӗ Йантӑлав тунин йӑнӑшӗ Йантӑлав тӑвӑнать Мӗн йантӑлав тӑвасшӑн? Йантӑлав пурнӑҫланать ӗнтӗ Тавӑрни вӗҫленнӗ Хальхи вулавăша тавӑрма усӑ курма пулать Йантӑлавра манкасем ҫук. Йантӑлав тӑвӑннӑ Вулавӑша йантӑлавран тавӑр Йантӑлав тавӑр Йантӑлав ту v%1$s верссиччен ҫӗнетнӗ Мӗн ҫӗнни Темӗ Хушни вӑхӑчӗпе Тиск ҫинче вырӑн ҫитмен пирки сыпӑксем тийенеймерӗҫ \"%1$s\" пур ҫӗрте шыра Вулав тытӑмӗ Санӑн ҫакнӑ ҫӑл куҫ ҫук Вӗҫленӗ Ӳсӗм Йӑнӑшсем Кӗмен йӗрлевсем: Картнӑ сыпӑксене катертмелле Сыпӑксене катерт NSFW (18+) шалаш пулма пултарать 18+ Ҫакӑ апра чӑнлавлӑ мар йе тӗрӗс мар палӑртнӑ хушмасен NSFW (18+) шалашне кӑтартма чӑрмантармасть. Сыпӑксем ҫук Тата манӑн вулавăшри пур манкӑ валли усӑ кур Яланхилле сыпӑк ӗнерлев ҫӗнетнӗ Яланхилле Ҫак ӗнерелевсене яланхилле упрасшӑнах-и? %1$s: %2$s, %3$d-мӗш ел Сыпӑк ӗнерлеве Ӗнерӳ шыра Тиесе илнӗ сыпӑксем Вулавӑшран манкӑ Вулани кун-ҫула чарса лартать Кун-ҫул тасат Кун-ҫула катертнӗ Вӑрттӑнлӑх тытӑмӗ Чӑнах катертесшӗн-и? Веҫ кун-ҫулӗ ҫухалӗ. Маллали сыпӑк Умӗнхи эл Ҫӑл куҫ куҫарассипе пулӑшу NSFW (18+) ҫӑл куҫсем Файлсене суйламалли хушӑм тупӑнман Тархасшӑн MAL-а ҫӗнӗрен кӗр Ҫӑл куҫсен тата хушмасен йат-йышӗнче кӑтартни Вулама вӗҫленӗ вӑхӑчӗ Вулама пуҫланӑ вӑхӑчӗ Хӗррипе Kindle пек L пек Пӗчӗкленнипе Пысӑкланнипе Сыпӑк шучӗпе Тийесе илни вӑхӑчӗпе Йӗрленет Файлсенчи йӑнӑшсен логсене хатерлевҫӗсем патне яма упрать Йӑнӑш кӗнекине тийесе йар Куҫӑм палли Сылтӑмран сулахаялла Анлӑ елсене пайлани вулав майлӑ мар пулсан Анлӑ елсене тепӗр майлӑ пайлани Анлӑ елсене пайлани Хайлавсен шутне кӑтарт Сылтӑм Сулахай Хыҫҫӑнхи Умӗнхи HTTPS урлӑ DNS Хӑй халлӗн тийени Кӑлармалла: %s Кӗртмелле: %s Ҫук Йулашки сыпӑк илнипе Ҫак Android версси урӑх Пайлашу аса ӑтавланаймарӗ Тӑрӑх Урлӑ Урлӑ-тӑрӑх тӗсӗ Папкӑсене сери йачӗпе туни Елсене уйрӑм папкӑсенче упрамалла Тӑвӑмсем Пусма вырӑнсене вулӑш уҫӑ чухне кӑтартмалла Йӑнӑшсене кӑтарт Ҫак серилӗх валли пурне те пӑрахӑҫла Хӑй халлӗн тийесе илни, малтанах тийени Йулашки хут ҫӗнетӳ пуррине тӗрӗсленипе Йулнӑ сыпӑксемпе Хайлав шучӗпе Пурне те катерт «%s» пухмӑша катертесшӗн-и? Пухмӑша катерт Вырӑнти ҫӑл куҫран Асӑрхаттару Йатсӑр сетке Хайлава пуҫа куҫар Улшӑнӑва ҫирӗплетме есӗлӗхе ҫирӗплет Хайлава кӑтарт Чӗлхе Шыра… Хуп Тийеве халех пуҫла InternalError: Хушма хыпар-пӗлӳ пӑхма тӑвӑм-пулӑм кӗнекине пӑх Кӑтартӑну Ҫутнӑ Сӳнтернӗ Темӗ, кун тата вӑхӑт тытӑмӗ Пухмӑшсем, пӗтӗмӗшле ҫӗнетӳ, сыпӑксене туртни Вулав тытӑмӗ, кӑтартӑнни, куҫӑм Йаланхилле Ӑнсӑрт хайлав уҫ Ҫӗр ҫырли тайккирийӗ Ҫур ҫӗр ӗнтрӗкӗ Пӗр йенлӗ ӳсӗм килӗштерӗвӗ, анлӑлатнӑ килӗштерӳ Wi-Fi урлӑ ҫеҫ «Малалла вула» пускӑч Апа ҫаклатни, ыкран хӳтӗлевӗ Чарусем: %s Вуламан сыпӑклисене сиктермелле Пуҫланӑ Вырӑнти Тийесе илнӗ Шыв хӑпарнин хумӗ Ап темми Пайан Лавантӑ Ин тата Йан Ҫӑл куҫсем, хушмасем, пӗтӗмӗшле шырав Симӗс пан улми Йутсупа Чараксӑр тетел урлӑ ҫеҫ Пуҫнанисене сиктермелле Такку Хуп-хура темӗ Ап чӗлхи Халь мар Кашни 3 кун Симӗс кӑвак Куҫӑмлӑ Шутлавсем Пайлашу асне ӑт Хӑй тӗллӗн тата хӑй халлӗн йантӑлав Пухмӑша ҫӗнет Йӑнӑш кӗнекине тийесе йани, паттарейе лайӑхлатни Вуламан сыпӑксен шутне «Ҫӗнӗлӗх» ыккун ҫинче кӑтартни Сӑна тӑрӑх пысӑклатни Нумай чӗлхеллӗ Хӑй халлӗн Сӳнтернӗ Хушмасен йат-йышне илесси пулаймарӗ Кашни пухмӑшӑн хӑйӗн ала ӗнерӗвӗсем Ап ҫинчен Вулӑшӑн тухӑҫа лайӑхлатать User agent пушӑ пулмалла мар Чӗлхе Пуснӑ чухне анлӑ сӑнсене сарӑмлатни Вӑрӑм сӑнсене пайлани Управ ирӗкӗсене паман Верҫҫи Пурне те ҫӗнет Тийесе илнисене катерт Ҫӗнӗ сыпӑк хӑҫан тухассине шутламалла Сылтӑмалла туртсан сыпӑк Сулахайалла туртсан сыпӑк Ларткӑч Shizuku ӗҫлемест Ҫул-ӳсӗм чаравӗ Тепӗр кӗтӗнекен ҫӗнетӳпе Хушма лартни… Тӑтӑшлӑх палӑрт Ӗнерӳллӗ илӳ тӑтӑшлӑхӗ Малтанхилле Shizuku-н хушма ларткӑча усӑ курма Shizuku ларт тата ҫут. Йурӗ %s уҫ Хайлава вӗҫе куҫар Кӗртнӗ пухмӑшсенче пулнӑ пулсан та кӑларса пӑрахнӑ пухмӑшсенче пулнӑ серилӗхсем ҫӗнелмӗҫ. Суйланӑ Суйламан Ҫӳлелле куҫ Куҫаруҫӑ Пӗлӗмсем тата усрав Йӗрлевҫӗн хаклавӗ Кӳр Йаланхилле тавӑр Пуҫлама пӗлкӗч Килӗрех! Айтӑр темиҫе йапала ӗнерӗпӗр. Есӗ вӗсене йаланах кайран ӗнерӳсенче улӑштарма пултаратӑн. Малалла Пуҫла Ирттер Папкӑ суйла Папкӑ суйламалла Усрав пӗлкӗчӗ Апсене лартма ирӗк Ҫӑл куҫсен хушмисене лартма ирӗк парӗ. Систерӳсем килме ирӗк Вулавӑшри ҫӗнетӳсем пурри пирки тата ытти пирки пӗлтерӗ. Петтерейе хыҫра усӑ курма ирӗк Тӑсӑлакан вулавӑш ҫӗнелни, тийени тата йантӑ ӑтава тавӑрни чарӑнасран хӑтӑлтарӗ. Ирӗк пар %s апра ҫӗнни? Епӗр пуҫлав пӗлкӗчӗпе паллашма сӗнетпӗр. Ҫур ҫӗр Кивӗ верҫҫирен ҫӗнӗлетӗн те мӗн суламаллине пӗлместӗн? Нумайрах пӗлме усрав пӗлкӗчне кӗрсе пӑх. %s ҫӗнӗрен лартатӑн? «%2$s» вырӑнне «%1$s» Пулас Ытти ӗнерӳсем Каҫҫа ӑт Ӑнсӑрт Йӑнӑшсен кӗнекине йар Вӑрттӑнлатнӑ йӑнӑшсен кӗнекине хатӗрлевҫӗсене йарса парӗ. Апӑн ӗҫ-тивӗҫсене лайӑхлатма вӑрттӑнлатнӑ усӑ курав пӗлӗмӗсене йарса парӗ. %1$s тийенӗ сыпӑксене, йантӑлав ӑтӑвӗсене тата ыттине упрамалли папкӑ суйла.\n\nУйтӑм папкӑ усӑ курма сӗнетпӗр.\n\nСуйланӑ папкӑ: %2$s Тӗпчевлеме ирӗк Пур пӗрех хуш Хӑй халлӗн Вуламан сыпӑк Ҫырчӑк Ҫырчӑк улӑштар Кушак пуҫҫин Пӗр тӗс Вӑхӑт иртни палли Сыхлав Тишкерӳ тата йӑнӑшсен кӗнеки Йӑнӑшсен кӗнекине тата тишкерӗве йарса йӑнӑшсене тупма, тухӑҫлӑхне аталантарма тата пулас ҫӗнетӳсене санӑн кирлӗлӗх тивӗҫтерме пулӑшӗ Тӑнлӑ ҫӗнетӳ Тыткалу Иккӗллӗ сыпӑкне вуланӑ тесе палӑртмалла Сыпӑк вуланӑ хыҫҫӑн Ҫӗнӗ сыпӑк илнӗ хыҫҫӑн Ҫук сыпӑксен палӑрткӑчне кӑтартмалла мар Катерт Хушмана катертмелле «%s» хушмана катертесшӗн-и? Хушмасене лартма ирӗксем кирлӗ. Ирӗксене пама кунта пус. Шанчӑклӑ мар хушмасенчен шанчӑк туртса илмелле Хушмасен ҫӳпҫисем Пӗр хушмасен ҫӳпҫи те ҫук. Хушмасен ҫӳпҫи хуш Хушмасен ҫӳпҫин URL-ӗ %s-а хушма хушмасен ҫӳпҫи хуш. «index.min.json» тенипе вӗҫленекен URL пулмалла. Ку хушмасен ҫӳпҫи унсӑрах пур! Хушмасен ҫӳпҫине катерт Хушмасен ҫӳпҫин йӑнӑш URL-ӗ «%s» хушма ҫӳпҫине катертесшӗн-и? «%s» хушмасен ҫӳпҫине хушасшӑн-и? Хушмасен ҫӳпҫин ҫӑл куҫне уҫ Ылмаштар Пысӑклатма икӗ хут пусмалла %1$s мҫ Хура Шурӑ Шурӑпа хура Йаланхилле (%d) Хирӗҫле тӗссем Иккӗллӗ сыпӑксене сиктермелле Хирӗҫле урлӑ Йӑнӑш тӗл: %s Ту Тулли йӑнӑш: Ап ӗнерӗвӗ Ҫӑл куҫ ӗнерӗвӗ Хушмасен ҫӳпҫисем Пур вуланӑ серилӗх Вулавӑш йат-йышӗ ================================================ FILE: i18n/src/commonMain/moko-resources/da/plurals.xml ================================================ I går %1$d dage siden Efter %1$s minut Efter %1$s minutter %d kategori %d kategorier Næste ulæste kapitel Næste %d ulæste kapitler ================================================ FILE: i18n/src/commonMain/moko-resources/da/strings.xml ================================================ Opdateringer Historik Udvidelses info Hjælp Migerering Standard Advarsel Bogmærket Fjern filter Inverter valg Markér som læst Markér som ulæst Markér tidligere som læst Download Bogmærk kapitel Aktivér alt Rediger Omdøb kategori Rediger omslag Se kapitler Komfortabelt grid Kun covers som grid Dit bibliotek er tomt Du har ikke nogen kategorier. Tryk på plusset for at oprette en og organisere dit bibliotek. Mere Bibliotek Kategorier Biblioteksposter Kapitler Sporing Kilder Indstillinger Navn Ingen nylige opdateringer Sidst læst Filter Alfabetisk Fjern Download kø Historik Backup og gendannelse Udvidelser Intet læst for nyligt Ingen downloads Dato hentet Indstillinger Ulæst Manga ialt Menu Dato tilføjet Vælg alt Søgeindstillinger Opdater bibliotek Tilføj kategori Næste kapitel Forsøg igen Sprog Kapitler i alt Seneste kapitel Global søgning Slet Tilføj Søg Rediger kategorier Fjern bogmærke fra kapitel Deaktivér alt Pause Forrige kapitel Åben i browser Vis manga Åben i WebView Start Fortsæt Migrere Vis Visningsmåde Kompakt grid Liste Downloaded kapitler Lokale manga Sporet Vælg kategorier Vis kategorifaner Godkend for at bekræfte ænding Vis antal genstande Deaktivér Fastgør Frigør Efter upload dato Efter kapitelnummer Ældste Flyt til toppen Flyt serie til toppen Flyt til bunden Installer Del Gem Nulstil Fortryd Åben log Afbryd alle for denne serie Sorter Afbryd alle Afbryd Stigende Nyeste Faldende Tryk for at se detaljer Gendan Tilbage Genindlæs Start download nu Loader… App ikke tilgængelig Generelt Udseende Downloads Sporing Luk Læser Frem Bibliotek Avanceret Om Tema Følg system Fra Til App tema Dynamisk Æble grøn Skumring Jordbær Daiquiri Tako Blågrøn & Turquoise Yin-yang Yotsuba Kulsort Dato format Håndter notifikationer Sikkerhed Kræv oplåsning NSFW (18+) kilder Vis i kilder og udvidelsesliste Dette forhindrer ikke uofficielle eller potentielt ukorrekt markerede udvidelser fra at vise NSFW (18+) indhold i appen. I dag Lås ved inaktivitet Altid Aldrig Skjul notifikationsindhold Sikker skærm Sikker skærm skjuler app indhold, når der skiftes mellem apps, og blokerer for skærmbilleder Vis Enhedsbegrænsninger for automatiske opdateringer Kun på WiFi Elementer per række Liggende Stående Global opdatering Automatiske opdateringer Fra Hver 6. time Hver 12. time Dagligt Hver anden dag Hver tredje dag Ugentligt Kun under opladning Begrænsninger: %s Med ulæst kapitler Med \"Færdig\" status Der ikke er blevet startet Multi Ønsker du at slette kategorien \"%s\"? Tidevandsbølge Søg efter nyt cover og detaljer, når biblioteket opdateres Opdater automatisk metadata Standard kategori Nyeste manga opdateringer Antal ulæst Slet kategori Ekskluder: %s Lavendel Spørg altid Manga i ekskluderede kategorier vil ikke blive opdateret selv hvis de også er i inkluderede kategorier. Alle Ingen Inkluder: %s App sprog Fjern alt Login Ukendt fejl InternalError: Tjek nedbrudslogfiler for yderligere information Du er nu logget ud Logget ind Log af %1$s? Tilføj til bibliotek I Biblioteket Fjern fra biblioteket Log af Tilpas højde Statistik Fuldskærmsvisning Hvid Ventende Installationsprogram Kopiér til udklipsholder Lås op for %s Spring over filtrerede kapitler Nedhentet Version Angiv interval Slet nedhentede Anvend Tilpas bredde Baggrundsfarve Sprog Standardlæsetilstand Nulstil til standard Installér Til Deaktiveret Søg… Næste Spring over kapitler markeret som læst Automatisk nedhentning, nedhent forud Installerer Lodret Opdatér kategori Opdater alle Opdateringer venter Fra Manuel og automatisk sikkerhedskopiering, lagerplads Flyt serie til bunden Scanlator Opdater Begge Vandret Data og lagring Læsetilstand, skærmvisning, navigation Højre Forrige Henter ned 18+ Afinstallér Ikke nu Installerer udvidelse… Vis sidetal Påbegyndt Vis læsetilstand Uden for forventet udgivelsesperiode Installeret OK Højre og Venstre Stræk Sort Automatisk Tema, dato- og tidsformat Relative tidsstempler Forældet Grå \"%1$s\" i stedet for \"%2$s\" Næste forventede opdatering Kilder, udvidelser, global søgning Venstre Sikkerhedskopi oprettet Vis altid kapitelovergang Opret Gendan sikkerhedskopi Brugt: %1$s Laveste Rotation Slet kapitler Opret sikkerhedskopi Stående Læser Udvidelsesopdateringer Sikkerhedskopiering mislykkedes Fri Fejl Gendannelse fuldført Udelukkede kategorier Femtesidst læste kapitel Ugyldig sikkerhedskopieringsfil Appopdateringer Næste side Ingen internetforbindelse Data Læsetilstand Du er ved at fjerne \"%s\" fra dit bibliotek Højeste Lav Kildeindstillinger App-indstillinger Fjerdesidst læste kapitel Liggende Kræver genstart af appen for at træde i kraft Automatisk sikkerhedskopieringsfrekvens Opdel høje billeder Deaktiveret Senest læste kapitel %1$02d min, %2$02d sek Høj Gendan biblioteket fra sikkerhedskopi Forrige side Tredjesidst læste kapitel Ugyldig placering: %s Kan bruges til at gendanne nuværende bibliotek HTTP %d, tjek websiden i WebView Næstsidst læste kapitel Opretter sikkerhedskopi Kunne ikke nå %s Kapitelopdateringer ================================================ FILE: i18n/src/commonMain/moko-resources/de/plurals.xml ================================================ Nach %1$s Minute Nach %1$s Minuten %1$d neues Kapitel %1$d neue Kapitel Kapitel %1$s und 1 weiteres Kapitel %1$s und %2$d weitere Für %d Eintrag Für %d Einträge Erweiterungsaktualisierung verfügbar %d Erweiterungsaktualisierungen verfügbar %1$s verbleibend %1$s verbleibend %d Kategorie %d Kategorien Erledigt in %1$s mit einem Fehler Erledigt in %1$s mit %2$s Fehlern %1$s Kapitel %1$s Kapitel %d Tracker %d Tracker %d Kapitel wird übersprungen, da die Quelle dieses entweder nicht besitzt, oder weil es rausgefiltert wurde %d Kapitel werden übersprungen, da die Quelle diese entweder nicht besitzt, oder weil sie rausgefiltert wurden Gestern Vor %1$d Tagen Nächstes ungelesenes Kapitel Nächste %d ungelesene Kapitel Nächstes Kapitel Nächste %d Kapitel %1$s Kapitel fehlt %1$s Kapitel fehlen 1 Tag %d Tage %d Repository %d Repositorys Morgen In %1$d Tagen 1 Seite %1$s Seiten %1$d Eintrag migrieren? %1$d Einträge migrieren? %1$d Eintrag kopieren? %1$d Einträge kopieren? Ein Eintrag wurde übersprungen %1$d Einträge wurden übersprungen ================================================ FILE: i18n/src/commonMain/moko-resources/de/strings.xml ================================================ Name Kategorien Bibliothekseinträge Kapitel Verlauf Einstellungen Downloadwarteschlange Bibliothek Verlauf Sichern und Wiederherstellen Einstellungen Filter Lesezeichen Ungelesen Filter entfernen Alphabetisch Kapitelanzahl Zuletzt gelesen Suche Alle auswählen Als gelesen markieren Als ungelesen markieren Vorherige Kapitel als gelesen markieren Herunterladen Lesezeichen setzen Lesezeichen entfernen Löschen Bibliothek aktualisieren Bearbeiten Hinzufügen Kategorie hinzufügen Kategorien bearbeiten Kategorie umbenennen Kategorien festlegen Cover bearbeiten Pause Vorheriges Kapitel Nächstes Kapitel Erneut versuchen Entfernen Fortfahren Im Browser öffnen Anzeigemodus Anzeige Kacheln Liste Abbrechen Sortierung Installieren Teilen Speichern Zurücksetzen Rückgängig machen Protokoll öffnen Wiederherstellen Wird geladen… App nicht verfügbar Allgemein Leser Downloads Tracking Erweitert Über Elemente pro Zeile Hochformat Querformat Automatische Aktualisierungen Aus Alle 6 Stunden Alle 12 Stunden Täglich Alle 2 Tage Wöchentlich Alle Geräteeinschränkungen für automatische Aktualisierungen Beim Laden Einträge mit dem Status „Abgeschlossen“ überspringen Fortschritt nach dem Lesen aktualisieren Standardkategorie Immer fragen Vollbild Animierte Seitenübergänge Seitennummer anzeigen Rand abschneiden Benutzerdefinierte Helligkeit Benutzerdefinierten Farbfilter Bildschirm anlassen Navigation Lautstärketasten Lautstärketasten umkehren Hintergrundfarbe Weiß Schwarz Standard-Lesemodus Seiten (links nach rechts) Seiten (rechts nach links) Seiten (vertikal) Langer Streifen Skalierung Bild ausfüllen Strecken Horizontal ausfüllen Vertikal ausfüllen Orginalgröße Intelligentes Ausfüllen Anfangsposition des Zooms Automatisch Links Rechts Mitte Standardausrichtung Frei Hochformat erzwingen Querformat erzwingen Rot Grün Blau Alpha Nachdem manuell als gelesen markiert Automatisch nach dem Lesen löschen Deaktiviert Ab zuletzt gelesenem Kapitel Ab zweitletzt gelesenem Kapitel Ab drittletzt gelesenem Kapitel Ab viertletzt gelesenem Kapitel Ab fünftletzt gelesenem Kapitel Neue Kapitel herunterladen Tracker Datensicherung erstellen Kann benutzt werden, um die aktuelle Bibliothek wiederherzustellen Datensicherung wiederherstellen Bibliothek mit Hilfe einer Datensicherung wiederherstellen Automatische Sicherungshäufigkeit Datensicherung erstellt Wiederherstellen abgeschlossen Was möchtest du sichern? Datensicherung wird wiederhergestellt Datensicherung wird erstellt Kapitel-Zwischenspeicher leeren Belegt: %1$s Zwischenspeicher geleert, %1$d Dateien gelöscht Fehler während des Leerens aufgetreten Cookies löschen Cookies gelöscht Datenbank leeren Verlauf für Einträge löschen, die nicht in deiner Bibliothek gespeichert sind Einträge gelöscht Version Fehlerberichte senden Hilft bei der Behebung von Fehlern. Keine sensiblen Daten werden gesendet Bei %1$s anmelden Benutzername Passwort Anmelden Angemeldet Unbekannter Fehler Kategorie wird aktualisiert Keine weiteren Ergebnisse Lokale Quelle Fortlaufend Unbekannt Lizenziert Aus der Bibliothek entfernen Heruntergeladene Kapitel löschen? Kapitel %1$s Wird heruntergeladen (%1$d/%2$d) Fehler Pausiert Quellentitel Kapitelnummer Nach Quelle Nach Kapitelnummer Herunterladen Ungelesen Bist du sicher, dass du die ausgewählten Kapitel löschen willst? Tracking Am Lesen Abgeschlossen Abgebrochen Pausiert Plane ich zu Lesen Bewertung Titel Status Eine Kategorie mit diesem Namen existiert bereits! Kategorien gelöscht Das Lesedatum dieses Kapitels wird gelöscht. Bist du sicher? Alle Kapitel dieses Eintrags zurücksetzen Zur Bibliothek hinzufügen? Bild gespeichert Eigener Filter Als Vorschaubild festlegen Vorschaubild geändert Seite: %1$d Nächstes Kapitel nicht gefunden Das Bild konnte nicht geladen werden Dieses Bild als Vorschaubild setzen? Fehler beim Herunterladen der Kapitel. Du kannst es in der Downloadsektion erneut versuchen Neue Kapitel gefunden Ändern des Vorschaubildes fehlgeschlagen Bitte füge den Eintrag deiner Bibliothek hinzu, bevor du dies tust Wähle ein Vorschaubild Wähle eine Sicherungsdatei Herunterladen Kein neues Update verfügbar Herunterladen… Tippe, um das Update zu installieren Fehler beim Herunterladen Neue Version verfügbar! Keine Downloads Keine neuen Kapitel Nichts kürzlich gelesen Deine Bibliothek ist leer Downloader Fehler Kapitel konnte aufgrund eines unerwarteten Fehlers nicht heruntergeladen werden Keine WLAN-Verbindung verfügbar Kein Netzwerk verfügbar Downloads pausiert Tracking Neues Globale Suche Andere Globale Suche… Neueste Stöbern Allgemein Heruntergelade Kapitel Keine Kategorien vorhanden. Tippe auf die Plus-Schaltfläche, um eine Kategorie zum Sortieren deiner Bibliothek zu erstellen. Migrieren Erweiterungen Erweiterungsinformationen Aktualisieren Installieren Anstehend Wird heruntergeladen Wird installiert Installiert Deinstallieren Bösartige Erweiterungen können gespeicherte Anmeldedaten auslesen oder beliebigen Code ausführen. \n \nDurch das Vertrauen in die Erweiterung akzeptierst du diese Risiken. Keine Animation Normal Schnell Zur Bibliothek hinzugefügt Aus der Bibliothek entfernt In die Zwischenablage kopiert: \n%1$s Migrieren Kopieren Vertrauen Nicht vertrauenswürdig Nicht vertrauenswürdige Erweiterung Animationsgeschwindigkeit beim Doppeltippen Wähle zu beinhaltende Daten Seiten Quelle nicht installiert: %1$s Am Wiederlesen Status Typ Beendet: Aktuell: Als Nächstes: Davor: Es gibt kein nächstes Kapitel Es gibt kein vorheriges Kapitel Lade Seiten… Seiten konnten nicht geladen werden: %1$s In WebView öffnen Gelesene Kapitel überspringen Aktionen bei langem Antippen anzeigen Overlay Multiplizieren Bildschirm Brennen / Verdunkeln Farbfilter Mischmodus Abwedeln / Aufhellen Hilfe Keine Ergebnisse gefunden Wähle eine Quelle, aus welcher du migrieren möchtest Zurück Vorwärts Aktualisieren Bibliothek Veraltet Diese Erweiterung ist nicht länger verfügbar. Sie funktioniert möglicherweise nicht mehr ordnungsgemäß und kann Probleme mit der App verursachen. Es wird empfohlen, sie zu deinstallieren. Datumsformat Globale Aktualisierung Aus %1$s abmelden? Abmelden Du bist jetzt abgemeldet Pausiert Mehr Neuestes Kapitel Kapitel anzeigen Alle abbrechen Hell Dunkel System Benachrichtigungen verwalten Sicherheit und Privatsphäre Entsperren erforderlich Während Inaktivität sperren Immer Nie Sicherer Bildschirm Updates ausstehend Inhalt im Ausschnittbereich anzeigen Fehler beim Umgehen von Cloudflare Bitte aktualisiere die WebView-App für eine bessere Kompatibilität Kapitelaktualisierungen Sicherer Bildschirm verbirgt App-Inhalte beim Wechseln von Apps und blockiert Screenshots Anzeige Kapitel %1$s Kapitel %1$s und %2$d mehr Kapitel %1$s Benachrichtigungsinhalt verbergen Akkuverbrauch-Optimierung deaktivieren Hilft bei Bibliotheksaktualisierungen und -sicherungen im Hintergrund Akkuverbrauch-Optimierung ist bereits deaktiviert E-Mail-Adresse Kapitelübergang immer anzeigen Menü Neueste Älteste Nach oben verschieben Nach unten verschieben Erweiterungsupdates Bibliothek wird aktualisiert Gefilterte Kapitel überspringen Beim Lesen Quellen Auswahl umkehren Langer Streifen mit Lücken Seitenränder Angeheftet Loslösen Anheften Tracking hinzufügen Weniger Mehr In der Bibliothek Zur Bibliothek hinzufügen WebView ist für das Funktionieren der App erforderlich Open-Source-Lizenzen Webseite Nur Heruntergeladenes Kap. %1$s - %2$s Datensicherungswiederherstellung fehlgeschlagen Datensicherung fehlgeschlagen Wiederherstellung abgebrochen Wiederherstellung wird bereits durchgeführt Datensicherung wird bereits durchgeführt Nach Updates suchen Zuletzt genutzt Anleitung für lokale Quellen %1$02d min, %2$02d s Filtert alle Einträge in deiner Bibliothek Grau Lesemodus Für diese Serie Geräteeinstellungen konnten nicht geöffnet werden Einweg-Synchronisation zum Aktualisieren der Kapitelfortschritte in den externen Trackingdiensten. Richte Tracking für einzelne Einträge über deren jeweiligen Trackingbutton ein. Bibliothekscover aktualisieren Nach Uploaddatum Daten Fehlende Quellen: Datensicherung beinhaltet keinerlei Bibliothekseinträge. Ungültige Sicherungsdatei: Auf neue Cover und Details überprüfen, wenn die Bibliothek aktualisiert wird Metadaten automatisch aktualisieren Migrieren Komfortable Kacheln Registerkarten Kategorienreiter anzeigen Keine Seiten gefunden Alles deaktivieren Alles aktivieren Kurz den aktuellen Modus anzeigen, wenn der Leser geöffnet wird Lesemodus anzeigen Starten Quelle nicht gefunden Deaktivieren Erfordert einen Neustart der App, um wirksam zu werden Vernetzung Tippzonen umkehren Beide Vertikal Horizontal Unbekannter Status Unbekannter Autor Auf v%1$s aktualisiert Was ist neu Herunterladen von Kapiteln aufgrund von zu wenig Speicherplatz nicht möglich Überall nach „%1$s“ suchen Hinzufügedatum Lesemodus Thema Du hast keine angehefteten Quellen Abgeschlossen Fortschritt Fehler Nicht-angemeldete Tracker: Erlauben, mit Lesezeichen versehene Kapitel zu löschen Kapitel löschen Quellen dieser Erweiterung könnten NSFW/Ü18-Inhalte enthalten Ü18 Dies verhindert nicht, dass inoffizielle oder möglicherweise falsch gekennzeichnete Erweiterungen NSFW/Ü18-Inhalte in der App anzeigen. Keine Kapitel gefunden Standard-Kapiteleinstellungen aktualisiert Als Standard setzen Auch für alle Einträge in meiner Bibliothek anwenden Bist du sicher, dass du diese Einstellungen als Standard speichern willst? Kapiteleinstellungen %1$s: %2$s, Seite %3$d Einstellungen durchsuchen Heruntergeladene Kapitel Aus der Bibliothek Leseverlauf pausieren Inkognito-Modus Verlauf löschen Bist du sicher? Der gesamte Verlauf wird gelöscht. Verlauf gelöscht Nächste Seite Vorherige Seite Quellenmigration NSFW/Ü18-Quellen In Quellen- und Erweiterungslisten anzeigen Keine Dateiauswahl-App gefunden Bitte logge dich erneut in MAL ein Rand Tippzonen Kindle-Stil L-förmig Enddatum Startdatum Speichert Fehlerprotokolle in einer Datei, die dann mit den Entwicklern geteilt wird Absturzprotokolle teilen Absteigend Aufsteigend Nach Kapitelnummer Nach Upload-Datum Getrackt Anzahl der Elemente anzeigen Rechts und Links Breite Seiten aufteilen Falls die Platzierung der aufgeteilten Seiten nicht mit der Leserichtung übereinstimmt Platzierung aufgeteilter Seiten umkehren Du musst jegliche fehlende Erweiterungen installieren und dich anschließend bei den Tracking-Anbietern einloggen, um sie zu benutzen. Kurz anzeigen, wenn der Leser geöffnet wird Tippzonen-Overlay anzeigen Rechts Links Weiter Zurück DNS over HTTPS (DoH) Ausschließen: %s Einschließen: %s Nichts Abrufdatum des Kapitels Einträge in ausgeschlossenen Kategorien werden nicht heruntergeladen, auch wenn sie in eingeschlossenen Kategorien vorhanden sind. Automatisches Herunterladen Einträge in ausgeschlossenen Kategorien werden nicht aktualisiert, auch wenn sie in eingeschlossenen Kategorien vorhanden sind. Tippe, um Details anzuzeigen Diese Android-Version wird nicht mehr unterstützt Kopieren in die Zwischenablage fehlgeschlagen Querformat Hochformat Erstellt Ordner nach den Titeln der Einträge Seiten in separaten Ordnern speichern Ausrichtung Aktionen Graustufen Inkognito-Modus deaktivieren Automatisch Alles für diese Serie abbrechen Keine Übereinstimmung gefunden Quelle wird nicht unterstützt Ungelesen Datum Sortiere nach Ungültiges Kapitelformat Kapitel nicht gefunden Einschränkungen: %s Lokale Quelle Aus An Fehler beim Teilen des Covers Fehler beim Speichern des Covers Cover gespeichert Cover Sortierungseinstellungen pro Kategorie Tracking-Anleitung Du hast noch keine Kategorien. Download jetzt starten Einige Hersteller haben zusätzliche App-Beschränkungen, die Hintergrunddienste stoppen. Diese Webseite hat mehr Informationen darüber, wie man dies beheben kann. Die Sicherung/Wiederherstellung funktioniert möglicherweise nicht richtig, wenn die MIUI-Optimierung deaktiviert ist. Tiefschwarzer Dunkelmodus Yotsuba Yin & Yang Tako Erdbeer-Daiquiri Mitternachtsdämmerung Grüner Apfel App-Design Erweiterte Tracker Bieten für bestimmte Quellen erweiterte Funktionen an. Einträge werden automatisch getrackt, wenn sie deiner Bibliothek hinzugefügt werden. Dynamisch Hintergrundaktivität Niedrigste Niedrig Hoch Höchste Empfindlichkeit für das Menü-Ausblenden beim Scrollen Invertiert Heute Blaugrün & Türkis Erscheinungsbild Authentifiziere dich, um die Änderungen zu bestätigen Standard Tracken Leitfaden für den Einstieg Tablet-Benutzeroberfläche Ausgeschlossene Kategorien Beim Übersetzen mithelfen App-Informationen Installiere und starte Shizuku, um Shizuku als Installationsprogramm für Erweiterungen zu verwenden. Shizuku läuft nicht Legacy Installationsprogramm Erweiterung wird installiert… Einträge insgesamt Ausführliche Protokollierung Ausführliche Protokolle im Systemprotokoll ausgeben (verringert die App-Leistung) Sprache Warnung Große Aktualisierungen schaden Quellen und könnten zu langsameren Aktualisierungen sowie höherem Akkuverbrauch führen. Tippe, um mehr zu erfahren. Du solltest Kopien der Datensicherungen auch an anderen Orten aufbewahren. Datensicherungen beinhalten möglicherweise sensible Daten, einschließlich gespeicherter Passwörter. Sei vorsichtig beim Teilen. Nur über WLAN Alle 3 Tage Achtung: Große Downloads könnten dazu führen, dass Quellen langsamer werden und/oder %s blockieren. Tippe um mehr zu erfahren. Alle aktualisieren App-Updates Kapitel-Zwischenspeicher beim Öffnen der App löschen %1$d Nicht-Bibliothekseinträge in der Datenbank Nichts zu bereinigen Laden der verfügbaren Erweiterungen ist fehlgeschlagen Datenschutzbestimmungen Einträge mit ungelesen Kapiteln überspringen Für Hilfe zum Beheben von Fehlern bei Bibliotheksaktualisierungen, siehe %1$s Als CBZ-Archiv speichern Abgebrochen Unterbrochen Veröffentlichung abgeschlossen Eintrag anzeigen Nur-Cover-Kacheln Bei breiten Bildern automatisch hineinzoomen Innerhalb breiter Seiten navigieren Nicht begonnene Einträge überspringen Übersprungen, da die Serie abgeschlossen ist Übersprungen, weil es ungelesene Kapitel gibt Übersprungen, weil keine Kapitel gelesen wurden %1$d Aktualisierung(en) fehlgeschlagen Antippen, um mehr zu erfahren Umgekehrtes Hochformat Serie nach oben verschieben Deaktiviert Fehler beim Speichern des Bildes Keine zu sichernden Bibliothekseinträge verfügbar Auf GitHub öffnen WebView-Daten löschen WebView-Daten gelöscht Schließen Keine installierte Quelle gefunden Keine Quelle gefunden Anzahl an Ungelesenem Letzte Aktualisierungsprüfung Verbessert die Leserleistung Seite %d während des Aufteilens nicht gefunden Dateipfad der Seite %d konnte nicht gefunden werden Setzt den Lesemodus und die Ausrichtung aller Serien zurück Lesereinstellungen für jede Serie zurücksetzen Alle Lesereinstellungen zurückgesetzt Lesereinstellungen konnten nicht zurückgesetzt werden Tja, das ist jetzt etwas peinlich Version Sprache Altersfreigabe Wunschliste Abgeschlossen-Liste Warteliste Unvollendet-Liste Leseliste Nur im nicht tarifgebundenen Netz Zuletzt gelesenes Kapitel konnte nicht geöffnet werden Benutzerdefiniertes Cover Nicht installiert App-Sprache Lavendel Keine Beschreibung Möchtest du die Kategorie „%s“ löschen? Kategorie löschen InternalError: Überprüfe die Absturzprotokolle für mehr Infos Standard-User-Agent-Text Standard-User-Agent-Text zurücksetzen Alles entfernen Deine kürzlich aktualisierten Bibliothekseinträge ansehen Widget ist nicht verfügbar, wenn die App-Sperre aktiviert ist Ein Update ist bereits im Gange User-Agent-Text darf nicht leer sein Flutwelle Im Voraus herunterladen Automatisch während des Lesens herunterladen Funktioniert nur, wenn das aktuelle Kapitel sowie das darauf folgende bereits heruntergeladen sind. Bist du dir sicher? Du bist gerade dabei, „%s“ aus deiner Bibliothek zu entfernen Mehrere Sprachen Bibliothek zuletzt aktualisiert: %s Beliebt Speicherberechtigungen nicht erteilt Übersprungen, da die Serie keine Aktualisierung benötigt Suchen… Thema, Datums- und Zeitformat Lesemodus, Anzeige, Navigation Automatische Downloads, im Voraus herunterladen Kategorien, globale Aktualisierungen, Kapitelaktionen App neustarten Einweg-Synchronisation, erweiterte Synchronisation Quellen, Erweiterungen, globale Suche Ups! Absturzprotokolle ausgeben, Akkuverbrauch-Optimierung Manuelle und automatische Datensicherungen, Speicherplatz %s ist auf einen unerwarteten Fehler gestoßen. Wir empfehlen dir, die Absturzprotokolle in unseren Support-Kanal auf Discord zu teilen. App-Sperre, sicherer Bildschirm Unbekannter Titel Ungültiger Speicherort: %s Ungültiger User-Agent-Text Gerade eben Downloads werden überprüft Zufälligen Eintrag öffnen Keine Einträge in dieser Kategorie gefunden F-Droid-Builds werden nicht offiziell unterstützt. \nTippe, um mehr zu erfahren. Weiterlesen-Button Downloads neu indizieren Datum entfernen? Dies wird dein zuvor gewähltes Startdatum von %s entfernen Dies wird dein zuvor gewähltes Enddatum von %s entfernen App zwingen, heruntergeladene Kapitel erneut zu überprüfen Übersicht Heruntergeladen Lesedauer In der globalen Aktualisierung Insgesamt Gelesen Durchschnittswert Verwendet n. a. %d d %d h Lokal Getrackte Einträge Abgeschlossene Einträge Statistiken Gestartet Einträge Tracker %d min %d s Nicht jetzt Kategorie ist leer Anzahl an Ungelesenem auf dem „Neues“-Symbol anzeigen In die Zwischenablage kopiert Verfügbar, aber Quelle ist nicht installiert: %s Doppelte Kapitel überspringen %1$s-Fehler: %2$s *erforderlich Einträge verbergen, die bereits in der Bibliothek sind In die Zwischenablage kopieren Kategorie aktualisieren Hohe Bilder teilen Overlay Breite Seiten drehen, damit sie passen Ausrichtung gedrehter breiter Seiten spiegeln Debug-Info Kapitel beim Streichen nach rechts Kapitel beim Streichen nach links Zum Zoomen doppeltippen Intervalle Benutzerdefiniertes Aktualisierungsintervall Intervall einstellen Nächste erwartete Aktualisierung Nächsten Veröffentlichungszeitpunkt vorhersagen Übersprungen, da heute keine Veröffentlichung erwartet wurde Schätzt alle Aktualisiert alle Dies wird das lokale Tracking entfernen. Auch aus %s entfernen OK Tracking von %s entfernen? Heruntergeladenes löschen Hat Ergebnisse Bibliothek wird synchronisiert Bibliothekssynchronisierung abgeschlossen Tippe hier, um Hilfe zu Cloudflare zu erhalten Downloads werden neu indexiert Tracker-Login Sicherungsdatei konnte nicht erstellt werden HTTP %d, überprüfe die Webseite in WebView Keine Internetverbindung %s konnte nicht erreicht werden %s entsperren Serie nach unten verschieben Relative Zeitstempel „%1$s“ anstelle von „%2$s“ App-Einstellungen Quelleneinstellungen Bibliothek wird aktualisiert… (%s) Keine Datei ausgewählt Nie Reduziert Ghosting auf E-Papier-Displays Zuletzt automatisch gesichert: %s Bei Umblättern aufleuchten Daten und Speicher Erstellen Anwenden Auf Standard zurücksetzen Keine Scanlationgruppe gefunden Scanlator Speichernutzung Tracker-Bewertung Scanlationgruppe ausschließen Ausgewählt Nicht ausgewählt Speicherort Wird für automatische Datensicherungen, heruntergeladene Kapitel und lokale Quellen verwendet. Weitere Optionen Nach oben navigieren Ordner auswählen Einführungstour Neu bei %s? Wir empfehlen dir, unseren Einstiegsleitfaden anzusehen. Loslegen Es muss ein Ordner ausgewählt sein Willkommen! %s reinstalliert? Überspringen Weiter Lass uns zuerst ein paar Dinge einrichten. Du kannst diese später in den Einstellungen jederzeit ändern. Kein Speicherort festgelegt Wähle einen Ordner aus, in welchem %1$s Kapitel-Downloads, Datensicherungen und mehr speichern wird. \n \nEin dedizierter Ordner wird empfohlen. \n \nAusgewählter Ordner: %2$s Berechtigung für Benachrichtigungen Berechtigung zum Installieren von Apps Verfügbar: %1$s / Insgesamt: %2$s Verhindere Unterbrechungen bei lang anhaltenden Bibliotheksaktualisierungen, Downloads und Sicherungswiederherstellungen. Akkunutzung im Hintergrund Zum Installieren von Quellenerweiterungen. Erhalte Benachrichtigungen für Bibliotheksaktualisierungen und mehr. Für das Installieren von Erweiterungen sind Berechtigungen erforderlich. Tippe hier, um sie zu gewähren. Sensible Einstellungen einbeziehen (z. B. Login-Token für Tracker) Zulassen Vollständiger Fehler: Benutzerdefinierte Aktualisierungshäufigkeit: Erweiterungs-Repositorys Es wurden noch keine Repositorys festgelegt. Repository hinzufügen Dieses Repository existiert bereits! Repository löschen Möchtest du das Repository „%s“ löschen? Du aktualisierst von einer älteren Version und bist dir nicht sicher, was du auswählen sollst? Schau dir den Speicherleitfaden für mehr Informationen an. Speicherleitfaden Intelligentes Aktualisieren Repository-URL Füge zusätzliche Repositorys zu %s hinzu. Deren URLs sollten mit „index.min.json“ enden. Ungültige Repository-URL Ca. %1$s bis zur Veröffentlichung neuer Kapitel, wird ca. alle %2$s überprüft. Nord Open-Source-Repository Bald Zertifikatsbestätigungen zurücknehmen Rauszoomen deaktivieren Benutzerdefiniertes Anzeigeprofil Trotzdem hinzufügen Ersetzen Signaturschlüssel-Fingerprint existiert bereits Repository %1$s hat den gleichen Signaturschlüssel-Fingerprint wie %2$s. \nFalls das erwünscht ist, wird %2$s nun ersetzt. Falls nicht, kontaktiere den Repository-Maintainer. Nächster Monat Vorheriger Monat Bevorstehend Bevorstehende Aktualisierungen ansehen Leitfaden für Bevorstehendes Dauerhafter Ordnerzugriff konnte nicht erlangt werden. Die App kann sich unerwartet verhalten. Dieser Manga ist entweder abgeschlossen, oder es existiert kein geschätztes Veröffentlichungsdatum. Leuchte jede Leuchte mit Schwarz Weiß Weiß und Schwarz Dauer des Leuchtens %1$s ms Link kopieren Erweiterungsrepositorys Sicherungsdatei ist beschädigt JSON-Sicherung wird nicht unterstützt Herunterladen von doppelten gelesenen Kapiteln überspringen Möchtest du das Repository \"%s\" hinzufügen? Tracker auf Kapitel %d aktualisieren? Datenerhebung und Absturzprotokolle Sende anonymisierte Nutzungsdaten, um App-Funktionen zu verbessern. Datenerhebung zulassen Zufällig Absturzprotokolle senden Anonymisierte Absturzprotokolle an das Entwicklerteam senden. Sicherheit Das Übermitteln von Absturzprotokollen und erhobenen Daten ermöglicht es uns, Probleme zu erkennen und zu beheben, die Leistung zu verbessern und künftige Updates besser auf deine Bedürfnisse abzustimmen Entfernen Erweiterung entfernen? Möchtest du die Erweiterung „%s“ wirklich entfernen? Alle gelesenen Einträge Fortschritt aktualisieren, wenn als gelesen markiert wird Tracker auf Kapitel %d aktualisiert Reduziert stufenweise den Grenzwert, wenn der Leser nur ein leeres Bild lädt.\nAusgewählt: %s Benutzerdefinierter Hardware-Bitmap-Grenzwert Standard (%d) Beeinflusst die Leistung. Nur aktivieren, wenn das Reduzieren des Bitmap-Grenzwerts das Problem von leeren Bildern nicht behebt Leseverlauf für eine Erweiterung pausieren Automatisch Monochrom Privat getrackt Privat tracken Öffentlich tracken Bibliotheksliste Bibliothek exportiert Autor Exportieren Illustrator Legacy-Decoder für Langer-Streifen-Leser verwenden Doppeltes gelesenes Kapitel als gelesen markieren Ungelesene Kapitel Verhalten Nach dem Abrufen eines neuen Kapitels Nach dem Lesen eines Kapitels Notizen Notizen bearbeiten Mir gefiel der Teil, in dem… Mögliche Duplikate In deiner Bibliothek existieren Einträge mit einem ähnlichen Namen.\n\nWähle einen Eintrag zum Migrieren aus oder füge ihn trotzdem hinzu. Du bist dabei, Einträge aus der Datenbank zu entfernen Gelesene Kapitel und Fortschritte von Einträgen, die sich nicht in deiner Bibliothek befinden, werden gelöscht Einträge mit gelesenen Kapiteln behalten Erstellen eines Download-Verzeichnisses fehlgeschlagen Erstellen des Verzeichnisses fehlgeschlagen: %s Mangatitel in der Bibliothek mit ihren Quellen abgleichen Achtung: Sollte ein Manga umbenannt werden, wird er aus der Downloadwarteschlange entfernt (falls dort vorhanden). Einloggen… Catppuccin Alle auswählen Aktivierte Quellen auswählen Angepinnte Quellen auswählen Fortfahren Keine auswählen Ausgewählt Verfügbar Daten zum Migrieren Downloads des aktuellen Eintrags nach der Migration löschen Eintrag nur anzeigen, wenn das Ergebnis zusätzliche Kapitel beinhaltet Erweiterter Suchmodus Übereinstimmung basierend auf Kapitelnummer treffen Zusätzliche Suchbegriffe (optional) Hilft dabei, mittels zusätzlicher Schlagwörter die Suchergebnisse einzugrenzen Einträge ohne Treffer verbergen Diese Optionen sind langsam und gefährlich und können zu Beschränkungen seitens der Quellen führen Einträge ohne neue Kapitel verbergen Teilt den Titel für eine breitere Suche in Schlagwörter auf Kopieren Keine Alternativen gefunden Neueste: %1$s Unbekannt Manuell suchen Nicht migrieren Abbrechen Kopieren Indikator für fehlende Kapitel verbergen Falls aktiviert, wird die am weitesten entfernte Übereinstimmung gewählt. Andernfalls wird die erste Übereinstimmung nach Quellpriorität ausgewählt. Migration Migration (%1$d/%2$d) Migrieren Jetzt migrieren Jetzt kopieren Migrieren stoppen? Stopp Migrieren Abbrechen Abbrechen Keine Kapitel gefunden, dieser Eintrag konnte nicht für eine Migration verwendet werden Spenden Bilder in Mangabeschreibungen anzeigen Nicht-ASCII-Dateinamen nicht zulassen Versichert Kompatibilität mit bestimmten Speichermedien, die Unicode nicht unterstützen. Ist diese Option aktiviert, müssen Quellen- und Manga-Ordner manuell umbenannt werden, indem Nicht-ASCII-Zeichen durch ihre UTF-8-Hexadezimaldarstellungen in Kleinbuchstaben ersetzt werden. Kapiteldateien müssen nicht umbenannt werden. Gleichzeitige Quellendownloads Gleichzeitige Seitendownloads Pro Quelle gleichzeitig heruntergeladene Seiten Tab schließen Ausgeschlossene Scanlationgruppen herausfiltern Wird berechnet… Mit Lesezeichen versehen ================================================ FILE: i18n/src/commonMain/moko-resources/el/plurals.xml ================================================ %1$d νέο κεφάλαιο %1$d νέα κεφάλαια Για %d καταχώριση Για %d καταχωρίσεις Διαθέσιμη ενημέρωση επέκτασης %d διαθέσιμες ενημερώσεις επεκτάσεων Μετά από %1$s λεπτό Μετά από %1$s λεπτά Κεφάλαια %1$s και 1 ακόμη Κεφάλαια %1$s και %2$d ακόμη %1$s που απομένει %1$s που απομένουν %d κατηγορία %d κατηγορίες Έγινε σε %1$s με %2$s σφάλμα Έγινε σε %1$s με %2$s σφάλματα %1$s κεφάλαιο %1$s κεφάλαια %d ιχνηλάτης %d ιχνηλάτες Παραλείπεται %d κεφάλαιο, είτε λείπει από την πηγή είτε έχει φιλτραριστεί Παραλείπονται %d κεφάλαια, είτε λείπουν από την πηγή είτε έχουν φιλτραριστεί Εχθές %1$d μέρες πριν Επόμενο αδιάβαστο κεφάλαιο Επόμενα %d αδιάβαστα κεφάλαια Επόμενο κεφάλαιο Επόμενα %d κεφάλαια Λείπει %1$s κεφάλαιο Λείπουν %1$s κεφάλαια 1 ημέρα %d ημέρες %d αποθετήριο %d αποθετήρια Μεταφορά %1$d καταχώρησης; Μεταφορά %1$d καταχωρήσεων; Αντιγραφή %1$d καταχώρησης; Αντιγραφή %1$d καταχωρήσεων; Αύριο Σε %1$d ημέρες 1 σελίδα %1$s σελίδες Μια καταχώρηση παραλείφθηκε %1$d καταχωρήσεις παραλείφθηκαν ================================================ FILE: i18n/src/commonMain/moko-resources/el/strings.xml ================================================ Όνομα Κατηγορίες Καταχωρήσεις βιβλιοθήκης Κεφάλαια Παρακολούθηση Ιστορικό Ρυθμίσεις Ουρά λήψεων Βιβλιοθήκη Ιστορικό Ενημερώσεις Αντίγραφο ασφαλείας και επαναφορά Μεταφορά Επεκτάσεις Πληροφορίες επέκτασης Ρυθμίσεις Φίλτρο Στους Σελιδοδείκτες Αδιάβαστα Αφαίρεση φίλτρου Αλφαβητικά Σύνολο κεφαλαίων Τελευταίο αναγνωσμένο Αναζήτηση Καθολική αναζήτηση Επιλογή όλων Σήμανση ως αναγνωσμένο Σήμανση ως μη αναγνωσμένο Σήμανση προηγούμενου ως αναγνωσμένο Λήψη Προσθήκη σελιδοδείκτη κεφαλαίου Κατάργηση σελιδοδείκτη κεφαλαίου Διαγραφή Ενημέρωση βιβλιοθήκης Επεξεργασία Προσθήκη Προσθήκη κατηγορίας Επεξεργασία κατηγοριών Μετονομασία κατηγορίας Ορισμός κατηγοριών Επεξεργασία εξώφυλλου Παύση Προηγούμενο κεφάλαιο Επόμενο κεφάλαιο Επανάληψη Αφαίρεση Συνέχεια Άνοιγμα σε πρόγραμμα περιήγησης Λειτουργία προβολής Προβολή Συμπαγές πλέγμα Λίστα Ληφθέντα κεφάλαια Άκυρο Ταξινόμηση Εγκατάσταση Κοινοποίηση Αποθήκευση Επαναφορά Αναίρεση Άνοιγμα αρχείου καταγραφής Επαναφορά Φόρτωση… Μη διαθέσιμη εφαρμογή Γενικά Αναγνώστης Λήψεις Παρακολούθηση Για προχωρημένους Περί Στοιχεία ανά σειρά Κατακόρυφα Οριζόντια Αυτόματες ενημερώσεις Απενεργοποιημένο Κάθε 6 ώρες Κάθε 12 ώρες Καθημερινά Κάθε 2 ημέρες Εβδομαδιαία Όλα Περιορισμοί αυτόματων ενημερώσεων συσκευής Κατά τη φόρτιση Παράλειψη καταχωρήσεων με κατάσταση \"Ολοκληρώθηκε\" Ενημέρωση προόδου μετά την ανάγνωση Προεπιλεγμένη κατηγορία Ερώτηση πάντα Ενημέρωση Εγκατάσταση Αναμονή Γίνεται λήψη Εγκατάσταση Εγκαταστημένο Εμπιστέψου Μη αξιόπιστο Απεγκατάσταση Μη αξιόπιστη επέκταση Οι κακόβουλες επεκτάσεις μπορούν να διαβάσουν τυχόν αποθηκευμένα διαπιστευτήρια σύνδεσης ή να εκτελέσουν αυθαίρετο κώδικα. \n \nΜε την εμπιστοσύνη αυτής της επέκτασης, αποδέχεστε αυτούς τους κινδύνους. Πλήρης οθόνη Ζωντανή μετάβαση σελίδας Ταχύτητα κίνησης διπλού αγγίγματος Εμφάνιση αριθμού σελίδας Περικοπή άκρων Προσαρμοσμένη φωτεινότητα Προσαρμοσμένο φίλτρο χρώματος Να κρατηθεί η οθόνη ανοιχτή Πλοήγηση Πλήκτρα ήχου Αντιστροφή των πλήκτρων έντασης Χρώμα φόντου Άσπρο Μαύρο Προεπιλεγμένη λειτουργία ανάγνωσης Σελιδοποιημένο (από αριστερά προς τα δεξιά) Σελιδοποιημένο (από δεξιά προς τα αριστερά) Σελιδοποιημένο (κατακόρυφα) Μακριά λωρίδα Σελιδοποίηση Τύπος κλίμακας Προσαρμογή στην οθόνη Τέντωμα Προσαρμογή στο πλάτος Προσαρμογή στο ύψος Αρχικό μέγεθος Έξυπνη προσαρμογή Μεγέθυνση αρχικής θέσης Αυτόματα Αριστερά Δεξιά Κέντρο Χωρίς κίνηση Κανονική Γρήγορη Προεπιλεγμένη περιστροφή Ελεύθερο Κλειδωμένο κατακόρυφα Κλειδωμένο οριζόντια Κόκκινο Πράσινο Μπλε Αλφα Αφού επισημανθεί χειροκίνητα ως αναγνωσμένο Αυτόματη διαγραφή μετά την ανάγνωση Απενεργοποιημένο Τελευταίο αναγνωσμένο κεφάλαιο Προτελευταίο αναγνωσμένο κεφάλαιο Προ-προτελευταίο αναγνωσμένο κεφάλαιο Προ-προ-προτελευταίο αναγνωσμένο κεφάλαιο Προ-προ-προ-προτελευταίο αναγνωσμένο κεφάλαιο Λήψη νέων κεφαλαίων Ιχνηλάτες Δημιουργία αντιγράφου ασφαλείας Μπορεί να χρησιμοποιηθεί για επαναφορά τρέχουσας βιβλιοθήκης Επαναφορά αντιγράφου ασφαλείας Επαναφορά βιβλιοθήκης από αρχείο αντιγράφου ασφαλείας Συχνότητα αυτόματων αντιγράφων ασφαλείας Δημιουργήθηκε αντίγραφο ασφαλείας Η επαναφορά ολοκληρώθηκε Τι αντίγραφο ασφαλείας θέλετε να δημιουργήσετε; Επαναφορά αντιγράφων ασφαλείας Δημιουργία αντιγράφων ασφαλείας Καθάρισμα προσωρινής μνήμης κεφαλαίου Χρησιμοποιήθηκε: %1$s Η προσωρινή μνήμη διαγράφηκε, %1$d αρχεία διαγράφηκαν Παρουσιάστηκε σφάλμα κατά την εκκαθάριση Διαγραφή cookies Τα cookies διαγράφηκαν Καθαρισμός βάσης δεδομένων Διαγραφή ιστορικού για καταχωρήσεις που δεν έχουν αποθηκευτεί στη βιβλιοθήκη σας Οι καταχωρίσεις διαγράφηκαν Έκδοση Αποστολή αναφορών σφαλμάτων Βοηθά στην επιδιόρθωση τυχόν σφαλμάτων. Δεν θα αποστέλλονται ευαίσθητα δεδομένα Σύνδεση στο %1$s Όνομα χρήστη Κωδικός πρόσβασης Σύνδεση Συνδεθήκατε επιτυχώς Άγνωστο σφάλμα Ενημέρωση κατηγορίας Δεν υπάρχουν άλλα αποτελέσματα Τοπική πηγή Άλλα Καθολική αναζήτηση… Νεότερα Περιήγηση Σε εξέλιξη Άγνωστο Αδειοδοτημένο Κατάργηση από τη βιβλιοθήκη Προστέθηκε στη βιβλιοθήκη Αφαιρέθηκε από τη βιβλιοθήκη Να διαγραφούν τα κεφάλαια που έχουν ληφθεί; Αντιγράφηκε στο πρόχειρο: \n%1$s Η πηγή δεν είναι εγκατεστημένη: %1$s Κεφάλαιο %1$s Λήψη (%1$d/%2$d) Σφάλμα Παύση Τίτλος πηγής Αριθμός κεφαλαίου Με βάση την πηγή Ανά αριθμό κεφαλαίου Λήψη Αδιάβαστα Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα κεφάλαια; Παρακολούθηση Ανάγνωση Ολοκληρωμένο Παραλείφθηκε Σε αναμονή Προγραμματισμένο για ανάγνωση Ξαναδιαβάζεται Βαθμολογία Τίτλος Κατάσταση Κατάσταση Τύπος Μια κατηγορία με αυτό το όνομα υπάρχει ήδη! Οι κατηγορίες διαγράφηκαν Αυτό θα αφαιρέσει την ημερομηνία ανάγνωσης αυτού του κεφαλαίου. Είστε σίγουροι; Επαναφορά όλων των κεφαλαίων για αυτήν την καταχώρηση Προσθήκη στη βιβλιοθήκη; Η εικόνα αποθηκεύτηκε Προσαρμοσμένο φίλτρο Ορισμός ως εξώφυλλο Το εξώφυλλο ενημερώθηκε Σελίδα: %1$d Το επόμενο κεφάλαιο δεν βρέθηκε Δεν ήταν δυνατή η φόρτωση της εικόνας Χρησιμοποιήστε αυτήν την εικόνα ως εξώφυλλο; Διαβασμένο: Τρέχον: Επόμενο: Προηγούμενο: Δεν υπάρχει επόμενο κεφάλαιο Δεν υπάρχει προηγούμενο κεφάλαιο Φόρτωση σελίδων… Η φόρτωση σελίδων απέτυχε: %1$s Επιλέξτε τα δεδομένα που θέλετε να συμπεριλάβετε Μεταφορά Αντιγραφή Δεν ήταν δυνατή η λήψη κεφαλαίων. Μπορείτε να δοκιμάσετε ξανά στο τμήμα λήψεων Βρέθηκαν νέα κεφάλαια Δεν ήταν δυνατή η ενημέρωση του εξώφυλλου Παρακαλώ προσθέστε την καταχώρηση στη βιβλιοθήκη σας πριν το κάνετε αυτό Επιλέξτε εικόνα εξωφύλλου Επιλέξτε αρχείο αντιγράφου ασφαλείας Λήψη Δεν υπάρχουν διαθέσιμες νέες ενημερώσεις Γίνεται λήψη… Πατήστε για να εγκαταστήσετε την ενημέρωση Σφάλμα λήψης Υπάρχει διαθέσιμη ενημέρωση! Δεν υπάρχουν λήψεις Δεν υπάρχουν πρόσφατες ενημερώσεις Τίποτα δεν διαβάστηκε πρόσφατα Η βιβλιοθήκη σας είναι κενή Δεν έχετε κατηγορίες. Πατήστε το κουμπί συν για να δημιουργήσετε μία για την οργάνωση της βιβλιοθήκης σας. Πρόγραμμα λήψης Σφάλμα Το κεφάλαιο δεν μπορούσε να ληφθεί λόγο μη αναμενόμενου σφάλματος Δεν υπάρχει διαθέσιμη σύνδεση Wi-Fi Δεν υπάρχει διαθέσιμη σύνδεση δικτύου Λήψεις σε παύση Κοινό Εμφάνιση ενεργειών με παρατεταμένο πάτημα Άνοιγμα στο WebView Προσπέραση διαβασμένων κεφαλαίων Επικάλυψη Πολλαπλασιασμός Οθόνη Βοήθεια Μέθοδος μίξης χρωματικού φίλτρου Dodge / Φώτισε Burn / Σκουραίωσε Δεν βρέθηκαν αποτελέσματα Επιλέξτε μια πηγή από την οποία θα μεταφερθείτε Πίσω Μπροστά Ανανέωση Βιβλιοθήκη Απαρχαιωμένο Αυτή η επέκταση δεν είναι πλέον διαθέσιμη. Ενδέχεται να μη λειτουργεί σωστά και μπορεί να προκαλέσει προβλήματα με την εφαρμογή. Συνιστάται η απεγκατάσταση της. Περισσότερα Χρησιμοποιήθηκε τελευταία Προσθήκη tracking Καρφιτσωμένα %1$02d λεπτά, %2$02d δευτερόλεπτα Επιλογή αντίστροφου Ενημερώσεις επεκτάσεων Ενημερώσεις κεφαλαίων Παρακαλώ ενημερώστε την εφαρμογή WebView για καλύτερη συμβατότητα Το WebView απαιτείται για τη λειτουργία της εφαρμογής Κεφάλαιο %1$s και %2$d ακόμη Κεφάλαια %1$s Κεφάλαιο %1$s Κεφ. %1$s - %2$s Ενημέρωση βιβλιοθήκης Σε παύση Λιγότερα Περισσότερα Στη βιβλιοθήκη Προσθήκη στη βιβλιοθήκη Οδηγός τοπικής πηγής Αποτυχία παράκαμψης του Cloudflare Έχετε αποσυνδεθεί Αποσύνδεση Αποσύνδεση από %1$s; Διεύθυνση ηλεκτ. ταχυδρομείου Έλεγχος για ενημερώσεις Άδειες ανοιχτού κώδικα Ιστότοπος Η βελτιστοποίηση μπαταρίας είναι ήδη απενεργοποιημένη Βοηθά στις ενημερώσεις βιβλιοθήκης και τα αντίγραφα ασφαλείας στο παρασκήνιο Απενεργοποίηση βελτιστοποίησης μπαταρίας Η επαναφορά ακυρώθηκε Η επαναφορά του αντιγράφου ασφαλείας απέτυχε Η επαναφορά βρίσκεται ήδη σε εξέλιξη Η δημιουργία αντιγράφων ασφαλείας απέτυχε Η δημιουργία αντιγράφων ασφαλείας βρίσκεται ήδη σε εξέλιξη Πλευρικό γέμισμα Ανάγνωση Να εμφανίζεται πάντα η μετάβαση κεφαλαίου Μακριά λωρίδα με κενά Παράλειψη φιλτραρισμένων κεφαλαίων Εμφάνιση περιεχομένου στην περιοχή αποκοπής Εκκρεμούν ενημερώσεις Καθολική ενημέρωση Προβολή Απόκρυψη περιεχομένου ειδοποιήσεων Η ασφαλής οθόνη αποκρύπτει τα περιεχόμενα εφαρμογών κατά την εναλλαγή εφαρμογών και εμποδίζει τα στιγμιότυπα οθόνης Ασφάλισε την οθόνη Ποτέ Πάντα Κλείδωμα όταν είναι αδρανής Απαιτείται ξεκλείδωμα Ασφάλεια και ιδιωτικότητα Διαχείριση ειδοποιήσεων Μορφή ημερομηνίας Σύστημα Σκοτεινό Φωτεινό Μετακίνηση στον πάτο Μετακίνηση στην κορυφή Ακύρωση όλων Ξεκαρφίτσωμα Καρφίτσωμα Προβολή κεφαλαίων Νεότερο κεφάλαιο Μενού Ληφθέντα μόνο Πηγές Παλαιότερο Νεότερο Φιλτράρει όλες τις καταχωρήσεις στη βιβλιοθήκη σας Γκρι Λειτουργία ανάγνωσης Για αυτήν τη σειρά Δεν ήταν δυνατό το άνοιγμα των ρυθμίσεων της συσκευής Μονόδρομος συγχρονισμός για ενημέρωση των υπηρεσιών εξωτερικής παρακολούθησης προόδου κεφαλαίων. Ρυθμίστε την παρακολούθηση για μεμονωμένες καταχωρήσεις από το κουμπί παρακολούθησης τους. Ανανέωση εξώφυλλων βιβλιοθήκης Από ημερομηνία μεταφόρτωσης Δεδομένα Πηγές που λείπουν: Το αντίγραφο ασφαλείας δεν περιέχει καταχωρήσεις βιβλιοθήκης. Μη έγκυρο αρχείο αντιγράφου ασφαλείας: Έλεγχος για νέο εξώφυλλο και λεπτομέρειες κατά την ενημέρωση της βιβλιοθήκης Αυτόματη ανανέωση μεταδεδομένων Μεταφορά Άνετο πλέγμα Καρτέλες Εμφάνιση καρτελών κατηγοριών Δεν βρέθηκαν σελίδες Απενεργοποίηση όλων Ενεργοποίηση όλων Σύντομη εμφάνιση της τρέχουσας κατάστασης λειτουργίας κατά το άνοιγμα του προγράμματος ανάγνωσης Εμφάνιση λειτουργίας ανάγνωσης Έναρξη Δεν βρέθηκε πηγή Απενεργοποίηση Απαιτείται επανεκκίνηση της εφαρμογής για να τεθεί σε ισχύ Δίκτυο Και τα δυο Κάθετα Οριζόντια Κανένα Αντιστροφή ζωνών πατήματος Άγνωστη κατάσταση Άγνωστος συγγραφέας Ενημερώθηκε σε v%1$s Τι νέο υπάρχει Δεν ήταν δυνατή η λήψη κεφαλαίων λόγω χαμηλού αποθηκευτικού χώρου Αναζήτηση του \"%1$s\" καθολικά Λειτουργία ανάγνωσης Θέμα Ημερομηνία προσθήκης Δεν έχετε καρφιτσωμένες πηγές Ολοκληρωμένο Η λήψη ολοκληρώθηκε Σφάλματα Trackers που δεν έχουν συνδεθεί: Διαγραφή κεφαλαίων Πηγές από αυτήν την επέκταση ενδέχεται να περιέχουν περιεχόμενο NSFW (18+) 18+ Να επιτρέπεται η διαγραφή κεφαλαίων με σελιδοδείκτη Αυτό δεν εμποδίζει τις ανεπίσημες ή ενδεχομένως εσφαλμένα επισημασμένες επεκτάσεις να εμφανίζουν περιεχόμενο NSFW (18+) μέσα στην εφαρμογή. Δεν βρέθηκαν κεφάλαια Ενημερώθηκαν οι προεπιλεγμένες ρυθμίσεις κεφαλαίου Ορισμός ως προεπιλογής Εφαρμογή επίσης για όλες τις καταχωρήσεις στη βιβλιοθήκη μου Είστε σίγουροι ότι θέλετε να αποθηκεύσετε αυτές τις ρυθμίσεις ως προεπιλεγμένες; Ρυθμίσεις κεφαλαίου %1$s: %2$s, σελίδα %3$d Αναζήτηση ρυθμίσεων Κεφάλαια που έχουν ληφθεί Από βιβλιοθήκη Παύει το ιστορικό ανάγνωσης Λειτουργία ανώνυμης περιήγησης Διαγραφή ιστορικού Είστε σίγουροι; Όλο το ιστορικό θα χαθεί. Το ιστορικό διαγράφηκε Επόμενη σελίδα Προηγούμενη σελίδα Οδηγός μεταφοράς πηγής Πηγές NSFW (18+) Εμφάνιση στις λίστες πηγών και επεκτάσεων Δεν βρέθηκε εφαρμογή επιλογής αρχείων Συνδεθείτε ξανά στο MAL Ζώνες πατήματος Άκρη Σαν Kindle Σχήματος L Ημερομηνία λήξης Ημερομηνία έναρξης Αποθηκεύει αρχεία καταγραφής σφαλμάτων σε ένα αρχείο για κοινή χρήση με τους προγραμματιστές Κοινή χρήση αρχείων καταγραφής σφαλμάτων Φθίνουσα Αύξουσα Κατά αριθμό κεφαλαίου Κατά ημερομηνία μεταφόρτωσης Παρακολουθούνται Εμφάνιση αριθμού στοιχείων Δεξιά και Aριστερά Διαχωρισμός πλατιών σελίδων Εάν η τοποθέτηση των διαχωρισμένων πλατιών σελίδων δεν ταιριάζει με την κατεύθυνση ανάγνωσης Αντιστροφή τοποθέτησης διαχωρισμένης σελίδας Ενδέχεται να χρειαστεί να εγκαταστήσετε τυχόν επεκτάσεις που λείπουν και στη συνέχεια να συνδεθείτε στις υπηρεσίες παρακολούθησης για να τις χρησιμοποιήσετε. Εμφάνιση εν συντομία κατά το άνοιγμα του προγράμματος ανάγνωσης Εμφάνιση επικάλυψης ζωνών πατήματος Δεξιά Αριστερά Επόμενο Προηγούμενο DNS μέσω HTTPS (DoH) Εξαίρεση: %s Συμπερίληψη: %s Κανένα Ημερομηνία ανάκτησης κεφαλαίου Οι καταχωρήσεις σε εξαιρούμενες κατηγορίες δε θα ληφθούν ακόμη και αν βρίσκονται επίσης σε κατηγορίες που περιλαμβάνονται. Αυτόματη λήψη Οι καταχωρίσεις σε εξαιρούμενες κατηγορίες δε θα ενημερώνονται ακόμη και αν περιλαμβάνονται επίσης σε κατηγορίες που περιλαμβάνονται. Πατήστε για να δείτε λεπτομέρειες Αυτή η έκδοση Android δεν υποστηρίζεται πλέον Απέτυχε η αντιγραφή στο πρόχειρο Οριζόντια Κατακόρυφα Δημιουργεί φακέλους σύμφωνα με τον τίτλο των καταχωρήσεων Αποθήκευση σελίδων σε ξεχωριστούς φακέλους Ενέργειες Περιστροφή Κλίμακα του γκρι Απενεργοποίηση λειτουργίας ανώνυμης περιήγησης Αυτόματο Ακύρωση όλων για αυτήν τη σειρά Δεν βρέθηκε αντιστοιχία Η πηγή δεν υποστηρίζεται Αδιάβαστα Ημερομηνία Ταξινόμηση κατά Μη έγκυρη μορφή κεφαλαίου Το κεφάλαιο δε βρέθηκε Περιορισμοί: %s Τοπική πηγή Απενεργοποιημένο Ενεργοποιημένο Σφάλμα κοινής χρήσης του εξωφύλλου Σφάλμα αποθήκευσης εξωφύλλου Το εξώφυλλο αποθηκεύτηκε Εξώφυλλο Ρυθμίσεις για ταξινόμηση ανά κατηγορία Οδηγός tracking Δεν έχετε κατηγορίες ακόμα. Έναρξη λήψης τώρα Midnight Dusk Πράσινο Μήλο Θέμα εφαρμογής Ορισμένοι κατασκευαστές έχουν πρόσθετους περιορισμούς εφαρμογών που εξουδετερώνουν τις υπηρεσίες παρασκηνίου. Αυτός ο ιστότοπος έχει περισσότερες πληροφορίες για το πώς να το διορθώσετε. Η δημιουργία αντιγράφων ασφαλείας/επαναφορά ενδέχεται να μη λειτουργεί σωστά εάν είναι απενεργοποιημένη η Βελτιστοποίηση MIUI. Απόλυτα μαύρη σκοτεινή λειτουργία Yotsuba Γιν και Γιανγκ Tako Φράουλα Daiquiri Παρέχει βελτιωμένες δυνατότητες για συγκεκριμένες πηγές. Οι καταχωρήσεις παρακολουθούνται αυτόματα όταν προστίθενται στη βιβλιοθήκη σας. Ενισχυμένοι trackers Δυναμικό Δραστηριότητα παρασκηνίου Χαμηλότερη Χαμηλή Ύψιστη Υψηλή Ευαισθησία για την απόκρυψη του μενού κατά την κύλιση Αντεστραμμένο Σήμερα Teal & Τιρκουάζ Έλεγχος ταυτότητας για επιβεβαίωση αλλαγής Προεπιλογή Εμφάνιση Παρακολούθηση Οδηγός για τα πρώτα βήματα Διεπαφή χρήστη tablet Εξαιρούμενες κατηγορίες Βοηθήστε στη μετάφραση Πληροφορίες εφαρμογής Εγκαταστάτης Εγκατάσταση επέκτασης… Εγκαταστήστε και ξεκινήστε το Shizuku για να χρησιμοποιήσετε το Shizuku ως πρόγραμμα εγκατάστασης επεκτάσεων. Το Shizuku δεν τρέχει Παλαιό Σύνολο καταχωρήσεων Λεπτομερής καταγραφή Εκτύπωση λεπτομερών αρχείων καταγραφής στο αρχείο καταγραφής συστήματος (μειώνει την απόδοση της εφαρμογής) Γλώσσα Προειδοποίηση Θα πρέπει να κρατάτε αντίγραφα αντιγράφων ασφαλείας και σε άλλα μέρη. Τα αντίγραφα ασφαλείας ενδέχεται να περιέχουν ευαίσθητα δεδομένα, συμπεριλαμβανομένων τυχόν αποθηκευμένων κωδικών πρόσβασης, να είστε προσεκτικοί αν τα μοιράζεστε. Οι μεγάλες ενημερώσεις βλάπτουν τις πηγές και μπορεί να οδηγήσουν σε πιο αργές ενημερώσεις και σε αυξημένη χρήση της μπαταρίας. Πατήστε για να μάθετε περισσότερα. Μόνο σε Wi-Fi Κάθε 3 ημέρες Προειδοποίηση: οι μαζικές λήψεις ενδέχεται να οδηγήσουν σε επιβράδυνση των πηγών ή/και αποκλεισμό του %s. Πατήστε για να μάθετε περισσότερα. Ενημέρωση όλων Ενημερώσεις εφαρμογής Εκκαθάριση της προσωρινής μνήμης κεφαλαίων κατά την εκκίνηση της εφαρμογής %1$d καταχωρήσεις εκτός βιβλιοθήκης στη βάση δεδομένων Τίποτα προς εκκαθάριση Αποτυχία ανάκτησης διαθέσιμων επεκτάσεων Πολιτική απορρήτου Παράλειψη καταχωρήσεων με αδιάβαστο(α) κεφάλαιο(α) Για βοήθεια σχετικά με τον τρόπο διόρθωσης σφαλμάτων ενημέρωσης βιβλιοθήκης, ανατρέξτε στο %1$s Αποθήκευση ως αρχείο CBZ Ακυρώθηκε Σε αναστολή Η έκδοση ολοκληρώθηκε Εμφάνιση καταχώρισης Αυτόματο ζουμ σε ευρείες εικόνες Πλέγμα μόνο με εξώφυλλα Παράλειψη καταχωρήσεων που δεν έχουν αρχίσει Μετατόπιση πλατιών εικόνων Παραλείφθηκε επειδή η σειρά ολοκληρώθηκε Παραβλέφθηκε επειδή υπάρχουν μη αναγνωσμένα κεφάλαια Παραλείπεται επειδή δεν έχουν διαβαστεί κεφάλαια %1$d ενημέρωση(ες) απέτυχε(-αν) Πατήστε για να μάθετε περισσότερα Αντίστροφο πορτρέτο Μετακίνηση σειράς προς τα πάνω Απενεργοποιημένο Σφάλμα κατά την αποθήκευση της εικόνας Δεν υπάρχουν καταχωρήσεις βιβλιοθήκης για δημιουργία αντιγράφων ασφαλείας Άνοιγμα στο GitHub Τα δεδομένα WebView διαγράφηκαν Διαγραφή δεδομένων WebView Κλείσιμο Δε βρέθηκε εγκατεστημένη πηγή Αριθμός μη αναγνωσμένων Τελευταίος έλεγχος ενημέρωσης Δε βρέθηκε πηγή Βελτιώνει την απόδοση του αναγνώστη Η σελίδα %d δε βρέθηκε κατά τη διάσπαση Δεν ήταν δυνατή η εύρεση της διαδρομής αρχείου της σελίδας %d Επαναφέρει τη λειτουργία ανάγνωσης και τον προσανατολισμό όλων των σειρών Επαναφορά ρυθμίσεων προγράμματος ανάγνωσης ανά σειρά Δεν ήταν δυνατή η επαναφορά των ρυθμίσεων του προγράμματος ανάγνωσης Επαναφορά όλων των ρυθμίσεων προγράμματος ανάγνωσης Λοιπόν, αυτό είναι άβολο Έκδοση Γλώσσα Ηλικιακή βαθμολογία Ημιτελής λίστα Πλήρης Λίστα Λίστα επιθυμιών Λίστα αναμονής Λίστα ανάγνωσης Μόνο σε δίκτυο χωρίς μετρήσεις Αδυναμία ανοίγματος του τελευταίου κεφαλαίου που διαβάστηκε Προσαρμοσμένο εξώφυλλο Δεν έχει εγκατασταθεί Γλώσσα εφαρμογής Λεβάντα Χωρίς περιγραφή Διαγραφή κατηγορίας Θέλετε να διαγράψετε την κατηγορία \"%s\"; InternalError: Ελέγξτε τα αρχεία καταγραφής σφαλμάτων για περισσότερες πληροφορίες Προεπιλεγμένη συμβολοσειρά πράκτορα χρήστη Επαναφορά προεπιλεγμένης συμβολοσειράς πράκτορα χρήστη Καταργήστε τα πάντα Δείτε τις πρόσφατα ενημερωμένες καταχωρήσεις της βιβλιοθήκης σας Το widget δεν είναι διαθέσιμο όταν είναι ενεργοποιημένο το κλείδωμα εφαρμογών Εκτελείται ήδη μια ενημέρωση Η συμβολοσειρά πράκτορα χρήστη δεν μπορεί να είναι κενή Παλιρροϊκό κύμα Λήψη εκ των προτέρων Αυτόματη λήψη κατά την ανάγνωση Λειτουργεί μόνο εάν το τρέχον κεφάλαιο + το επόμενο έχουν ήδη ληφθεί. Είστε σίγουροι; Πολλαπλό Δημοφιλή Τελευταία ενημέρωση βιβλιοθήκης: %s Πρόκειται να αφαιρέσετε το \"%s\" από τη βιβλιοθήκη σας Δεν έχουν χορηγηθεί δικαιώματα αποθήκευσης Παραλείφθηκε επειδή η σειρά δεν απαιτεί ενημερώσεις Αναζήτηση… Πηγές, επεκτάσεις, καθολική αναζήτηση Ουπς! Θέμα, μορφή ημερομηνίας και ώρας Κατηγορίες, καθολική ενημέρωση, σύρσιμο κεφαλαίου Λειτουργία ανάγνωσης, οθόνη, πλοήγηση Μονόδρομος συγχρονισμός προόδου, ενισχυμένος συγχρονισμός Χειροκίνητα & αυτόματα αντίγραφα ασφαλείας, χώρος αποθήκευσης Κλείδωμα εφαρμογής, ασφαλής οθόνη Επανεκκίνηση της εφαρμογής Αυτόματη λήψη, λήψη εκ των προτέρων Αρχεία καταγραφής σφαλμάτων, βελτιστοποιήσεις μπαταρίας Το %s αντιμετώπισε ένα απροσδόκητο σφάλμα. Σας προτείνουμε να μοιραστείτε τα αρχεία καταγραφής σφαλμάτων στο κανάλι υποστήριξης μας στο Discord. Άγνωστος τίτλος Μη έγκυρη τοποθεσία: %s Μη έγκυρη συμβολοσειρά πράκτορα χρήστη Μόλις τώρα Έλεγχος λήψεων Οι εκδόσεις F-Droid δεν υποστηρίζονται επίσημα. \nΠατήστε για να μάθετε περισσότερα. Άνοιγμα τυχαίας καταχώρησης Δε βρέθηκαν καταχωρήσεις σε αυτή την κατηγορία Κουμπί συνέχειας ανάγνωσης Κατάργηση ημερομηνίας; Αυτό θα καταργήσει την ημερομηνία λήξης που επιλέξατε προηγουμένως από το %s Αυτό θα καταργήσει την ημερομηνία έναρξης που επιλέξατε προηγουμένως από το %s Επανακαταχώριση ευρετηρίου λήψεων Αναγκάστε την εφαρμογή να ελέγξει ξανά τα ληφθέντα κεφάλαια Στατιστικά Τοπικό Ξεκίνησε Ολοκληρωμένες καταχωρήσεις Διάρκεια ανάγνωσης Σύνολο Αναγνωσμένα Ιχνηλάτες Δ/Υ %dημ %dω %dδ Σε χρήση %dλ Σύνοψη Καταχωρήσεις Παρακολουθούμενες καταχωρήσεις Μέση βαθμολογία Κατεβασμένο Σε καθολική ενημέρωση Όχι τώρα Η κατηγορία είναι άδεια Εμφάνιση του αριθμού των μη αναγνωσμένων στο εικονίδιο Ενημερώσεις Αντιγράφηκε στο πρόχειρο Παράλειψη διπλότυπων κεφαλαίων Διαθέσιμο αλλά η πηγή δεν έχει εγκατασταθεί: %s %1$s σφάλμα: %2$s *απαιτούμενο Απόκρυψη καταχωρήσεων που βρίσκονται ήδη στη βιβλιοθήκη Αντιγραφή στο πρόχειρο Ενημέρωση κατηγορίας Διαχωρισμός ψηλών εικόνων Επικάλυψη Περιστροφή πλατιών σελίδων για να χωρέσουν Αναστροφή του προσανατολισμού των πλατιών σελίδων που έχουν περιστραφεί Πληροφορίες εντοπισμού σφαλμάτων Διπλό πάτημα για ζουμ Κεφάλαιο με σύρσιμο προς τα αριστερά Κεφάλαιο με σύρσιμο προς τα δεξιά Ορισμός χρονικού διαστήματος Προσαρμοσμένη συχνότητα ενημέρωσης Πρόβλεψη χρόνου επόμενης απελευθέρωσης Διαστήματα Εκτίμηση κάθε Ρύθμιση για ενημέρωση κάθε Επόμενη αναμενόμενη ενημέρωση Παραλείφθηκε επειδή δεν αναμενόταν κυκλοφορία σήμερα Εντάξει Κατάργηση παρακολούθησης %s; Επίσης, αφαιρέστε από %s Αυτό θα καταργήσει την παρακολούθηση τοπικά. Διαγραφή ληφθέντων Έχει αποτελέσματα Συγχρονισμός βιβλιοθήκης Ο συγχρονισμός βιβλιοθήκης ολοκληρώθηκε Πατήστε εδώ για βοήθεια με το Cloudflare Αναδημιουργία ευρετηρίου λήψεων Σύνδεση παρακολούθησης Δεν ήταν δυνατή η δημιουργία αντιγράφου ασφαλείας Δεν ήταν δυνατή η πρόσβαση στο %s HTTP %d, ελέγξτε την ιστοσελίδα στο WebView Δεν υπάρχει σύνδεση στο διαδίκτυο Ξεκλείδωμα %s Μετακίνηση σειράς προς τα κάτω Σχετικές χρονικές σημάνσεις \"%1$s\" αντί του \"%2$s\" Ρυθμίσεις εφαρμογής Ενημέρωση βιβλιοθήκης… (%s) Ρυθμίσεις πηγών Δεν έχει επιλεγεί αρχείο Ποτέ Μειώνει το ghosting σε οθόνες e-ink Τελευταία αυτόματη δημιουργία αντιγράφων ασφαλείας: %s Λευκό φλας κατά την αλλαγή σελίδας Χρήση αποθηκευτικού χώρου Σκορ tracker Δεδομένα και χώρος αποθήκευσης Δημιουργία Υποβολή Επαναφορά προεπιλογής Δε βρέθηκαν scanlators Scanlator Εξαίρεση scanlator Περισσότερες επιλογές Επιλεγμένο Μη επιλεγμένο Πλοήγηση προς τα πάνω Τοποθεσία αποθήκευσης Χρησιμοποιείται για αυτόματα αντίγραφα ασφαλείας, λήψη κεφαλαίων και τοπική πηγή. Επιλέξτε ένα φάκελο Ξεκινήστε Ένας φάκελος πρέπει να επιλεγεί Καλώς ορίσατε! Παράλειψη Επόμενο Οδηγός εισαγωγής Είστε νέοι στο %s; Σας συνιστούμε να ανατρέξετε στον οδηγό έναρξης. Επανεγκατάσταση %s; Ας ρυθμίσουμε πρώτα κάποια πράγματα. Μπορείτε πάντα να τα αλλάξετε στις ρυθμίσεις αργότερα. Δεν έχει οριστεί τοποθεσία αποθήκευσης Επιλέξτε ένα φάκελο όπου το %1$s θα αποθηκεύει λήψεις κεφαλαίων, αντίγραφα ασφαλείας και άλλα. \n \nΣυνιστάται ένας αποκλειστικός φάκελος. \n \nΕπιλεγμένος φάκελος: %2$s Άδεια ειδοποιήσεων Άδεια εγκατάστασης εφαρμογών Αποφύγετε διακοπές σε μακροχρόνιες ενημερώσεις της βιβλιοθήκης, λήψεις και επαναφορές αντιγράφων ασφαλείας. Χρήση μπαταρίας στο παρασκήνιο Για εγκατάσταση επεκτάσεων πηγών. Ειδοποιηθείτε για ενημερώσεις της βιβλιοθήκης και άλλων. Παραχώρηση Διαθέσιμο: %1$s / Σύνολο: %2$s Απαιτούνται δικαιώματα για την εγκατάσταση επεκτάσεων. Πατήστε εδώ για παραχώρηση. Συμπεριλάβετε ευαίσθητες ρυθμίσεις (π.χ. διακριτικά σύνδεσης παρακολούθησης) Πλήρες σφάλμα: Προσθήκη αποθετηρίων Διαγραφή αποθετηρίου Ενημερώνετε από μια παλαιότερη έκδοση και δεν είστε σίγουροι τι να επιλέξετε; Ανατρέξτε στον οδηγό αποθήκευσης για περισσότερες πληροφορίες. Οδηγός αποθήκευσης Αποθετήρια επεκτάσεων Δεν έχετε ορίσει αποθετήρια. Λανθασμένο URL αποθετηρίου Τα νέα κεφάλαια προβλέπεται να κυκλοφορήσουν σε περίπου %1$s, ελέγχοντας κάθε %2$s. Προσαρμοσμένη συχνότητα ενημέρωσης: Nord Έξυπνη ενημέρωση URL αποθετηρίου Προσθέστε επιπλέον αποθετήρια στο %s. Αυτό θα πρέπει να είναι ένα URL που τελειώνει με \"index.min.json\". Θέλετε να διαγράψετε το αποθετήριο \"%s\"; Αυτό το αποθετήριο υπάρχει ήδη! Σύντομα Ανάκληση αξιόπιστων άγνωστων επεκτάσεων Αποθετήριο ανοικτού κώδικα Απενεργοποίηση σμίκρυνσης εικόνας Προσθέστε ούτως ή άλλως Το αποθετήριο %1$s έχει το ίδιο δακτυλικό αποτύπωμα κλειδιού υπογραφής με το %2$s. \nΕάν αυτό είναι αναμενόμενο, το %2$s θα αντικατασταθεί, διαφορετικά επικοινωνήστε με τον συντηρητή του αποθετηρίου σας. Ανερχόμενο Προσαρμοσμένο προφίλ εμφάνισης Δείτε τις επερχόμενες ενημερώσεις Αντικατάσταση Το δακτυλικό αποτύπωμα κλειδιού υπογραφής υπάρχει ήδη Οδηγός ανερχόμενων Επόμενο μήνα Προηγούμενο Μήνα Αποτυχία απόκτησης μόνιμης πρόσβασης φακέλου. Η εφαρμογή μπορεί να συμπεριφέρεται απροσδόκητα. Όλες οι καταχωρήσεις που έχουν διαβαστεί Αντιγραφή συνδέσμου Αυτό το manga είτε έχει ολοκληρωθεί, είτε δεν υπάρχει προβλεπόμενη ημερομηνία κυκλοφορίας. Τυχαίο Να επιτρέπονται τα αναλυτικά στοιχεία Αναλύσεις και αρχεία καταγραφής ατυχημάτων Αποστολή αρχείων καταγραφής σφαλμάτων Παράλειψη λήψης διπλότυπων αναγνωσμένων κεφαλαίων Η αποστολή αρχείων καταγραφής σφαλμάτων και αναλυτικών στοιχείων θα μας επιτρέψει να εντοπίσουμε και να διορθώσουμε προβλήματα, να βελτιώσουμε την απόδοση και να κάνουμε τις μελλοντικές ενημερώσεις πιο σχετικές με τις ανάγκες σας Θέλετε να προσθέσετε το repo \"%s\"? Θέλετε πραγματικά να αφαιρέσετε την επέκταση \"%s? Φλας κάθε Αποστολή ανώνυμων αρχείων καταγραφής σφαλμάτων στους προγραμματιστές. Αποστολή ανώνυμων δεδομένων χρήσης για τη βελτίωση των λειτουργιών της εφαρμογής. Ασφάλεια Μαύρο Λευκό Repos επεκτάσεων Αφαίρεση Αφαίρεση επέκτασης? Διάρκεια Φλας %1$s ms Φλας με Λευκό και Μαύρο Ενημέρωση ανιχνευτών στο κεφάλαιο %d? Το αρχείο αντιγράφων ασφαλείας έχει καταστραφεί Δεν υποστηρίζεται η δημιουργία αντιγράφων ασφαλείας JSON Ενημέρωση προόδου όταν επισημανθεί ως αναγνωσμένη Οι trackers ενημερώθηκαν στο κεφάλαιο %d Παύση ιστορικού ανάγνωσης για επέκταση Προεπιλογή (%d) Εάν ο αναγνώστης φορτώσει μια κενή εικόνα, μειώστε σταδιακά το όριο.\nΕπιλεγμένο: %s Επηρεάζει την απόδοση. Ενεργοποιήστε το μόνο αν η μείωση του ορίου bitmap δε διορθώνει τα προβλήματα κενών εικόνων Προσαρμοσμένο όριο bitmap υλικού Αυτόματο Εξαγωγή Κατάλογος Βιβλιοθήκης Χρησιμοποιήστε αποκωδικοποιητή παλαιού τύπου για ανάγνωση μακριών ταινιών Μονόχρωμο Επισήμανση διπλότυπου αναγνωσμένου κεφαλαίου ως αναγνωσμένο Μετά τη λήψη του νέου κεφαλαίου Μη αναγνωσμένα κεφάλαια Συμπεριφορά Μετά την ανάγνωση ενός κεφαλαίου Έγινε εξαγωγή της βιβλιοθήκης Συγγραφέας Καλλιτέχνης Παρακολουθείται ιδιωτικά Παρακολούθηση δημόσια Παρακολούθηση ιδιωτικά Διαγραφή λήψεων της τρέχουσας καταχώρησης μετά τη μεταφορά Πρόσθετες λέξεις-κλειδιά (προαιρετικά) Βοηθά στον περιορισμό των αποτελεσμάτων αναζήτησης με την προσθήκη πρόσθετων λέξεων-κλειδιών Εμφάνιση καταχώρησης μόνο αν ο συσχετισμός έχει πρόσθετα κεφάλαια Οι επιλογές αυτές είναι αργές και επικίνδυνες και μπορεί να οδηγήσουν σε περιορισμούς από τις πηγές Προηγμένη λειτουργία αναζήτησης Εάν είναι ενεργοποιημένη, επιλέγει την πιο μακρινή αντιστοιχία. Διαφορετικά, επιλέγει την πρώτη αντιστοιχία με βάση την προτεραιότητα πηγής. Άγνωστο Αναζήτηση χειροκίνητα Να μη γίνει μεταφορά Μεταφορά τώρα Αντιγραφή τώρα Να σταματήσετε η μεταφορά; Σταμάτημα Έχετε καταχωρήσεις στη βιβλιοθήκη σας με παρόμοιο όνομα.\n\nΕπιλέξτε μια καταχώρηση για να τη μεταφέρετε ή να την προσθέσετε ούτως ή άλλως. Πιθανά διπλότυπα Catppuccin Ενημέρωση τίτλων manga της βιβλιοθήκης για να ταιριάζουν με την πηγή Προειδοποίηση: αν ένα manga μετονομαστεί, θα αφαιρεθεί από την ουρά λήψης (αν υπάρχει). Επιλογή ενεργοποιημένων πηγών Επιλογή καρφιτσωμένων πηγών Συνέχειά Επιλεγμένο Διαθέσιμο Επιλογή όλων Επιλογή κανενός Σημειώσεις Επεξεργασία σημείων Μου άρεσε το σημείο όπου… Απόκρυψη δεικτών ελλείποντος κεφαλαίου Μεταφορά Δε βρέθηκαν εναλλακτικές Ακύρωση Αναλύει τον τίτλο σε λέξεις-κλειδιά για ευρύτερη αναζήτηση Ακύρωση Αντιστοίχιση με βάση τον αριθμό κεφαλαίου Αντιγραφή Μεταφορά Δε βρέθηκαν κεφάλαια, αυτή η καταχώρηση δεν μπορεί να χρησιμοποιηθεί για μεταφορά Μεταφορά (%1$d/%2$d) Τελευταία: %1$s Ακύρωση Απόκρυψη καταχωρήσεων χωρίς αντιστοιχία Απόκρυψη καταχωρήσεων χωρίς νεότερα κεφάλαια Αντιγραφή Μεταφορά Δεδομένα προς μεταφορά Σύνδεση… Πρόκειται να αφαιρέσετε καταχωρήσεις από τη βάση δεδομένων Τα αναγνωσμένα κεφάλαια και η πρόοδος των καταχωρήσεων που δεν είναι στη βιβλιοθήκη θα χαθούν Κρατήστε καταχωρήσεις με αναγνωσμένα κεφάλαια Αποτυχία δημιουργίας καταλόγου λήψης Αποτυχία δημιουργίας καταλόγου: %s Δωρεά Αναπαράσταση εικόνων σε περιγραφές manga Απαγόρευση μη ASCII ονομάτων αρχείων Εξασφαλίζει συμβατότητα με ορισμένα μέσα αποθήκευσης που δεν υποστηρίζουν Unicode. Όταν αυτή η επιλογή είναι ενεργοποιημένη, θα πρέπει να μετονομάσετε χειροκίνητα τους φακέλους πηγής και manga, αντικαθιστώντας τους χαρακτήρες που δεν είναι ASCII με τις μικρές κεφαλαίες δεκαεξαδικές αναπαραστάσεις UTF-8. Τα αρχεία κεφαλαίων δε χρειάζεται να μετονομάζονται. Κλείσιμο καρτέλας Ταυτόχρονες λήψεις πηγών Ταυτόχρονες λήψεις σελίδων Σελίδες που λήφθηκαν ταυτόχρονα ανά πηγή Υπολογισμός… Προστέθηκε στους σελιδοδείκτες Φιλτράρισμα εξαιρούμενων scanlator ================================================ FILE: i18n/src/commonMain/moko-resources/eo/plurals.xml ================================================ Post %1$s minuto Post %1$s minutoj %d kategorio %d kategorioj %1$s ĉapitro %1$s ĉapitroj Ĉapitroj %1$s kaj 1 pli Ĉapitroj %1$s kaj %2$d pli %1$d nova ĉapitro %1$d novaj ĉapitroj Por 1 elemento Por %d elementoj Preterpasas %d ĉapitron, aŭ ĝi mankas ĉe la fonto aŭ ĝi estis elfiltrita Preterpasas %d ĉapitrojn, aŭ ili mankas ĉe la fonto aŭ ili estis elfiltritaj 1 sekvilo %d sekviloj %1$s restanta %1$s restantaj Farita en %1$s kun %2$s eraro Farita en %1$s kun %2$s eraroj Hieraŭ Antaŭ %1$d tagoj 1 tago %d tagoj Sekva ĉapitro Sekvaj %d ĉapitroj Mankas %1$s ĉapitro Mankas %1$s ĉapitroj Sekva nelegita ĉapitro Sekvaj %d nelegitaj ĉapitroj %d deponejo %d deponejoj Disponebla ĝisdatigo de etendaĵo Disponeblaj %d ĝisdatigoj de etendaĵoj Morgaŭ post %1$d tagoj 1 paĝo %1$s paĝoj Ĉu migri %1$d elementon? Ĉu mirgi %1$d elementojn? Ĉu kopii %1$d elementon? Ĉu kopii %1$d elementojn? Elemento estis preterlasita %1$d elementoj estis preterlasitaj ================================================ FILE: i18n/src/commonMain/moko-resources/eo/strings.xml ================================================ Fontoj Historio Ĝisdatigoj Biblioteko Elŝutvico Agordoj Pli Nomo Sen lastatempaj ĝisdatigoj Sen elŝutoj Helpo Pri etendaĵo Etendaĵoj Migri Savkopii kaj restaŭri Retejo Uzantnomo Pasvorto Retpoŝta adreso Vidi ĉapitrojn Alinomi kategorion Redakti kategoriojn Aldoni kategorion Aldoni Redakti Malŝalti ĉiujn Ŝalti ĉiujn Ĝisdatigi bibliotekon Forigi Mallegosigni ĉapitron Legosigni ĉapitron Elŝuti Marki kiel nelegita Marki kiel legita Elekti ĉiujn Serĉi agordojn Serĉi Aldona dato Laste legitaj Ĉapitroj entute Alfabete Forigi filtrilon Nelegitaj Legosignitaj Filtrilo Menuo Agordoj Historio Ĉapitroj Bibliotekaj elementoj Kategorioj Via biblioteko malplenas Neniu legita lastatempe Kaŝi enhavon de sciigoj Neniam Ĉiam Sekureco kaj privateco Administri sciigojn Data formo Malhela Hela Sistema Etoso Pri Elŝutoj Legilo Biblioteko Malfari Konservi Konigi Instali Plej malnovaj Plej novaj Ordigi Nuligi ĉiujn Nuligi Depingli Alpingli Malŝalti Komforta krado Listo Migri Malfermi per retumilo Komenci Forigi Reprovi Sekva ĉapitro Antaŭa ĉapitro Malinstali Malfidinda Fidi Instalita Instalata Elŝutata Instali Malaktuala Ĝisdatigi Ekskluzivi: %s Inkluzivi: %s Nenio Ĉiam demandi Defaŭlta kategorio Ĉiusemajne Ĉiutage Nevalida savkopia dosiero: Savkopio kreita Krei savkopion Elŝuti novajn ĉapitrojn Malŝaltita Forigi ĉapitrojn Sen animacioj Originala grando Streĉi Adapti al ekrano Longa strio Nigra Griza Blanka Fona koloro Laŭtecaj klavoj 18+ Sekva Antaŭa Foliumi Elŝutitaj ĉapitroj En biblioteko Aldonita al biblioteko Aldoni al biblioteko Aŭtomate forigi post legado Legadaj Lega reĝimo Travideblo Blua Verda Ruĝa Libera Defaŭlta orientiĝo Rapida Normala Aŭtomata Saĝe adapti Adapti laŭ alto Adapti laŭ larĝo Longa strio kun interspacoj Paĝigita (vertikale) Dekstra Maldekstra Dekstre kaj maldekstre L-forme Ambaŭe Vertikale Horizontale Ne Navigado Preterpasi ĉapitrojn markitajn kiel legitaj Ne malŝalti ekranon Ekranado Obligado Plustavolo Propra heleco Stuci borderojn Montri legadan reĝimon Montri paĝan nombron Plenekrano Ĉi tiu etendaĵo ne plu disponeblas. Ĝi eble ne funkcios ĝuste kaj povas kaŭzi problemojn pri la apo. Malinstalado de ĝi estas rekomendata. Ĉio Ĉiun 2-an tagon Ĉiun 12-an horon Ĉiun 6-an horon Malŝaltitaj Aŭtomataj ĝisdatigoj Tuta ĝisdatigo Horizontale Vertikale Montrado Montri en fontaj kaj etendaĵaj listoj NSFW-fontoj (18+) Ĝeneralaj Apo maldisponebla Restaŭri Tuŝeti pro vidi detalojn Restartigi Montri nombron da elementoj Montri kategoriajn langetojn Elŝutitaj ĉapitroj Kompakta krado Montrado Montrada reĝimo Malfermi per WebView Daŭrigi Paŭzigi Redakti kovrilon Agordi kategoriojn Serĉi ĉie Ĝisdatigoj atendantaj Altnivelaj Malfermi protokolon Marki la antaŭan kiel legita Lasta ĉapitro Sekva paĝo Antaŭa paĝo Ĉapitraj ĝisdatigoj Eraroj Finitaj Progreso Eraro Nova versio disponebla! Elŝutada eraro Tuŝetu por instali ĝisdatigon Elŝutado… Sen novaj ĝisdatigoj disponeblaj Elŝuti Elekti savkopian dosieron Ĉapitroj %1$s Ĉapitro %1$s kaj %2$d pli Ĉapitro %1$s Novaj ĉapitroj trovitaj Kopii Migri Ĉu vi certas? La tuta historio estos forigota. Historio viŝita Viŝi historion Ĉap. %1$s - %2$s Ĝisdatigas bibliotekon Fonto ne trovita Neniu paĝo trovita Ne estas antaŭa ĉapitro Ne estas sekva ĉapitro Antaŭa: Sekva: Nuna: Finita: Legada reĝimo Sekva ĉapitro ne trovita Paĝo: %1$d %1$s: %2$s, paĝo %3$d Bildo konservita Kategorioj forigitaj Kategorio kun ĉi tiu nomo jam ekzistas! Speco Stato Stato Titolo Takso Legataj denove Forĵetitaj Finitaj Legataj Aldoni ŝanĝospuron Sekvado Neniu ĉapitro trovita Agordi kiel defaŭlta Ĉapitraj agordoj Ĉu vi certas, ke vi volas forigi elektitajn ĉapitrojn? Nelegitaj Elŝuti Laŭ alŝutita dato Laŭ ĉapitra numero Laŭ fonto Ĉapitra numero Fonta titolo Paŭzigita Eraro Elŝutado (%1$d/%2$d) Ĉapitro %1$s Ĉu aldoni mangaon al biblioteko? Fonto ne instalita: %1$s Malsukcesis kopii al tondujo Kopiita al tondujo: \n%1$s Ĉu forigi elŝutitajn ĉapitrojn? Malpli Pli Forigita de biblioteko Forigi el biblioteko Nekonata stato Nekonata aŭtoro Nekonata Daŭranta Vi ne havas alpinglitajn fontojn Lastaj Serĉi \"%1$s\" ĉie Ĉiea serĉo… Alpinglitaj Laste uzitaj Aliaj Neniu rezulto trovita Sen pliaj rezultoj Langetoj De biblioteko Nekonata eraro Vi nun estas elsalutinta Elsaluti Elsaluti el %1$s? Ensalutinta Ensaluti Ensaluti al %1$s Nur elŝutitaj Ĝisdatigita al v%1$s Malfermitkodaj permesiloj Kio novas Versio Ne eblis malfermi aparatajn agordojn Elementoj forigitaj Viŝi datumbazon Eraro okazis dum viŝado Kaŝmemoro viŝita, %1$d dosieroj forigitaj Uzata: %1$s Viŝi ĉapitran kaŝmemoron Datumoj Kuketoj viŝitaj Viŝi kuketojn Reto Savkopia kreado fiaskis Savkopia kreado Kion vi volas savkopii? %1$02d min, %2$02d sek Mankantaj fontoj: Aŭtomata elŝuto Laste legita ĉapitro Orientiĝo Centra Dekstra Maldekstra Tuŝetzonoj Paĝigita Paĝigita (dekstre maldekstren) Paĝigita (maldekstre dekstren) Rande Simile al Kindle Defaŭlta legada reĝimo Aŭtomata Agoj Propra kolorfiltrilo Malŝaltita Ŝaltita Elementoj vice Hodiaŭ Jino kaj jango Verda pomo Apa etoso Aspekto Komenci elŝuti nun Reŝargi Antaŭen Reen Movi al malsupro Movi al supro Malkreskante Kreskante Laŭ nombro da ĉapitroj Laŭ alŝuta dato Elekti inverse Defaŭlte Vi havas neniun kategorion. Tuŝeti la butonon kun plus, por krei ian kaj organizi vian bibliotekon. Etendaĵaj ĝisdatigoj Elŝutoj paŭzigitaj Elŝutilo Por ĉi tiun serion Propra filtrilo Fonto ne subtenata Bonvolu ensaluti al MAL denove Planas legi Paŭzitaj Haltetitaj Nelegitaj Ankaŭ apliki al ĉiuj elementoj en mia biblioteko Ĉu vi certas, ke vi volas konservi ĉi tiujn agordojn kiel defaŭltaj? Dato Ordigi laŭ Nevalida ĉapitra formato Ĉapitro netrovita Loka fonto Ĝisdatigado de kategorio Kontroli ĝisdatigojn Helpu traduki Savkopia restaŭro Restaŭro finita Savkopio enhavas neniun bibliotekan elementon. Devige horizontala Devige vertikala Vertikala Horizontala Grizoskalo Fontoj de ĉi tiu etendaĵo eble enhavas NSFW-enhavon (18+) Malfidinda etendaĵo Dum ŝargado Ŝlosi kiam senokupa Klara nigra reĝimo Tako Meznokta krepusko Ŝargado… Nuligi ĉiujn por ĉi tiu serio Aŭtentigi por konfirmi ŝanĝon Restaŭro nuligita Savkopia restaŭro fiaskis Restaŭro jam estas farata Savkopio jam estas farata Ofteco de aŭtomata savkopio Restaŭri bibliotekon de savkopia dosiero Restaŭri savkopion Sekvi Sekviloj Kreas dosierujojn laŭ elementaj titoloj Inversigi laŭtecajn klavojn Inversigita Dividi larĝajn paĝojn Atendanta Preterpasi elementojn kun \"Finita\" statuso Limigoj: %s Jocuba Bluverda k verdblua Fraga dajkirio Dinamika Sekvado Loka fonto Ĉapitra elŝuta dato Sekvado Montri enhavon en fortondareo Aparataj limigoj por aŭtomataj ĝisdatigoj Findato Komencdato Sekviloj ne ensalutintaj en: Sekvata Animacii paĝajn transpasojn Animacia rapido de duobla tuŝeto Montri plustavolon kun tuŝetzonoj Sekura ekrano Devigi malŝlosi Aktualigi kovrilojn en biblioteko Elektu kovrilbildon Ĉu uzi ĉi tiun bildon kiel kovrilo? Aktualigo de kovrilo fiaskis Elekti datumojn por inkluzivi Ŝargas paĝojn… Agordi kiel kovrilo Eraro kunigante kovrilon Eraro konservante kovrilon Malŝalti inkognitan reĝimon Inkognita reĝimo Sendadi prikolapsajn raportojn Tabulkomputila fasado Malŝalti baterian optimumigon Ofta Kovrilo aktualigita Kontroli ĉu estas nova kovrilo kaj detaloj dum biblioteka ĝisdatigo Kovrilo konservita Kovrilo Preterpasi filtritajn ĉapitroj Koncize montri kiam legilo estas malfermita Aŭtomate aktualigi metadatumojn Sekura ekrano kaŝas apan enhavon dum ŝanĝado de apo kaj malpermesas ekrankopiojn Statistikoj Averto Komencita Loka Elŝutita Agordi intervalon Tajlorita ĝisdatiga ofteco Kopii al tondujo Forigi kategorion Elektu dosierujon kie %1$s konservos ĉapitrajn elŝutojn, savkopiojn, kaj aliajn. \n\nDediĉita dosierujo estas rekomendata.\n\nElektita dosierujo: %2$s Ne nun Lingvo Elekti dosierujon Serĉi… Ĉu vi volas forigi la kategorion \"%s\"? Apliki Restarigi la defaŭltojn Fermi Bone Forigi ĉion Bonvenon! Preterpasi Elektitaj Ne elektitaj Pliaj opcioj Forigi elŝutitajn Datumoj kaj konservejo Ĝisdatigi kategorion Sekve Dosierujo devas esti elektita Etoso, formo de dato k tempo Apa ŝloso, sekura ekrano Malŝlosi %s Malŝaltita Tuta eraro: Agordoj de la fonto Apaj agordoj Nordo Cunamo \"%1$s\" anstataŭ \"%2$s\" Apa lingvo Ĝisdatigi ĉiujn Versio Lingvo Instalilo Malmoderna Disponebla: %1$s / Tuta: %2$s Popularaj Havantaj rezultoj Nekonata titolo Sen priskribo Baldaŭ Ĉu vi certas? Ĵus Neniam %1$s eraro: %2$s Neniu fonto trovita Ups! Permesi analizojn Sendi anonimigajn prikolapsajn protokolojn al la programistoj. Deponi protokolojn, bateriaj optimumigoj Sekureco Kopii ligilon Ĉu vi reinstalas %s? Hazarde Malfermi hazardan elementon Movi serion al supro Movi serion al malsupro Konserveja gvidilo Permeso por instali apojn Fona bateria uzado Ricevi sciigojn pri bibliotekaj ĝisdatigoj kaj pli. Sendi prikolapsajn protokolojn Sendi anonimigaj uzadaj datumoj por plibonigi funkciojn de apo. Permesi Ĉu vi estas en %s unua foje? Ni rekomendas kontroli komencantan gvidilon. Permanaj k aŭtomataj savkopioj, konserveja spaco Lavendo Relativaj tempindikoj Skantradukisto Montri elementon Fontoj, etendaĵoj, ĉiea serĉo Aŭtomata elŝuto, elŝuti antaŭe Unuvoja sinkroniga progreso, plibonigita sinkronigo Komence ni agordu kelkajn aferojn. Vi ĉiam povas ŝanĝi ilin en la agordoj poste. Baldaŭa Por instali etendaĵojn de fontoj. Kategorioj, ĉiea ĝisdatigo, ĉapitra ŝovumo Komencanta gvidilo Butono por daŭrigi legadon Nombro de nelegitaj Rulumi supren Elementoj entute Lasta kontrolo de ĝisdatigoj Sekva atendata ĝisdatigo Sekvila takso Nur-kovrila krado InternalError: Kontrolu prikolapsajn protokolojn por pliaj informoj Ĉu vi ĝisdatigas de pli malnova versio kaj ne certas kion elekti? Kontrolu la konservejan gvidilon por pliaj informoj. Komencu Aldoni ĉiuokaze Malebligi interrompojn por longedaŭraj bibliotekaj ĝisdatigoj, elŝutoj kaj savkopiaj restaŭroj. Sciiga permeso Legada reĝimo, montrado, navigado Analitikoj kaj protokoloj Sendado de prikolapsaj protokoloj kaj analitikoj eblos al ni identigi kaj ripari problemojn, plibonigi rendimenton kaj igi estontajn ĝisdatigojn pli rilataj al viaj bezonoj Tio ne preventas neoficialajn aŭ eventuale malĝuste markitajn etendaĵojn montri NSFW-enhavon (18+) ene de la apo. Ĉiun 3-an tagon Preterpasi nekomencitajn elementojn Ĉapitro je ŝovumo dekstren Forigi Ĉu forigi etendaĵon? Ĉu vi vere volas forigi etendaĵon \"%s\"? Finitaj elementoj Prognozi daton de sekva eldono Nur per vifio Shizuku ne ruliĝas Agordoj de ordigo laŭ kategorio Ĉapitro je ŝovumo maldekstren Malicaj etendaĵoj povas legi ĉiujn el konservitaj ensalutiloj aŭ plenumi arbitran kodon.\n\nFidante ĉi tiun etendaĵon, vi akceptas tiujn riskojn. Saĝa ĝisdatigo Preterpasi elementojn kun nelegita(j)n ĉapitro(j)n Elementoj en ekskluzivitaj kategorioj ne estos ĝisdatigotaj, eĉ se ili estas ankaŭ en inkluzivitaj kategorioj. Montri nombron de la nelegitaj sur piktogramo Ĝisdatigoj Plur Pri apo Malsukcesis akiri etendaĵan liston Aĝa takso Permesoj bezonatas por instali etendaĵojn. Tuŝetu ĉi tie por permesi. Instalado de etendaĵo… Nur per nemezurata reto Forigi deponejon Fulmi je paĝa ŝanĝo Turni larĝajn paĝojn por adapti Etendaĵaj deponejoj Reduktas fantomigon sur e-ink-ekranoj Fulma daŭro Nigro Defaŭlta (%d) Se legilo ŝargas malplenan bildon alkremente redukti la sojlon.\nElektita: %s Deponeja URL Aldoni aldonajn deponejojn al %s. Ĉi tio estu URL kiu finas per \"index.min.json\". Ĉi tiu deponejo jam ekzistas! Ĉu vi volas forigi la deponejon \"%s\"? Instali kaj lanĉi Shizuku-n por uzi Shizuku-n kiel etendaĵa instalilo. Aldoni deponejon Subskriba ŝlosila fingropremo jam ekzistas Deponejo %1$s havas la saman subskriban ŝlosilan fingropremaĵon kiel %2$s.\nSe tio estis atendita, %2$s estos anstataŭigita, alikaze kontaktu prizorganton de la deponejo. Malfermitkoda deponejo Inversigi orientiĝon de turnitaj larĝaj paĝoj Eksvalidigi fidindajn nekonatajn etendaĵojn Vi havas neniun agorditan deponejon. Nevalida deponeja URL Koncize montri aktualan reĝimon kiam legilo estas malfermita Ĉu vi volas aldoni la deponejon \"%s\"? Inversigi lokadon de dividitaj paĝoj Se la lokado de la dividitaj larĝaj paĝoj ne kongruas kun lega direkto Duoble tuŝeti por zomi %1$s ms Fulmi ĉiu Fulmi per Blanko Blanko kaj nigro Anstataŭigi Propra rastruma sojlo de aparataro Malheligi Influas rendimenton. Ŝaltu nur se redukto de rastruma sojlo ne riparas problemojn pri malplenaj bildoj Miksada reĝimo de kolorfiltrilo Heligi Preterpasi duoblaĵojn de ĉapitroj Inversigi tuŝetzonojn Propra montrada profilo Konservi paĝojn al apartaj dosierujoj Skala speco Montri agojn post longa tuŝeto Nur funkcias se la aktuala ĉapitro + la sekva estas jam elŝutitaj. Permesi forigi legosignajn ĉapitrojn Ekskluzivitaj kategorioj Antaŭlaste legita ĉapitro Sekvada gvidilo Plej malalta Nevalida loko: %s La 4-a laste legita ĉapitro Alta Post permane markitaj kiel legitaj Neniu konserveja loko agordita Elementoj en ekskluzivitaj kategorioj ne estos elŝutotaj, eĉ se ili estas ankaŭ en inkluzivitaj kategorioj. Aŭtomate elŝuti dum legado Konservi kiel CBZ-arkivo Ĝisdatigi progreson kiam markita kiel legita Unudirekte sinkronigi por ĝisdatigi la ĉapitran progreson en ekstera sekvila servo. Agordi sekvadon por apartaj elementoj per ilia sekvada butono. Plibonigitaj sekviloj Inverse vertikala Flankaj marĝenoj Sentemo por kaŝi menuon dum rulumo Malalta Ne elŝuti duoblaĵojn de legitaj ĉapitroj Ĉiam montri ĉapitrajn transpaŝojn Aŭtomate zomi larĝajn bildojn Dividi altajn bildojn Disponebla sed fonto ne estas instalita: %s La 5-a laste legita ĉapitro Ĝisdatigi progreson post lego Plej alta Panorami larĝajn bildojn Komenca zoma pozicio La 3-a laste legita ĉapitro Elŝuti antaŭe Plibonigas legilan rendimenton Malebligi malzomon Biblioteka sinkronigo finita Ĉiuj legitaj elementoj DNS per HTTPS (DoH) Sekvila ensaluto Defaŭlta ĉeno por \"user agent\" Biblioteka sinkronigo Konserveja loko Provizas plibonigitajn funkciojn por specifaj fontoj. Elementoj estas aŭtomate sekvataj kiam aldonitaj al via biblioteko. Vi devos instali mankantajn etendaĵojn kaj ensaluti al sekvadaj servoj poste por uzi ilin. Restarigi defaŭltan ĉenon por \"user agent\" Etendaĵaj deponejoj Inkluzivi konfidencajn agordojn (ekz. ensalutajn ĵetonojn de sekvilo) Konserveja uzo Ĉeno por \"user agent\" ne povas malpleni Nevalida ĉeno por \"user agent\" Neniu biblioteka elemento por savkopii Vi konservu kopiojn de savkopioj ankaŭ en aliaj lokoj. Savkopioj povas enhavi konfidencajn datumojn inkluzive konservitajn pasvortojn; atentu se vi konigos ilin. Savkopia dosiero estas difektita Krei JSON-savkopio ne subtenata Konservejaj permesoj ne donitaj Kaŝi elementojn jam en biblioteko Uzata por aŭtomataj savkopioj, ĉapitraj elŝutoj kaj lokaj fontoj. Povas esti uzita por restaŭri aktualan bibliotekon Ne eblis krei savkopian dosieron Savkopiado/restaŭro ne funkcios ĝuste se MIUI-optimumigo estas malŝaltita. Lasta aŭtomata ĝisdatigo: %s Viŝi ĉapitran kaŝmemoron je apa lanĉo Ne eblis restarigi legilajn agordojn Konservas protokolojn pri eraroj dosieren por kunigi kun la programistoj Fona aktiveco Viŝi datumojn de WebView Restarigo de ĉiuj legilaj agordoj Devigas restartigi apon por efektiviĝi Restarigas legadan reĝimon kaj orientiĝon de ĉiuj serioj Reindeksi elŝutojn Rekreado de indekso de elŝutoj Forigi historion de elementoj ne konservitaj en biblioteko %1$d nebibliotekaj elementoj en datumbazo Nenio por viŝi Devigu apon rekontroli elŝutitajn ĉapitrojn Datumoj de WebView viŝitaj Konigi prikolapsajn protokolojn Restarigi legilajn agordojn de individuaj serioj Helpas pri fonaj ĝisdatigoj de biblioteko kaj savkopioj Bateria optimumigo jam estis malŝaltita Kelkaj fabrikantoj havas aldonajn apajn malpermesojn, kiuj ĉesigas fonajn servojn. Jena retpaĝo havas pli da informoj pri kiel ripari tion. Konservi malkoncizajn protokolojn al sistema protokolo (reduktas apan rendimenton) Infrormoj por sencimigo Malkonciza protokolado Privateca politiko Helpas ripari cimojn. Neniuj konfidencaj datumoj estos sendotaj Eldonoj ĉe F-Droid ne estas oficiale subtenataj.\nTuŝetu por ekscii pli. Aŭtomate Notoj Redakti notojn Mallegi ĉapitron Unukolora Konduto Post akiro de nova ĉapitro Post legado de ĉapitro Marki duoblaĵon de legita ĉapitro kiel legita Uzi malmodernan malkodilon por longa stria legilo Fiaskis krei elŝutadan dosierujon Fiaskis krei dosierujon: %s Eblaj duoblaĵoj La bildo ne eblis esti ŝargita Ne eblis elŝuti ĉapitrojn. Vi povas reprovi en la sekcio de elŝutoj Ne eblis elŝuti ĉapitrojn pro malgranda konserveja spaco Ne eblis trovi dosiervojon de paĝo %d Ne eblis atingi %s Eksporti Biblioteka listo Biblioteko eksportita Vi forigos elementojn el la datumbazo Legitaj ĉapitrojn kaj progreso de nebibliotekaj elementoj estos perdotaj Neforigi elementojn kun legitaj ĉapitroj Ĝisdatigi mangaajn titolojn biblioteke por ke ili kongruu kun fonton Averto: se magao estis alinomita, ĝi estos forigota el la elŝutvico (se ekzistas). Paŭzigas legadan historion Paŭzigas legadan historion por etendaĵo Filtras ĉiujn elementojn en via biblioteko Ensalutado… Intervaloj Plustavolo Gvidilo pri lokaj fontoj Aŭtoro Artisto Licencita Eldonado finita Rezignita En hiato Vi havas elementojn en via biblioteko kun simila nomo.\n\nElektu elementon por migri aŭ aldoni ĝin malgraŭ. Kopiita al tondujo Estimi ĉiu Agordi por ĝisdatigi ĉiu Novaj ĉapitroj prognozataj eldoni post ĉirkaŭ %1$s, kontrolas ĉirkaŭ ĉiu %2$s. Ĉi tiu mangao estas aŭ finita, aŭ ne havas prognozatan eldonotan daton. Propra ĝisdatiga ofteco: Propra kovrilo Ekskluzivi skantradukistojn Neniu skantradukisto trovita Ĝisdatigi ŝanĝospurilojn al ĉapitro %d? Ŝanĝospuriloj ĝisdatigitaj al ĉapitro %d Listo de legataj Dezirlisto Listo de finitaj Listo de prokrastitaj Listo de nefinitaj Sekvi private Sekvi publike Neniu kongruo trovita Ĉu forigi daton? Tio forigos vian antaŭe elektitan komencdaton el %s Tio forigos vian antaŭe elektitan findaton el %s Ĉu forigi sekvadon de %s? Tio forigos la sekvadon loke. Ankaŭ forigi el %s Tio forigos la legdaton de ĉi tiu ĉapitro. Ĉu vi certas? Restarigi ĉiujn ĉapitrojn por ĉi tiun elemento Eraro konservante bildon Malsukcesis ŝargi paĝojn: %1$s Ĝisdatigado jam funkcias Ne eblas malfermi laste legitan ĉapitron Biblioteko laste ĝisdatigita: %s Vidi venontajn ĝisdatigojn Gvidilo pri venontaj ĝisdatigoj Sekva monato Antaŭa monato Neniu instalita fonto trovita Gvidilo pri fonta migrado Elektu fonton el kiu migri Nu, estas embarase Ne instalitaj %s trafis neatenditan eraron. Ni sugestas ke vi kunigu la prikolapsajn protokolojn ĉe nia subteneja kanalo ĉe Discord. Relanĉi la aplikaĵon Superrigardo Legada daŭro Elementoj En ĉiea ĝisdatigo Entute Legitaj Sekviloj Sekvataj elementoj Mezuma takso Uzataj N/A %dt %dh %dm %ds Averto: grandaj amasaj elŝutoj povas igi fontojn fariĝi pli malrapidaj kaj/aŭ bloki %s. Tuŝetu por ekscii pli. Ĝisdatigado de biblioteko… (%s) Grandaj ĝisdatigoj povas damaĝi fontojn kaj konduki al pli malrapidaj ĝisdatigoj kaj pliigan baterian uzadon. Tuŝetu por ekscii pli. %1$d ĝisdatigo(j) fiaskis Tuŝetu por ekscii pli Bonvolu aldoni la elementon al via biblioteko antaŭ ol fari tion Por helpo pri kiel ripari erarojn de bibliotekaj ĝisdatigoj, vidu %1$s Preterlasita ĉar serio estas finita Preterlasita ĉar estas nelegitaj ĉapitroj Preterlasita ĉar neniuj ĉapitroj estas legataj Preterlasita ĉar serio ne devigas havi ĝisdatigojn Preterlasis ĉar neniu eldono estis atendita hodiaŭ Neniu dosierelektila apo trovita Fiaskis akiri aliron al persista dosierujo. La apo eble kondutos neatendate. Neniu dosiero elektita Malfermi ĉe GitHub Ĉi tiu Androida versio ne estas plu subtenata Kategorio malplenas Neniuj elementoj trovitaj en ĉi tiu kategorio Komencanta gvidilo Vi nune havas neniujn kategoriojn. Malsukcesis ĉirkaŭpasi Cloudflare Tuŝetu ĉi tie por helpo kun Cloudflare *nepra WebView estas nepra por ke la apo funkcios Bonvolu ĝisdatigi la WebView-apon por plibona kongruo Aktualigis defaŭltajn ĉapitrajn agordojn Ne eblis elŝuti ĉapitron pro neatendita eraro Neniu Wi-Fi-konekto disponebla Neniu retkonekto disponebla Paĝo %d netrovita dum dividado Kontrolado de elŝutoj Apaj ĝisdatigoj Vidi vian laste ĝisdatigitaj elementoj Fenestraĵo nedisponebla kiam apa ŝloso estas ŝaltita Vi forigos \"%s\" el via biblioteko HTTP %d, kontrolu retejon per WebView Sen interreta konekto Mi ĝuis kiam… Elektita Disponebla Elekti ĉiujn Elekti neniun Elekti ŝaltitajn fontojn Elekti alpinglitajn fontojn Daŭrigi Datumoj por migri Forigi elŝutojn de aktuala elemento post migro Aldonaj ŝlosilvortoj (nedeviga) Helpas malvastigi serĉrezultojn aldonante aldonajn ŝlosilvortojn Kaŝi elementojn sen kongruo Kaŝi elementojn sen pli novaj ĉapitroj Montri elementon nur se la kongruo havas aldonajn ĉapitrojn Tiuj opcioj estas malrapidaj kaj danĝeraj, kaj povas igi fontojn altrudi limigojn Altnivela serĉa reĝimo Dividas la titolon al ŝlosilvortojn por pli vasta serĉo Kongruo bazita sur ĉapitra nombro Se ŝaltita, elektas la plej antaŭan kongruon. Alikaze elektas la unuan kongruon laŭ fonta prioritato. Migrado Migrado (%1$d/%2$d) Kopii Migri Neniu alternativo trovita Plej lasta: %1$s Nekonata Serĉi permane Ne migri Migri nun Kopii nun Ĉu haltigi migradon? Haltigi Nuligi Kopii Migri Nuligi Nuligi Neniu ĉapitro trovita, ĉi tiu elemento ne povas esti uzota por migri Donacu Katpuĉino Montri bildojn en mangaaj priskriboj Kaŝi mankantajn ĉapitrajn indikilojn Sekvata private Malpermesi ne-ASCII-dosiernomojn Certigas kongruon kun certaj konservejaj dosiersistemoj kiuj ne subtenas Unikodon. Kiam tio estas ŝaltita, vi bezonos permane renomi dosierujojn de fontoj kaj mangaoj anstataŭigante ne-ASCII-signojn per iliaj minusklaj UTF-8-deksesumaj prezentoj. Ĉapitraj dosieroj ne necesas esti renomitaj. Fermi langeton Kunrulaj elŝutoj de fontoj Kunrulaj elŝutoj de paĝoj Paĝoj elŝutitaj sammomente por fonto Filtri ekskluzivitajn skantradukistojn Kalkulado… Legosignita ================================================ FILE: i18n/src/commonMain/moko-resources/es/plurals.xml ================================================ Tras %1$s minuto Tras %1$s minutos Tras %1$s minutos %1$d nuevo capítulo %1$d nuevos capítulos %1$d nuevos capítulos Capítulos %1$s y 1 más Capítulos %1$s y %2$d más Capítulos %1$s y %2$d más Para %d título Para %d títulos Para %d títulos Actualización de extensión disponible %d actualizaciones de extensiones disponibles %d actualizaciones de extensiones disponibles Queda %1$s Quedan %1$s Quedan %1$s %d categoría %d categorías %d categorías Completada en %1$s con %2$s error Completada en %1$s con %2$s errores Completada en %1$s con %2$s errores %1$s capítulo %1$s capítulos %1$s capítulos %d servicio de seguimiento %d de servicios de seguimiento %d servicios de seguimiento Se omite %d capítulo, o bien falta en la fuente o ha sido filtrado Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados Ayer Hace %1$d días Hace %1$d días Siguiente capítulo sin leer Siguientes %d capítulos sin leer Siguientes %d capítulos sin leer Siguiente capítulo Siguientes %d capítulos Siguientes %d capítulos Falta %1$s capítulo Faltan %1$s capítulos Faltan %1$s capítulos 1 día %d días %d días %d repositorio %d repositorios %d repositorios Mañana Dentro de %1$d días Dentro de %1$d días 1 página %1$s páginas %1$s páginas Se ha saltado un elemento Se han saltado %1$d elementos Se han saltado %1$d elementos ¿Copiar este elemento? ¿Copiar estos %1$d elementos? ¿Copiar estos %1$d elementos? ¿Migrar este elemento? ¿Migrar estos %1$d elementos? ¿Migrar estos %1$d elementos? ================================================ FILE: i18n/src/commonMain/moko-resources/es/strings.xml ================================================ Nombre Ajustes Cola de descargas Biblioteca Historial Actualizaciones Copia de seguridad y restauración Ajustes Filtrar Con capítulos sin leer Quitar filtro Buscar Seleccionar todo Marcar como leído Marcar como no leído Todo leído hasta aquí Descargar Borrar Actualizar biblioteca Editar Añadir categoría Editar categorías Renombrar categoría Asignar categorías Editar la portada Pausar Capítulo anterior Capítulo siguiente Reintentar Eliminar Reanudar Abrir en el navegador Modo de visualización Cancelar Ordenar Instalar Cargando… General Visor Descargas Seguimiento Avanzado Acerca de Títulos por fila En vertical En horizontal Actualizaciones automáticas No Cada 6 horas Cada 12 horas Diarias Cada 2 días Restringir las actualizaciones automáticas dependiendo del estado del dispositivo Mientras se carga la batería Saltarse títulos cuyo estado de publicación sea «completado» Actualizar progreso al terminar un capítulo Pantalla completa Transiciones de página animadas Mostrar el número de página Utilizar brillo personalizado Mantener la pantalla encendida Navegación Con las teclas de volumen Color de fondo Blanco Negro Sentido de lectura normal Por páginas, de izquierda a derecha Por páginas, de derecha a izquierda Por páginas, de arriba abajo Tira vertical continua Método de ampliación Ajustar al tamaño de pantalla Estirar la imagen Ajustar a anchura Ajustar a altura Tamaño original Ajuste inteligente Ampliación inicial Automática Hacia la izquierda Hacia la derecha Centrada Tipo de rotación inicial Cualquier dirección Forzar en vertical Forzar en horizontal Borrarlos tras marcarlos como leídos de forma manual Borrar capítulos terminados de forma automática Servicios de seguimiento Limpiar la caché de capítulos Usado: %1$s Se vació la caché. Se han borrado %1$d archivos Se produjo un error al limpiar Borrar cookies Cookies borradas Borrar la base de datos Borra del historial los títulos que hayas leído pero no formen parte de tu biblioteca Elementos borrados Versión Enviar informes de fallos Ayuda a corregir cualquier error. No se enviará ninguna información personal Iniciar sesión en %1$s Nombre de usuario Contraseña Iniciar sesión Conectado Error desconocido Actualizando categoría En publicación Desconocido Con licencia Eliminar de biblioteca Capítulo %1$s Descargando (%1$d/%2$d) Error Título de la fuente Número de capítulo Por fuente Por número de capítulo Por fecha de subida Descargar Sin leer ¿Seguro que quieres eliminar los capítulos seleccionados? Leyendo Completados Abandonado En espera Para leer luego Puntuación Título Estado Capítulos Esto eliminará la fecha de lectura de este capítulo. ¿Estás seguro? Reiniciar todos los capítulos de la serie actual Pág: %1$d Siguiente capítulo no encontrado No se pudo cargar la imagen No se pudieron descargar los capítulos. Puedes volver a intentarlo en la sección de descargas Nuevos capítulos encontrados Primero tienes que añadir el título a tu biblioteca Elige una imagen de portada Elige una copia de respaldo Descargar Ya estás usando la última versión disponible Descargando… Toca aquí para instalar la actualización Error de descarga ¡Hay una nueva versión! No hay descargas No hay actualizaciones recientes No has leído nada últimamente Tu biblioteca está vacía Error No se ha podido descargar el capítulo debido a un error inesperado No estás conectado a ninguna red Wi-Fi Categorías Contenido de la biblioteca Seguimiento Historial Favoritos Alfabéticamente Por número de capítulos publicados Por última fecha de lectura Marcar como favorito Quitar como favorito Añadir No estás conectado a Internet Descarga pausada ¿Usar esta imagen como portada? Apariencia Cuadrícula compacta Lista Compartir Guardar Restablecer Deshacer Abrir registro Restaurar La aplicación no está disponible Semanales Todos Categoría predeterminada Preguntar siempre Recortar bordes Filtro de color personalizado Teclas de volumen (al revés) Rojo Verde Azul Alfa Desactivado Último capítulo leído El penúltimo capítulo leído El antepenúltimo capítulo leído El trasantepenúltimo capítulo leído El anteanteantepenúltimo capítulo leído Descargar capítulos nuevos Crear una copia de seguridad Se puede utilizar para restaurar la biblioteca actual Restaurar copia de seguridad Restaurar la biblioteca a partir de una copia de seguridad Frecuencia de respaldo automático Copia de seguridad creada Restauración completada ¿De qué quieres hacer una copia de seguridad? Restaurando copia de seguridad Creando copia de seguridad No hay más resultados Fuente local ¿Quieres borrar los capítulos descargados? Pausado Seguimiento ¡Ya existe una categoría con este nombre! Categorías eliminadas ¿Añadir manga a la biblioteca? Imagen guardada Filtro personalizado Poner como portada Se ha actualizado la portada de la serie Error al actualizar la portada Descargador Búsqueda global Capítulos descargados Otros Búsqueda global… Recientes Explorar Comunes No hay categorías. Pulsa el botón «+» para crear una y organizar tu biblioteca. Migrar Extensiones Información de la extensión Actualizar Instalar Pendiente Descargando Instalando Instalado Confiar No es fiable Desinstalar La extensión no es fiable Normal Rápida Siguiente: Anterior: No hay ningún capítulo más No hay ningún capítulo anterior Migrar Copiar Una extensión maliciosa puede leer credenciales de inicio guardadas o ejecutar cualquier tipo de código en tu dispositivo. \n \nAl marcar al autor como de confianza aceptas estos riesgos. Sin animación Añadido a biblioteca Quitado de biblioteca Copiado en portapapeles: \n«%1$s» Fuente no instalada: %1$s Releyendo Estado Tipo Finalizado: Actual: Cargando páginas… Error al cargar páginas: %1$s Elige qué datos incluir Velocidad de animación de doble toque Por páginas Menú de pulsación prolongada Abrir en WebView Saltar capítulos leídos Mezcla de colores Superponer Multiplicar Trama Sobreexponer / Aclarar Subexponer / Oscurecer Ayuda No se han encontrado resultados Selecciona una fuente a migrar Atrás Adelante Actualizar Biblioteca Obsoleto Esta extensión ya no está disponible. Puede que no funcione bien y te cause problemas con el resto de la aplicación, te recomendamos desinstalarla. Formato de fecha Actualización global Cerrar sesión Has cerrado sesión Pausado ¿Cerrar sesión en %1$s? Más Por capítulo más reciente Ver capítulos Cancelar todo Claro Oscuro Del sistema Gestionar notificaciones Seguridad y privacidad Desbloqueo biométrico Bloquear por inactividad Siempre Nunca Pantalla segura Actualizaciones pendientes Mostrar contenido en el área recortada Fallo al evitar Cloudflare Actualiza la aplicación WebView para mejorar la compatibilidad Nuevos capítulos Activando «pantalla segura» ocultas la vista previa del contenido de la ventana al cambiar de aplicación y se bloquean las capturas de pantalla Visualización Capítulo %1$s Capítulo %1$s y %2$d más Capítulos %1$s Ocultar el contenido de las notificaciones Desactivar la optimización de batería Correo electrónico Mejora la cadencia de las actualizaciones y las copias de respaldo que se hagan en segundo plano La optimización de la batería ya está desactivada Hacer transición entre capítulos Menú Lo más nuevo Lo más antiguo Mover al principio Mover al final Actualizando biblioteca Actualizaciones de extensiones Saltar capítulos excluidos por filtros Lectura Fuentes Invertir selección Tira vertical discontinua Espaciado lateral Ancladas Desanclar Anclar Añadir seguimiento En biblioteca Añadir a la biblioteca Primero instala WebView para poder ver contenido de la aplicación Menos Más Licencias de código abierto Página web Sólo ya descargados Caps. %1$s-%2$s Se ha cancelado la restauración Ha fallado la restauración de la copia de respaldo La restauración ya está en curso No se han podido respaldar los datos La copia de seguridad ya está en curso %1$02d min, %2$02d seg Usado recientemente Buscar actualizaciones Guía de fuente local Filtra todos los elementos de tu biblioteca para ver solo los que estén disponibles sin conexión Modo de lectura Para esta serie Gris No se pudieron abrir los ajustes del dispositivo Actualizar las portadas de la biblioteca La sincronización de estos servicios solo funciona en un solo sentido. Cada título en tu biblioteca tiene un botón de seguimiento y tendrás que configurarlo a mano, uno a uno. Datos Fuentes que faltan: La copia de seguridad no contiene ningún título; la biblioteca está vacía. El archivo de copia de seguridad no parece estar bien: Comprueba si hay una nueva portada, información y descripción al actualizar la biblioteca Actualizar automáticamente los metadatos Cuadrícula amplia Migrar Pestañas Mostrar pestañas de categorías No se encontraron páginas Desactivar todos Activar todos Muestra brevemente el modo actual al abrir el visor Mostrar modo de lectura Empezar No se ha encontrado la fuente Desactivar Es necesario reiniciar la aplicación para que surta efecto Red Estado desconocido Ambos Vertical Horizontal No invertir Invertir zonas de toque Autor desconocido Actualizado a v%1$s Novedades No se pudo descargar ningún capítulo, queda muy poco espacio Buscar por «%1$s» en todas las fuentes Modo de lectura Esquema de colores Por antigüedad en la biblioteca Todavía no has anclado ninguna fuente Terminadas En progreso Con errores Servicios de seguimiento sin conectar: Permitir el borrado de capítulos marcados como favoritos Borrar capítulos Puede contener contenido para adultos (+18) +18 Esto no evita que las extensiones extraoficiales o que estén mal clasificadas muestren contenido para mayores de 18 años en la aplicación. No hay capítulos Se han actualizado los ajustes predeterminados de capítulo Establecer como predeterminado Aplicar también a todos los elementos en mi biblioteca ¿Seguro que quieres guardar estos ajustes como predeterminados? Ajustes de capítulo %1$s: %2$s, página %3$d Ajustes de búsqueda Capítulos descargados En la biblioteca Pausa el historial de lectura Modo incógnito Borrar historial ¿Estás seguro? Perderás todo el historial. Historial eliminado Siguiente página Página anterior Guía de migración de fuentes Fuentes para adultos (+18) Mostrar en la lista de fuentes y extensiones No se ha encontrado ninguna aplicación con la que elegir archivos Vuelve a iniciar sesión en MAL Estilo Kindle Fecha de finalización Fecha de inicio Guarda los registros de errores en un archivo para compartirlos con los desarrolladores Compartir los registros de fallos Zonas de toque Borde En forma de L Descendiente Ascendente Por número de capítulo Por fecha de subida En seguimiento Derecha e izquierda Tendrás que instalar las extensiones que falten e iniciar sesión en los servicios de seguimiento para poder usarlos. Esta versión de Android ya no es compatible No se pudo copiar al portapapeles DNS sobre HTTPS (DoH) Los elementos de las categorías excluidas no se descargarán, aunque sí estén en alguna categoría con descargas. Descarga automática En horizontal En vertical Derecha Izquierda Siguiente Anterior Si la partición de la página ancha no coincide con la dirección de lectura Dividir la página partida en la dirección contraria Partir en dos las páginas anchas Muestra una vista previa de las zonas al abrir el visor Ver superposición con zonas de toque Excluir: %s Incluir: %s Ninguna Los elementos en categorías excluidas no se actualizarán, aunque sí estén en alguna categoría con actualizaciones. Toca para ver los detalles Mostrar el número de elementos Por fecha de obtención del capítulo Tipo de rotación Crea carpetas según el título de la obra Guardar las páginas en carpetas independientes Acciones Escala de grises Es posible que las funciones de copia de respaldo y restauración no funcionen correctamente si la opción «Optimización de MIUI» está desactivada. Crepúsculo de medianoche Daiquiri de fresa Modo oscuro negro puro Tako Restricciones: %s Yotsuba Yin y yang Manzana verde Dinámico Esquema de colores Empezar la descarga Cancelar todo para esta serie Contenido local Algunos fabricantes restringen aún más ciertas aplicaciones y detienen sus servicios en segundo plano. Esta página web tiene más información sobre cómo solucionarlo. Todavía no existen categorías. No se han encontrado coincidencias Fuente no soportada Sin leer Hubo un error al compartir la portada Hubo un error al guardar la portada Se ha guardado la portada Portada Fecha Ordenar por El formato del capítulo no es correcto No se ha encontrado el capítulo Desactivar el modo incógnito Ofrecen funciones mejoradas para ciertas fuentes. Se hace un seguimiento automático de los títulos al añadirlos a la biblioteca. Servicios de seguimiento mejorados Guía de seguimiento Automático No Establecer el tipo de orden para cada categoría Actividad en segundo plano Seguir Guía de introducción Interfaz de tableta Más baja Baja Alta Más alta Sensibilidad para ocultar automáticamente el menú al desplazarse Invertir colores Hoy Azul marino y turquesa Apariencia Identifícate para confirmar el cambio Original Categorías excluidas Ayudar a traducir Por número total de elementos Instalador Shizuku no está activo Clásico Instalando extensión… Instala e inicia Shizuku para utilizarlo como instalador de extensiones. Información de la aplicación Registro detallado Mostrar registros detallados en el registro del sistema (reduce el rendimiento de la aplicación) Advertencia Las actualizaciones grandes pueden implicar un mayor uso de la batería y que los distintos servicios bloqueen o ralenticen el acceso a tu dispositivo. Toca aquí para más información. Idioma Es una buena idea tener copias de respaldo fuera de tu dispositivo. Ten en cuenta que incluyen contraseñas y otros datos privados que seguramente no quieras compartir. Solo con Wi-Fi Cada 3 días Advertencia: Las descargas grandes pueden llevar a que las fuentes se vuelvan cada vez más lentas y en casos extremos que los servidores limiten o impidan el acceso a %s. Toca aquí para más información. Actualizar todas Actualizaciones de la aplicación Limpiar la caché de capítulos al abrir la aplicación Base de datos limpia %1$d títulos que no pertenecen a la biblioteca en la base de datos No se han podido obtener las extensiones disponibles Política de privacidad Saltarse títulos con capítulos por leer Si necesitas ayuda para resolver los errores de actualización de la biblioteca mira en %1$s Guardar como archivo CBZ En pausa Publicación finalizada Cancelada Ver la obra Desplazarse por el resto de la página antes de cambiar Cuadrícula sólo de portadas Acercar la vista en horizontal Saltarse títulos sin empezar Omitido, ya que su publicación ha terminado Omitido porque todavía hay capítulos sin leer Omitido porque no hay capítulos leídos Ver más detalles Actualizaciones fallidas: %1$d En vertical, al revés Mover al primer puesto Desactivado No se ha podido guardar la imagen No hay ningún elemento en la biblioteca que respaldar Abrir en GitHub Se han limpiado los datos del WebView Limpiar datos del WebView Cerrar Todavía no se ha instalado ninguna fuente No se ha encontrado ninguna fuente Por última comprobación de actualizaciones Por capítulos restantes Mejora el rendimiento del visor, dividiendo páginas descargadas mucho más altas que anchas No se ha encontrado la página %d al dividir La ruta al archivo de la página %d no se encuentra Restablece el modo de lectura y orientación en toda la biblioteca Se han restablecido los ajustes del visor Restablecer los ajustes del visor en cada serie No se pudieron restablecer los ajustes del visor Houston, tenemos un problema Versión Idioma Clasificación por edades Leyendo A leer en un futuro Leídos del todo En pausa Sin terminar Solo en conexiones no medidas No se pudo abrir el último capítulo leído Portada personalizada Sin instalar Idioma de la aplicación Lavanda Sin descripción Borrar categoría ¿Quieres borrar la categoría «%s»? InternalError: Mira el registro de depuración para más información Identificarse como otro navegador web («user agent») Volver a la identificación de navegador («user agent») original Quitar todo Aquí aparecerá el contenido más reciente de tu biblioteca El widget no está disponible cuando el bloqueo de aplicación está activo Ya se está actualizando Marea La cadena con el agente de usuario («user agent») no puede estar vacía Solo funciona si el capítulo actual y el que va después ya están descargados. Descargar por adelantado Descargar los siguientes capítulos mientras lees ¿Estás seguro? La biblioteca se actualizó: %s Estás a punto de borrar «%s» de tu biblioteca Populares Varios idiomas No se han concedido los permisos de almacenamiento Omitido, ya que no es necesario actualizarse Buscar… Sincroniza tu progreso de lectura; unidireccional o mejorada Descargas automáticas y por adelantado Categorías, actualizaciones generales y acciones al deslizar el dedo %s se ha cerrado por un problema inesperado. Te sugerimos que compartas todos tus registros de depuración, enviándolos a nuestro canal de apoyo en Discord, en inglés. Modos de lectura, apariencia y navegación Colores de la interfaz y formatos de fecha Informes de fallos y ahorro de batería Pantalla segura y desbloqueo biométrico Copias de seguridad manuales y automáticas, almacenamiento Fuentes, extensiones y búsqueda global ¡Vaya! Reiniciar la aplicación Título desconocido Ubicación incorrecta: %s Ahora mismo La cadena con el agente de usuario («user agent») no parece ser correcta Reindexando descargas Abrir un elemento al azar Parece que esta categoría está vacía No damos soporte oficial a las versiones de F-Droid. \nToca para más información. Mostrar el botón de seguir leyendo Al hacer esto %s ya no aparecerá como empezado ese día ¿Quieres quitar esta fecha? Al hacer esto %s ya no aparecerá como terminado ese día Reconstruir el índice de descargas Forzar a la aplicación a volver a comprobar los capítulos descargados Empezados En el dispositivo Leídos del todo Tiempo de lectura Leídos Con seguimiento En total Actualizados de forma global Puntuación media %dd %dh %dm En uso N/D En servicios de seguimiento Descargados Estadísticas Resumen Títulos %ds Ahora no La categoría está vacía Ver número de capítulos por leer en el icono de actualizaciones Se ha copiado al portapapeles Saltarse los capítulos repetidos Están disponibles, pero las fuentes todavía no se han instalado: %s %1$s error: %2$s *necesaria Saltar elementos que ya estén en la biblioteca Copiar al portapapeles Actualizar categoría Dividir las imágenes altas Superposición Girar las páginas anchas para adaptarlas a la pantalla Girar las páginas anchas en la dirección opuesta Información de depuración Al deslizar a la izquierda en un capítulo Al deslizar a la derecha en un capítulo Ampliar tocando dos veces la pantalla Próxima actualización prevista Intentar predecir cuándo sale el siguiente número Intervalos Estimar cada Forzar actualización cada No se ha comprobado ninguna actualización hoy al no prever ninguna Establecer intervalo Frecuencia de actualización personalizada Aceptar ¿Quieres desvincular %s? Esto eliminará el seguimiento localmente. Quitar también de %s Borrar los ya descargados Con resultados La biblioteca se ha sincronizado correctamente Sincronizando la biblioteca Toca aquí para solucionar problemas de acceso con Cloudflare Reconstruyendo el índice de descargas Iniciar sesión en el servicio No se ha podido crear un archivo de respaldo «%s» no parece estar disponible HTTP %d, prueba abriendo la página web en WebView Sin conexión a Internet Desbloquear %s Mover al último puesto Marcas de tiempo relativas «%1$s» en vez de «%2$s» Actualizando biblioteca... (%s) Ajustes de la fuente Ajustes de la aplicación No has elegido ningún archivo Nunca Esta transición minimiza las manchas y el efecto de retención de imagen en pantallas de tinta electrónica Última copia automática: %s Parpadear a blanco al cambiar de página Datos y almacenamiento Almacenamiento utilizado Por puntuación en el servicio de seguimiento Aplicar Restablecer vista Crear No se ha encontrado ningún equipo de traducción Equipo de traducción Excluir equipo de traducción Seleccionado Sin seleccionar Más opciones Subir un nivel Ubicación del almacenamiento Se utiliza para las copias de seguridad automáticas, poder descargar capítulos y abrir los que ya tengas en tu dispositivo. Elige una carpeta Guía para principiantes ¿Es la primera vez que instalas %s? Te recomendamos leer la guía de principiantes. Comenzar Tienes que elegir una carpeta ¡Hola! ¿No es la primera vez que instalas %s? Saltar Siguiente Lo primero de todo es dejar las cosas a tu gusto. Siempre puedes volver a cambiarlas más tarde en los ajustes. Todavía no has proporcionado ninguna carpeta Elige una carpeta donde %1$s pueda guardar capítulos descargados, copias de seguridad y otras cosas.\n\nTe recomendamos que sea solo y exclusivamente para %1$s.\n\nCarpeta seleccionada: %2$s Permiso para instalar aplicaciones Permitir notificaciones Previene cortes y retrasos al procesar tareas en segundo plano que tarden un poco; como al buscar y descargar contenido nuevo, así como al restaurar copias de respaldo. Uso de batería en segundo plano Para poder instalar extensiones que te dejen encontrar y descargar contenido. Recibe notificaciones cuando aparece contenido nuevo en tu biblioteca y otras cosas. Conceder Disponible: %1$s / Total: %2$s Toca aquí para conceder los permisos necesarios para instalar extensiones. Incluir datos privados, como las claves de inicio de sesión en plataformas de seguimiento Descripción completa del problema: Se espera que el siguiente número salga en aproximadamente %1$s, la aplicación busca actualizaciones cada %2$s. Frecuencia de actualización personalizada: ¡Este repositorio ya existe! Actualizaciones inteligentes La dirección URL del repositorio no parece ser correcta Añade más repositorios a %s; la dirección URL tiene que terminar en «index.min.json». ¿Seguro que quieres borrar el repositorio «%s»? Borrar repositorio Añadir un repositorio Todavía no has añadido ningún repositorio. Repositorios de extensiones Dirección URL del repositorio ¿Acabas de actualizar desde una versión más antigua y no sabes qué hacer? Échale un vistazo a la guía de almacenamiento. Guía de almacenamiento Norteño Pronto Dejar de marcar todas la extensiones desconocidas como de confianza Abrir repositorio Desactivar alejar Perfil de visualización personalizado Añadir de todos modos Reemplazar Ya hay una huella digital de la clave de firma El repositorio %1$s tiene la misma huella digital de la clave de firma que %2$s.\nSi ya contabas con ello y te parece bien se reemplazará %2$s. De lo contrario habla con la persona a cargo de este repositorio. Próximamente Ver las próximas actualizaciones Próxima guía Próximo mes Mes anterior No se ha podido obtener un acceso continuo a la carpeta, por lo que la aplicación puede fallar de vez en cuando. Parpadear cada Parpadear a Blanco Blanco y negro Negro Duración %1$s ms Este manga está terminado o no hay fecha de publicación prevista. Copia de seguridad JSON no compatible El archivo de la copia de seguridad está dañado Repositorios de extensiones Copiar el enlace Omitir la descarga de capítulos duplicados y ya leídos ¿Quieres añadir el repositorio «%s»? ¿Marcar el capítulo %d como leído en los servicios de seguimiento? Al azar Enviar registros de errores Envía registros anónimos de errores a los desarrolladores. Seguridad Eliminar ¿Quieres quitar la extensión? ¿Seguro que quieres quitar la extensión «%s»? El envío de registros de errores y estadísticas de uso nos permitirá identificar y solucionar problemas, mejorar el rendimiento y hacer que las versiones futuras se adapten mejor a tus necesidades Enviar estadísticas de uso Comparte estadísticas de uso con las que mejorar la aplicación. Informar de errores y compartir datos Todas las obras leídas Actualizar el progreso al marcarlo como leído El progreso de lectura ha saltado al capítulo %d Predeterminado (%d) Elegir un tamaño máximo con el que decodificar imágenes por hardware Si el visor carga una página en blanco te recomendamos ir reduciéndolo poco a poco hasta que funcione.\nLímite actual: %s Empeora el rendimiento, te recomendamos activarlo solo si la imagen sigue sin verse al reducir el tamaño máximo Pausa el historial de lectura para las obras que dependan de esta extensión Seguimiento privado Automático Monocromo Exportar La biblioteca se ha exportado Elementos en la biblioteca Autor Artista Seguir públicamente Seguir de forma privada Cargar imágenes de tira vertical con el decodificador antiguo Marcar capítulos duplicados como ya leídos Capítulos por leer Al obtener capítulos nuevos Comportamiento Al terminar de leer un capítulo Editar notas Notas Me gustó la parte en la que… Posibles duplicados Ya tienes otras obras en tu biblioteca con ese mismo nombre.\n\nElige una de ellas para empezar la migración o añadirla sin más. Actualizar los títulos para que coincidan con los de la fuente Cuidado: si se cambia el nombre también se borrará de la cola de descargas (si está ahí). Iniciando sesión… Conservar obras con capítulos leídos Perderás los capítulos leídos y el progreso de lectura de las obras que no estén en tu biblioteca No se pudo crear la carpeta: %s No se pudo crear la carpeta de descarga Estás a punto de borrar elementos de tu base de datos Continuar Seleccionar todo Disponibles Elegidos Cancelar selección Selec. fuentes ancladas Selec. fuentes activas Miaupuchino Borrar las descargas del título actual tras la migración Los ajustes de aquí abajo pueden hacer que funcione más lento y te bloqueen de forma temporal las fuentes en línea Datos que migrar Otras claves de búsqueda (opcional) Afina la búsqueda añadiendo más claves Ocultar los títulos que no coincidan Ocultar si no tiene capítulos nuevos Solo mostrarlo si este tiene capítulos nuevos Modo de búsqueda avanzada Amplía la búsqueda al buscar las palabras del título por separado, sin ser una coincidencia exacta Buscar coincidencias basadas en el número de capítulo Migrar Último: %1$s Desconocido Búsqueda manual No migrar Copiar ahora ¿Parar la migración? Parar Cancelar Migración No se ha encontrado ningún capítulo, por lo que no se puede utilizar para migrar Migrar Al activarlo elige la coincidencia mayor, si no elige la primera que encuentre por prioridad de fuente. Cancelar Copiar Cancelar Copiar No se encontraron títulos alternativos Migrando (%1$d/%2$d) Migrar ahora Ocultar los indicadores de capítulos que falten Donar Ver imágenes en las descripciones de manga Prohibir los nombres de archivo que no sean ASCII Permite guardar tus datos en ciertos tipos de almacenamiento que no admitan Unicode. Al activarlo tendrás que renombrar las carpetas de tus fuentes y manga, pasándolas a representaciones UTF-8 en hexadecimal en minúscula. No tienes que hacer lo mismo con las carpetas de capítulos. Descarga simultánea desde fuentes Descarga simultánea de páginas Cantidad de páginas a descargar simultáneamente desde cada fuente remota Cerrar pestaña Ocultar equipos de traducción excluidos Calculando… Favoritos ================================================ FILE: i18n/src/commonMain/moko-resources/eu/plurals.xml ================================================ %1$s-n egin da errore %2$s-ekin %1$s-n egin da %2$s errorerekin Atzo Duela %1$d egun Minutu baten ostean %1$s minuturen ostean Kapitulu bat saltatzen, iturria falta da edo iragazia izan da %d kapitulu saltatzen, iturria falta da edo iragaziak izan dira Titulu baterako %d titulurako 1 geratzen da %1$s geratzen dira kategoria %d %d kategoria kapitulu 1 %1$s kapitulu jarraitzaile 1 %d jarraitzaile Kapitulu berri bat %1$d kapitulu berri Luzapen baten eguneraketa eskuragarri %d luzapenen eguneraketak eskuragarri %1$s kapituluak eta bat gehiago %1$s kapituluak eta %2$d gehiago ================================================ FILE: i18n/src/commonMain/moko-resources/eu/strings.xml ================================================ Ez dira kapitulurik aurkitu Irudia gorde da Erroreak Akats ezezaguna Argitaratzen Ezezaguna Liburutegia eguneratzen Hasiberrientzako gida Manga Kapituluak Kategoriak Izena Historiala Blokeatu geldi geratzean Kategoria lehentsia Lizentziatua Kapitulua ez da aurkitu Kargatzen… Telefonoa kargatzen Titulua Bukatua Irakurri gabea L formakoa Kindle erakoa Egde erakoa Ezkerra eta eskuma Ezer ez Arakatu Iturri lokalen gida Ez dira emaitzarik aurkitu Iturri lokala Azkenak Ez dago emaitza gehiagorik Abisua: deskarga handiek iturriak motelagoak izatea eta/edo %s blokeatzea ekar dezakete. Babeskopia sortzen %1$02d min, %2$02d seg Gehitu jarraipena Errore bat gertatu da cachea garbitzean Babeskopia sortu da Babeskopiatik berreskuratzen Bateriaren optimizazioa desgaituta dago dagoeneko Azala gorde da Azala eguneratu da Sarrerak ezabatu dira Migratu Ezarri azal gisa Kendu liburutegitik Zerbitzuak Bilatu eguneraketak Iturria ez dago onartua Berreskuratzea bertan behera utzi da Baliteke babeskopiak/berreskuratzeak behar bezala ez funtzionatzea MIUI optimizazioa desgaituta badago. Aplikazioa berrabiarazi behar da indarrean jartzeko Instalatu eta abiarazi Shizuku luzapen instalatzaile gisa erabiltzeko. Shizuku ez dago martxan Berreskuratu egin da Cookieak garbitu dira Alde batera utzia Egoera Fidagarria ez den luzapena Luzapen hau jada ez dago eskuragarri. Desgaitua Babeskopia fitxategi baliogabea Babeskopia egin eta leheneratu Migratu Luzapenak Luzapenaren informazioa Laguntza Gehiago Ezarpenak Deskarga-ilara Liburutegia Eguneraketak Historiala Iturriak Errorea azala gordetzean Errorea azala partekatzean Bertikala Pantaila segurua Ezkutatu jakinarazpenen edukia Horizontala Ezkerretik eskuinera Eskuinetik ezkerrera Bertikalki Irakurtzen Momentuz utzia Irakurtzeko asmoa dut Gelditurik Puntuazioa Babeskopia abian da dagoeneko Aurrerapena Saioa itxi Saioa itxi da Baztertu: %s Eguneratu guztiak Instalatu Egiteke Deskargatzen Instalatzen NSFW (18+) edukia izan dezake Instalatzailea Pantaila osoa Gris-eskala Alderantzikatua Kolore-iragazkia modu nahastuan Sahiestu / Argitu Erre / Ilundu Irakurketa modu lehenetsia Webtoon Jatorrizko tamaina Ezkerra Biraketa mota lehenetsia Alboko betegarria Erakutsi beti kapituluaren trantsizioa Azkenik irakurritako kapitulua Ezabatu kapituluak Atzetik hasita laugarren irakurritako kapitulua Saioa hasi gabeko jarraitzaileak: Zeren babeskopia nahi duzu? Berreskuratzea abian da Ezin izan da babeskopia berreskuratu Babeskopia automatikoak oso gomendagarriak dira. Kopiak beste leku batzuetan ere gorde beharko zenituzke. Garbitu cookieak Datuak Garbitu kapituluen cachea Garbitu kapituluen cachea aplikazioa ixtean Datu-basea garbi Desgaitu bateriaren optimizazioa Bertsioa Webgunea Open Source lizentziak Pribatutasun politika Edozein akats konpontzen laguntzen du. Ez da datu sentikorrik bidaliko Deskargatuak bakarrik Ezkutuko modua Irakurketa historia gelditu egiten du Deskargatutako kapituluak Azken erabilera Ainguratua Ez duzu iturri ainguraturik Kapituluaren formatu baliogabea Data Egile ezezaguna Egoera ezezaguna Deskargatutako kapituluak ezabatu nahi dituzu? Arbelean kopiatu da: \n%1$s Gelditurik Kapituluaren zenbakia Irakurri gabea Azala Ezarri lehenetsia bezala Ez da aurkitu %1$d orrialdea Ez da hurrengo kapitulua aurkitu Irudia ezin izan da kargatu Irakurketa modua Oraingoa: Aurrekoa: Ez dira orrialderik aurkitu Ez da iturria aurkitu Deskargatu Deskarga bukatua Errorea Ondare 18+ Itzali Nabigazioa U v%1$s-ra eguneratua Saioa hasia Itxi saioa %1$s-n? Liburutegira gehitua Ziur hautatutako kapituluak ezabatu nahi dituzula? Bukaera-data Hasiera-data Honek kapitulu honen irakurketa-data kenduko du. Ziur zaude? Hurrengoa: Argitalpen honetarako Bukatua: Ez dago hurrengo kapitulurik Ez dago aurreko kapitulurik Kopiatu Android bertsio hau jada ez da onartzen Zaharkitua Desinstalatu Erakutsi orrialdearen zenbakia Liburutegian Gehiago %1$s Kapitulua Kapituluaren ezarpenak Egoera Mota Iragazki pertsonalizatua Kategoriak ezabatuak Berrezarri manga honen kapitulu guztiak Hautatu azaleko irudia Ez dago eguneraketarik Ezin izan da Cloudflare saihestu Kapituluaren ezarpen lehenetsiak eguneratu dira Deskargatzailea Ezin izan da kapitulua deskargatu ustekabeko errore baten ondorioz Ez dago sare-konexiorik erabilgarri Kapituluaren eguneraketak Aplikazioen eguneraketak Hurrengo orrialdea Luzapenen eguneraketak Pantaila Kolore-iragazki pertsonalizatua Biraketa mota Horizontal blokeatua Librea Bertikala Horizontala Bertikal blokeatua Irakurria bezala eskuz markatu ondoren Baimendu laster-markadun kapituluak ezabatzea Irakurri ondoren automatikoki ezabatu Zerbitzu hobetuak Lagundu itzultzen Ez da aurkitu fitxategiak hautatzeko aplikaziorik Denak Fabrikatzaile batzuek aplikazioen murrizketa gehigarriak dituzte, atzeko planoko zerbitzuak akabatzen dituztenak. Webgune honek informazio gehiago du nola konpondu jakiteko. Luzapen hau fidagarria ez den ziurtagiri batekin sinatu zen eta ez zen aktibatu. \n \nLuzapen maltzur batek Mihon-n gordetako saio-hasierako kredentzialak irakur ditzake edo kode arbitrarioa exekutatu. \n \nZiurtagiri honetaz fidatzean, arrisku hauek onartzen dituzu. Fidatu gabekoa Atzeko planoaren kolorea Eguneratu Distira pertsonalizatua Biderkatu Babeskopia egiteak huts egin du Gauerdiko ilunabarra Instalatuak Aplikazioaren informazioa Animatu orrialdeen trantsizioak Erakutsi irakurketa modua Grisa Ezin izan dira orriak kargatu: %1$s Garbitu historia Desblokeatzea eskatu Galdetu beti Luzapena instalatzen… Gainjarri Zuria Beltza Hurrengoa Orrikaldekatua Automatikoa Sakaketa bikoitzaren animazioaren abiadura Automatikoa Aurrekoa Nabigazio-diseinua Luzatu Smart doiketa Erdian Normala Azkar Irakurtzen Atzetik hasita hirugarren irakurritako kapitulua Ezkerra Bertikalki etengabe Eskala mota Doitu pantaila Doitu zabalera Doitu altuera Zoomaren hasierako posizioa Eskuina Animaziorik ez Irakurketa modua Sarea Baztertutako kategoriak Azkenaurreko irakurritako kapitulua Atzetik hasita bosgarren irakurritako kapitulua Deskarga automatikoa Garbitu datu-basea Erroreen erregistroak fitxategi batean gordetzen ditu garatzaileekin partekatzeko Kategoria eguneratzen Fitxak Kapitulu zenbakiaren arabera Igoera dataren arabera Irudi hau azaleko arte gisa erabili? Ezin izan dira kapituluak deskargatu memorian leku gutxi dagoelako Eguneratze handiek bateriaren erabilera areagotzea eta iturriak motelagoak izatea eragin dezakete Deskarga pausatu da Baxua Baxuena Deskargatu kapitulu berriak Bertsio berria eskuragarri! Liburutegia berreskuratzeko erabil daiteke Zure liburutegiko manga guztiak iragazten ditu DNS HTTPS bidez (DoH) Bidali hutsegite-txostenak Desgaitu ezkutuko modua Erabilia: %1$s Liburutegiko manga Ezin izan da arbelean kopiatu Deskargatu Gehitu liburutegira Mesedez, hasi saioa berriro MAL-en Iturriaren izenburua Iturriaren arabera Ziur ezarpen hauek lehenetsi gisa gorde nahi dituzula? Mesedez, eguneratu WebView aplikazioa bateragarritasun hobea izateko Bukatua Izen hori daukan kategoria bat badago dagoeneko! Deskargatzen… Errorea deskargan Hautatu migratzeko iturri bat Mesedez, gehitu manga zure liburutegian hau egin aurretik Orriak kargatzen… Arrunta WebView beharrezkoa da Mihon-rentzat Ez dago Wi-Fi konexiorik erabilgarri Lehenetsia Jarraipena Bistaratze-modua Bistaratu Lauki-sare trinkoa Lauki-sare erosoa Zerrendatu Deskargatutako kapituluak Erakutsi elementu kantitatea Erakutsi kategorien fitxak Honi buruz Gaia Sortu erroreen erregistroak %1$s Kapitulua %1$s Kapituluak Mantendu pantaila piztuta Saltatu irakurriak bezala markatutako kapituluak Gorde orrialdeak karpeta ezberdinetan Sortu karpetak manga izenburuaren arabera Altua Saltatu iragazitako kapituluak Bolumen-teklak Zer dago berri Sortu babeskopia Falta diren iturriak: Babeskopia fitxategiko datuak berreskuratu egingo dira. \n \nFalta diren luzapenak instalatu eta jarraipen-zerbitzuetan saioa hasi beharko duzu ondoren horiek erabiltzeko. Deskargatzen (%1$d/%2$d) Errorea Nire liburutegiko manga guztietan ere aplikatu Liburutegitik kendua Gutxiago Iturria ez dago instalatuta: %1$s Manga liburutegira gehitu? Hautatu babeskopia fitxategia Ezin izan da azala eguneratu Gehiketa data Bilatu Bilatu ezarpenak Bilaketa globala Hautatu dena Hautatu alderantzizkoa Markatu irakurria bezala Markatu irakurri gabea bezala Markatu aurrekoak irakurriak bezala Deskargatu Jarri laster-marka kapituluari Utzi alde batera argitalpen honetako guztiak Kendu laster-marka kapituluari Ezabatu Eguneratu liburutegia Gaitu guztiak Desgaitu guztiak Editatu Gehitu Gehitu kategoria Editatu kategoria Izena aldatu kategoriari Kategoriak ezarri Editatu azala Ikusi kapituluak Pausatu Aurreko kapitulua Hurrengo kapitulua Saiatu berriro Kendu Hasi Jarraitu Nabigatzailean ireki Ireki WebView-n Migratu Desgaitu Ainguratu Aingura kendu Ezeztatu Utzi guztiak alde batera Ordenatu Igoera dataren arabera Kapitulu zenbakiaren arabera Sistemarena erabili Itzali Piztu Aplikazioaren gaia Dinamikoa Sagar Berdea Dataren formatua Kudeatu jakinarazpenak Segurtasuna Beti Pantaila seguruak aplikazioaren edukia ezkutatzen du aplikazioak aldatzean, eta pantaila-argazkiak blokeatzen ditu NSFW (18+) iturriak Erakutsi iturrien eta luzapenen zerrendetan Honek ez du eragozten ofizialak ez diren edo oker markatutako luzapenek NSFW (18+) edukia aplikazioan erakustea. Gaur Bistaratu Errenkada bakoitzeko elementu kopurua Eguneraketa globalak Eguneratze automatikoak Irakurri gabeko kapituluak ditu Sartu: %s G Besteak Bilaketa globala… Historia ezabatu da Ziur zaude? Historia guztia galduko da. Iturrien migrazio gida Hautatu sartu nahi dituzun datuak Kapitulu berriak aurkituak Ez da ezer irakurri azkenaldian Deskargarik ez Ez dago azkenaldiko eguneraketarik Zure liburutegia hutsik dago Ez daukazu kategoriarik. Sakatu gehiketa botoia zure liburutegia antolatzeko bat sortzeko. Aurreko orrialdea Piztu Berriena Zaharrena Gorantz Beherantz Inoiz ere ez Moztu ertzak Alderantzikatu bolumen-teklak Sakatzea alderantzikatu Ezer ez Horizontala Bertikala Eskuina B A Altuena Babeskopia erabili Berreskuratu liburutegia babeskopia fitxategitik Babeskopien maiztasuna Alfabetikoki Oharra Autentifikatu aldaketa berresteko Ezarpenak Menua Iragazi Orri-markatzailea jarria Jarraitua Irakurri gabea Kendu iragazkia Mangak guztira Kapituluak guztira Azken aldiz irakurria Azken kapitulua Eskuratze data Mugitu gora Mugitu behera Instalatu Partekatu Gorde Erreseteatu Desegin Ireki erregistroa Berrezarri Atzera Aurrera Freskatu Hasi deskargatzen orain Aplikazioa ez dago erabilgarri Orokorra Itxura Liburutegia Irakurgailua Deskargak Jarraipena Aurreratua Hizkuntza Marrubi Daiquiri-a Tako Urdin-berdea eta turkesa Yin eta Yang Yotsuba Beltz hutseko modu iluna Itzali 6 orduro 12 orduro Egunero 2 egunean behin Fidagarritzat jo Biak Ekintzak Erakutsi sakaketa luzean Hasi saioa %1$s-n Erabiltzaile-izena Posta elektroniko helbidea Pasahitza Hasi saioa Bilatu \"%1$s\" toki guztietan Sakatu xehetasunak ikusteko 3 egunean behin Astero Wi-Fi bidez bakarrik Mugaketak: %s Argitalpen bukatua al da Freskatu metadatuak automatikoki Babeskopiak ez du mangarik. Jarraipena Berrirakurtzen Erakutsi erabilitako irakurketa modua laburki irakurlea irekitzen denean Jarraipen gida Eguneratu aurrerapena irakurri ondoren Jarraitu Cachea garbitu da. %1$d fitxategi ezabatu dira Atzeko planoko ekintzak Liburutegiaren eguneraketak eta babeskopiak atzeko planoan egiten laguntzen du Ezin izan dira gailuaren ezarpenak ireki Ordenatu honen arabera Eguneraketak egiteke Erakutsi edukia eremu ebakian Ezin izan dira kapituluak deskargatu. Berriro saia zaitezke deskargen atalean Gorde CBZ artxibo gisa Eguneratu liburutegiko manga azalak Tablet interfazea %1$s: %2$s, %3$d orrialdea Oraindik ez duzu kategoriarik sortu. Ezin izan da luzapenen zerrenda lortu Bilatu azal eta xehetasun berriak liburutegia eguneratzean Baztertutako kategorietako mangak ez dira eguneratuko, sarturiko kategorietan egon arren. Pantaila mugitzean menua ezkutatzeko sentikortasuna Liburutegian ez dauden %1$d manga datubasean Erregistroaren bertsio luzea Gorde bertsio luzedun erregistroak sistemaren erregistroan (aplikazioaren errendimentua murrizten du) Kap. %1$s-%2$s Kategoria bakoitzeko ordenatze eta bistaratze ezarpenak Baztertutako kategorietako mangak ez dira deskargatuko, sarturiko kategorietan egon arren. Bertan behera utzia Etenaldian Liburutegi eguneraketen akatsak nola konpondu jakiteko, ikusi %1$s Manga lokala %1$s kapitulua eta %2$d gehiago Norabide bakarreko sinkronizazioa jarraipen-zerbitzuetan kapituluaren aurrerapena eguneratzeko. Konfiguratu manga bakoitzaren jarraipena haien jarraipen botoia erabilita. Nabigazio-diseinuaren geruza erakutsi Erakutsi ukipen-zonak irakurgailua irekitzen denean Iturri zehatzetarako ezaugarri hobetuak eskaintzen dituzten zerbitzuak. Mangen jarraipena automatikoki egiten da zure liburutegira gehitzen direnean. Ezabatu zure liburutegian gordeta ez dauden mangen historia Argitarapena amaitua Orrialde biko zatiketa Alderantzikatu orrialde bikoitzeko zatiketa Orrialde bikoitzeko zatiketaren kokapena irakurketa noranzkoarekin bat ez badator Eguneraketa automatikoentzako gailuaren murrizketak Manga erakutsi Saltatu egin da irakurri gabeko kapituluak daudelako Kapitulurik irakurri gabe Saltatu egin da seriea bukatua dagoelako Saltatua ez daudelako irakurritako kapitulurik Bertsioa Multi Ezabatu kategoria Itxi App hizkuntza Hizkuntza Bilatu… \"%s\" kategoria ezabatu nahi duzu? Guztia kendu Estatistikak Hasia Lokala Deskargatuak Kopiatu arbelera Orain ez Ezabatu deskargatuak Aukeratu karpeta bat Ezarri Karpeta bat aukeratu behar da Notifikazioetarako baimena Aplikazioak instalatzeko baimena Ongi etorri! Kategoria eguneratu Aukera gehiago %s erabili duzu dagoeneko? Aukeratuak Aukeratu gabeak Hurrengoa Nabigatu gora Jarraitu irakurtzen botoia OK Irakurketa zerrenda Bukatu gabeko zerrenda Ezarri denbora-bitartea Datu eta memoria Azkenengo egunearatze egiaztapena ================================================ FILE: i18n/src/commonMain/moko-resources/fa/plurals.xml ================================================ آپدیت برای یک افرونه موجود است آپدیت برای %d افرونه موجود است قسمت های %1$s و 1 قسمت دیگر ‬قسمت های %1$s و %2$d قسمت دیگر‬ 1 قسمت جدید %1$d قسمت جدید برای ۱ مانگا برای %d مانگا %d دسته %d دسته بعد از %1$s دقیقه بعد از %1$s دقیقه ۱ عدد باقی مانده %1$s عدد باقی مانده در %1$s با %2$s خطا انجام شد در %1$s با %2$s خطا انجام شد ۱ ردیاب %d ردیاب 1 قسمت %1$s قسمت 1 قسمت جا افتاده است %d قسمت جا افتاده است دیروز %1$d روز پیش قسمت خوانده نشده بعدی %d قسمت خوانده نشده بعدی قسمت بعدی %d قسمت بعدی %1$s قسمت گم شده %1$s قسمت گم شده 1 روز %d روز ================================================ FILE: i18n/src/commonMain/moko-resources/fa/strings.xml ================================================ نسخه جدید موجود است! خطا در دانلود دانلود کامل شد در حال دانلود… آپدیت جدیدی موجود نیست دانلود فایل پشتیبان را انتخاب کنید عکس روی جلد را انتخاب کنید لطفا قبل این کار مانگای موردنظر را به کتابخانه اضافه کنید آپدیت عکس روی جلد با خطا مواجه شد قسمت های %1$s قسمت %1$s و %2$d قسمت دیگر قسمت %1$s قسمت‌های جدید پیدا شدند دانلود قسمت ها با خطا مواجه شد. با مراجعه به بخش دانلودها می توانید دوباره تلاش کنید کپی تغییر منبع منبعی که میخواهید به آن منتقل شود را انتخاب کنید اطلاعاتی که می‌خواهید منتقل شود را انتخاب کنید قسمت %1$s - %2$s درحال آپدیت کتابخانه صفحه ای یافت نشد لود صفحات با خطا مواجه شد: %1$s درحال لود صفحات… قسمت قبلی وجود ندارد قسمت بعدی وجود ندارد قبلی: بعدی: فعلی: تمام شده: حالت خواندن این عکس، به عنوان عکس روی جلد تنظیم شود؟ قسمت بعدی یافت نشد صفحه: %1$d عکس روی جلد بروزرسانی شد تنظیم به عنوان عکس روی جلد فیلتر سفارشی عکس ذخیره شد ریست اطلاعات همه قسمت های این مانگا با این کار تاریخ خواندن این قسمت حذف می شود. مطمئنید؟ دسته بندی ها حذف شدند دسته بندی با این نام قبلا ساخته شده است! نوع وضعیت وضعیت عنوان امتیاز در حال بازخوانی(Rereading) متوقف شده(Paused) نگه داشته شده(On hold) رها شده (Dropped) تکمیل شده(Completed) درحال خواندن(Reading) اضافه کردن ردیابی ردیابی آیا مطمئنید که می خواهید قسمت های انتخاب شده را حذف کنید؟ خوانده نشده دانلود شود بر اساس تاریخ آپلود نمایش محتوا در منطقه برش خورده ردیابی بر اساس عنوان منبع بر اساس شماره قسمت شماره قسمت عنوان منبع متوقف خطا درحال بارگیری (%1$d/%2$d) قسمت %1$s مانگا به کتابخانه اضافه شود؟ منبع نصب نشده است: %1$s کپی شد: \n%1$s قسمتهای بارگیری شده را نیز حذف شوند؟ نمایش اطلاعات کمتر نمایش اطلاعات بیشتر از کتابخانه حذف شد به کتابخانه اضافه شد حذف از کتابخانه در کتابخانه برای به روز رسانی وضعیت پیشرفت قسمت ها، در سایت های خدمات ردیابی، همگام سازی یک طرفه انجام دهید. برای ردیابی هر داده از تب ردیابی اقدام کنید. وب تون(Webtoon) Burn / Darken Dodge / Lighten هر ۱۲ ساعت یکبار انتخاب دسته بندی هیچ دسته بندی وجود ندارد. با زدن دکمه به علاوه دسته بندی جدیدی بسازید. کتابخانه شما خالی است هیچ چیز مانگاای به تازگی خوانده شده هیچ قسمت جدیدی یافت نشد لیست دانلود خالی است راهنما اطلاعات افزونه افزونه‌ها تغییر منبع پشتیبان گیری و بازیابی منابع سابقه به روز رسانی‌ها کتابخانه صف دانلود تنظیمات بیشتر نام افزودن به کتابخانه مجوزدار نامعلوم در حال پخش راهنمای منبع محلی مرور جدیدترین جست و جو در تمام منابع… منابع پین شده آخرین استفاده دیگر منبع محلی هیچ نتیجه ای یافت نشد نتیجه بیشتری یافت نشد تب ها زمان پشتیبان گیری بازگرداندن کتابخانه از فایل پشتیبان برگرداندن نسخه پشتیبان می تواند برای بازگرداندن کتابخانه فعلی استفاده شود تهیه نسخه پشتیبان خدمات بعد از خوانده‌شدن، وضعیت قسمت بروزرسانی شود دانلود قسمت‌های جدید پنجم به آخرین قسمت خوانده‌شده چهارم به آخرین قسمت خوانده‌شده سوم به آخرین قسمت خوانده‌شده دوم به آخرین قسمت خوانده‌شده آخرین قسمت خوانده شده غیرفعال شده بعد از خواندن به‌صورت خودکار پاک کن بعد از آن‌هایی که به صورت دستی به عنوان خوانده‌شده علامت‌گذاری شده‌اند فاصله از کنار صفحه درحال خواندن همیشه انتقال قسمت را نشان داده شود برای این مجموعه بازکردن عکس با خطا مواجه شد قصد خواندن دارم(Plan to read) هم اندازه حالت هوشمند Multiply Overlay Double tap animation speed نصب نشانک قسمت آپدیت افزونه‌ها به روزرسانی قسمت‌ها عمومی دانلود متوقف شد اتصال شبکه در دسترس نیست اتصال وای فای در دسترس نیست به علت خطای غیرمنتظره بارگیری این چپتر، ممکن نیست خطا سیستم دانلود کننده لطفا برنامه وب نما را برای سازگاری بهتر آپدیت کنید وب نما برای تاچیومی مورد نیاز است عدم موفقیت در دور زدن کولدفیر opacity آبی سبز قرمز افقی قفل‌شده عمودی قفل‌شده آزاد حالت دوران پیش‌فرض سریع عادی بدون انیمیشن مرکز راست چپ خودکار موقعیت شروع بزرگنمایی اندازه اصلی هم اندازه با طول هم اندازه با عرض کشیده هم اندازه با صفحه نمایش نوع مقیاس صفحه به صفحه عمودی پیوسته عمودی راست به چپ چپ به راست حالت پیش فرض خواندن سیاه خاکستری سفید رنگ پس زمینه با لمس طولانی نشان بده دکمه‌های صدا معکوس کردن دکمه‌های صدا نوار ناوبری Navigation پرش ازز قسمت‌های فیلتر شده پرش از قسمت‌هایی که خوانده شده اند روشن نگه داشتن صفحه نمایش صفحه نمایش حالت blend فیلتر رنگ استفاده از فیلتر رنگ سفارشی استفاده از سیستم روشنایی سفارشی بریدن حاشیه‌ها هنگام باز شدن کتابخوان ، حالت فعلی را به طور خلاصه نشان داده شود نمایش حالت خواندن نمایش شماره صفحه انمیشن‌های تغییر صفحه تمام صفحه این افزونه دیگر در دسترس نیست. ممکن است به درستی کار نکند و باعث ایجاد مشکلاتی در برنامه شود. حذف نصب آن توصیه می شود. یک افزونه مخرب می تواند هر گونه طلاعات ورود به سیستم زخیره شده را بخواند یا اختیاری یک کد را اجرا کند. \n \nبا اعتماد به این گواهی شما این خطرات را می‌پذیرید. افزونه نامطمئن حذف نصب نامطمئن مورد اعتماد نصب شده در حال نصب در حال بارگیری در انتظار منسوخ شده آپدیت آپدیت‌های در انتظار همه همیشه بپرس دسته بندی پیشفرض هنگام آپدیت عکس روی جلد و اطلاعات مانگا ها (در صورت تغییر) آپدیت شوند متادیتا فقط به صورت خودکار آپدیت شود با وضعیت \"کامل‌شده\" هنگام شارژ کردن محدودیت‌های دستگاهی به‌روزرسانی‌ خودکار هفتگی هر ۴۸ ساعت یکبار هر ۲۴ ساعت یکبار هر ۶ ساعت یکبار خاموش به‌روزرسانی‌های خودکار به‌روزرسانی همگانی افقی عمودی موارد در هر ردیف نمایش مخفی کردن اعلان‌ها \"صفحه نمایش امن\" محتویات برنامه را هنگام عوض کردن برنامه‌ها مخفی می‌کند و همچنین اسکرین‌شات را مسدود می‌کند صفحه نمایش امن هرگز همیشه قفل صفحه هنگام بیکاری نیاز به باز کردن قفل امنیت مدیریت اعلان‌ها فرمت تاریخ روشن خاموش تم پیش‌فرض سیستم درباره پیشرفته ردیابی بارگیری ها کتابخوان کتابخانه عمومی برنامه موجود نیست درحال بارگیری… بازآوری‌ رو به جلو بازگشت بازیابی بازکردن log خنثی کردن (Undo) از اول ذخيره اشتراک گذاری نصب جابه‌جایی به پایین جابه‌جایی به بالا قدیمی ترین جدیدترین مرتب سازی لغو همه لغو برداشتن پین پین نمایش برگه های دسته بندی قسمت‌های دانلود شده چشم نواز لیست فشرده نمایش حالت نمایش تغییر منبع در WebView باز کنید باز کردن در مرورگر ازسرگیری آغاز حذف تلاش دوباره قسمت بعد قسمت قبل مکث مشاهده قسمت ها درحال به روز رسانی دسته بندی ها خطای ناشناخته شما خارج شدید خروج از%1$s خارج می شوید؟ وارد شدید ورود گذرواژه آدرس ایمیل نام کاربری ورود به %1$s همه مانگاهای موجود در کتابخانه را فیلتر می کند فقط دانلود شده ها به رفع اشکالات برنامه کمک می کند. هیچ گونه داده حساسی ارسال نخواهد شد ارسال گزارش های خرابی بررسی برای به آپدیت‌ها مجوزهای منبع باز نسخهٔ وب سایت تنظیمات دستگاه باز نشد بهینه سازی باتری از قبل غیرفعال شده است به بروزرسانی‌ها و پشتیبان‌گیری از کتابخانه در حالت پس زمینه کمک می‌کند غیر فعال کردن بهینه سازی باتری تازه کردن عکس روی جلد مانگاها اطلاعات حذف شدند حذف سابقه برای مانگاهایی که در کتابخانه ذخیره نشده اند پاک کردن پایگاه داده کوکی ها پاک شدند پاک کردن کوکی ها هنگام پاک کردن حافظه نهان خطایی روی داد حافظه نهان پاک شد. %1$d فایل پاک شدند مصرف شده: %1$s پاک کردن حافظه پنهان قسمت‌ها اطلاعات بازیابی لغو شده بازیابی نسخه پشتیبان ناموفق بود درحال بازگرداندن نسخه پشتیبان بازیابی هنوز در حال انجام است پشتیبان گیری ناموفق بود درحال ایجاد نسخه پشتیبان چه چیزی را می خواهید پشتیبان گیری کنید ؟ پشتیبان گیری هنوز در حال انجام است %1$02d دقیقه, %2$02d ثانیه بازیابی کامل شد منابع ناموجود: فایل پشتیبان حاوی هیچ ورودی کتابخانه نیست. فایل پشتیبان نامعتبر است نسخه پشتیبان ایجاد شد ویرایش عکس روی جلد تغییر نام دسته ویرایش دسته ها افزودن دسته افزودن ویرایش غیر فعال کردن همه فعال کردن همه آپدیت کتابخانه پاک کردن حذف نشانک قسمت دانلود شود علامت گذاری قبلی‌ها به عنوان خوانده شده علامت گذاری به عنوان خوانده نشده علامت گذاری به عنوان خوانده شده معکوس کردن انتخاب شده انتخاب همه جست و جوی کامل جست و جو اخرین قسمت آخرین خوانده ‌شده کل قسمت‌ها الفبا حذف فیلتر خوانده ‌نشده بوک مارک شده فیلتر منو تنضیمات تاریخچه قسمت ها کتابخانه ورودی‌ها دسته بندی ها خطاها تکمیل شده پیشرفت به دلیل فضای کم دیسک امکان دانلود قسمت ها وجود ندارد منبع یافت نشد وضعیت ناشناخته نویسنده ناشناخته شما هیچ منبع پین‌شده‌ای ندارید «%1$s» در همه منابع جستجو شود موارد جدید برای اعمال تغییرات، به راه اندازی مجدد برنامه نیاز است شبکه ردیابی هایی که به سیستم وارد نشده اند: حالت خواندن تم غیرفعال کردن تاریخ اضافه شدن به نسخه v%1$s آپدیت شد جست و جوی تنضیمات قسمت های دانلود شده مانگاهای کتابخانه متوقف کردن تاریخچه خواندن حالت ناشناس آیا مطمئن هستید؟ تمام سابقه از دست خواهد رفت. سابقه پاک شد 18+ منابع محتوای جنسی (+18) این کار از نمایش محتوای 18+ (محتوای نامناسب) توسط افزونه‌های غیررسمی یا اشتباه برچسب‌خورده جلوگیری نمی‌کند. هیچ قسمتی پیدا نشد تنظیم به عنوان پیشفرض همچنین برای تمام مانگاهای موجود در کتابخانه من اعمال شود آیا مطمئن هستید که می خواهید این تنظیمات را به صورت پیش فرض ذخیره کنید؟ اجازه‌ی پاک‌کردن قسمت‌های نشانک‌گذاری شده را بده حذف قسمت ها منابع این افزونه ممکن است شامل محتوای نامناسب (+18) باشند صفحه بعدی صفحه قبلی هر دو عمودی افقی هیچ کدام منطقه‌های لمس را معکوس کن تنظیمات پیش فرض چپتر به روز شد %1$s: %2$s, صفحه %3$d لطفا دوباره به MAL وارد شوید تنظیمات قسمت ها هیچ نرم افزار انتخاب فایلی یافت نشد راهنمای تعویض منبع پاک کردن سابقه نمایش در لیست منابع و افزونه‌ها چپ راست قدیمی نصب کننده ساخت پوشه بر اساس عنوان ورودی آپدیت همگی فعالیت در پس زمینه مجموع ورودی ها پیش فرض دنبال شده ذخیره صفحات در پوشه های جداگانه هیچ مورد مشابهی پیدا نشد در حال نصب کردن افزونه … دریافت لیست افزونه ها ناموفق بود اخطار احراز هویت جهت تایید تغییرات سرویس های بهینه شده خوانده نشده این نسخه آندروید دیگر پشتیبانی نمی‌شود بازکردن در گیت هاب راهنمای شروع شما هنوز هیچ دسته‌بندی ندارید. بروزرسانی برنامه هنگام ضربه زدن تصاویر را عریض کنید بزرگنمایی تصویر چشم انداز بررسی آخرین به روزرسانی تعداد نخوانده‌ها به دلیل کامل‌بودن سری، رد شد منبع محلی نمایش تعداد موارد نزولی ظاهر تاریخ گرفتن قسمت بر اساس تاریخ آپلود بر اساس شماره‌ی قسمت صعودی زبان نمایش ورودی لغو همه برای این سری حالت تاریک مشکی خالص بستن تم برنامه پویا سیب سبز غروب نیمه‌شب داکری توت‌فرنگی آبی و فیروزه‌ای یین و یانگ یوتسوبا انتقال سری به بالا همین الان شروع به دانلود کن برای دیدن جزئیات لمس کنید فقط روی شبکه‌ی نامحدود که شروع نشده‌اند محدودیت‌ها: %s با قسمت‌(های) خوانده‌نشده امروز هر 3 روز فقط روی Wi-Fi تنظیمات بر اساس دسته‌بندی برای ترتیب و نمایش اطلاعات برنامه معکوس کردن جای دو صفحه‌ی تقسیم شده بعدی Shizuku در حال اجرا نمی‌باشد یک لحظه هنگام باز شدن متن‌خوان نمایش بده نسخه زبان رده‌بندی سنی شبیه Kindle افقی عمودی معکوس حساسیت مخفی کردن منو هنگام بالا و پایین بردن صفحه بالاترین دسته‌بندی‌های محذوف بالا تقسیم صفحات عریض اگر محل قرارگیری صفحات عریض تقسیم شده با حالت خواندن مطابقت نداشته باشد سیاه و سفید معکوس‌شده اقدامات خودکار L شکل حالت دوران عمودی پایین الگوی فقط جلد پایین‌ترین مناطق قابل لمس روشن تاکو خاموش مناطق قابل لمس را نشان بده برای استفاده از Shizuku به عنوان یک نصب‌کننده‌ی افزونه، آن را نصب و اجرا کنید. غیر فعال قبلی راست و چپ لبه دانلود خودکار هیچ‌کدام شامل: %s بدون: %s ورودی هایی که در دسته‌بندی های حذف‌شده هستند، حتی اگر هم‌زمان در دسته‌بندی های مشمول باشند به‌روزرسانی نمی‌شوند. ذخیره به عنوان فایل آرشیو CBZ انتشار به پایان رسید قالب فصل نامعتبر است لغو شد قفل برنامه، صفحه امن گزارش‌های خرابی، بهینه‌سازی باتری ارغوانی تم جزر و مدی زبان برنامه مکان نامعتبر: %s ورودی ها در دسته بندی های حذف شده حتی اگر در دسته بندی های در نظر گرفته شده نیز باشند، دانلود نخواهند شد. قالب تم، تاریخ و زمان دسته‌ها، به روز رسانی سراسری حالت خواندن، نمایش، نوار وضعیت همگام سازی پیشرفت یک طرفه، همگام سازی پیشرفته چند آیا می خواهید دسته \"%s\" را حذف کنید؟ حذف دسته بارگیری شود دانلود خودکار در حین خواندن جستجو… باز کردن ورودی تصادفی حذف همه‌چیز خطای داخلی: برای اطلاعات بیشتر گزارش خطا را بررسی کنید دانلود خودکار، دانلود از قبل منابع، برنامه های افزودنی، جستجوی سراسری پشتیبان گیری دستی و خودکار نمایش تعداد خوانده نشده در نماد به‌روزرسانی‌ها آمار من شروع کردم شیرین شده دانلود شد الان نه نمایش دکمه ادامه خواندن بهبود کارکرد ابزار خواندن اگر قسمت فعلی و بعدی دانلود شده باشند، تنها برای ورودی‌های کتابخانه کار می‌کند اجازه دسترسی به حافظه داده نشده. داده ها از فایل پشتیبان برگردانده میشوند. \n \nلازم است که افزونه های جا مانده را دستی نصب کنید و وارد یک سرویس دنبال کننده شوید تا بتوانید پیشرفت هر کار را ذخیره کنید. راهنمای ردیابی چپتر های تکراری را رد کن فعالسازی سرویس پیشرفته برای منابعی که پشتیبانی کنند. کار های افزوده شده به کتابخانه به صورت خودکار ردگیری میشوند. ردگیری هیچ داده کتابخانه ای نیست که پشتیبانی شود پشتیبانی/بازگردانی ممکن است کار نکند اگر بهینه‌سازی MIUI غیر فعال باشد در دسترس است اما افزونه منبع نصب نشده است: %s شما باید از پشتیبانی ها در جا های دیگر هم کپی داشته باشید. بروزرسانی دسته بندی کپی کردن به کلیپ‌برد متوقف شده باز گشایی %s پاک کردن قسمت های دانلود شده ذخیره باز نشانی به حالت اولیه گزینه های بیشتر انتخاب شده انتخاب نشده مجموعه ها را به پایین منطقل کن برو به بالا امتیاز رهگیز داده های و ذخیره سازی باشه به روز رسانی مورد انتظار بعدی هشدار: حجم زیاد بارگیری ممکن است باعث اهسته تر شدن سرعت ویا مسدود کردن %s از منبع شود. برای اطلاعات بیشتر لمس کنید. به دلیل این که این مجموعه نیازی به به روز رسانی نداشت رد شد به دلیل وجود چپتر های خوانده نشده رد شد به دلیل این که هیچ چپتری خوانده نشده بود رد شد %1$d بروز رسانی ناموفق \"%1$s\" به جای \"%2$s\" صفحات عریض را بچرخان تا جا شوند محبوب حرکت کشیدن به راست در هنگام عوض شدن صفحه فلاش سفید بزن حرکت کشیدن به چپ آخرین به روز رسانی کتابخانه: %s خارج از دوره انتشار موزد انتظار برای بزرگ نمایی دوبار ضربه بزنید تناوب به روز رسانی شخسی سازی شده خوش آمدید! بیاید برخی چیز ها را تنظیم کنیم. شما همیشه میتوانید این تنظیمات را در بخش تنظیمات تغییر دهید. بعدی برای نصب افزانه منبع. دسترسی اعلان ها برای به روز رسانی های کتابخانه و بیشتر مطلع شوید. استفاده از باطری از وقفه در به روز رسانی های کتاب خانه، بارگیری و پشتیبان گیری های طولانی اجتناب کنید. اعطا کردن به %s نا آشنا هستید؟ ما پیشنهاد میکنیم تا یک سر به راهنمای شروع بزنید. نصب مجدد %s؟ زمان بندی های نسبی به روز رسانی هوشمند لغو اعتماد افزونه های ناشناخته مخازن افزونه ها اضافه کردن مخزن آدرس مخزن این مخزن در حال حاضر وجود دارد! حذف مخزن آدرس مخزن بی اعتبار است آشا شما میخواهید تا \"%s\" مخزن را حذف کنید؟ جهت چرخش صفحات گسترده را برعکس کن مکان ذخیره سازی تنظیم نشده است عکس های بلند را تقسیم کن ورود به ناضر اجرای داخل کتاب خانه را مخفی کن محل زخیره سازی شروع کنید پرش مجوز برای نصب افزونه ها لازم است. به اینجا ضربه بزنید تا اعطا کنید. به %s مخازن اضافی اضافه کنید. این باید یک آدرس باشد که با \"index.min.json\" تمام شود. شما هیچ مخزنی برای تنظیم ندارید. مخزن منبع باز مقدار رد باقی مانده در نمایش گر های E-ink کاهش میابد انتخاب یک پوشه یک پوشه باید انتخاب شود راهنمای زخیره سازی مجوز نصب برنامه ها ایجاد کردن خطای کامل: تنظیمات برنامه تنظیمات منبع حاوی تنظیمات حساس (یه عنوان مثال رمز ورود ناظر) فایل پشتیبانی ایجاد نشد استفاده از فظای زخیره سازی در دسترس: %1$s / کل:%2$s هنگام راه‌اندازی برنامه، حافظه پنهان قسمت را پاک کنید درحال همگام سازی کتاب خانه قابل استفاده برای به روز رسانی خودکار، بارگیری قسمت ها، و منابع محلی. آخرین پشتیبان گیری خودکار: %s DNS بیش از HTTPS (DoH) همگام سازی کتاب خانه کامل شد ================================================ FILE: i18n/src/commonMain/moko-resources/fi/plurals.xml ================================================ Minuutin jälkeen %1$s minuutin jälkeen 1 uusi luku %1$d uutta lukua Luku %1$s ja 1 lisää Luvut %1$s ja %2$d lisää Yhdelle sarjalle %d sarjalle Laajennuspäivitys saatavilla %d laajennuspäivitystä saatavilla 1 jäljellä %1$s jäljellä %d kategoria %d kategoriaa Valmistui %1$s virheitä löytyi %2$s Valmistui %1$s virheitä löytyi %2$s 1 luku %1$s lukua 1 seurantapalvelin %d seurantapalvelinta 1 puuttuva luku %d puuttuvaa lukua Eilen %1$d päivää sitten Seuraava lukematon luku Seuraavat %d lukematonta lukua ================================================ FILE: i18n/src/commonMain/moko-resources/fi/strings.xml ================================================ Nimi Kategoriat Manga Seuranta Historia Asetukset Latausjono Kirjasto Historia Asetukset Viimeksi luettu Merkitse luetuksi Lataa Seuranta Seuranta Luvut Päivitykset Lukuja yhteensä Globaali haku Merkitse lukemattomaksi Merkitse aiemmat luetuiksi Kirjanmerkitse luku Poista kirjanmerkitty luku Aseta kategoriat Muokkaa kantta Mukautettu suodatus Aseta kansikuvaksi Kansikuva päivitetty Sivu: %1$d Seuraavaa lukua ei löydy Kuvaa ei voitu ladata Käytetäänkö tätä kuvaa kansikuvana? Valmistunut: Nykyinen: Seuraava: Aiempi: Seuraavaa lukua ei ole Aiempaa lukua ei ole Ladataan sivuja… Sivujen lataus epäonnistui: %1$s Valitse sisällytettävä tieto Vaihda Kopioi Lukujen lataaminen epäonnistui. Voit yrittää uudelleen lataukset-osiossa Uusia lukuja löydetty Kansikuvan päivitys epäonnistui Lisää sarja kirjastoosi ensin Valitse kansikuva Valitse varmuuskopio-tiedosto Lataa Ei päivityksiä saatavilla Ladataan… Lataus valmis Latausvirhe Uusi versio saatavilla! Ei latauksia Ei viimeisimpiä päivityksiä Ei mitään luettu viime aikoina Kirjastosi on tyhjä Sinulla ei ole kategorioita. Napauta pluspainiketta, jos haluat luoda sellaisen kirjaston järjestämistä varten. Lataaja Virhe Lukua ei voitu ladata odottamattoman virheen vuoksi Ei Wi-Fi yhteyttä saatavilla Ei verkkoyhteyttä Lataus pysäytetty Tavallinen Varmuuskopiointi ja palautus Siirrä Laajennukset Laajennuksen tiedot Suodatus Kirjanmerkityt Lukemattomat Poista suodattimet Aakkosjärjestyksessä Haku Valitse kaikki Poista Päivitä kirjasto Muokkaa Lisää Lisää kategoria Muokkaa kategorioita Nimeä kategoria uudelleen Yritä uudelleen Pysäytä Aiempi luku Seuraava luku Poista Jatka Avaa selaimessa Avaa WebViewissä Näkymä Näkymä Kompakti ruudukko Lista Ladatut luvut Peruuta Järjestä Asenna Jaa Tallenna Nollaa Kumoa Avaa loki Palauta Ladataan… Sovellus ei ole saatavilla Yleiset Lukija Lataukset Kehittyneet Tietoja Kohteita per rivi Pystysuunta Vaakataso Automaattinen päivitys Pois Kuuden tunnin välein 12 tunnin välein Päivittäin Kahden päivän välein Viikoittain Kaikki Automaattisen päivityksen laitteistorajoitukset Latauksessa Sarja on päättynyt Päivitä luvun edistyminen lukemisen jälkeen Oletus kategoria Kysy aina Päivitä Asenna Odotetaan Ladataan Asennetaan Asennettu Luota Luottamaton Poista asennus Luottamattomat laajennokset Haitallinen laajennus voi lukea tallennetut kirjautumistiedot Mihonista tai suorittaa luvatonta koodia. \n \nLuottamalla tähän laajennokseen hyväksyt nämä riskit. Koko näyttö Animoi sivusiirtymät Tuplanäpäytyksen animaation nopeus Näytä sivunumero Rajaa reunat Mukautettu kirkkaus Mukautettu värisuodatin Pidä näyttö päällä Ohita luetuksi merkityt luvut Navigointi Äänenvoimakkuus näppäimet Käännä äänenvoimakkuus näppäimet Näytä pitkällä napautuksella Taustan väri Valkoinen Musta Oletuslukutila Vasemmalta oikealle Oikealta vasemmalle Pystysuora Webtoon-tyylinen Sivutettu Skaalauksen tyyppi Sovita näyttöön Venytä Sovita leveys Sovita korkeus Alkuperäinen koko Fiksu sovitus Zoomauksen alkusijainti Automaattinen Vasen Oikea Keskellä Ei animaatiota Normaali Nopea Oletuskiertotyyppi Vapaa Lukittu pystysuunta Lukittu vaakataso Punainen Vihreä Sininen Alpha Manuaalisesti luetuksi merkitsemisen jälkeen Lukemisen jälkeen Pois käytöstä Viimeksi luettu luku Toiseksi viimeinen luku Kolmanneksi viimenen luku Neljänneksi viimeinen luku Viidenneksi viimeinen luku Lataa uudet luvut Seurantapalvelut Voidaan käyttää nykyisen kirjaston palauttamiseen Palauta kirjasto varmuuskopiointi-tiedostosta Varmuuskopioinnin tiheys Varmuuskopio luotu Palautus valmis Mitä haluat varmuuskopioida? Palautetaan varmuuskopiota Luodaan varmuuskopiota Tyhjennä lukujen välimuisti Käytössä: %1$s Välimuisti tyhjennetty. %1$d tiedostoa poistettu Virhe tapahtui välimuistia tyhjentäessä Tyhjennä keksit Keksit tyhjennetty Tyhjennä tietokanta Poista mangan historia, jota ei ole tallennettu kirjastoosi Tiedot poistettu Versio Lähetä kaatumisilmoituksia Auttaa korjaamaan bugeja. Arkaluonteista tietoa ei lähetetä %1$s kirjautuminen Käyttäjätunnus Salasana Kirjaudu Kirjauduttu sisään Tuntematon virhe Päivitetään kategoriaa Ei enempää tuloksia Globaali haku… Poista ladatut luvut? Kopioitu leikepöydälle \n%1$s Lähdettä ei ole asennettu: %1$s Luku %1$s Ladataan (%1$d/%2$d) Virhe Pysäytetty Nimike Luvun numero Lähteen mukaan Luvun numeron mukaan Lataa Oletko varma että haluat poistaa valitut luvut? Luettavana Päättynyt Arvosana Nimike Tila Tila Tyyppi Tämän niminen kategoria on jo olemassa! Kategoriat poistettu Luo varmuuskopio Palauta varmuuskopio Paikalliset lähteet Muut Viimeisimmät Selaa Jatkuva Tuntematon Lisensoitu Poista kirjastosta Lisätty kirjastoon Poistettu kirjastosta Lukemattomat Tiputettu Pidossa Aikomus lukea Uudelleenluettava Tämä poistaa luvun lukupäivän. Haluatko jatkaa? Resetoi kaikki luvut tästä sarjasta Lisää sarja kirjastoon? Kuva tallennetu Värisuodattimen sekoitus tyyppi Päällys Monistettu Näyttö Väitävä / Vaalentava Polttava / Tummentava Apu Ei tuloksia Valitse lähde josta vaihdetaan Takaisin Eteenpäin Päivitä Kirjasto Vanhentunut Tämä laajennos ei ole enää saatavilla. Se ei välttämättä toimi oikein ja voi aiheuttaa ongelmia Mihonin kanssa. Laajennoksen poistoa suositellaan. Päivämäärän muoto Globaali päivitys Kirjaa ulos kohteesta %1$s? Kirjaudu ulos Kirjauduttu ulos Pysäytetty Lisää Viimeisin luku Näytä luvut Peruuta kaikki Pois päältä Päällä Seuraa järjestelmää Hallitse ilmoituksia Turvallisuus Vaadi lukituksen avaaminen Aina Ei koskaan Cloudflaren ohittaminen epäonnistui Lukujen päivitykset Näyttö Päivitettävät Päivitä WebView-sovellus yhteensopivuuden parantamiseksi Luku %1$s Luku %1$s ja %2$d lisää Luvut %1$s Piilota ilmoitusten sisältö Lukitse käyttämättömänä Salaa näyttö Turvallinen ruutu piilottaa sovelluksen sisällön sovelluksia vaihdettaessa ja estää kuvakaappauksen ottamisen Poista akun optimointi käytöstä Auttaa taustalla pyörivien kirjaston päivitysten ja varmuuskopioiden kanssa Akun optimointi on jo poistettu käytöstä Sähköpostiosoite Näytä sisältö leikkausalueella Näytä aina luvun vaihdos Valikko Uusin Vanhin Siirrä alkuun Siirrä loppuun Laajennuspäivitykset Palautus peruttu Varmuuskopion palautus epäonnistui Varmuuskopiointi epäonnistui Ohita suodatetut luvut Ladatut Lähteet Päivittää kirjastoa Lisää seuranta Kirjastossa Lisää kirjastoon Kotisivu Poista kiinnitys Kiinnitä Valitse käänteinen Jatkuva pystysuora WebView on pakollinen Mihonissa Palautus on jo käynnissä Varmuuskopiointi on jo käynnissä Sivuntäyttö Avoimen lähdekoodin lisenssit Luku. %1$s - %2$s Vähemmän Enemmän Kiinnitetyt Luettavana Tarkista päivitykset Viimeksi käytetty Paikallinen lähdeopas %1$02d min, %2$02d sek Suodattaa kaikki sarjat kirjastossasi Harmaa Tälle sarjalle Lukutila Laiteasetuksia ei voitu avata Yksisuuntainen synkronointi lukujen seurantapalveluiden päivittämiseksi. Määritä yksittäisten mangamerkintöjen seuranta seurantapainikkeesta. Päivitä kirjaston manga-kannet Latauspäivämäärän mukaan Tiedot Puuttuvat lähteet: Varmuuskopio ei sisällä mangaa. Virheellinen varmuuskopio: Tarkista uusi kansi ja tiedot päivitettäessä kirjastoa Päivitä metatiedot automaattisesti Siirrä Mukava ruudukko Välilehdet Näytä kategorioiden välilehdet Sivuja ei löytynyt Poista kaikki käytöstä Ota kaikki käyttöön Näytä nykyinen tila lyhyesti, kun lukija avataan Näytä lukutila Aloita Lähdettä ei löytynyt Poista käytöstä Edellyttää sovelluksen käynnisstämisen uudelleen Verkko Molemmat Pystysuora Vaakasuora Ei mitään Käännä näpäyttäminen Tuntematon tila Tuntematon tekijä Päivitetty versioon v%1$s Mitä uutta Lukuja ei voitu ladata vähäisen tallennustilan vuoksi Etsi \"%1$s\" globaalisesti Lukutila Teema Lisäyspäivämäärä Sinulla ei ole kiinnitettyjä lähteitä Valmis Edistyminen Virheet Seurantapalvelimet joihin et ole kirjautunut sisään: Poista kirjanmerkityt luvut Poista luvut Tämän laajennoksen lähteet voivat sisältää NSFW (18+) -sisältöä 18+ Tämä ei estä epävirallisia tai mahdollisesti väärin merkittyjä laajennuksia näyttämästä NSFW 18+ sisältöä sovelluksessa. Lukuja ei löytynyt Päivitetyt luvun oletusasetukset Aseta oletukseksi Koskee myös kaikkia kirjastoni mangoja Haluatko varmasti tallentaa nämä asetukset oletuksena? Luvun asetukset %1$s: %2$s, sivu %3$d Hakuasetukset Ladatut luvut Manga kirjastosta Keskeyttää lukuhistorian Incognito-tila Tyhjennä historia Oletko varma? Koko historia menetetään. Historia poistettu Seuraava sivu Edellinen sivu Lähteen siirto-opas NSFW (18+) lähteet Näytä lähde- ja lisäosaluettelossa Tiedostonvalitsinsovellusta ei löytynyt Kirjaudu uudelleen MAL: iin Navigointiasettelu Reuna Kindle tyylinen L-muotoinen Poista kaatumislokit Lopetuspäivämäärä Aloituspäivämäärä Tallentaa virhelokit tiedostoon jaettavaksi kehittäjien kanssa Laskeva Nouseva Lukunumeron mukaan Lisäyspäivämäärän mukaan Seuratut Näytä kohteiden määrä Oikea ja vasen Jaa leveät sivut Jos jaettujen leveiden sivujen sijoittelu ei vastaa lukusuuntaa Käännä jaettujen sivujen sijoittelu Varmuuskopiotiedoston tiedot palautetaan. \n \nSinun on asennattava puuttuvat laajennukset ja kirjauduttava seurantapalveluihin jälkeenpäin käyttääksesi niitä. Oikea Vasen Seuraava Edellinen Näytä napautusalueet, kun lukija avataan Näytä navigointiasettelun peittokuva DNS HTTPS:n kautta Lukuun ottamatta: %s Sisällytä: %s Ei mitään Haettu päivämäärä Poissuljettuihin kategorioihin kuuluvia mangoja ei ladata, vaikka ne olisivat myös sisällytetyissä kategorioissa. Automaattinen lataus Poissuljettuihin kategorioihin sisältyvää mangaa ei päivitetä, vaikka ne olisivat myös sisällytetyissä kategorioissa. Näytä lisätiedot Tätä Android-versiota ei enää tueta Kopiointi leikepöydälle epäonnistui Vaakatasossa Pystysuunnassa Luo kansioita manga-otsikon mukaan Tallenna sivut erillisiin kansioihin Toiminnot Kierron tyyppi Harmaasävy Poista incognito-tila käytöstä Automaattinen Peruuta kaikki tälle sarjalle Yhtään osumaa ei löytynyt Lähdettä ei tueta Lukemattomat Väärä lukuformaatti Lukua ei löytynyt Rajoitukset: %s Päivämäärä Pois päältä Päällä Aloitusopas Varoitus: massalataukset voivat johtaa siihen, että lähteet muuttuvat hitaammiksi käyttää ja/tai ne estävät %sin käytön. Napauta saadaksesi lisätietoja. Näytä manga Kansikuva ruudukko Dynaaminen Vihreä omena Oletus Laitteelle tallennettu manga Yhteenlaskettu manga Aloita lataaminen nyt Ying ja Yang Keskiyön hämärä Mansikka Daiquiri Ulkonäkö Sinivihreä ja turkoosi Yotsuba Täysin musta pimeätila Ei lukemattomia lukuja Tänään Sarjalla on lukemattomia kappaleita Sovelluksen teema Varoitus Tunnistaudu vahvistaaksesi muutokset Kieli Siirrä sarja päällimmäiseksi Tako Joka 3. Päivä Ainoastaan WiFillä Käänteisväri Sovelluksen tiedot Perinteinen Käänteinen kuva Kategoria kohtaiset asetukset lajittelulle ja näytölle Shizuku on pysähtynyt Poistettu käytöstä Asenna ja aja Shizuku käyttääksesi Shizukua laajennusten asentamiseen. Päivitä kaikki Laajennusluettelon halu epäonnistui Asennetaan laajennusta… Asentaja Poista kaikki Viimeisin manga päivitys Lukemattomien määrä Poista kategoria Seuraa Alhainen Poissuljetut kategoriat Alhaisin Ei varmuuskopioitavia sarjoja kirjastossa Useampi Panoroi leveitä kuvia napauttamalla Tallenna CBZ-arkistona Zoomaa vaakasuuntaisiin kuviin Korkein Kieli Haku… Laventeli Sovelluksen kieli Versio Sulje Vuorovesiaalto Korkea Etukäteen lataus Automaattinen lataus luetessa Parantaa lukijan suorituskykyä Haluatko poistaa kategorian \"%s\"? Toimii vain kirjastossa oleville sarjoille joissa nykyinen ja seuraava luku on jo ladattu Varmuuskopiointi/palautus ei välttämättä toimi oikein, jos MIUI-optimointi on poistettu käytöstä. Suositut Julkaiseminen päättynyt Ei kuvausta Lukulista Oletko varma? Keskeneräiset Lähdettä ei löydetty Tallennusoikeuksia ei myönnetty WebView-tiedot tyhjennetty Tabletti käyttöliittymä Luetut Virhe tallentaessa kuvaa Kirjastoa ollaan jo päivitämässä Kirjasto päivitetty viimeksi: %s %1$d päivitys(tä) epäonnistui Ohitettu, koska sarja on päättynyt Sinulla ei vielä ole kategorioita. Tauolla Ei asennettu Ohitettu, koska yhtään lukua ei ole luettu sarjasta Avaa GitHubissa Taustatoiminta Auta kääntämisessä Tyhjennä WebView-tiedot Tietosuojakäytäntö Sovelluspäivitykset %1$d sarjaa joita ei olla lisätty kirjastoon tietokanassa Ei mitään tyhjennettävää Poista sarjakohtaiset lukijan asetukset Poista kaikkien sarjojen lukutila ja lukusuunta Peruttu Sivun %d tiedostopolkua ei löytynyt Parannetut seurantapalvelut Lukijan asetuksia ei voitu poistaa Järjestä Kansikuva Virhe jakaessa kansikuvaa Napauta saadaksesi lisätietoja Ikäluokitus Seurantaopas Kaikki lukijan asetukset poistettu Yksityiskohtainen kirjaaminen Kansikuva tallennettu Virhe tallentaessa kansikuvaa Ohitettu, koska sarjassa on luettomia lukuja Ohitettu, koska sarja ei vaadi päivityksiä Olet poistamassa \"%s\" kirjastostasi Kirjoittaa yksityiskohtaiset lokit järjestelmälokiin (heikentää sovelluksen suorituskykyä) Varmuuskopioita kannattaa säilyttää myös muissa paikoissa. Toivelista Viimeksi luettua lukua ei voitu avata Valitut Skanlaattori Data ja tallennustila Tilastotiedot Ladattu Seuraava odotettu päivitys Seurannan pisteytys Päivitä kategoria Jatka lukemista painike Käytä OK Palauta oletus %s kohtasi odottamattoman virheen. Ehdotamme että jaat kaatumisen lokitiedot tukikanavallemme Discordissa. Poista ladatut Varmuuskopiotiedoston luonti epäonnistui Hupsista! Kopioitu leikepöydälle Uudelleenkäynnistä applikaatio Mukautettu kansikuva Ei valitut Lisää asetuksia Paikallinen Aloitettu Avaa satunnainen merkintä Kopioi leikepöydälle Siirrä sarja pohjimmaiseksi Ei nyt Sisäinen virhe: Lisätietoja saat kaatumisen lokitiedoista Akun käyttö taustalla Lukutila, näyttö, navigointi Lähteet, laajennokset, globaali haku Manuaaliset ja automaattiset varmuuskopiot, tallennustila Applikaation lukko, turvallinen ruutu Kaatumislokien vedos, akun optimoinnit Pohjoismainen Suhteelliset aikaleimat Käytä muotoa \"%1$s\", kuin muotoa \"%2$s\" Laajennosten asentamiseen tarvitaan lupia. Napauta tästä myöntääksesi luvat. Lisää laajennosten lähde Laajennosten lähteen URL Lisää laajennosten lähteitä %siin. URL-osoitteen tulisi päättyä \"index.min.json\". Tämä laajennosten lähde on jo lisättynä! Poista laajennosten lähde Epäkelpo laajennosten lähteen URL-osoite Haluatko poistaa laajennosten lähteen \"%s\"? Peilaa käännetyt leveät sivut Tuplanapauta lähentääksesi Vähentää haamujälkiä e-paperi näytöillä Ohita kaksoisluvut Jaa korkeat kuvat Luo Sovita leveät sivut kääntämällä Valikon piilottamisen herkkyys vierittäessä Väläytä näyttöä sivunvaihdon yhteydessä Käytetään automaattisille varmuuskopioille, lukujen latauksille ja paikallisille lähteille. Vältä keskeytyksiä pitkään jatkuvissa toimenpiteissä, kuten kirjaston päivitys, lataukset, ja varmuuskopion palautukset. Teema, ajan ja päivämäärän formaatti Automaattinen lataus, ennakkolataus Yksisuuntainen synkronointi, paranneltu synkronointi Kategoriat, globaalit päivitykset, luvun pyyhkäisy ================================================ FILE: i18n/src/commonMain/moko-resources/fil/plurals.xml ================================================ Pagkatapos ng %1$s minuto Pagkatapos ng %1$s (na) minuto %d kategorya %d (na) kategorya Ang extension ay maaari nang i-update Ang mga %d (na) extension ay maaari nang i-update Mga kabanata %1$s at isa pa Mga kabanata %1$s at %2$d pa %1$d bagong kabanata %1$d (na) bagong kabanata Para sa %d na entry Para sa %d na mga entry %1$s kabanata %1$s (na) kabanata %1$s na lang %1$s pa ang nasa queue Na-restore sa loob ng %1$s na may %2$s error Na-restore sa loob ng %1$s na may %2$s (na) error %d tracker %d na tracker Nilaktawan ang %d na kabanata, maaaring ito ay wala sa source o na-filter ang mga ito Nilaktawan ang %d na mga kabanata, maaaring wala sa source o na-filter ang mga ito Kahapon %1$d araw na ang nakakalipas Susunod na hindi pa nababasang kabanata Susunod na %d hindi pa nababasang kabanata Sunod na kabanata Susunod na %d kabanata Nawawalang %1$s na kabanata Nawawalang %1$s na mga kabanata 1 araw %d (na) araw %d na repo %d na mga repo Bukas Sa loob ng %1$d na araw 1 pahina %1$s na mga pahina Iilipat ang %1$d na entry? Ilipat ang %1$d na mga entry? Kopyahin ang %1$d na entry? Kopyahin ang %1$d na mga entry? Isang entry ang nilaktawan %1$d (na) entry ang nilaktawan ================================================ FILE: i18n/src/commonMain/moko-resources/fil/strings.xml ================================================ I-refresh Sumulong Bumalik I-restore Buksan ang log I-undo I-reset I-save Ibahagi I-install Ibaba Itaas Pinakaluma Pinakabago Ayusin Kanselahin lahat Kanselahin I-unpin I-pin Di-paganahin Ipakita ang mga tab ng kategorya Bilang ng kabanatang na-download Kumportableng grid Listahan Siksik na grid Pagpapakita Istilo ng pagpapakita Ilipat Buksan sa WebView Buksan sa browser Ipagpatuloy Simulan Tanggalin Subukan muli Susunod na kabanata Nakaraang kabanata I-pause Tingnan ang mga kabanata I-edit ang pabalat I-set ang kategorya Magdagdag ng kategorya Ayusin ang kategorya Palitan ang pangalan ng kategorya Magdagdag Isaayos Di-paganahin lahat Paganahin lahat I-update ang Aklatan Burahin I-unbookmark ang kabanata I-bookmark ang kabanata I-download Markahang nabasa ang nauna Markahang nabasa na Markahang babasahin Baligtarin Piliin lahat Pangkalahatang Paghanap Maghanap Pinakabagong kabanata Huling binasa Dami ng kabanata Pa-alpabeto Tanggalin ang pansala Hindi Nabasa Na-bookmark Pansala Menu Mga setting Kasaysayan Tina-track Mga Kabanata Mga nilalaman ng aklatan Kategorya Wala ka pang kategorya. Pindutin ang plus button para gumawa ng isa para sa pag-aayos ng iyong aklatan. Walang laman ang iyong aklatan Walang binasa kamakailan Walang kamakailang update Walang dina-download Tulong Tungkol sa extension Mga Extension Maglipat Pag-backup at Pag-restore Mga Source Kasaysayan Bago Aklatan Pila ng mga download Mga Setting Higit pa Pangalan Hindi Palagi Isara kung nakatambay Nangangailangang i-unlock Pamahalaan ang mga abiso Seguridad at privacy Pormat ng petsa Madilim Maliwanag Sistema Patungkol Karagdagan Pagta-track Pag-download Pagbasa Aklatan Pangkalahatan Naglo-load… Hindi magagamit ang app Pangalawa sa huling kabanata Huling nabasang kabanata Sarado Pagkatapos na manu-manong namarka bilang nabasa na Pagkatapos basahin, awtomatikong burahin Kapal ng gilid Pagbabasa Ipakita palagi ang paglipat-kabanata Pula Berde Asul Alpha Piliting nakahiga Piliting nakatayo Malaya Default na pag-ikot Mabilis Normal Walang animasyon Gitna Kanan Kaliwa Awtomatiko Panimulang pag-zoom Matalinong pagsasalaki Orihinal na laki Pagkasyahin sa tangkad Pagkasyahin sa lapad Banatin Pagkasyahin sa screen Uri ng pagsasalaki Nakapahina Pahabang strip na may puwang Pahabang strip Pahina (patayo) Pahina (kanan pakaliwa) Pahina (kaliwa pakanan) Default na pagbasa Itim Abo Puti Kulay ng background Ipakita ang mga aksyon sa mahabang tap Baligtarin ang pindutan ng volume Pindutan ng volume Nabigasyon Laktawan ang mga na-filter na kabanata Laktawan ang mga kabanatang nabasa na Panatilihing nakabukas ang screen Padilimin (Burn/Darken) Paliwanagin (Dodge/Lighten) Screen Paramihin (Multiply) Nakapatong (Overlay) Blend mode ng filter ng kulay Custom na filter ng kulay Custom na liwanag (brightness) Gupitin ang gilid Mabilis na ipakita ang kasalukuyang ginagamit kapag nakabukas ang reader Ipakita ang paraan ng pagbasa Ipakita ang bilang ng pahina Bilis ng animasyon sa pagdoble-pindot I-animate ang paglipat-pahina Ipakita ang laman sa cutout area Naka-fullscreen Hindi na available ang extension na ito. Maaaring hindi ito gumana nang maayos at maaaring magdulot ng mga isyu sa app. Inirerekomenda ang pag-uninstall nito. Maaaring basahin ng mga mapanganib na extension ang anumang nakatagong kredensyal sa pag-log in o magsagawa ng arbitrary code. \n \nSa pamamagitan ng pagtitiwala sa extension na ito, tinatanggap mo ang mga panganib na ito. Di-pinagkakatiwalaang extension I-uninstall Itiwala Di pinagkakatiwalaan Naka-install Ini-install Dina-download Nakabinbin I-install Di-suportado I-update Nakabinbin ang mga update Lahat Palaging tanungin Default na kategorya Maghanap ng mga bagong pabalat at detalye kapag nag-a-update ng aklatan Awtomatikong i-refresh ang metadata Laktawan ang mga entry na may katayuang \"Nakumpleto\" Kapag naka-charge Awtomatikong ina-update ang mga paghihigpit sa device Linggo-linggo Kada 2 araw Araw-araw Kada 12 oras Kada 6 na oras Nakapatay Awtomatikong pag-update Panlahatang update Pahiga Patayo Mga item kada row Pagpapakita Itago ang laman ng abiso Tinatago ng seguridad sa screen ang laman ng app habang nagpapalit ng app at hinaharangan din nito ang mga screenshot Bantayan ang screen Baligtarin ang mga tap zone Nawawalang mga source: Hindi naglalaman ang backup ng kahit anong mga entry sa aklatan. Di-wastong backup file: Nai-backup na Awtomatikong dalas ng pag-backup I-restore ang aklatan mula sa backup file I-restore ang backup Magagamit para ma-restore ang kasalukuyang aklatan Gumawa ng backup Isahang pag-sync para mai-update ang progress sa mga kabanata sa mga external na tracking service. Ayusin ang pagta-track para sa mga indibidwal na entry gamit ang button na Pagta-track. Mga Tracker I-update ang progress pagkatapos basahin I-download ang mga bagong kabanata Panlima sa huling kabanata Pang-apat sa huling kabanata Pangatlo sa huling kabanata Pagbasa Tema Petsa ng pagdagdag Pareho Patayo Pahiga Mga update sa extension Wala Mga update sa kabanata Pangkaraniwan Naka-pause ang mga download Walang koneksyon sa Internet Walang koneksyon sa Wifi Di ma-download ang kabanata dahil sa isang di-inaasahang error Nagka-error Taga-download Paki-update ang WebView app para sa mas mahusay na pagkakatugma Kinakailangan ng app ang WebView upang gumana ito Bigong ma-bypass ang Cloudflare May bagong bersyon! Nagka-error sa pag-download I-tap upang ma-install ang update Dina-download… Walang bagong update I-download Pumili ng backup Piliin ang larawan na pabalat Maaaring ilagay ang entry sa iyong library bago ito gawin Bigong ma-update ang pabalat Mga kabanata %1$s Kabanata %1$s at karagdagang %2$d iba pa Kabanata %1$s May mga bagong kabanata Di ma-download ang mga kabanata dahil sa mababang espasyo sa storage Di ma-download ang mga kabanata. Subukan mo uli ito sa mga download na seksyon Kopyahin Ilipat Pumili ng paglilipatang source Pumili ng data na isama Kab. %1$s - %2$s Ina-update ang Aklatan Di makita ang source Walang nakitang mga pahina Bigong mai-load ang mga pahinang: %1$s Nilo-load ang mga pahina… Walang kabanata bago ito Wala nang susunod na kabanata Nakaraan: Susunod: Kasalukuyan: Natapos: Mode ng pagbasa Para sa seryeng ito Gamiting cover art ang larawang ito? Di mai-load ang larawan Di makita ang susunod na kabanata Pahina: %1$d Na-update ang pabalat Gawin itong pabalat Custom na filter Na-save na ang larawan I-reset ang lahat ng kabanata sa entry na ito Tatanggalin nito ang petsa ng pagbasa sa kabanatang ito. Sigurado ka ba? Binura na ang mga kategorya Mayroong kapangalan ang kategoryang ito! Uri Estado Estado Pamagat Iskor Binabasa muli Planong basahin Naka-pause Tinigil Kumpleto Binitawan Binabasa Idagdag sa tracker I-track Sigurado ka bang gusto mong burahin ang mga napiling kabanata? Babasahin I-download Base sa petsa ng pag-upload Base sa bilang Base sa source Pangalan ng source Kabanata Naka-pause Nagka-error Dina-download (%1$d/%2$d) Kabanata %1$s Idagdag sa Aklatan? Di naka-install ang source: %1$s Kinopya sa clipboard: \n%1$s Burahin ang mga na-download na kabanata? Palawakin Bawasan Tinanggal sa Aklatan Dinagdag sa Aklatan Tanggalin sa Aklatan Nasa Aklatan Idagdag sa Aklatan Lisensiyado Di alam ang estado Di alam ang may-akda Di alam Patuloy Gabay sa Lokal na source Maghanap Pinakabago Hinanap ang \"%1$s\" sa lahat Panlahatang paghahanap… Naka-pin Huling ginamit Iba pa Lokal na source Walang nakitang resulta Wala na\'ng resulta Mga Tab Ina-update ang kategorya Di matukoy na error Naka-logout ka na Mag-logout Mag-logout mula sa %1$s? Naka-login ka na Mag-login Password Email address Username (pangalan) Mag-login sa %1$s Pini-filter ang lahat ng mga entry sa iyong akalatan Mga na-download lang Nakatutulong sa pag-ayos sa mga bug. Walang sensitibong data ang ipapadala Ipadala ang mga ulat ng pag-crash Na-update sa v%1$s Maghanap ng update Mga lisensiyang open-source Anong bago Bersyon Website Di mabuksan ang pagsasaayos ng iyong device Nakapatay na ang pag-o-optimisa sa baterya Patayin ang pag-o-optimisa sa baterya Nakatutulong sa pag-update ng aklatan sa background at pag-backup I-refresh ang mga pabalat ng aklatan Binura na Burahin ang kasaysasan sa mga entry na hindi naka-save sa iyong aklatan Linisin ang database Nagka-error habang nililinis Nalinisan na ang cache, natanggal ang %1$d na file Nagamit: %1$s Linisin ang cache ng kabanata Data Nalinis na ang mga cookie Nangangailangang buksan muli ang app para gumana Linisin ang mga cookie Networking Bigong ma-restore ang backup Kinansela ang pag-restore Inire-restore na Na-restore na Rine-restore ang backup Bigong ma-backup Bina-backup Anong iba-backup mo? Bina-backup na %1$02d (na) min, %2$02d seg Wala kang naka-pin na source Tapos na Mga error Takbo Di naka-login sa mga tracker: Payagan ang pagtanggal ng mga naka-bookmark na kabanata Magbura ng kabanata Hindi nito naiiwasan ang pagpapakita ng mga NSFW (18+) sa mga di-opisyal o posibleng maling naka-flag na extension sa loob ng app. Posibleng may NSFW (18+) content ang mga source mula sa extension na ito 18+ Walang nakitang kabanata Gusto mo bang i-save at ipagpaubaya ang pagsasaayos na ito? I-set bilang default Ini-update na ang Ipagpaubaya %1$s: %2$s, pahina %3$d Ilapat din sa lahat ng mga entry sa aking aklatan Pagsasaayos ng Kabanata Bilang ng na-download Mula sa Aklatan Maghanap ng setting Pinapa-pause ang kasaysayan ng pagbabasa Incognito na mode Linisin ang kasaysayan Nabura ang kasaysayan Sigurado ka ba talaga? Mawawala ang buong kasaysayan. Gabay sa Paglipat ng source Susunod na pahina Balik Walang nakitang file picker app Ipakita sa mga listahan ng source at extension Mga source na NSFW (18+) Mag-login muli sa MAL Petsa ng pagtatapos Petsa ng pagsisimula Magbahagi ng mga crash log Sine-save ang mga error log sa isang file para maibahagi sa mga developer Mga tap zone Sulok Mala-Kindle Hugis-L Pababa Pataas Kabanata Petsa in-upload Na-track Kaliwa at Kanan Hatiin ang mga malalapad na pahina Ipakita ang bilang ng mga aytem Kung sakaling hindi sumasakto sa direksyon ng pagbabasa ang paghahati sa malalapad na pahina Baligtarin ang paghahati sa pahina Kailangan mong i-install muli ang mga nawawalang extension at mag-login muli sa mga tracker pagkatapos para magamit ang mga ito. DNS kesa HTTPS (DoH) Ang mga entry sa mga ibinukod na kategorya ay hindi mada-download kahit na sila ay kasama rin sa mga kategoryang kasama. Awtomatikong pag-download Kanan Kaliwa Susunod Nakaraan Mabilis na ipakita ang lugar na ita-tap kapag nakabukas ang reader Ipakita ang mga overlay ng tap zone Na-ibukod: %s Kasali ang: %s Wala Hindi ia-update ang mga entry na nasa na-ibukod na mga kategorya kahit na nasa mga kasamang kategorya rin sila. Petsa ng pagkuha ng kabanata I-tap para makita ang detalye Di na suportado ang bersyong ito ng Android Bigong makopya sa clipboard Pahiga Patayo Gumagawa ng mga folder ayon sa pamagat ng entry I-save ang mga pahina sa magkakaibang folder Gawain Pag-ikot Maabo Di-paganahin ang Incognito na mode Awto Kanselahin lahat para sa seryeng ito Ayusin ayon sa Mga Restriksyon: %s Walang natagpuang katugma Petsa Di-wastong format ng kabanata Hindi makita ang kabanata Di suportado ang source Di nabasa Error sa pagbabahagi ng pabalat Error sa pag-save ng pabalat Na-save na ang pabalat Pabalat Naka-off Naka-on Lokal na source Mga setting ng bawat kategorya para sa pagbubukod-bukod Wala ka pang kategorya. Gabay sa pag-track Simulan ang pag-download ngayon May dagdag na mga restriksyon sa app ang ilang mga modelo ng phone na pumapatay sa mga serbisyo sa background. May impormasyon sa site na ito para maayos ang naturang problema. Maaaring hindi gumana nang maayos ang pag-backup/pag-restore kung nakasara ang MIUI optimization. Nagbibigay ng mga pinahusay na mga feature para sa ilang mga source. Awtomatikong tina-track ang mga entry kapag naidagdag ito sa iyong aklatan. Pinahusay na mga tracker Hatinggabi Berdeng Mansanas Nagbabago Tema Purong itim Yotsuba Yin at Yang Tako Presas Aktibidad sa background Pinakamababa Mababa Mataas Pinakamataas Sensitivity para sa pagtatago ng menu sa scroll Baligtad Ngayon Teal at Turquoise Hitsura Patotohanan para makumpirma ang pagbabago Default I-Track Gabay sa Pagsisimula Pang-tablet na UI Tumulong sa pagsalin Mga na-ibukod na mga kategorya Tungkol sa app I-Install at buksan ang Shizuku para magamit ito bilang taga-install ng extension. Di tumatakbo ang Shizuku Legasiya Taga-install Ini-install ang extension… Dami ng entry Verbose na pagla-log I-print ang detalyadong mga log sa system log (nakakabawas sa performance ng app) Babala: Nakasasama ang mga malalaking update sa source at maaaring humantong sa mabagal na update at pagtaas ng paggamit sa baterya. I-tap para matuto pa. Wika Babala Dapat nagtatabi rin kayo ng mga kopya ng backup sa ibang mga lugar. Ang mga backup ay naglalaman ng sensitibong data tulad ng nakaimbak na password; mag-ingat kung ibahagi ito. Sa Wi-Fi lang Kada 3 araw Babala: maaaring humantong sa pagbagal at/o pagharang ng mga source sa %s ang maramihang pag-download. I-tap para matuto pa. Mga update sa app I-update lahat %1$d na entry sa database na wala sa aklatan Linisin ang cache ng kabanata sa paglulunsad ng app Walang malilinis Bigong makuha ng mga available na extension Patakaran sa Pagkapribado Para sa tulong sa pag-aayos ng mga error sa pag-update ng aklatan, tingnan ang %1$s Laktawan ang mga entry na hindi pa nababasang kabanata I-save bilang CBZ archive Tapos na ang paglalathala Naka-hiatus Kinansela Ipakita ang entry Pabalat lamang na grid Nilaktawan dahil kumpleto na ang serye Laktawan ang hindi nasimulang mga entry Nilaktawan dahil may di pa nabasang mga kabanata Nilaktawan dahil wala pang nabasang mga kabanata Awtomatikong mag-zoom sa mga malalawak na larawan I-pan ang mga malalapad na larawan Matuto pa Nabigo ang %1$d (na) update Baligtad na patayo Ilagay sa taas ang serye Nakasara Walang entry sa Aklatan na maiba-backup Buksan sa Github Error sa pag-save sa larawan Nalinis na ang WebView data Linisin ang WebView data Isara Walang nakitang naka-install na source Walang nakitang source Huling pag-update Dami ng di pa nabasa Pinapahusay ang performance ng reader Hindi nakita ang pahina %d habang naghahati Di makita ang file path ng pahina %d Paano ba \'to Di ma-reset ang pagsasaayos sa reader Na-reset na ang lahat ng setting sa reader I-reset ang pagsasaayos sa reader kada serye Rine-reset ang paraan ng pagbasa at orientation para sa lahat ng mga serye Bersyon Wika Rating sa edad Listahan ng Tinigil Listahan ng Kumpleto Listahan ng Di pa Tapos Listahan ng Hiling Listahan ng Binabasa Sa di-nakametrong network lang Di mabuksan ang huling nabasang kabanata Custom na pabalat Di naka-install Wika ng app Lila Walang paglalarawan Burahin ang kategorya InternalError: Tingnan ang mga crash log para sa karagdagang impormasyon Gusto mo bang burahin ang kategoryang \"%s\"? I-reset ang default na string ng user agent Default na string ng user agent Burahin lahat Tingnan ang mga kamakailang nai-update na entry sa iyong aklatan Di available ang widget kapag nakabukas ang lock May ina-update sa ngayon Hindi dapat blangko ang user agent string Daluyong I-download agad Awtomatikong mag-download habang nagbabasa Gumagana lamang sa kasalukuyang kabanata + ang susunod ay na-download na. Sigurado ka ba? Marami Tatanggalin mo na ang \"%s\" mula sa iyong aklatan Huling update sa aklatan: %s Sikat Hindi binigay ang mga permiso sa storage Nilaktawan dahil hindi kailangan ang pag-update sa serye Maghanap… Paraan ng pagbasa, pagpapakita, nabigasyon Awtomatikong pag-download, i-download nang maaga Isahang pag-sync sa progress, pinahusay na pag-sync Tema, ayos ng petsa & oras Mano-mano at awtomatikong pag-backup, espasyo sa storage Pag-lock sa app, bantayan ang screen Itambak ang mga crash log, pag-o-optimisa sa baterya Mga kategorya, panlahatang update, pag-swipe ng kabanata Mga source, extension, panlahatang paghanap Nagkaroon ng hindi inaasahang error ang %s. Iminumungkahi naming ibahagi mo ang mga crash log sa aming support channel sa Discord. Ay Naku! Buksan muli ang app Di-wastong lokasyon: %s Di alam na pamagat Di-wastong string ng user agent Ngayon lang Tinitignan ang mga download Walang mga entry ang nahanap sa kategoryang ito Buksan ang random na entry Ang mga build mula sa F-Droid ay hindi opisyal na sinusuportahan. \nI-tap para matuto pa. Magpatuloy na bumasa na button Tanggalin ang petsa? Tatanggalin nito ang huling petsa na napili mo mula sa %s Aalisin nito ang dati mong napiling petsa ng pagtatapos mula sa %s Muling i-index ang mga download Pilitin ang app na tingnan kung may naka-download Mga natapos na entry Nasimulan Lokal Na-download Sa panlahatang update Mga Entry Kabuuang dami Mga Tracker Pangkalahatang-ideya Nabasa Mean score Nagamit Tagal ng binasa Mga na-track na entry Ipakita ang bilang ng di pa nababasa sa Bago na icon Walang laman ang kategoryang ito Hindi muna ngayon N/A Istatistika Laktawan ang mga duplikadong kabanata Kinopya sa clipboard *kinakailangan Mayroon ngunit hindi naka-install ang source: %s %1$s Kamalian: %2$s %da %do %dm %ds Kopyahin sa clipboard Itago ang mga entry na nasa aklatan na I-update ang kategorya I-rotate ang malalawak na pahina upang magkasya I-flip ang oryentasyon ng mga pinaikot na malalawak na pahina Nakapatong (Overlay) Hatiin ang mga matataas na larawan Impormasyon sa pag-debug Kabanata sa pag-swipe pakaliwa I-double tap para mag-zoom Kabanata sa pag-swipe pakanan Itakda ang pagitan Ma-customize na dalas ng pag-update Susunod na inaasahang update Tantyahin bawat Itakdang i-update bawat Hulaan ang susunod na oras ng release Mga pagitan Nilaktawan dahil walang inaasahang release ngayong araw May mga resulta Burahin ang na-download OK Tanggalin ang %s na tracking? Tatanggalin nito ang lokal na pag-track. Tanggalin din mula sa %s Nagsi-sync ang aklatan Natapos na ang pag-sync ng aklatan I-tap dito para sa tulong sa Cloudflare Ginagawa muli ang download index Hindi makalikha ng backup file Mag-login sa tracker I-unlock ang %s Walang koneksyon sa Internet HTTP %d, tignan ang website sa WebView Hindi maabot ang %s Ilagay sa ibaba ang serye Mga relatibong timestamp \"%1$s\" sa halip na \"%2$s\" Nag-a-update ang aklatan... (%s) Mga setting ng source Mga setting ng app Walang napiling file Datos at storage Binabawasan ang ghosting sa mga e-ink na display Mag-flash kada pumalit ng pahina Hindi kailanman Huling awtomatikong na-back up: %s Paggamit ng storage Iskor sa tracker Ilapat Ibalik sa default Walang scanlator ang nahanap Scanlator Ibukod ang mga scanlator Lumikha Lokasyon ng storage Ginagamit para sa automatikong pag-backup, pag-download ng mga kabanata, at lokal na source. Ibang opsiyon Napili Di napili Mag-navigate pataas Pumili ng folder Gabay sa onboarding Bago sa %s? Inirerekomenda naming tingnan ang gabay sa pagsisimula. Magsimula Dapat pumili ng isang folder Maligayang pagdating! Muling pag-install ng %s? Laktawan Susunod Mag-set up muna tayo ng ilang bagay. Maaari mo ring baguhin ang mga ito anumang oras sa mga setting sa ibang pagkakataon. Walang nakatakdang lokasyon ng storage Pumili ng folder kung saan mag-imbak ang %1$s ng mga na-download ng kabanata, mga backup, at higit pa. \n \nInirerekomenda ang isang nakalaang folder. \n \nNapiling folder: %2$s Pahintulot sa mga abiso Pahintulot sa pag-install ng mga app Ma-iwasan ang mga hadlang sa mahahabang pag-update ng aklatan, pag-download, at pag-restore ng mga backup. Paggamit ng baterya sa background Para mag-install ng mga extension ng source. Maabisuhan para sa mga update sa aklatan at higit pa. Payagan Na magagamit: %1$s / Kabuuan: %2$s Mga bagong kabanata na nahulaang ilalabas sa loob ng %1$s, na tumitingin bawat %2$s. Buong error: Kinakailangan ng permiso para mag-install ng mga extension. I-tap upang mapayagan ito. Kasali ang mga sensitibong setting (hal., mga tracker login token) Nag-a-update mula sa isang mas lumang bersyon at hindi sigurado kung ano ang pipiliin? Sumangguni sa gabay sa storage para sa higit pang impormasyon. Matalas na pag-update Wala kang na-set na repo. Magdagdag ng repo Mga repo ng extension Gabay sa storage Umiiral na ang repo na ito! Tanggalin ang repo URL ng repo Magdagdag ng mga karagdagang repo sa %s. Dapat ito ay isang URL na nagtatapos sa \"index.min.json\". Di-wastong URL ng repo Gusto mo bang tanggalin ang repo na \"%s\"? Custom na frequency sa pag-update: Nord Malapit na Bawiin ang mga pinagkakatiwalaang hindi kilalang extension Open source na repo Patayin ang pag-zoom out Palitan Idagdag pa rin Umiiral na ang Signing Key Fingerprint Ang repository na %1$s ay may magkaparehong Signing Key Fingerprint sa %2$s. \nKung ito ay inaasahan, %2$s ang papalitan, kung hindi naman ay makipag-ugnayan sa tagapamahala ng iyong repo. Custom na profile sa display Paparating Gabay sa Paparating Susunod na Buwan Nakaraang Buwan Tingnan ang mga Paparating na Update Nabigong makakuha ng patuloy na pag-access ng folder. Ang app ay magkaroon ng di-inaasahang pagkilos. Mag-flash kada Puti at Itim Tagal ng pag-flash %1$s ms Mag-flash na may Itim Puti Ang manga na ito ay nakumpleto na, o walang nahulaang petsa ng paglabas. Hindi suportado ang JSON backup Na-corrupt ang backup file Mga repo ng extension Kopyahin ang link Laktawan ang pag-download ng mga duplikadong mga nabasang kabanata Gusto mo bang idagdag ang repo na \"%s\"? I-update ang mga tracker hanggang kabanata %d? Magpadala ang mga crash log Magpadala ng hindi nagpapakilalang mga crash log sa mga developer. Payagan ang analitiko Seguridad Mga Analitiko at Mga Crash log Ang pagpapadala ng mga crash log at analitiko ay magbibigay-daan sa amin na tukuyin at ayusin ang mga isyu, pahusayin ang performance, at gawing mas nauugnay ang mga update sa hinaharap sa iyong mga pangangailangan Magpadala ng hindi nakikilalang data ng paggamit para mapahusay ang mga feature ng app. Lahat ng nabasang entry Random Tanggalin Alisin ang Extension? Gusto mo ba talagang tanggalin ang \"%s\" na extension? I-update ang progress kapag namarka bilang nabasa na Na-update ang mga tracker sa kabanata %d Kung naglo-load ang reader ng isang blangkong imahe ay unti-unting bawasan ang threshold.\nNapili: %s Custom na threshold sa hardware bitmap Default (%d) Nakakaapekto sa performance. Paganahin lamang kung ang pagbabawas ng bitmap threshold ay hindi nakakapag-ayos ng mga isyu sa blangkong imahe Pinapa-pause ang kasaysayan ng pagbabasa para sa extension Awto Publikong I-track Na-export ang Aklatan May-akda Pribadong na-track Artista Pribadong I-track I-export Listahan ng Aklatan Monokromatiko Gamitin ang legacy decoder para sa long strip reader Markahan ang duplikadong nabasang kabanata bilang nabasa na Di nabasang kabanata Pagkilos Matapos basahin ang kabanata Pagkatapos kumuha ng bagong kabanata Masaya ang bahagi kung saan… Mga note I-edit ang mga note Mga posibleng duplikado Mayroon kang mga entry sa iyong aklatan na may katulad na pangalan.\n\nPumili ng entry na ililipat o idaragdag pa rin. Aalisin mo na ang mga entry mula sa database Panatilihin ang mga entry na may mga nabasang kabanata Mga nabasang kabanata at ang progress ng mga entry na wala sa aklatan ay mawawala Nagla-log in… Nabigong lumikha ng direktory para sa pag-download Nabigong lumikha ng direktory: %s I-update ang mga pamagat ng manga ng aklatan upang tumugma sa source Babala: kung ang isang manga ay pinalitan ng pangalan, ito ay aalisin sa pila ng mga download (kung mayroon). Napili Piliin lahat Pumili ng wala Pumili sa mga pinaganang source Magpatuloy Pumili mula sa naka-pin na mga source Karagdagang mga keyword (opsyonal) Ang mga opsyong ito ay mabagal at mapanganib at maaaring humantong sa mga paghihigpit mula sa mga source Datos na ilipat Tanggalin ang mga download ng kasalukuyang entry pagkatapos ng paglipat Tumutulong na paliitin ang mga resulta ng paghahanap sa pamamagitan ng pagdaragdag ng mga karagdagang keyword Itago ang mga entry kung walang katugma Itago ang mga entry na walang mas bagong kabanata Ipakita lamang ang entry kung ang katugma ay may karagdagang kabanata Karagdagan na mode ng paghahanap Hinahati-hati ang pamagat sa mga keyword para sa mas malawak na paghahanap Itugma batay sa numero ng kabanata Kung napagana, pipiliin ang tugma na pinakamalayo sa unahan. Kung hindi, pipiliin ang unang tugma ayon sa priyoridad ng source. Lumipat Ilipat Walang nahanap na alternatibo Pinakabago: %1$s Manu-manong maghanap Huwag ilipat Lumipat na Kopyahin na Ihinto ang paglilipat? Ilipat Kaselahin Kanselahin Walang nakitang mga kabanata, hindi magagamit ang entry na ito para sa paglipat Kanselahin Di-alam Kopyahin Lumipat (%1$d/%2$d) Kopyahin Ihinto Itago ang mga indikasyon ng nawawalang kabanata I-render ang mga imahe sa mga paglalarawan ng manga Mag-donate Di-payagan ang mga non-ASCII na filename Tinitiyak ang pagiging tugma sa ilang partikular na storage media na hindi sumusuporta sa Unicode. Kapag napagana ito, kakailanganin mong manu-manong palitan ang pangalan ng source at manga folder sa pamamagitan ng pagpapalit ng mga hindi ASCII na character ng kanilang lowercase na UTF-8 hexadecimal na representasyon. Hindi kailangang palitan ng pangalan ang mga file ng kabanata. Kasabay na pag-download ng source Kasabay na pag-download ng pahina Mga pahina na nai-download nang sabay-sabay kada source Isara ang tab Catppuccin Maaaring Magamit I-filter ang na-ibukod na mga scanlator Kinakalkula… ================================================ FILE: i18n/src/commonMain/moko-resources/fr/plurals.xml ================================================ Après %1$s minute Après %1$s minutes Après %1$s minutes %1$d nouveau chapitre %1$d nouveaux chapitres %1$d nouveaux chapitres Chapitre %1$s et 1 autre Chapitres %1$s et %2$d autres Chapitres %1$s et %2$d autres Pour %d série Pour %d séries Pour %d séries Mise à jour d\'extension disponible %d mises à jour d\'extensions disponibles %d mises à jour d\'extensions disponibles %1$s restant %1$s restants %1$s restants %d catégorie %d catégories %d catégories Effectuée en %1$s avec %2$s erreur Effectuée en %1$s avec %2$s erreurs Effectuée en %1$s avec %2$s erreurs %1$s chapitre %1$s chapitres %1$s chapitres Suivi par %d service Suivi par %d services Suivi par %d services %d chapitre a été sauté, soit la source ne l\'a pas, soit il a été filtré %d chapitres ont été sautés, soit la source ne les a pas, soit ils ont été filtrés %d chapitres ont été sautés, soit la source ne les a pas, soit il ont été filtrés Hier Il y a %1$d jours Il y a %1$d jours Chapitre suivant non lu Les %d chapitres suivants non lus Les %d chapitres suivants non lus Chapitre suivant %d chapitres suivants %d chapitres suivants %1$s chapitre manquant %1$s chapitres manquants %1$s chapitres manquants 1 jour %d jours %d jours %d dépôt %d dépôts %d dépôts Demain Dans %1$d jours Dans %1$d jours 1 page %1$s pages %1$s pages Migrer %1$d série ? Migrer %1$d séries ? Migrer %1$d séries ? Copier %1$d série ? Copier %1$d séries ? Copier %1$d séries ? Une série a été ignorée %1$d séries ont été ignorées %1$d séries ont été ignorées ================================================ FILE: i18n/src/commonMain/moko-resources/fr/strings.xml ================================================ Nom Paramètres File de téléchargement Bibliothèque Historique Mises à jour Sauvegarder et restaurer Paramètres Filtre Favori Non lus Retirer le filtre Alphabétiquement Dernier lu Rechercher Tout sélectionner Marquer comme lu Marquer comme non lu Marquer les précédents comme lus Télécharger Marquer le chapitre Retirer des favoris Supprimer Mettre à jour la bibliothèque Modifier Ajouter Ajouter une catégorie Modifier les catégories Renommer la catégorie Définir la catégorie Modifier la couverture Pause Chapitre précédent Chapitre suivant Réessayer Supprimer Reprendre Ouvrir dans le navigateur Mode d\'affichage Affichage Grille compacte Liste Annuler Trier Installer Partager Télécharger la page Réinitialiser Chargement… Général Lecteur Téléchargements Suivi Avancé À propos Éléments par ligne Portrait Paysage Mises à jour automatiques Désactivé Toutes les 6 heures Toutes les 12 heures Tous les jours Tous les 2 jours Tout Restrictions matérielles pour les mises à jour automatiques Lors de la charge Exclure si le statut est « Terminé » Synchroniser la progression après lecture Plein écran Activer les transitions Afficher le numéro des pages Luminosité personnalisée Filtre de couleur personnalisé Garder l\'écran allumé Navigation Avec les boutons de volume Couleur de fond Blanc Noir Mode de lecture par défaut Pagé (gauche à droite) De droite à gauche Pages (vertical) Bande continue Type de mise à l\'échelle Adapter à l\'écran Étirer Adapter à la largeur Adapter à la hauteur Taille originale Adaptation intelligente Position du zoom initial Automatique Gauche Droite Centre Rotation par défaut Libre Bloqué sur portrait Bloqué sur paysage Rouge Vert Bleu Alpha Suppression automatique après lecture Désactivé Dernier chapitre lu Avant-dernier chapitre lu Troisième chapitre avant le dernier lu Quatrième chapitre avant le dernier lu Télécharger les nouveaux chapitres Services Utilisé : %1$s Cache effacé, %1$d fichiers supprimés Une erreur est survenue lors de l\'effacement du cache Effacer les cookies Cookies effacés Effacer la base de données Supprimer l\'historique des séries qui ne sont pas enregistrées dans votre bibliothèque Séries supprimées Version Envoyer des rapports de plantage Aident à corriger les bugs. Aucune donnée sensible ne sera envoyée Connexion à %1$s Nom d\'utilisateur Mot de passe Se connecter Erreur inconnue En cours Inconnu Licencié Retirer de la bibliothèque Chapitre %1$s En téléchargement (%1$d/%2$d) Erreur Titre de la source Numéro de chapitre Par numéro de chapitre Télécharger Non lus Suivi En cours Terminé Abandonné En pause À lire Note Titre Statut Chapitres Une catégorie avec ce nom existe déjà ! Ceci enlèvera la date de lecture de ce chapitre. Êtes-vous sûr(e) ? Réinitialiser tous les chapitres de cette série Ajouter à la bibliothèque ? Image sauvegardée Filtre personnalisé Ajouter comme couverture Couverture mise à jour Page : %1$d Chapitre suivant non trouvé L\'image n\'a pas pu être chargée Voulez-vous mettre cette image comme couverture ? Une erreur est survenue lors du téléchargement des chapitres. Vous pouvez réessayer dans la section téléchargements Des nouveaux chapitres ont été trouvés La mise à jour de la couverture a échoué Veuillez ajouter cette série à votre bibliothèque avant de faire cela Sélectionner l\'image de couverture Sélectionner fichier de sauvegarde Télécharger Aucune mise à jour disponible Téléchargement en cours… Appuyer pour installer Erreur lors du téléchargement Mise à jour disponible ! Aucun téléchargement en cours Pas de mises à jour récentes Rien de lu récemment Votre bibliothèque est vide Téléchargement Erreur Aucune connexion disponible Aucune connexion disponible Supprimer les chapitres sélectionnés ? Impossible de télécharger le chapitre en raison d\'une erreur inattendue Cinquième chapitre avant le dernier lu Connecté Effacer le cache des chapitres Après avoir été marqué comme lu Par source Mise à jour de la catégorie Pas d\'autres résultats Catégories supprimées Annuler Catégories Séries de la bibliothèque Historique Application indisponible Chaque semaine Catégorie par défaut Téléchargement en pause Source locale En pause Ouvrir le fichier Restaurer Restauration terminée Que voulez-vous sauvegarder ? Supprimer les chapitres téléchargés ? Suivi Total de chapitres Créer une sauvegarde Peut être utilisé pour restaurer la bibliothèque actuelle Restaurer une sauvegarde Restaurer la bibliothèque à partir d\'un fichier de sauvegarde Fréquence de sauvegarde Sauvegarde créée Restauration de sauvegarde en cours Création de sauvegarde en cours Toujours demander Inverser les boutons de volume Rogner les bordures Recherche globale Autre Recherche globale… Récents Explorer Chapitres téléchargés Général Vous n\'avez aucune catégorie. Appuyez sur le bouton « + » pour en créer une afin d\'organiser votre bibliothèque. Extensions Mettre à jour Installer En attente En cours de téléchargement En cours d\'installation Installée Désinstaller Extension non reconnue Une extension malveillante pourrait lire n\'importe quel identifiant de connexion stocké ou exécuter un code arbitraire. \n \nEn faisant confiance à cette extension, vous acceptez ces risques. Vitesse d\'animation du double-clic Sans animation Normale Rapide Ajouté à la bibliothèque Supprimé de la bibliothèque %1$s \na été copié dans le presse papier Sources non installées : %1$s Statut Type Sélectionner les données à inclure Migrer Informations sur l\'extension Fiable Non fiable Pages Relecture Terminé : En cours : Suivant : Précédent : C\'était le dernier chapitre Il n\'y a pas de chapitre précédent Chargement des pages… Échec du chargement des pages : %1$s Déplacer Copier Afficher les actions en appuyant longuement Ouvrir dans WebView Passer les chapitres marqués comme lus Produit Écran Mode de filtrage via couleurs mélangées Incrustation Aide Éclaircir Obscurcir Aucun résultat trouvé Sélectionnez une source depuis laquelle migrer Bibliothèque Cette extension n\'est plus disponible. Elle peut ne pas fonctionner correctement et causer des problèmes avec l\'application. Il est recommandé de la désinstaller. Format de date Mises à jour Précédent Suivant Actualiser Obsolète Se déconnecter de %1$s ? Se déconnecter Vous êtes maintenant déconnecté(e) En pause Plus Dernier chapitre Voir les chapitres Tout annuler Clair Sombre Système Notifications Sécurité et confidentialité Nécessite un déverrouillage Verrouiller en cas d\'inactivité Toujours Jamais Mode discret Mises à jour en attente Utiliser la zone de l\'encoche Impossible de contourner Cloudflare Veuillez mettre à jour l\'application WebView pour une meilleure compatibilité Mises à jour des chapitres L\'écran sécurisé cache le contenu lors du changement d\'application et bloque les captures d\'écran Affichage Chapitre %1$s Chapitre %1$s et %2$d autres Chapitres %1$s Cacher le contenu des notifications Désactiver la fonction d\'optimisation de la batterie Facilite les mises à jour et sauvegardes de la bibliothèque en arrière-plan La fonction d\'optimisation de la batterie est déjà désactivée Adresse courriel Toujours afficher la transition entre les chapitres Menu Plus récent Plus ancien Déplacer au début Déplacer à la fin Mises à jour d\'extensions Mise à jour de la bibliothèque Sources En cours Bande continue avec espaces Passer les chapitres filtrés Épingler Inverser la sélection Ajouter le suivi Décalage latéral Épinglé Désépingler Dans la bibliothèque Ajouter à la bibliothèque Restauration de sauvegarde annulée Échec de la restauration de sauvegarde Restauration déjà en cours Téléchargés uniquement Échec de la sauvegarde Sauvegarde déjà en cours Moins Plus Site web Ch. %1$s – %2$s Licences à code source ouvert Dernière utilisée Rechercher des mises à jour %1$02d min, %2$02d s WebView est requis pour le fonctionnement l\'application Guide des sources locales Filtrer toutes les séries dans la bibliothèque Gris Pour cette série Mode de lecture Impossible d\'ouvrir les paramètres de l\'appareil Actualiser les couvertures de la bibliothèque Synchronisation à sens unique pour mettre à jour la progression du chapitre dans les services de suivi. Configurez le suivi des séries à partir de leur bouton de suivi. Vérifier s\'il y a une nouvelle couverture ou synopsis lors des mises à jour de la bibliothèque Par date de téléversement Donnée Sources manquantes : Cette sauvegarde ne contient aucune série dans sa bibliothèque. Fichier de sauvegarde invalide : Actualiser automatiquement les métadonnées Migrer Grille espacée Onglets Afficher les onglets des catégories Aucune page trouvée Tout désactiver Tout activer Affiche la liste des modes de lecture à l\'ouverture du lecteur Afficher le mode de lecture Commencer Source non trouvée Désactiver Nécessite un redémarrage de l\'application pour prendre effet Réseau Les deux Vertical Horizontal Non Inverser les zones tactiles Statut inconnu Auteur inconnu Quoi de neuf Mise à jour de v%1$s Impossible de télécharger les chapitres, l\'espace de stockage est insuffisant Rechercher « %1$s » partout Date ajoutée Mode de lecture Thème Vous n\'avez aucune source épinglée Compléter Progression Erreurs Traceurs non connectés : Permettre la suppression des chapitres marqués d\'un marque-page Suppression des chapitres Les sources de cette extension peuvent contenir du contenu NSFW (18+) 18+ Ceci n\'empêche pas les extensions de diffuser du contenu +18 dans l\'application. Aucun chapitre trouvé Appliquer ce paramétrage par défaut ? Paramètres du chapitre S\'applique également à toutes les séries de ma bibliothèque Appliquer par défaut %1$s : %2$s, page %3$d Chapitres téléchargés De la bibliothèque Rechercher les paramètres Suspend l\'historique de lecture Êtes-vous sûr(e) ? Tout l\'historique sera effacé. Mode navigation privée Effacer l\'historique Historique supprimé Paramétrage des chapitres par défaut enregistré Page suivante Page précédente Guide de migration des sources Contenu +18 Veuillez vous reconnecter à MAL L’application de sélection de fichier est introuvable Afficher dans les listes de sources et d\'extensions Date de fin Date de début Style Kindle Partager les rapports de plantage Enregistre les rapports de plantage dans un fichier pour les partager avec les développeurs Zones tactiles Bord En forme de L Décroissant Croissante Par numéro de chapitre Par date de téléversement Suivis Afficher le nombre d’entrées Droite et gauche Diviser les pages larges Si l\'emplacement des pages larges divisées ne correspond pas au sens de lecture Inverser le placement des pages divisées Vous devrez installer les extensions manquantes et vous connecter ensuite aux services de suivi pour les utiliser. Précédent DNS sur HTTPS (DoH) Droite Gauche Suivant Affichage bref à l\'ouverture du lecteur Afficher les zones tactiles (superposition) Exclure : %s Inclure : %s Aucun(e) Date de récupération du chapitre Les séries dans les catégories exclues ne seront pas mises à jour même si elles sont aussi dans les catégories inclues. Les séries des catégories exclues ne seront pas mis à jour même si elles appartiennent également à des catégories incluses. Téléchargement automatique Appuyez pour voir les détails Cette version d\'Android n\'est plus supportée Échec de la copie dans le presse-papiers Paysage Portrait Désactiver le mode incognito Crée des dossiers en fonction du titre des séries Enregistrer les pages dans des dossiers séparés Actions Niveaux de gris Aucune correspondance trouvée La source n\'est pas prise en charge Non lu Date Trier par Format de chapitre invalide Chapitre non trouvé Rotation Auto Restrictions : %s Tout annuler pour cette série Source locale Erreur de partage de couverture Erreur lors de l\'enregistrement de la couverture Couverture enregistrée Couverture Manuel de suivi Désactivé Activé Rendre les réglages de tri propres à chaque catégorie Vous n\'avez pas encore de catégories. Commencer à télécharger La sauvegarde/restauration peut ne pas fonctionner correctement si l\'optimisation MIUI est désactivée. Services qui fournissent des fonctionnalités améliorées pour des sources spécifiques. Les séries sont automatiquement suivies lorsqu\'elles sont ajoutées à votre bibliothèque. Services avancés Mode noir pur Yotsuba Yin & Yang Tako Daiquiri aux fraises Crépuscule de minuit Pomme verte Dynamique Thème de l\'appli Certains fabricants ont mis en place des restrictions supplémentaires sur les applications qui tuent les services d\'arrière-plan. Ce site Web contient plus d\'informations sur la manière de résoudre ce problème. Activité en arrière-plan Minimale Basse Élevée Maximale Sensibilité pour masquer le menu lors du défilement Inversé Aujourd\'hui Bleu canard et turquoise Authentifiez-vous pour confirmer les changements Apparence Par défaut Suivre Guide de démarrage Mode tablette Aider à traduire Catégories exclues Infos sur l\'application Installez et démarrez Shizuku pour utiliser Shizuku comme installateur d\'extensions. Shizuku n\'est pas en cours d\'exécution Legacy Installeur Installation de l\'extension… Séries totales Rapports détaillés Inclut des rapports détaillés dans les traces systèmes (réduit les performances de l\'application) Langue Avertissement Les mises à jour importantes nuisent aux sources et peuvent entraîner un ralentissement des mises à jour ainsi qu\'une augmentation de l\'utilisation de la batterie. Appuyez pour en savoir plus. Vous devez également conserver des copies des sauvegardes à d\'autres endroits. Uniquement en Wi-Fi Tous les 3 jours Attention : les téléchargements massifs peuvent entraîner un ralentissement des sources ou le blocage de %s. Appuyez pour en savoir plus. Tout mettre à jour Mises à jour de l\'application Vider le cache de chapitre au lancement de l\'application %1$d séries hors de la bibliothèque dans la base de données Rien à effacer Aucune extension trouvée Politique de confidentialité Exclure s\'il reste un/des chapitre(s) à lire Enregistrer comme archive CBZ Pour savoir comment corriger les erreurs de mise à jour de la bibliothèque, voir %1$s En pause Publication terminée Annulé Afficher la série Grille avec seulement la couverture Panoramique des images larges Zoom automatique dans les images larges Exclure si lecture pas encore débutée Sauté car la série est terminée Sauté car aucun chapitre n\'est lu Sauté car il y a des chapitres non lus Appuyez pour en savoir plus Échec de %1$d mise(s) à jour Portrait inversé Déplacer la série vers le haut Désactivé Erreur d\'enregistrement de l\'image Aucune série à sauvegarder dans votre bibliothèque Ouvrir sur GitHub Effacer les données WebView Données WebView effacées Fermer Aucune source installée trouvée Dernière vérification des mises à jour Nombre de non-lus Aucune source trouvée Améliore les performances du lecteur Page %d introuvable lors du fractionnement Impossible de trouver le chemin du fichier de la page %d Réinitialiser les paramètres du lecteur par série Réinitialise le mode de lecture et l\'orientation de toutes les séries Paramètres du lecteur réinitialisés Impossible de réinitialiser les paramètres du lecteur Eh bien, c\'est gênant Version Langue Classification par âge Liste de lecture Liste de souhaits Liste d\'attente Liste des non terminés Liste des lectures terminées Uniquement sur réseau illimité Impossible d\'ouvrir le dernier chapitre lu Couverture personnalisée Non installé Langue de l\'application Aucune description Lavande Effacer catégorie Souhaitez-vous supprimer la catégorie « %s » ? ErreurInterne : Consultez vos rapports de plantage pour plus d\'informations Réinitialiser la liste d\'agents utilisateurs Liste d\'agents utilisateurs par défaut Tout retirer Voir les séries de votre bibliothèque récemment mises à jour Le Widget n\'est pas disponible lorsque l\'application est verrouillée La liste d\'agents utilisateurs ne peut être vide Une mise à jour est déjà en cours Raz-de-marée Téléchargement anticipé Téléchargement anticipé pendant la lecture Fonctionne seulement si le chapitre actuel et le suivant sont déjà téléchargés. Êtes-vous sûr(e) ? Populaire Multiple Dernière mise à jour de la bibliothèque le : %s Vous êtes sur le point de retirer « %s » de votre bibliothèque Autorisations de stockage non accordées Recherche… Ignorée car la série ne nécessite pas de mises à jour Oups ! Thème, format de la date et de l\'heure Téléchargement automatique, téléchargement anticipé Synchronisation unidirectionnelle de la progression, synchronisation améliorée Sauvegardes manuelles et automatiques Rapports de plantage, optimisations de la batterie Redémarrer l\'application Sources, extensions, recherche globale Catégories, mise à jour globale, faire glisser le chapitre Mode de lecture, affichage, navigation Verrouillage des applications, écran sécurisé %s a rencontré une erreur inattendue. Nous vous suggérons de nous partager les rapports de plantage dans notre salon d\'assistance sur Discord. Emplacement invalide : %s Chaîne d\'agent utilisateur invalide Titre inconnu À l\'instant Ouvrir une série au hasard Les versions de F-Droid ne sont pas officiellement prises en charge. \nAppuyez pour en savoir plus. Aucune série trouvée dans cette catégorie Vérification des téléchargements Bouton \"Reprendre\" Ceci supprimera la date de début que vous avez précédemment sélectionnée dans la base de données de %s Retirer la date ? Ceci supprimera la date de fin que vous aviez précédemment sélectionnée dans la base de données de %s Réindexe les téléchargements Forcer l\'application à revérifier les chapitres téléchargés Statistiques Aperçu Total Local Commencé Téléchargé La catégorie est vide Séries Dans la mise à jour globale Lus Traqueurs Utilisé s. o. %d j %d h %d min %d s Pas maintenant Séries terminées Durée de lecture Séries suivies Note moyenne Afficher le nombre de chapitres non lus sur l\'icône des mises à jour Copié dans le presse-papier Ignorer les chapitres en double %1$s erreur : %2$s Disponible mais la source n\'est pas installée : %s *obligatoire Masquer les séries déjà présentes dans la bibliothèque Copier dans le presse-papier Mettre à jour la catégorie Diviser les grandes images Superposition Inverser l\'orientation des pages larges retournées Tourner les pages larges pour qu\'elles rentrent Informations de débogage Action de glisser à gauche Action de glisser à droite Appuyez deux fois pour zoomer Prochaine mise à jour prévue Prédiction de la prochaine date sortie Définir l\'intervalle Valider Fréquence de mise à jour personnalisée Appuyez ici pour de l\'aide sur Cloudflare Débloquer %s Synchronisation de la bibliothèque Intervalles Synchronisation de la bibliothèque complété Aucune connexion internet Recréation de l\'index de téléchargement Ignoré car aucune sortie n\'était attendue aujourd\'hui A des résultats Estimer chaque HTTP %d, consulter le site Web dans WebView Configurer pour mettre à jour tous les Déplacer la série vers le bas Supprimez également de %s Impossible de joindre %s Paramètres de l\'application Supprimer le(s) téléchargement(s) Appliquer Réintialiser les valeurs par défaut Plus d\'options Sélectionné Pas sélectionné(e) Scanlateur Flash lors du changement de page Naviguer vers le haut Score du service de suivi Données et stockage Se connecter au service de suivi « %1$s » au lieu de « %2$s » Emplacement de stockage Réduire le ghosting sur les écrans e-ink Utilisé pour les backups automatiques, téléchargements des chapitres et la source locale. Un dossier doit être sélectionné Disponible : %1$s / Total : %2$s Bienvenue ! Passer Utilisation du stockage Suivant Aucun emplacement de stockage défini Des permissions sont nécessaires pour installer des extensions. Appuyer ici pour les accorder. Accorder Durées relatives Permission de notifications Utilisation de la batterie en arrière-plan Pour installer des extensions de source. Évite l\'interruption des mises à jour de bibliothèque, des téléchargements de chapitres, et des restaurations de sauvegardes. Permission d\'installer des applications Mise à jour depuis une ancienne version et pas sûr de quoi choisir ? Consultez le guide de stockage pour plus d\'informations. Guide de stockage Soyez notifié des mises à jour de la bibliothèque et autre. Mise à jour intelligente Guide de premier lancement Commençons par paramétrer certaines choses. Vous pouvez toujours changer ces paramètres plus tard. Sélectionnez un dossier où %1$s stockera les chapitres téléchargés, les sauvegardes et plus encore. \n \nUn dossier dédié est recommandé. \n \nDossier sélectionné : %2$s Sélectionnez un dossier De retour sur %s ? Annuler le suivi avec %s ? Inclure des informations sensible (ex : jetons de connexion) De nouveaux chapitres sont prédits dans environ %1$s, mise à jour prévu tous les %2$s. Exclure la team de scantrad Aucune team de scantrad trouvé Jamais Nouveau sur %s ? Nous vous recommandons de jeter un œil au guide de démarrage. Voulez-vous vraiment supprimer le répertoire « %s » ? Fréquence de mise à jour personnalisé : Erreur complète : Supprimer le répertoire Répertoire d\'extension Révoquer les extensions provenant d\'un répertoire additionnel URL du répertoire Ajouter un répertoire additionnel à %s. L\'URL devrait se terminer par « index.min.json ». Ce répertoire existe déjà ! L\'URL du répertoire est invalide Bientôt Vous n\'avez aucun répertoire. Ajouter un répertoire Répertoire open source Nord Créer Cela arrêtera le suivi pour cette série. Aucun fichier sélectionné Mise a jour de la bibliothèque... (%s) Commencer Impossible de créer un fichier de sauvegarde Dernière sauvegarde automatique : %s Paramètres sources Ajouter tout de même À venir Remplacer Profil d\'affichage personnalisé Désactiver le zoom arrière Afficher les mises à jour à venir Guide à venir Le mois prochain Le mois précédent Copier le lien L\'empreinte digitale de la clé de signature existe déjà Souhaitez-vous ajouter le répertoire \"%s\" ? Flash avec Le répertoire %1$s a la même empreinte digitale de la clé de signature que %2$s. \nSi cela est attendu, %2$s sera remplacé, sinon contactez votre mainteneur du répertoire. Durée du flash %1$s ms Flash toutes les Noir Blanc Blanc et Noir Ignorer le téléchargement des chapitres dupliqués et déjà lus Sauvegarde JSON non supportée Aléatoire Envoyer les logs de crash Envoyer les logs de crash anonymes aux développeurs. Autoriser l\'analyse Mise à jour de la progression quand marqué comme lu Analyses et logs de crash L\'envoi de logs de crash et d\'analyses nous permettra d\'identifier et de corriger les problèmes, d\'améliorer les performances et de rendre les futures mises à jour plus adaptées à vos besoins Sécurité Dépôts d\'extension Par défaut (%d) Affecte les performances. Ne l\'activer que si la réduction du seuil de bitmap ne résout pas les problèmes d\'images vierges Toutes les séries lues Mettre à jour les trackers au chapitre %d ? Retirer Retirer l\'Extension ? Si le lecteur charge une image vierge, réduire progressivement le seuil.\nSélectionné : %s Envoyer des données d\'utilisation anonymes pour améliorer les fonctionnalités de l\'application. Trackers mis à jour au chapitre %d Cette série est soit terminée, soit il n\'y a pas de date de sortie prévue. L\'application n\'a pas obtenu l\'accès au dossier. Il se peut qu\'elle ne fonctionne pas comme prévu. Le fichier de sauvegarde est corrompu Voulez-vous vraiment retirer l\'extension \"%s\" ? Seuil de bitmap matériel personnalisé Après avoir lu un chapitre Après avoir acquis le chapitre suivant Librairie exportée Artiste Comportement Export Liste des librairies Suivi privé Auteur Marquer un chapitre dupliqué comme lu Vous avez une série similaire dans votre bibliothèque.\n\nSélectionnez une série à migrer ou l\'ajouter quand même. Chapitres non lus Auto Notes Modifier les notes Utiliser l\'ancien décodeur pour le lecteur de bandes longues Vous êtes sur le point de supprimer des séries de la base de données Les chapitres lus et la progression des séries hors bibliothèque seront perdus Monochrome Conserver les séries avec des chapitres lus Catppuccin Masquer les indicateurs de chapitre manquants Impossible de créer le répertoire de téléchargement Impossible de créer le répertoire : %s Mettre à jour les titres des séries de la bibliothèque pour qu\'ils correspondent à la source Supprimer les téléchargements de la série actuelle après la migration Afficher la série uniquement si elle comporte des chapitres supplémentaires Aucun chapitre trouvé, cette série ne peut pas être utilisée pour la migration Attention : si une série est renommé, elle sera supprimée de la file d\'attente de téléchargement (si elle y est présente). Masquer les séries qui ne sont pas similaire Masquer les séries sans chapitres récents Mettre en pause l\'historique de lecture pour cette extension Connexion… Doublon possible Suivre en privé Suivre publiquement J\'ai apprécié la partie où… Sélectionné Disponible Sélectionner tout Ne rien sélectionner Sélectionnez les sources activées Sélectionnez les sources épinglées Continue Donnée à migrer Mots-clés supplémentaires (facultatif) Aide à affiner les résultats de recherche en ajoutant des mots-clés supplémentaires Ces options sont lentes et dangereuses, elles peuvent conduire à des restrictions de la part des sources Mode de recherche avancé Décompose le titre en mots-clés pour une recherche plus large Similarité basée sur le numéro de chapitre Si cette option est activée, la correspondance la plus avancée est choisit. Sinon, c\'est la première correspondance par priorité de source qui sera choisit. Migration Migration (%1$d/%2$d) Copie Migrer Aucune alternative trouvée Dernier : %1$s Inconnu Rechercher manuellement Ne pas migrer Migrer maintenant Copier maintenant Arrêter de migrer ? Arrêter Annuler Copier Migrer Annuler Annuler Donation Rendre les images dans les descriptions de mangas Fermer l\'onglet Interdire les noms de fichiers non ASCII Assure la compatibilité avec certains supports de stockage qui ne prennent pas en charge Unicode. Lorsque cette option est activée, vous devrez renommer manuellement les dossiers source et manga en remplaçant les caractères non ASCII par leur représentation hexadécimale UTF-8 en minuscules. Les fichiers de chapitre n\'ont pas besoin d\'être renommés. Téléchargements simultanés de sources Téléchargements simultanés de pages Pages téléchargées simultanément par source Filtrer les scantrads exclus ================================================ FILE: i18n/src/commonMain/moko-resources/gl/plurals.xml ================================================ %d categoría %d categorías Despois de 1 minuto Despois de %1$s minutos Seguinte capítulo sen ler Seguintes %d capítulos sen ler Queda %1$s Quedan %1$s Onte Fai %1$d días Feito en %1$s con %2$s erro Feito en %1$s con %2$s erros %d servizo de seguemento %d servizos de seguemento Hai unha actualización dunha extensión Hai actualizacións de %d extensións %1$s capítulo %1$s capítulos Capítulos %1$s e 1 máis Capítulos %1$s e %2$d máis Saltouse %d capítulo: falta na fonte ou ignorouse Saltáronse %d capítulos: faltan na fonte ou ignoráronse Por %d elemento Por %d elementos %1$d capítulo novo %1$d capítulos novos O seguinte capítulo Os seguintes %d capítulos Falta %1$s capítulo Faltan %1$s capítulos %d repositorio %d repositorios Mañá Dentro de %1$d días Un día %d días 1 páxina %1$s páxinas ================================================ FILE: i18n/src/commonMain/moko-resources/gl/strings.xml ================================================ Axustes Máis Nome Fontes Historial Actualizacións Biblioteca Cola de descargas Último capítulo lido Deshabilitado Permitir eliminar os capítulos marcados como favoritos Eliminar automaticamente despois de ler Despois de marcar manualmente como lido Eliminar capítulos Recheo lateral Lendo Modo de lectura Mostrar sempre transición de capítulo A B G R Bloquear en horizontal Bloquear en vertical Libre Rotación por defecto Rápido Normal Sen animación Centro Dereita Esquerda Automático Posición inicial do zoom Axuste intelixente Tamaño orixinal Axustar ao alto Axustar ao largo Estirar Axustar á pantalla Tipo de escala Paxinado Tira vertical con espacios Tira vertical Por páxinas (vertical) Páxinas (De dereita a esquerda) Por páxinas (de esquerda a dereita) Modo de lectura por defecto Negro Gris Branco Cor de fondo Amosar cun toque longo Invertir teclas de volume Teclas de volume Navegación Saltar capítulos filtrados Saltar capítulos marcados como lidos Manter a pantalla acesa Queimar / Escurecer Subexpoñer / Aclarar Pantalla Multiplicar Superposición Modo de mestura do filtro de cor Filtro de cor personalizado Brillo presonalizado Recortar bordes Amosar brevemente o modo actual cando se abre o lector Amosar modo de lectura Amosar número de páxina Velocidade da animación de doble toque Animar transición de páxinas Mostrar contido na área recortada Pantalla completa As fontes desta extensión poden ter contido NSFW (+18) +18 Esta extensión xa non está dispoñible. Pode que non funcione ben e cause problemas na aplicación. Recoméndase desinstalala. Unha extensión maliciosa podería ler calquera credencial de inicio de sesión gardada en Mihon ou executar calquera tipo de código. \n \nSe confías nesta extensión, aceptas estes riscos. Extensión non confiable Non confiable Desinstalar De confianza Instaladas Instalando Descargando Pendentes Instalar Obsoletas Actualizar Actualizacións pendentes Todas Preguntar sempre Categoría por defecto Procurar novas portadas e detalles cando se actualice a biblioteca Refrescar os metadatos automaticamente Co estado de \"Rematados\" Durante a carga Restricións do dispositivo para as actualizacións automáticas Semanalmente Cada 2 días Diariamente Cada 12 horas Cada 6 horas Desactivadas Actualizacións automáticas Actualización global Horizontal Vertical Tamaño da reixa Amosar Isto non evita que as extensións non oficiais ou mal clasificadas mostren contido NSFW (+18) dentro da aplicación. Esconder o contido das notificacións O modo discreto esconde o contido da aplicación ao cambiar entre aplicacións e bloquea as capturas de pantalla Modo discreto Nunca Sempre Bloquear por inactividade Requerir desbloqueo Non se atopou unha aplicación para seleccionar ficheiros Inicia sesión en MAL de novo Require reiniciar a aplicación para que surxa efecto Amosar na lista de fontes e extensións Fontes NSFW (+18) Seguridade e privacidade Xestionar notificacións Formato da data Activado Desactivado Utilizar o do sistema Tema Acerca de Avanzado Seguimento Descargas Lector Biblioteca Xeral Aplicación non dispoñible Cargando… Recargar Adiante Atrás Restaurar Abrir rexistro Desfacer Resetear Gardar Compartir Instalar Mover ao final Mover ao principio Máis antigos Os máis novos Ordenar Cancelar todos Cancelar Quitar de fixados Fixar Deshabilitar Amosar laretas de categorías Capítulos descargados Cuadrícula ampla Lista Cuadrícula compacta Amosar Modo de visualización Migrar Abrir en WebView Abrir no navegador Continuar Comezar Eliminar Reintentar Capítulo seguinte Capítulo anterior Pausar Ver capítulos Editar portada Establecer categorías Renomear categoría Editar categorías Engadir categoría Engadir Editar Deshabilitar todos Habilitar todos Actualizar biblioteca Eliminar Quitar favorito Engadir favorito Descargar Marcar anteriores como lidos Marcar como non lido Marcar como lido Selección inversa Seleccionar todos Procura global Axustes de busca Procurar Data de adición Capítulo máis recente Último lido Capítulos totais Alfabeticamente Quitar filtro Non lidos Favoritos Filtro Menú Axustes Historial Seguimento Capítulos Categorías Non tes categorías. Toca o botón cun máis para crear unha e organizar a túa biblioteca. A túa biblioteca está vacía Explorar Non se leu nada recentemente Sen actualizacións recentes Sen descargas Axuda Información da extensión Extensións Migrar Copia de seguridade e restauración Elementos da biblioteca Capítulo non atopado Completado Título Licenciado Non lidos En curso Descoñecido Non se atoparon capítulos Mover a serie ao primeiro posto Comezar a descarga agora Tema da aplicación Sincronización unidireccional do progreso de lectura; sincronización mellorada Fontes, extensións, procura global Envorcar os rexistros de erros, optimizacións de batería Maremoto Hoxe Con capítulos sin ler Os elementos das categorías excluídas non se actualizarán aínda se están tamén nas categorías incluídas. Versión Instalando a extensión… Clásico Mostrar a superposición das zonas de toque Escala de grises Invertido Vertical Ambos Gardar as páxinas en cartafoles separados Crea cartafoles segundo o título dos elementos Vertical Horizontal Mellora o rendemento do lector Páxina web Estás seguro de querer gardar estes axustes como por defecto? Imaxe gardada Restaurar a copia de seguridade Frecuencia das copias de seguridade Fontes faltantes: Reconstruír o índice de descargas Garda os rexistros de erros nun ficheiro para compartilo cos desenvolvedores Fai que funcionen mellor as actualizacións e as copias de seguridade que se fagan en segundo plano Procurar actualizacións Licenzas de código aberto Política de privacidade Actualizado a v%1$s Axuda a corrixir os erros. Non se enviará ningunha información sensíbel Desactivar o modo incógnito Iniciar sesión Capítulos descargados Da biblioteca Eliminar categoría Dispoñible, mais a fonte non se instalou: %s Fixados Amosar o número de capítulos por ler na icona de actualizacións Excluír: %s Saltar os capítulos duplicados Descargar automaticamente durante a lectura Só funciona con elementos da biblioteca e se o capítulo actual e o seguinte xa están descargados. Restauración completada %1$02d min, %2$02d seg De que queres facer unha copia de seguridade? Non se concederon os permisos de almacenamento Ningún elemento na biblioteca co que facer a copia de seguridade Deberías gardar duplicados das copias de seguridade fora do teu dispositivo. Limpar cookies Nome do axente de usuario (\"user agent\") por defecto O axente de usuario non pode estar vacío Usado: %1$s Borrar a caché dos capítulos ao pechar a aplicación Non se puideron abrir os axustes do dispositivo Enviar informes de erros Lapelas Non hai máis resultados Usado recentemente Máis recente Engadir á biblioteca Portada personalizada Estás seguro de querer eliminar os capítulos seleccionados? Axustes de capítulo Pausado Portada Portada gardada Queres eliminar a categoría \"%s\"? Descendente Ascendente Se a separación das páxinas anchas non coincide coa dirección de lectura Sensibilidade para ocultar o menú ao desprazarse Quinto capítulo lido antes do último Descargar capítulos novos Nome de usuario Erro ao gardar a portada Localización non válida: %s Antepenúltimo capítulo lido Os elementos das categorías excluídas non se descargarán, aínda se están en categorías incluídas. Baixa Creando a copia de seguridade Categorías, actualización global, accións ao arrastrar Modo de lectura, aparencia e navegación Baixadas automáticas e por adiantado Copias de seguridade manuais e automáticas Bloqueo da aplicación e modo discreto Que non foran comezadas Actualizar todo Sincronización unidireccional para actualizar o progreso dos capítulos en servizos de seguimento externos. Configúraa na biblioteca, dende o botón de seguimento de cada elemento. Seguir Hai %1$d elementos na base de datos que non están na biblioteca Versión Mostrar brevemente ao abrir o lector Por defecto Estatísticas Comezados Local Descargados Idioma da aplicación ErroInterno: Revisa o rexistro de erros para máis información Información da aplicación Shizuku non se está executando Instala e inicia Shizuku para utilizalo como instalador de extensións. Automático En forma de L Desprazarse polas imaxes anchas Actualizar o progreso ao rematar a lectura Servizos de seguimento Cancelouse a restauración Rede Contrasinal As versións de F-Droid non teñen soporte oficial. \nPreme para saber máis. Conectado Clasificación por idades Servizos de seguimento mellorados Estes servizos proporcionan funcións melloradas para fontes concretas. Faise un seguimento automático dos elementos ao engadilos á biblioteca. Xa se está facendo unha copia de seguridade Compartir os rexistros de erros Error ao compartir a portada Produciuse un erro ao borrar Varios idiomas Horizontal Esquerda Ampliar a imaxe en horizontal Pode ser que debas instalar as extensións que falten e iniciar sesión nos servizos de seguimento para usalos. Datos Restableceuse a configuración do lector Pechar a sesión en %1$s? Pechouse a sesión Publicación rematada Cancelada Establecer por defecto Ningún Penúltimo capítulo lido Descarga automática Crear unha copia de seguridade Non se puido facer a copia de seguridade Actualizar as portadas da biblioteca O arquivo da copia de seguridade non é válido: A copia de seguriade non contén ningún elemento da biblioteca. DNS por HTTPS (DoH) Cada 3 días Filtra tódolos elementos da túa biblioteca Engadir á biblioteca? Sen descripción Estado É posible que as opcións de copia de seguridade e de restauración non funcionen correctamente se a \"Optimización de MIUI\" está desactivada. Axente de usuario non válido Restablecer o axente de usuario Marxe Non hai nada que borrar Borrar os datos do WebView Restablecer o modo de lectura e a orientación de tódalas series Número de non lidos Mostrar o elemento Data de obtención dos capítulos Advertencia Identifícate para confirmar o cambio Fonte local Quitar todo Lavanda Inverter as zonas de toque Dereita Guía de seguimento En pausa Por número de capítulo Tako Yotsuba Dinámico Mazá verde Crepúsculo de medianoite Daiquiri de amorodo Azul mariño e turquesa Yin e Yang Modo negro puro Incluír: %s Non se puido obter as extensións dispoñibles Borrar a base de datos Anterior Só con Wi-Fi Só en conexións ilimitadas Borráronse os datos do WebView Procura global… Última comprobación de actualizacións Número total de entradas Agora non Estilo Kindle Dereita e esquerda Desactivado Autor descoñecido Ordenar por Pechar sesión Non se atoparon resultados Pendente de ler Procurar… Idioma Cuadrícula con só portadas Data Popular Abrir un elemento ao azar Seguinte Tipo de rotación A máis baixa Idioma Instalador Activado Desactivado En seguimento Zonas de toque Vertical inverso Borráronse as entradas Non se puido restablecer a configuración do lector Actividade en segundo plano Interface de tableta Rexistro detallado Só os descargados Modo incógnito Pausar o historial de lectura Correo electrónico Na biblioteca Título descoñecido Pechar Tema, formatos de data e hora Aparencia Botón de seguir lendo Mostrar o número de elementos Cancelar todo para esta serie Por data de subida Preme para ver os detalles do erro Restricións: %s Opcións de ordenación e visualización por categoría Separar as páxinas anchas Inverter a posición das páxinas separadas Non Accións A máis alta Categorías excluídas Alta Anterior ao antepenúltimo capítulo lido Descargar por adiantado Gardar como arquivo CBZ Pode usarse para restaurar a biblioteca actual Restaurar a biblioteca dende unha copia de seguridade Creouse a copia de seguridade Fallou a restauración da copia de seguridade Servizos de seguimento sen conectar: Restaurando a copia de seguridade Xa se está facendo a restauración Borrar o historial dos elementos que non estean gardados na túa biblioteca Cookies borradas Borrar a caché dos capítulos Borrouse a caché. Elimináronse %1$d ficheiros Forzar á aplicación a comprobar de novo os capítulos descargados Restablecer os axustes do lector en cada serie Desactivar a optimización de batería A optimización de batería xa está desactivada Algúns fabricantes teñen restricións adicionais para as aplicacións que causan a detención dos servizos en segundo plano. Esta páxina web ten máis información sobre como arranxalo. Amosar rexistros detallados no rexistro do sistema (diminúe o rendemento da aplicación) Novidades Axudar coa tradución Iniciar sesión en %1$s Actualizando a categoría Erro descoñecido Aplicar tamén a tódolos elementos da miña biblioteca En pausa Título da fonte Por número de capítulo Descargar Data de finalización Queres eliminar a data? Data de comezo Non se puido cargar a imaxe Non hai ningún capítulo anterior Non se atopou ningunha páxina Non foi posible descargar os capítulos. Podes tentar de novo na sección de descargas Non se puideron descargar os capítulos por falta de espazo de almacenamento Capítulo %1$s Omitiuse porque a serie está rematada Actualiza a aplicación de WebView para mellorar a compatibilidade A categoría está baleira Guía de introdución Non se puido evitar Cloudflare O widget non está dispoñible cando está activo o bloqueo da aplicación Xa se está a actualizar Descargando (%1$d/%2$d) Non lidos Isto eliminará a data de comezo seleccionada de %s Páxina seguinte Migrar Eliminado da biblioteca Máis Copiado ao portapapeis Capítulo %1$s Erro Para ler máis adiante Isto eliminará a data de finalización de %s Filtro personalizado Para esta serie Elementos rematados Non dispoñible As actualizacións grandes perxudican ás fontes e poden supoñer actualizacións máis lentas e un maior uso da batería. Preme para saber máis. Encontráronse capítulos novos Engade o elemento a túa biblioteca antes de facer isto Non se puido descargar o capítulo por un erro inesperado Por fonte Actual: Seguinte: Copiado ao portapapeis: \n%1$s Non se puido copiar ao portapapeis Lista de rematados Puntuación Estado Tipo Fonte non soportada Agora mesmo Non se atoparon elementos nesta categoría Engadido á biblioteca Abandonado Lista de en espera Resumo Elementos Servizos de seguimento %dh Actualizacións das extensións Fonte local En seguimento Lendo Non hai ningunha conexión Wi-Fi dispoñible %s pechouse por un problema inesperado. Aconsellámoste que compartas os rexistros de erros na canle de soporte no Discord (en inglés). Reinicia a aplicación Non se atopou ninguna fonte instalada Advertencia: As descargas pesadas poden facer que as fontes se volvan máis lentas e/ou bloqueen %s. Preme para saber máis. Abrir no GitHub Xestor de descargas Erro Descargas en pausa Preme para instalar a actualización Progreso Erro na descarga Menos Eliminar os capítulos descargados? En espera Anterior: Non hai ningún capítulo máis Non se puideron cargar as páxinas: %1$s Non se atopou a fonte En uso %dd Se necesitas axuda para arranxar os erros de actualización da biblioteca, consulta %1$s Oimitiuse porque hai capítulos sin ler Esta versión de Android xa non ten soporte Non hai ningunha conexión de rede dispoñible Eliminar da biblioteca Actualizáronse os axustes por defecto dos capítulos Ver os elementos da biblioteca actualizados recentemente Vas eliminar \"%s\" da túa biblioteca Non se atopou a o capítulo seguinte Cargando páxinas… Rematado: Páxina: %1$d Produciuse un erro ao gardar a imaxe Actualizacións erradas: %1$d Descargar Actualizacións da aplicación Preme para saber máis Erro ao actualizar a portada Número do capítulo Non se atopou a ruta do ficheiro da páxina %d Rematada Actualizacións de capítulos Mihon necesita WebView Non se atopou a páxina %d ao separar Xeral Vaia! Comprobando as descargas Relendo Guía de fonte local Non tes ningunha fonte fixada Formato de capítulo non válido Usar como portada Portada actualizada %1$s: %2$s, páxina %3$d Por data de subida %dmin Engadir seguimento Eliminar o historial Eliminouse o historial Non se atopou ningunha fonte Guía de migración de fontes Escoller os datos a incluír Escoller unha fonte da que migrar Copiar Houston, temos un problema Non instalado Tempo de lectura Na actualización global Totais Descargando… Aínda non tes categorías. *necesario Páxina anterior Lista de lectura Estás seguro? Outros Estado descoñecido Fonte non instalada: %1$s Erro %1$s: %2$s Categorías eliminadas Isto eliminará a data de lectura deste capítulo. Estás seguro? Lista de inacabados Non se atoparon coincidencias Queres usar esta imaxe como portada? Xa hai unha categoría con este nome! Reiniciar tódolos capítulos deste elemento Modo de lectura Actualizando a biblioteca Última actualización da biblioteca: %s Cap. %1$s - %2$s Estás seguro? Perderás o historial. Non se puido abrir o último capítulo lido Lidos %dseg Elementos en seguimento Puntuación media Omitiuse porque non hai capítulos lidos Capítulo %1$s e %2$d máis Capítulos %1$s Omitiuse porque esta serie non require actualizarse Elexir a imaxe de portada Elexir o ficheiro da copia de seguridade Non hai novas actualizacións dispoñibles Nova versión dispoñible! Erros Procurar \"%1$s\" globalmente Dividir as imaxes altas Actualizar categoría Ocultar elementos que xa estén na biblioteca Copiar ao portapapeis Xirar as páxinas anchas para adaptalas á pantalla Voltear a orientación das páxinas anchas xiradas Superposición Acción de arrastrar á esquerda Amplía dando dous toques na pantalla Acción de arrastrar á dereita Información de depuración Seleccionado Non seleccionado Establecer intervalo Non se puido acceder a %s Sen conexión a Internet Primeiro hai que configurar algunhas cousas. Sempre podes modificalas nos axustes. Seguinte Debes elexir un cartafol Guía de almacenamento Actualizaches dende unha versión máis antiga e non sabes que elixir? Bótalle unha ollada á guía de almacenamento. Nórdico Marcas de tempo relativas Actualizacións intelixentes Engadir un repositorio Engade máis repositorios a %s. Debe ser unha dirección URL que remate en \"index.min.json\". Borrar repositorio A dirección URL do repositorio non é válida Queres eliminar o repositorio \"%s\"? Iniciar sesión no servizo de seguimento Ubicación do almacenamento Frecuencia de actualización personalizada Puntuación do servizo de seguimento Máis opcións Borrar os descargados Equipo de tradución Datos e almacenamento Desbloquear %s Próxima actualización prevista Aplicar Aceptar Mover ao último posto Restablecer os axustes por defecto Guía de benvida Dámosche a benvida! Comecemos Omitir Elixe o cartafol onde %1$s almacenará os capítulos descargados, as copias de seguridade e máis. \n \nRecoméndase usar un cartafol dedicado. \n \nElixir cartafol: %2$s Elixe un cartafol Permiso para instalar aplicacións Para instalar as extensións das fontes. Pemiso para amosar notificacións Recibe notificacións cando se actualice a biblioteca e máis cousas. Uso de batería en segundo plano Evita as interrupcións nas actualizacións da biblioteca, nas descargas e na restauración de copias de seguridade que tarden un anaco. Permitir Primeira vez usando %s? Recomendámosche ler a guía de introdución. Volvendo instalar %s? «%1$s» en lugar de «%2$s» Predicir cando sae o seguinte capítulo Preme aquí para conceder os permisos para instalar extensións. Revogar as extensións de confianza de orixe descoñecida Repositorios de extensións Aínda non engadiches ningún repositorio. Dirección URL do repositorio Este repositorio xa existe! Abrir o repositorio Tremelucir ao cambiar de páxina Reducir o efecto de retención de imaxe nas pantallas de tinta electrónica Aínda non seleccionaches ningunha localización de almacenamento Desactivar redución de zoom HTTP %d, comproba a páxina web no WebView Utilízase para as copias de seguridade automáticas, as descargas de capítulos e a fonte local. Axustes da aplicación Axustes da fonte Crear Erro completo: Non se puido crear unha copia de seguridade Almacenamento usado Eliminar tamén de %s Invalidouse o índice de descargas Ten resultados Engadir de todos modos Dispoñible: %1$s / Total: %2$s Sincronizando a biblioteca Nunca Proximamente Substituír A impresión dixital da chave da firma xa existe O repositorio %1$s ten a misma impresión dixital da chave da firma que %2$s. \nSe isto é o comportamento agardado, %2$s substituirase. Se no é así, contacta con quen mantén o repositorio. Perfil de visualización personalizado Incluír configuracións sensibles (por exemplo, as chaves de inicio de sesión en plataformas de seguimento) Navegar arriba A biblioteca sincronizouse correctamente Intervalos Estimar cada Prevese que o seguinte capítulo saia en %1$s, compróbase cada %2$s. Frecuencia de actualización personalizada: Queres deixar de seguir %s? Actualizando a biblioteca… (%s) Omitiuse porque hoxe non se esperaba ningunha publicación Non se elixiu ningún arquivo Última copia de seguridade automática: %s Actualizar cada Pronto Excluír equipos de tradución Non se atopou ningún equipo de tradución Esto eliminará o seguimento local. Ver as próximas actualizacións Guía dos próximos lanzamenos Mes seguinte Mes anterior Preme aquí para obter axuda con Cloudflare Actualizar o progreso ao marcalo como lido Copiar ligazón Branco Branco e negro Aleatorio Permitir analíticas Negro Pausar o historial de lectura para esta extensión Este manga está rematado ou non ten unha data de publicación prevista. Envía rexistros de erros anónimos aos desenvolvedores. Enviar rexistro de erros Todas as obras lidas Elixir un tamaño máximo co que decodificar imáxenes por hardware Queres engadir o repositorio \"%s\"? Por defecto (%d) Se o lector carga unha páxina en branco, recomendámoste reducilo pouco a pouco.\nLímite actual: %s Afecta ao rendemento. Recomendámosche activalo só se a imaxe segue sen verse ao reducir o tamaño máximo Omitir a descarga de capítulos duplicados xa lidos Queres eliminar a extensión? Seguro que queres eliminar a extensión \"%s\"? %1$s ms Copia de seguridade JSON non compatible O arquivo da copia de seguridade está corrupto Repositorios de extensións Marcar o capítulo %d como lido nos servizos de seguimento? Servizos de seguimento actualizados ao capítulo %d Enviar estatísticas de uso anónimas para mellorar as funcións da aplicación. Seguridade Analíticas e rexistros de erros O envío de rexistros de erros e estatísticas de uso permitirannos identificar e arranxar problemas, mellorar o rendemento e que futuras actualizacións poidan adaptarse mellor as túas necesidades Escintilar cada Escintilar con Non se puido obter un acceso continuo ao cartafol. É posible que a aplicación se comporte de xeito imprevisto. Eliminar Duración do flash Automático Monocromo Ao rematar de ler un capítulo Posibles duplicados Actualizar os títulos para que coincidan cos da fonte Aviso: se unha obra cambia de nome, borrarase da cola de descargas (se está aí). Autor Xa tes obras na túa biblioteca cun nome similar.\n\nElixe unha delas para comezar a migración ou engádea sen máis. Seguindo de maneira privada Gustoume a parte na que… Marcar os capítulos duplicados como xa lidos Notas Editar notas Comportamento Ao obter capítulos novos Cargar imaxes de tira vertical co decodificador antigo Iniciando sesión… Exportar Lista da biblioteca Exportouse a biblioteca Artista Seguir de maneira pública Seguir de maneira privada Capítulos sen ler Non se puido crear o cartafol de descarga Non se puido crear o cartafol:%s Estás a piques de borrar elementos da túa base de datos Perderás os capítulos lidos e o progreso de lectura das obras que non estén na biblioteca Conservar as obras con capítulos lidos ================================================ FILE: i18n/src/commonMain/moko-resources/he/plurals.xml ================================================ עדכון לתוסף זמין עדכונים ל-%d תוספים זמינים עדכונים ל-%d תוספים זמינים עדכונים ל-%d תוספים זמינים פרקים %1$s ואחד נוסף פרקים %1$s ו-%2$d נוספים פרקים %1$s ו-%2$d נוספים פרקים %1$s ו-%2$d נוספים פרק אחד חדש %1$d פרקים חדשים %1$d פרקים חדשים %1$d פרקים חדשים עבור כותר אחד עבור %d כותרים עבור %d כותרים עבור %d כותרים לאחר דקה אחת לאחר שתי דקות לאחר %1$s דקות לאחר %1$s דקות קטגורייה אחת שתי קטגוריות %d קטגוריות %d קטגוריות אתמול לפני יומיים לפני %1$d ימים לפני %1$d ימים פרק אחד שני פרקים %1$s פרקים %1$s פרקים 1 נשאר 2 נשארו %1$s נשארו הושלם ב %1$s עם שגיאה אחת הושלם ב %1$s עם שתי שגיאות הושלם ב %1$s עם %2$s שגיאות דולג פרק אחד, המקור חסר או שהוא סונן החוצה דולגו שני פרקים, המקור חסר או שהם סוננו החוצה דולגו %d פרקים, המקור חסר או שהם סוננו החוצה הפרק הבא שני הפרקים הבאים %d הפרקים הבאים מעקב אחד שני מעקבים %d מעקבים הפרק הבא שלא נקרא שני הפרקים הבאים שלא נקראו %d הפרקים הבאים שלא נקראו יום אחד יומיים %d ימים חסר פרק אחד חסרים שני פרקים חסרים %1$s פרקים מחר מחרותיים בעוד %1$d ימים ================================================ FILE: i18n/src/commonMain/moko-resources/he/strings.xml ================================================ עדכונים לתוסף עדכונים לפרק נפוץ ההורדות מושהות אין חיבור רשת זמין אין חיבור Wi-Fi זמין לא ניתן להוריד את הפרק בגלל שגיאה בלתי צפויה שגיאה אנא עדכן את אפליקציית WebView לקבלת תאימות טובה יותר עקיפה של Cloudflare נכשלה אין לך קטגוריות. לחץ על כפתור הפלוס כדי ליצור אחד לארגון הספרייה שלך. הספרייה שלך ריקה אין הורדות גרסה חדשה זמינה! שגיאה בהורדה לחץ כדי להתקין עדכון מוריד… אין עדכונים חדשים זמינים הורדה בחר קובץ גיבוי בחר תמונת כריכה אנא הוסף את הפריט לספרייה שלך לפני שתעשה זאת עדכון הכריכה נכשל פרקים %1$s פרק %1$s ו-%2$d נוספים פרק %1$s נמצאו פרקים חדשים לא ניתן להוריד פרקים. אפשר לנסות שוב בדף ההורדות העתק העברה בחר מקור שברצונך להעביר ממנו בחר נתונים כדי לכלול מעדכן ספרייה טעינת העמודים נכשלה: %1$s טוען דפים… אין פרק קודם אין פרק הבא קודם: הבא: נוכחי: סיים: האם להשתמש בתמונה זו כציור כריכה? לא ניתן היה לפענח את התמונה הפרק הבא לא נמצא עמוד: %1$d הגדר ככריכה הכריכה עודכנה סנן מותאם אישית התמונה נשמרה אפס את כל הפרקים לפריט זה פעולה זו תסיר את התאריך הקריאה של פרק זה. האם אתה בטוח? הקטגוריות נמחקו קטגוריה עם שם זה כבר קיימת! סוג סטטוס סטטוס כותרת ציון קריאה מחדש מתכנן לקרוא מושהה בהמתנה הושמט הושלם האם אתה בטוח שברצונך למחוק את הפרקים שנבחרו? לא נקרא לפי מספר פרק לפי מקור מספר פרק כותרת מושהה שגיאה מוריד (%1$d/%2$d) פרקים %1$s להוסיף לספרייה? המקור לא הותקן: %1$s למחוק פרקים שירדו? נוסף לספרייה הסר מהספרייה הוסר מהספרייה לא ידוע נמשך המאוחר ביותר חיפוש גלובלי… אחר מאנגה מקומית לא נמצאו תוצאות אין תוצאות נוספות מעדכן קטגוריה שגיאה לא ידועה אתה עכשיו מנותק התנתק התנתק מ-%1$s? מחובר סיסמה כתובת דוא\"ל שם משתמש התחבר אל %1$s עוזר בתיקון באגים. לא יישלחו נתונים רגישים שלח דוחות קריסה תוסף זה נחתם עם אישור לא מהימן ולא הופעל. \n \nתוסף זדוני יכול לקרוא את אישורי ההתחברות המאוחסנים ב-Mihon או להריץ קוד שרירותי. \n \nעל ידי אמון באישור זה אתה מקבל סיכונים אלה. הסר התקנה לא מאומת הותקן מתקין מוריד ממתין התקן עדכון עדכונים ממתינים הכל שאל תמיד קטגוריית ברירת המחדל במצב \"נגמרה\" טוען הגבלות עדכונים אוטומטיים פעם בשבוע פעם ביומיים פעם ביום כל 12 שעות כל 6 שעות כבוי עדכונים אוטומטיים עדכון גלובלי מאוזן מאונך הסתר תוכן התראות מסך מאובטח מסתיר את תוכן האפליקציה בעת החלפת אפליקציות וחוסם צילומי מסך לעולם לא תמיד נעילה כאשר אינו פעיל ביטול נעילה דרוש אבטחה ופרטיות ניהול התראות תבנית תאריך פעיל כבוי אודות מתקדם הורדות ספרייה כללי האפליקציה אינה זמינה טוען… רענון קדימה חזרה שיחזור בטל פעולה אחרונה איפוס שמור שתף התקן עבור לתחתית הדף עבור לראש הדף הישן ביותר החדש ביותר מיון בטל הכל תצוגה מעקב עוד ביטול פרקים שירדו רשימה רשת קומפקטית מצב תצוגה פתח ב-WebView פתח בדפדפן המשך הסר נסה שוב פרק הבא פרק קודם הפסק הצג פרקים ערוך את הכריכה סדר קטגוריות שנה שם קטגוריה ערוך קטגוריות הוסף קטגוריה גרסה אופטימיזציית סוללה כבר מושבתת עוזר בעדכוני ספריות רקע וגיבויים השבתת האופטימיזציה של הסוללה הרשומות נמחקו מחק את היסטוריית הפריטים שאינם שמורים בספריה שלך נקה את מסד הנתונים עוגיות נוקו נקה עוגיות אירעה שגיאה במהלך הניקוי זיכרון המטמון נוקה. %1$d קבצים נמחקו בשימוש: %1$s נקה את זיכרון המטמון של הפרקים מייצר גיבוי משחזר גיבוי מה אתה רוצה לגבות? השחזור הושלם גיבוי נוצר תדירות גיבוי שחזר ספרייה מקובץ גיבוי שחזור גיבוי ניתן לשימוש על מנת לשחזר את הספרייה הנוכחית צור גיבוי שירותים עדכן התקדמות לאחר הקריאה הורד פרקים חדשים הפרק החמישי מהסוף שנקרא הפרק הרביעי מהסוף שנקרא הפרק השלישי מהסוף שנקרא הפרק השני מהסוף שנקרא פרק שנקרא בפעם האחרונה אוטומטי לאחר סיום הקריאה אחרי שמסומן ידנית כנקרא הצג תמיד מעברי פרקים אלפא כחול ירוק אדום מאוזן נעול מאונך נעול חופשי ברירת המחדל של סוג הסיבוב מהירה רגילה בלי אנימציה מרכז ימין שמאל אוטומטי מיקום התחלה של ההגדלה התאמה חכמה גודל מקורי התאם לגובה התאם לרוחב למתוח התאם לגודל מסך סוג קנה מידה רצועה מוארכת סידור עמודים (אנכי) סידור עמודים (ימין לשמאל) סידור עמודים (שמאל לימין) ברירת המחדל של מצב הקריאה שחור לבן צבע רקע מקשי עוצמת שמע הפוכים מקשי עוצמת שמע ניווט דלג על פרקים מסוננים דלג על פרקים המסומנים כנקראו השאר מסך דלוק שרוף / מוחשך מסך מסנן צבע מותאם אישית בהירות מותאמת אישית חתוך גבולות הצג מספר עמוד מהירות הנפשה בהקשה כפולה הנפשת מעברי דפים הצג תוכן באזור החתוך תוסף לא מאומת תוסף זה אינו זמין עוד. ייתכן שאינו פועל כצפוי ויכול לגרום לבעיות באפליקציה. מומלץ להסיר את התקנת התוסף. מסך מלא הוסף ערוך עדכן ספרייה מחק בטל סימון פרק סמן פרק הורד סמן את הקודמים כנקראו סמן כלא נקרא סמן כנקרא סמן הכל חיפוש כללי חיפוש הפרק האחרון נקרא לאחרונה כל הפרקים אלפביתית הסר את הסנן לא נקרא סנן תפריט הגדרות עזרה פרטי הרחבה הרחבות העברה גיבוי ושחזור מקורות היסטוריה עדכונים ספרייה תור ההורדות הגדרות היסטוריה פרקים פריטים בספריה קטגוריות שם שום דבר לא נקרא לאחרונה אין עידכונים אחרונים סומן ברירת המחדל ערכת נושא של האפליקציה התחל להוריד עכשיו נעץ מסך מאובטח פריטים בכל שורה עקוב אחר המערכת בדוק אם יש כריכה ופרטים חדשים בעת עדכון הספרייה סה\"כ פריטים הגדרות חיפוש בחר את ההפך שפה הצג קטגורית כרטיסיות הצג מספר של פריטים השבת הסר נעיצה בטל הכל לסדרה זו לפי תאריך ההעלאה לפי מספר הפרק עולה יורד אזהרה אימות לאישור השינוי מצב קריאה מעקב ערכת נושא מקורות NSFW (18+) הצג ברשימות מקורות ותוספים זה לא מונע תוספים לא רשמיים או תוספים שעלולים לסמן באופן שגוי מלהציג תוכן NSFW (18+) בתוך האפליקציה. היום תצוגה אפשר הכל השבת הכל התחל העברה רשת נוחה מקור מקומי טורקיז צהבהב מצב שחור כהה טהור ירוק תפוח תות דאיקירי יין ויאנג ארבעה עלים לחץ כדי לראות פרטים מראה דמדומי חצות טאקו רענן נתונים באופן אוטומטי במעקב תאריך הוספה תאריך האחזור של הפרקים דינמי פריט הנמצא בקטגוריית מנועי העדכונים לא יעודכן גם אם הוא נכלל בקטגורייה אחרת שכן מתעדכנת. הראה פריט עם פרק(ים) שלא נקרא(ו) העבר סדרה לראש מיושן זה עוד לא התחיל עדכן הכל האמן עלול להכיל תוכן שלא מתאים למקום העבודה (18+) מתקין הרחבה… כלול: %s הראה לזמן קצר כשפותחים את מצב הקריאה הראה מצב קריאה פרטי האפליקצייה נכשל בקבלת רשימת ההרחבות 18+ אין כל 3 ימים רק ב Wi-Fi הגבלות: %s הראה לזמן קצר את סגנון הקריאה כשפותחים את מצב הקריאה לחיצה הופכית כבוי פעיל טווח גווני האפור הופכי אופקי ימין ושמאל הבא ימין סוג הסיבוב מאונך מאוזן רגישות החבאת התפריט בגלילה הכי גבוה גבוה נמוך הכי נמוך מחק פרקים קטגוריות מוחרגות פריט הנמצא בקטגוריית מנועי ההורדות לא יעודכן גם אם הוא נכלל בקטגוריה אחרת שכן נכללת (בהורדות). שמור כארכיון CBZ שירותים משופרים גבול עשוי בצורת L שמאל הקודם קריאה מצב קריאה הורדה אוטומטית אפור רצועה מוארכת עם רווחים סידור עמודים מאונך הפוך שמור דפים בתיקיות נפרדות אנכי שניהם פעולות הצג פעולות בלחיצה ארוכה אוטומטי אפשר מחיקת פרקים שסומנו מנוע צור תיקיות בהתאם לכותרת הפריטים שירותים המספקים שירותים משופרים למקורות ספציפיים. פריטים יהיו במעקב אוטומטי אחרי הוספה לספרייה שלך. מקורות חסרים: קובץ גיבוי לא תקין: הגיבוי לא מכיל שום פריטים. מעקב נקה את זיכרון המטמון של הפרקים כשהאפליקציה עולה יש %1$d פריטים שנמצאים במסד הנתונים אבל לא בספרייה לשוניות חפש את \"%1$s\" גלובלית מצב לא ידוע מורשה, בעל רישיון הפרסום הסתיים נכשלה ההעתקה ללוח לפי תאריך העלאה הכריכה נשמרה שגיאה בשמירת הכריכה שגיאה בשיתוף הכריכה קבע כברירת המחדל מצב קריאה מהספרייה פרקים שירדו כריכה יותר פחות כבר מתרחש גיבוי מדריך למנגה מקומית אין מקורות נעוצים פרק לא נמצא לסדרה הזאת מידע מקובץ הגיבוי ישוחזר. \n \nלאחר מכן צריך להתקין הרחבות חסרות ולהתחבר לשירותי המעקב כדי להשתמש בהם. יכול להיות שהגיבוי/השחזור לא יעבדו כמו שצריך אם אופטמיזציית MIUI מנועה. הגיבוי נכשל שחזור הגיבוי נכשל צריך לאתחל את האפליקציה כדי שהשינויים ייכנסו לתוקף מדיניות פרטיות הוסף לספרייה הועתק ללוח: \n%1$s לא נמצאו פרקים תאריך התחלה תאריך סיום מה חדש עזור לתרגם רק מה שירד דפדפן לא נקרא קריאה התחברות נעוץ %1$02d דקות, %2$02d שניות השחזור בוטל רצוי לשמור עותקים נוספים של גיבויים במקומות אחרים בנוסף. אין מה לנקות בדוק עדכונים סדר ע\"י תאריך מחבר לא ידוע מצב פרטי סינון כל הפריטים בספרייה שלך אתר מידע שגיאה בשמירת התמונה %1$s: %2$s עמוד %3$d עוצר את קריאת ההיסטוריה ביטול מצב פרטי הורדה רשת בוטל/ה בתוך הספרייה הגדרות פרק האם אתה בטוח שאתה רוצה לשמור את ההגדרות האלה כברירת המחדל? כבר מתרחש שחזור לא נמצאו עמודים מקור לא נמצא ההיסטוריה נמחקה מתקין התקדמות הושלם הדף הקודם הדף הבא אוקיי, זה מביך כל הגדרות מצב הקריאה אופסו החרגה: %s עדכוני אפליקציה לא נמצאו מקורות מותקנים הורדות גדולות פוגעות במקורות ויכולות לגרום לעדכונים איטיים יותר וגם לשימוש מוגבר בסוללה. לחץ כדי ללמוד עוד. עדיין אין קטגוריות. לחץ כדי ללמוד עוד נקה היסטוריה נכשל איפוס הגדרות מצב הקריאה עדכון אחרון לא נקראו הגדרות מיון לכל קטגוריה בנפרד מקור לא נמצא גרסת האנדרואיד הזאת כבר לא נתמכת WebView נצרך ל-Mihon רשת רק של הכריכות פתח את יומן האירועים %1$d עדכונים נכשלו בצע קירוב לתמונות אופקיות באופן אוטומטי משפר את ביצועי מצב הקריאה דולג בגלל שהסדרה נגמרה דולג בגלל שיש פרקים שלא נקראו דולג בגלל שאין פרקים שנקראו סגור שגיאות אפס את הגדרות מצב הקריאה של כל סדרה בנפרד Shizuku לא פועל התקן והפעל את Shizuku כדי להשתמש בShizuku כמתקין ההרחבות. הראה את פרישת מיקומי הלחיצה אתה בטוח? כל ההיסטוריה תמחק. מדריך נדידת מקורות לא ניתן להוריד פרקים כי אין מספיק מקום אחסון אזהרה: הורדות גדולות עלולות לגרום להאטה במקורות ו/או לחסימת %s. לחץ כדי ללמוד עוד. פורמט פרק לא תקין בהפסקה האם תרצה למחוק את הקטגוריה %s? פצל עמודים רחבים כמו ספר אלקטרוני גרסה כיסוי הגבלת גיל שפה פילטר צבע משתלב להכפיל מחק קטגוריה הגבלה מורשת שפת אפליקציה הפוך מיקום של עמודים מפוצלים מדריך מעקב מחק הכל אם המקום של העמוד המפוצל לא תואם לכיוון הקריאה כלום איזורי נגיעה חיפוש… פתיחת פריט אקראי מדריך למתחיל סטטיסטיקות מקומי *דרוש שגיאה פנימית: בדוק ביומני קריסה למידע נוסף נעילת אפליקציה, מסך מוגן אתה עומד למחוק את \"%s\" מהספריה שלך הותחלו הורדו גלים קבע מרווח זמן קבע מרווח זמן מותאם מראש לטעינה כותרת לא מוכרת מנהל ההורדות HTTP %d, בדוק באתר ב-WebView אין חיבור אינטרנט קטגוריה ריקה קטגוריית עדכון כפתור המשך קריאה מקורות, הרחבות, חיפוש כללי מצב קריאה, תצוגה, ניווט העתק ללוח הכתיבה הגדרות פרק דיפולטי עודכנו לא עכשיו בודק הורדות מחק הורדות העדכון הצפוי הבא הורד קבצי קריסה, אופטימיזציה לסוללה לבנדר לחץ כאן לעזרה עם Cloudflare עמוד %d לא נמצא בעת פיצול צפה בפריטי הספריה העדכניים ביותר נכשל במציאת כתובת עמוד %d הורדה אוטומטית, הורד את הבאים ערכת נושא, תצורת תאריך ושעה קטגוריות, עדכון כללי, החלקת פרק סנכרון חד צדדי, סנכרון משופר מדריך וגיבויים אוטומטיים לא נמצאו פריטים בקטגוריה זו בסדר ספריה עודכנה לאחרונה ב: %s שטח תמונה רחבה הסתר פריטים שכבר בספרייה הרשאות אחסון לא ניתנו אין פרטי ספרייה לגיבוי נכשל ביצירת קובץ גיבוי מחרוזת משתמש לא תקינה איפוס מחרוזת משתמש דיפולטית לא הצליח לפתוח הגדרות מכשיר לוג מפורט הדפס דוחות שגיאה מפורטים ליומן המערכת (מוריד ביצועים לאפליקציה) שכבת על %d ימים פתח ב-GitHub פרק בהחלקה ימינה בטל תוקף של אינדקס ההורדות זמין אבל המקור לא מותקן: %s סנכרון חד צדדי לעדכון ההתקדמות בפרקים בשיקות המעקב. קבע מעקב עבור פריטים ספציפיים מכפתור המעקב שלהם. הצג כמות פרקים שלא נקראו בסמל העדכונים פצל תמונה מוארכת שומר דוח שגיאות לקובץ עבור שיתוף עם המפתחים כריכה מותאמת אישית להסיר תאריך? הורד הלאה פעילות רקע פריטים במעקב מחרוזת משתמש דיפולטית הועתק ללוח כתיבה האם אתה בטוח? המקור לא נתמך לא נמצאה התאמה לא מותקן משך קריאה בעדכון כללי N/A לזערה לגבי איך לתקן בעיות בעדכוני ספריה, ראה %1$s לא יכל להשיג את %s מחוץ לתקופת הפרסום הצפויה סובב עמודים רחבים להתאמה ממש עכשיו הורד אוטומטית בזמן קריאה פרטי התחברות למעקב מיקום לא תקין: %s מסנכרן ספריה מחרזות משתמש לא יכולה להיות ריקה שומש לאחרונה בבקשה התחבר ל-MAL שוב פריטים שהושלמו %s נתקל בשגיאה בלתי צפויה. אנו ממליצים שתשתף את דוחות השגיאה שלך בערוץ התמיכה שלנו בדיסקורד. נקראו פריטים %d שניות רשימת פריטים בעצירה זמנית רשימת פריטים שלא הושלמו פעולת עדכון כבר פועלת מעקבים החלף אוריינטציה של עמודים רחבים מסובבים מעקבים שדורשים התחברות: רשימת פריטים שהושלמו ממשק משתמש טאבלט F-Droid builds לא נתמכים באופן רשמי. \nלחץ כדי ללמוד עוד. להסיר את %s ממעקב? פעולה זו תסיר את המעקב שלך מקומית. הסר גם מ-%s קבע גם עבור כל הפריטים בספריה רק ברשת בלתי מוגבלת שתף יומני קריסה פעולה זו תסיר את תאריך ההתחלה הקודם שלך מ-%s רשימת קריאה רשימת תכנונים רבים להתחמק / להאיר רפד בצדדים סנכרון ספריה הושלם מרווחי זמן לא מסוגל לפתוח את הפרק שנקרא לאחרונה פרק בהחלקה שמאלה לחיצה כפולה לקירוב (זום) עודכן לגרסה %1$s בסך הכל שגיאה %1$s: %2$s עובד רק אם הפרק הנוכחי והפרק הבא כבר הורדו. דלג על פרקים כפולים DNS over HTTPS (DoH) תוקף אינדקס ההורדות בוטל מידע של WebView נוקה בהצלחה אפס מצב קריאה ואוריינטציה לכל הסדרות מידע דיבוג רישיונות מקורות פתוחים פופולרי הוסף מעקב לחלק מהיצרנים יש הגבלות אפליקציה שהורגות תהליכים ברקע. באתר הזה יש עוד מידע לגבי איך לתקן את זה. פעולה זו תסיר את תאריך הסיום הקודם שלך מ-%s אופס! אתחל את האפליקציה %d שעות דולג בגלל שהספריה לא דורשת עדכונים דולג בגלל שלא צפוי פרסום היום לא נמצאה אפליקציה לאסוף קבצים במעקב אין תיאור בצע אומדן בכל קבע לעדכון בכל פרקים %1$s-%2$s סקירה יישומון לא זמין כשנעילת האפליקציה מופעלת הכרח את האפליקציה לבדוק מחדש פרקים שהורדו נקה מידע של WebView רענן כריכות ספרייה בעל תוצאות ציון ממוצע בשימוש %d דקות העתק קישור אפס לברירת מחדל העבר סדרה לתחתית אוטומטי ציון במעקב הוסף בכל זאת נגדיר כמה דברים תחילה. ניתן לשנות אותם בכל עת בהגדרות מאוחר יותר. מדריך אחסון הרשאה להתקנת אפליקציות מונוכרום אבטחה ניתוח נתונים ודוחות קריסה התנהגות אקראי ברוכים הבאים! נווט למעלה מדריך התחלה ערוך הערות הערות נורד לאחר קריאת פרק הסר נבחר לא נבחר אפשרויות נוספות נתונים ואחסון הרשאת התראות שימוש בסוללה ברקע הענק עדכון חכם פרקים שלא נקראו החל שלח דוחות קריסה אנונימיים למפתחים. שלח נתוני שימוש אנונימיים לשיפור תכונות האפליקציה. בחר תיקייה אפשר ניתוח נתונים דלג הבא שלח דוחות קריסה קבוצת תרגום ================================================ FILE: i18n/src/commonMain/moko-resources/hi/plurals.xml ================================================ %1$s मिनट के बाद %1$s मिनटों के बाद %1$d नया अध्याय %1$d नए अध्याय अध्याय %1$s और 1 और अध्याय %1$s और %2$d और %d प्रविष्टि के लिए %d प्रविष्टियों के लिए एक्सटेंशन अपडेट उपलब्ध है %d एक्सटेंशन अपडेट उपलब्ध हैं %1$s बचा हुआ %1$s बचे हुए %d श्रेणी %d श्रेणियाँ %1$s में पूर्ण, %2$s त्रुटि सहित %1$s में पूर्ण, %2$s त्रुटियों सहित %1$s अध्याय %1$s अध्याय %d ट्रैकर %d ट्रैकरस %d अध्याय छोड़ रहे हैं, या तो स्रोत में यह गायब है या इसे फ़िल्टर कर दिया गया है %d अध्याय छोड़ रहे हैं, या तो स्रोत में वे गायब हैं या उन्हें फ़िल्टर कर दिया गया है कल %1$d दिन पहले अगला अपठित अध्याय अगले %d अपठित अध्याय 1 दिन %d दिन अगला अध्याय अगले %d अध्याय %d रेपो %d रेपोज़ 1 पृष्ठ %1$s पृष्ठ कल %1$d दिनों में %1$s अध्याय गायब है %1$s अध्याय गायब हैं %1$d एंट्री ट्रांसफ़र करें? %1$d एंट्रियाँ ट्रांसफ़र करें? %1$d एंट्री कॉपी करें? %1$d एंट्रियाँ कॉपी करें? एक प्रविष्टि त्यागी गई %1$d प्रविष्टियाँ त्यागी गईं ================================================ FILE: i18n/src/commonMain/moko-resources/hi/strings.xml ================================================ नाम श्रेणियाँ लाइब्रेरी के आइटम अध्याय पदचिह्न इतिहास सेटिंग्स डाउनलोड सूची पुस्तकालय इतिहास नए अपडेट बैकअप और पुनर्स्थापना सेटिंग फिल्टर पृष्ठ स्मृति करा हुआ अपठित फिल्टर हटाए वर्णक्रमानुसार कुल अध्याय आखिर में पढ़ा हुआ खोज वैश्विक खोज सभी का चयन करे पढ़ा हुआ चिह्न करे अपठित चिह्न करे पिछले को पढ़ा हुआ चिह्न करे डाउनलोड बुकमार्क अध्याय अध्याय बुकमार्क हटाये हटाये पुस्तकालय अपडेट करें संपादित करें जोड़े श्रेणियाँ जोड़े श्रेणियाँ संपादित करें श्रेणियाँ का पुन:नामकरण श्रेणियां निर्धारित करें कवर संपादित करें ठहराव पिछला अध्याय अगला अध्याय फिर से कोशिश करे हटाए दुबारा आरम्भ करना ब्राउज़र में खोलें प्रदर्शन प्रणाली प्रदर्शन कॉम्पैक्ट ग्रिड सूची डाउनलोड किए गए अध्याय रद्द करें श्रेणी के अनुसार रखना स्थापित करें बाटे संरक्षित करे फिर से स्थापित करे पूर्ववत् करें लॉग खोले पुनःस्थापन करे लोड हो रहा है… ऐप उपलब्ध नहीं सामान्य पाठमाला डाउनलोड पदचिह्न विकसित संबंध में प्रति पंक्ति आइटम्स चित्र लैंडस्केप स्वचालित अद्यतन ऑफ़ हर ६ घंटे हर १२ घंटे हर रोज़ हर २ दिन साप्ताहिक समस्त स्वचालित अपडेट डिवाइस प्रतिबंध चार्ज होते समय पूरी की गई श्रृंखला पढ़ने के बाद प्रगति अपडेट करें डिफ़ॉल्ट श्रेणी हमेशा पूछे पूर्ण स्क्रीन चेतन पृष्ठ संक्रमण पृष्ठ संख्या दिखाएं किनारा कांटे अपनी पसंदीदा ब्राइटनेस पसंदीदा कलर फिल्टर स्क्रीन को चालू रखें पथ प्रदर्शन ध्वनि कुंजी ध्वनि कुंजी पलटे पीछे का रंग सफेद काला डिफ़ॉल्ट रीडिंग मोड बाएं से दाएं दाएं से बाएं सीधा लंबी पट्टी मापन प्ररूप उपयुक्त स्क्रीन खींचें चौड़ाई पर फ़िट ऊंचाई पर फ़िट मूल आकार चतुर फ़िट ज़ूम शुरू की स्थिति स्वचालित बाएं दाएँ मध्यविंदु नियमित आवर्तन मुक्त सीधे बंद मजबूर लैंडस्केप लाल हरा नीला पारदर्शिता \'पढ़ें\' के रूप में खुद से चिह्नित करने के बाद पढ़ने के बाद स्वचालित रूप से हटाएं बंद करें अंतिम पढ़ा अध्याय दूसरा से अंतिम पढ़ा गया अध्याय तीसरा से अंतिम पढ़ा गया अध्याय चौथे से अंतिम पढ़ा गया अध्याय पाचवे से अंतिम पढ़ा गया अध्याय नए अध्याय डाउनलोड करें सेवाएं बैकअप बनाये वर्तमान पुस्तकालय को पुनर्स्थापित करने के लिए उपयोग किया जा सकता है बैकअप पुनर्स्थापित करे बैकअप फ़ाइल से लाइब्रेरी पुनर्स्थापित करें बैकअप फ़्रीक्वेंसी बैकअप बनाया गया है पुनर्स्थापना पूर्ण हुआ आप बैकअप के लिए क्या चाहते हैं? बैकअप को पुनर्स्थापित करना बैकअप बनाना अध्याय कैश साफ़ करें उपयोग किया गया: %1$s कैश साफ़ किया गया %1$d फ़ाइलों को हटा दिया गया है साफ़ करने के दौरान त्रुटि हुई कुकीज़ को साफ़ करें कुकीज़ को साफ़ किया हुआ डेटाबेस साफ़ करें उन आइटम का इतिहास हटाएं जो आपकी पुस्तकालय में सहेजी नहीं गई हैं प्रविष्टियां हटाई गईं संस्करण क्रैश रिपोर्ट भेजें किसी भी बग को ठीक करने में मदद करता है कोई संवेदनशील डेटा नहीं भेजा जाएगा %1$s के लिए लॉगिन उपयोगकर्ता नाम पासवर्ड लॉग इन करें लॉग इन किया गया अज्ञात त्रुटि श्रेणी अपडेट कर रहा है कोई और परिणाम नहीं है स्थानीय स्रोत अन्य वैश्विक खोज … नवीनतम ब्राउज चल रही है अज्ञात लाइसेंस प्राप्त लाइब्रेरी से निकालें डाउनलोड किए गए अध्याय हटाएं? अध्याय %1$s डाउनलोड किया जा रहा है (%1$d/%2$d) त्रुटि रोके गए स्रोत शीर्षक अध्याय संख्या स्रोत से अध्याय संख्या से डाउनलोड अपठित क्या आप वाकई चयनित अध्यायों को हटाना चाहते हैं? पदचिह्न पठन समाप्त छोड़ दिया होल्ड पर पढ़ने की योजना स्कोर शीर्षक स्थिति इस नाम के साथ एक श्रेणी पहले से मौजूद है! श्रेणियाँ हटाई गयी यह इस अध्याय की पठन तिथि को निकाल देगा क्या आप निश्चित है? इस प्रविष्टि के लिए सभी अध्यायों को रीसेट करें पुस्तकालय में जोड़ें? चित्र सहेजा गया इच्छा अनुसार फिल्टर कवर के रूप में सेट करें कवर अपडेट किया गया पृष्ठ: %1$d अगले अध्याय नहीं मिला छवि को लोड नहीं किया जा सका कवर कला के रूप में इस छवि का उपयोग करें? अध्याय डाउनलोड नहीं कर सका। आप डाउनलोड अनुभाग में फिर से कोशिश कर सकते हैं नए अध्याय पाए गए कवर को अपडेट करने में विफल कृपया यह करने से पहले प्रविष्टि को पुस्तकालय में जोड़ें कवर छवि का चयन करें बैकअप फ़ाइल का चयन करें डाउनलोड कोई नया अद्यतन उपलब्ध नहीं है डाउनलोडिंग… अपडेट इंस्टॉल करने के लिए यहा टेप करें डाउनलोड त्रुटि नया संस्करण उपलब्ध है! कोई डाउनलोड नहीं है कोई हालिया अपडेट नहीं हाल ही में कुछ भी नहीं पढ़ा आपका पुस्तकालय खाली है़ें। स्रोतों से अपने पुस्तकालय में श्रृंखला जोड़ें आपके पास कोई श्रेणियां नहीं हैं। अपने पुस्तकालय के आयोजन के लिए एक बनाने के लिए प्लस बटन को दबाएं। डाउनलोडर त्रुटि अनपेक्षित त्रुटि के कारण अध्याय डाउनलोड नहीं किया जा सका कोई वाई-फ़ाई कनेक्शन उपलब्ध नहीं है कोई नेटवर्क कनेक्शन उपलब्ध नहीं है डाउनलोड रोक दिया है सामान्य प्रवास विस्तार विस्तार की जानकारी अद्यतन स्थापित करें अपूर्ण डाउनलोड कर रहा है स्थापना स्थापित भरोसा अविश्वस्त स्थापना रद्द करें अविश्वस्त एक्सटेंशन यह एक्सटेंशन एक अविश्वस्त प्रमाणपत्र के साथ हस्ताक्षरित हुआ था और सक्रिय नहीं हुआ था। \n \nदुर्भावनापूर्ण विस्तार, किसी भी लॉगिन क्रेडेंशियल्स को ताचियोमी में संग्रहीत या मनमाना कोड निष्पादित कर सकता है \n \nइस प्रमाणपत्र पर विश्वास करके आप इन जोखिमों को स्वीकार करते हैं। डबल टैप एनीमेशन गति कोई एनीमेशन नहीं साधारण तेज पुस्तकालय में जोड़ा गया लाइब्रेरी से निकाला गया क्लिपबोर्ड पर नकल: \n%1$s शामिल करने के लिए डेटा का चयन करें प्रवास नकल पृष्ठांकित स्रोत स्थापित नहीं है : %1$s फिर से पढाना स्थिति प्रकार समाप्त: प्रचलित: अगला: पिछला: कोई अगला अध्याय नहीं है कोई पिछला अध्याय नहीं है पेज लोड हो रहे है … पृष्ठों को लोड करने में विफल है: %1$s लंबे टैप पर क्रियाएँ दिखाएँ WebView में खोलें पढ़े हुए अध्यायों को छोड़ें रंग फिल्टर मिश्रण मोड ओवरले गुणा स्क्रीन चकमा/हल्का जल/गहरा मदद कोई परिणाम नहीं मिला से माइग्रेट करने के लिए एक स्रोत का चयन करें पिछली तरफ आगे की ओर रीफ़्रेश करें पुस्तकालय अप्रचलित यह एक्सटेंशन अब उपलब्ध नहीं है। यह अब शायद ठीक से काम न करे और मसला खड़ा करे। इसे अनइंस्टॉल करने की सलाह दी गई है। दिनांक स्वरूप वैश्विक अपडेट %1$s से लॉगआउट करें? लॉग आउट अब आप लॉग आउट है रोका हुआ अन्य नवीनतम अध्याय अध्याय देखें सब रद्द करो बंद चालू करे सिस्टम का पालन करें सूचनाओं का प्रबंधन सुरक्षा और गोपनीयता खोलने की आवश्यकता है निष्क्रिय होने पर लॉक करें हमेशा कभी नहीँ स्क्रीन सुरक्षित करें अपडेट लंबित हैं कटआउट क्षेत्र में सामग्री दिखाएं Cloudflare को बायपास करने में विफल बेहतर संगतता के लिए कृपया WebView ऐप को अपडेट करें अध्याय अद्यतन सुरक्षित स्क्रीन एप्लिकेशन स्विच करते समय एप्लिकेशन सामग्री छिपाता हैं और स्क्रीनशॉट ब्लॉक करता हैं प्रदर्शन अध्याय %1$s अध्याय %1$s और %2$d अधिक अध्याय %1$s अधिसूचना सामग्री छुपाएं बैटरी अनुकूलन को अक्षम करना पृष्ठभूमि पुस्तकालय अपडेट और बैकअप के साथ मदद करता है बैटरी अनुकूलन पहले से ही अक्षम है ईमेल पता हमेशा अध्याय संक्रमण दिखाएं मेन्यू नवीनतम सबसे पुराना शीर्ष पर ले जाएँ नीचे की ओर ले जाएं एक्सटेंशन अपडेट अद्यतन पुस्तकालय पठन फ़िल्टर किए गए अध्यायों को छोड़ें स्रोत पिन की गई साइड पैडिंग गैप के साथ लंबी पट्टी अनपिन पिन विलोम का चयन करें ट्रैकिंग जोड़ें पुस्तकालय में पुस्तकालय में जोड़ें कम अधिक ताचियोमी के लिए WebView आवश्यक है ओपन सोर्स लाइसेंस वेबसाइट केवल डाउनलोड किए गए अध्याय %1$s – %2$s बैकअप बहाल करने में विफल रहा बैकअप फेल पुनर्स्थापना रद्द की गई पुनर्स्थापना पहले से ही प्रगति पर है बैकअप पहले से ही प्रगति में है आखरी इस्त्तमाल किया गया अद्यतन के लिए जाँच स्थानीय स्रोत गाइड %1$02d मिनट, %2$02d सेकंड आपकी पुस्तकालय में सभी आइटम को फ़िल्टर करता है पढ़न मोड इस श्रृंखला के लिए ग्रे डिवाइस सेटिंग नहीं खोल सका ट्रैकिंग सेवाओं में अध्याय की प्रगति को अद्यतन करने के लिए एकतरफा सिंक। अपने ट्रैकिंग बटन से व्यक्तिगत प्रविष्टियों के लिए ट्रैकिंग सेट अप करें। रिफ्रेश पुस्तकालय मंगा कवर अपलोड तिथि द्वारा डेटा अनुपलब्ध स्रोत: बैकअप में कोई पुस्तकालय आइटम नहीं हैं। अमान्य बैकअप फ़ाइल: लाइब्रेरी को अपडेट करते समय नए कवर और विवरण की जांच करें मेटाडेटा को स्वचालित रूप से ताज़ा करें प्रवास टैब श्रेणी टैब दिखाएं आरामदायक ग्रिड कोई पृष्ठ नहीं मिला सभी को अक्षम करें सभी को सक्षम करें पाठक के खुलने पर संक्षेप में वर्तमान मोड दिखाएं रीडिंग मोड दिखाएं स्रोत नहीं मिला बंद करें प्रारंभ नेटवर्क दोनों शीर्ष से असंतत क्षैतिज कोई नहीं टैप ज़ोन उलटें अज्ञात स्थिति अज्ञात लेखक प्रभावी होने के लिए एप्लिकेशन पुनरारंभ की आवश्यकता होती है नया क्या है कम संग्रहण स्थान के कारण अध्याय डाउनलोड नहीं कर सके विश्व स्तर पर \"%1$s\" के लिए खोजें v%1$s तक अद्यतन पढ़न मोड थीम तारीख को जोड़ा गया कोई पिन किया हुआ सोर्स नही है पूर्ण प्रगती त्रुटियाँ ट्रैकर्स में लॉग इन नहीं किया गया: बुकमार्क किए गए अध्यायों को हटाने की अनुमति दें अध्यायों को हटाएं इसमें NSFW (18+) सामग्री हो सकती है 18+ यह अनौपचारिक या संभावित रूप से फ़्लैग किए गए एक्सटेंशन को ऐप के भीतर NSFW (18+) सामग्री के सामने आने से नहीं रोकता है। अपडेट किए गए डिफ़ॉल्ट अध्याय सेटिंग्स कोई अध्याय नहीं मिला डिफ़ॉल्ट के रूप में सेट करें मेरी पुस्तकालय में सभी एन्ट्री पर भी लागू करें क्या आप वाकई इन सेटिंग्स को डिफ़ॉल्ट के रूप में सहेजना चाहते हैं? अध्याय सेटिंग्स %1$s: %2$s, पृष्ठ %3$d डाउनलोड किए गए अध्याय पुस्तकालय से खोज सेंटिंग इतिहास पढ़ने से रोक देता है इंकॉग्निटो मोड इतिहास मिटा दें क्या आपको यकीन है? सारा इतिहास खो जाएगा। इतिहास हटाया गया अगला पृष्ठ पिछला पृष्ठ स्रोत माइग्रेशन गाइड स्रोतों और एक्सटेंशन सूचियों में दिखाएं NSFW (18+) स्रोत कोई फ़ाइल पिकर ऐप नहीं मिला कृपया फिर से MAL पर लॉगिन करें समाप्ति की तिथि आरंभ करने की तिथि डेवलपर्स के साथ साझा करने के लिए फ़ाइल में त्रुटि लॉग सहेजता है क्रैश लॉग शेयर करें टैप ज़ोन दाएं और बाएं धार किंडल-जैसे एल आकार अवरोही आरोही अध्याय संख्या से अपलोड तिथि से वस्तुओं की संख्या दिखाएं ट्रैक किए गए आपको किसी भी गायब एक्सटेंशनों को स्थापित करने की आवश्यकता हो सकती है और उन्हें उपयोग करने के लिए बाद में ट्रैकिंग सेवाओं में लॉग इन करना पड़ सकता है। यदि स्प्लिट वाइड पेजों का प्लेसमेंट पढ़ने की दिशा से मेल नहीं खाता है स्प्लिट पेज प्लेसमेंट को उल्टा करें चौड़े पृष्ठ को दो भागों में बांट दे अभी डाउनलोड करना शुरू करें विवरण देखने के लिए टैप करें इस श्रृंखला के लिए सभी रद्द करें स्थानीय स्रोत पूरा काला मोड़ टाको स्ट्रॉबेरी हरा सेब डायनेमिक एप थीम ऑटोमैटिक डाउनलोड योटसूबा यीन और यैंन्ग टील रूप कोई नहीं बहिष्कृत करें: %s बंद चालू उच्च टैबलेट यूआई टैप ज़ोन ओवरले दिखाएं कार्रवाई डिफॉल्ट स्रोत समर्थित नहीं है बहिष्कृत श्रेणियां ट्रैक एक्सटेंशन इंस्टॉल किया जा रहा है… इंस्टालर विरासत स्क्रॉल पर मेनू छिपाने की संवेदनशीलता उच्चतम कम निम्नतम प्रतिबंध: %s ऑटो पिछला अगला बाएं दाईं रोटेशन प्रकार सीधा परिदृश्य कुल आइटम मिडनाइट डस्क आज शामिल करें: %s ऐप की जानकारी शिज़ुकु नहीं चल रहा है उल्टी काला और सफेद आइटम के शीर्षक अनुसार फोल्डर बनाता है ट्रैकिंग गाइड उन्नत सेवाएं MIUI ऑप्टिमाइज़ेशन अक्षम होने पर बैकअप/पुनर्स्थापना ठीक से काम नहीं कर सकता है। पृष्ठभूमि गतिविधि कुछ निर्माताओं के पास अतिरिक्त ऐप प्रतिबंध हैं जो पृष्ठभूमि सेवाओं को मारते हैं। इस वेबसाइट में इसे ठीक करने के बारे में अधिक जानकारी है। अमान्य अध्याय प्रारूप के अनुसार ऑर्डर करें क्लिपबोर्ड पर कॉपी करने में विफल कवर पेज सहेजने में त्रुटि अपठित कोई मेल नहीं मिला आपके पास अभी तक कोई श्रेणी नहीं है। परिवर्तन की पुष्टि करने के लिए प्रमाणित करें अध्याय लाई की तिथि बहिष्कृत श्रेणियों की पुस्तकें अपडेट नहीं की जाएंगी, भले ही वे भी शामिल श्रेणियों में हों। शिज़ुकु को एक्सटेंशन इंस्टॉलर के रूप में उपयोग करने के लिए शिज़ुकु को इंस्टॉल और प्रारंभ करें। अनुवाद में मदद करें दिनांक कवर पृष्ठ पृष्ठों को अलग-अलग फ़ोल्डरों में सहेजें बहिष्कृत श्रेणियों की आइटम डाउनलोड नहीं की जाएंगी, भले ही वे शामिल श्रेणियों में भी हों। सिस्टम लॉग में वर्बोज़ लॉग प्रिंट करें (ऐप प्रदर्शन को कम करता है) ऐसी सेवाएँ जो विशिष्ट स्रोतों के लिए उन्नत सुविधाएँ प्रदान करती हैं। आपकी पुस्तकालय में जोड़े जाने पर आइटम को स्वचालित रूप से ट्रैक किया जाता है। HTTPS उपर DNS (DoH) वर्बोज़ लॉगिंग गुप्त मोड अक्षम करें अध्याय नहीं मिला कवर पेज सहेजा गया कवर पेज साझा करने में त्रुटि यह एंड्राइड संस्करण अब समर्थित नहीं है प्रारंभिक मार्गदर्शन रीडर खोले जाने पर थोड़ी देर दिखाएं सॉर्ट और डिस्प्ले के लिए प्रति-श्रेणी सेटिंग्स सभी अद्यतन करें चेतावनी भाषा आपको अन्य स्थानों पर भी बैकअप की प्रतियाँ रखनी चाहिए। चेतावनी: बड़े पैमाने पर डाउनलोड से स्रोत धीमे हो सकते हैं और/या %s को ब्लॉक कर सकते हैं। अधिक जानने के लिए टैप करें। बड़े अपडेट स्रोतों को नुकसान पहुंचाते हैं और इससे धीमे अपडेट हो सकते हैं, और बैटरी का उपयोग भी बढ़ सकता है। अधिक जानने के लिए टैप करें । ऐप अपडेट हर 3 दिन केवल वाई-फ़ाई पर डेटाबेस में %1$d गैर-पुस्तकालय आइटम ऐप लॉन्च पर चैप्टर कैशे साफ़ करें साफ़ करने के लिए कुछ नहीं है अपठित अध्याय हैं CBZ आर्कैव के रूप में सहेजें गोपनीयता नीति लाइब्रेरी अपडेट त्रुटियों को ठीक करने के तरीके पर सहायता के लिए, %1$s देखें एक्सटेंशन सूची प्राप्त करने में विफल रद्द किया गया अंतराल पर है प्रकाशन समाप्त अधिक जानकारी के लिए दबाए छोड़े गए क्योंकि श्रृंखला पूरी हो गई है छोड़ दिया गया क्योंकि वहाँ अपठित अध्याय हैं छोड़ दिया गया क्योंकि कोई अध्याय पढ़ा नहीं गया जो शुरू नहीं हुए हैं प्रविष्टि दिखाएँ केवल कवर ग्रिड अक्षम रिवर्स पोर्ट्रेट %1$d अपडेट विफल चौड़ी छवियां पैन करें ज़ूम लैंडस्केप इमेज श्रृंखला को शीर्ष पर ले जाएं कोई स्रोत नहीं मिला कोई स्थापित स्रोत नहीं मिला आखिरी आइटम अद्यतन अपठित गिनती WebView डेटा साफ हो गया गिटहब में खोलें चित्र सहेजने में त्रुटि लंबी डाउनलोड किए गए चित्रों के हिस्से करके पाठमाला के प्रदर्शन में सुधार लाता है पेज %d हिस्से करते वक्त नहीं मिला बंद करे WebView डाटा साफ करें चित्र %d का फ़ाइल पथ नहीं खोजा जा सका बैकअप करने के लिए कोई पुस्तकालय प्रविष्टि नहीं संस्करण भाषा आयु रेटिंग पठन सूची विश-लिस्ट लैवेंडर ऐप की भाषा श्रेणी हटाएँ कोई विवरण नहीं क्या आप %s कैटेगरी को हटाना चाहते हैं ? प्रति श्रृंखला रीडर सेटिंग्स को रीसेट करें सभी श्रृंखलाओं के रीडिंग मोड और ओरिएंटेशन को रीसेट करता है सभी रीडर सेटिंग्स रीसेट करें पाठक सेटिंग रीसेट नहीं की जा सकी पूरी सूची इनस्टॉल नहीं हुआ है अधूरी सूची खैर, यह अजीब है आंतरिक त्रुटि : अधिक जानकारी के लिए क्रैश लॉग की जाँच करें केवल अनमीटर्ड कनेक्शन पर पुस्तकालय पिछली बार अपडेट किया गया: %s अपनी हाल ही में अपडेट की गई पुस्तकालय एन्ट्री देखें केवल तभी काम करता है जब वर्तमान अध्याय + अगला पहले से ही डाउनलोड किया गया हो। कस्टम कवर चूक यूजर एजेंट स्ट्रिंग (User agent string) आगे डाउनलोड करें पढ़ते समय ऑटो डाउनलोड करे सब कुछ हटा दें लोकप्रिय टाइडल वेव्ह यूजर एजेंट स्ट्रिंग (User Agent String) खाली नहीं रखा जा सकता मल्टी क्या आपको यकीन है ? ऐप लॉक लागू होने पर विजेट उपलब्ध नहीं होता आप अपनी पुस्तकालय से \"%s\" को निकालने जा रहे हैं एक अपडेट पहले से चल रहा है अंतिम पढ़ा गया अध्याय खोलने में असमर्थ यूजर एजेंट स्ट्रिंग(User agent string) डिफॉल्ट रिसेट करें होल्ड लिस्ट में आंकड़े शुरू किए गए आइटम डाउनलोड किए गए क्लिपबोर्ड पर कॉपी करें खोजें… पढ़ना जारी रखने वाला बटन स्थानीय कोई भी प्रविष्टि खोलें डुप्लिकेट अध्याय छोड़ें अभी नहीं स्रोत, विस्तार, वैश्विक खोज अवैध स्थान: %s श्रेणी अपडेट करें थीम, दिनांक और समय प्रारूप स्वचालित डाउनलोड, आगे डाउनलोड करें नए अपडेट आइकन पर अपठित संख्या दिखाएं उपलब्ध है लेकिन स्रोत स्थापित नहीं है: %s पुस्तकालय में पहले से ही रही आइटम को छिपाएँ श्रेणियाँ, वैश्विक अपडेट, अध्याय स्वाइप फिट होने के लिए चौड़े पृष्ठों को घुमाएं मैनुअल और स्वचालित बैकअप ऐप लॉक, सुरक्षित स्क्रीन अंतराल निर्धारित करें अनुकूलित लाने का अंतराल अंतराल अध्यााय: दाएँ स्वाइप करें अगला अपेक्षित अपडेट डीबग जानकारी डंप क्रैश लॉग, बैटरी अनुकूलन अपेक्षित रिलीज़ अवधि से बाहर अध्यााय: बाएँ स्वाइप करें लाइब्रेरी सिंक पूरा डाउनलोड अनुक्रमणिका अमान्य ठीक है डाउनलोड फिर से अनुक्रमित करें क्लिपबोर्ड पर कॉपी हो गया है %s से भी हटा दें स्वत: अनियमित ट्रैकर के स्कोर चयनित डाउनलोड मिटाएँ स्कैनलेटर फिर भी जोड़ें लिंक की प्रतिलिपि करें ऊपर जाएं गैर चयनित अधिक विकल्प डेटा और स्टोरेज खोलना%s लागू करें सीरीज को नीचे ले जाएं ऑनबोर्डिंग मार्गदर्शक नमस्ते!आपका स्वागत है! आगामी डिफ़ॉल्ट पर वापस लौटें पहले कुछ चीजें सेट करते हैं। आप इन्हें बाद में सेटिंग्स में बदल भी सकते हैं। एक फ़ोल्डर चुनना अनिवार्य है पुराने संस्करण से अपडेट कर रहे हैं और नहीं समझ पा रहे कि क्या चुनें? अधिक जानकारी के लिए स्टोरेज गाइड देखें। संग्रहण मार्गदर्शिका व्यवहार एक अध्याय पढ़ने के बाद नया अध्याय प्राप्त करने के बाद डुप्लिकेट पढ़े गए अध्याय को पढ़ा हुआ मार्क करें टिप्पणियाँ टिप्पणियाँ संपादित करें हटाएँ क्या आप वाकई \"%s\" एक्सटेंशन को हटाना चाहते हैं? एक्सटेंशन हटाएँ? अवांचित अध्याय अगला शुरू करें छोड़ें एक फ़ोल्डर चुनें आपकी पुस्तकालय में एक समान नाम वाली प्रविष्टियाँ हैं।\n\nस्थानांतरित करने के लिए एक प्रविष्टि चुनें या फिर भी जोड़ें। %1$s अध्याय डाउनलोड, बैकअप और अन्य चीज़ों को संग्रहित करने के लिए एक फ़ोल्डर चुनें।\n\nएक समर्पित फ़ोल्डर उपयुक्त रहेगा।\n\nचयनित फ़ोल्डर: %2$s एक्सटेंशन स्थापित करने के लिए अनुमतियाँ आवश्यक हैं। अनुमति देने के लिए यहाँ टैप करें। दान करें अनुप्रयोग संस्थापित करने की अनुमति स्रोत विस्तार संस्थापित करने हेतु। अधिसूचना अनुमति पुस्तकालय अपडेट और बाकी की सूचनाएँ पाएँ। पृष्ठभूमि में बैटरी का उपयोग लंबे समय तक चलने वाले पुस्तकालय अपडेट, डाउनलोड और बैकअप बहाली में रुकावट से बचें। क्रैश लॉग भेजें डेवलपर्स को गुमनाम क्रैश लॉग भेजें। डाटा विश्लेषण की अनुमति दें ऐप की सुविधाएँ बेहतर करने के लिए गुमनाम उपयोग डेटा भेजें। अनुमति दें %s पर नए हैं? हम सुझाव देते हैं कि शुरुआत करने की गाइड देखें। %s को फिर से इंस्टॉल कर रहे हैं? पढ़ने का मोड, प्रदर्शन, मार्गदर्शन एक-तरफ़ा प्रगति सिंक, बेहतर सिंक कैटपुचिन एकवर्णी नॉर्ड सापेक्ष समय-चिह्न \"%2$s\" के बजाय \"%1$s\" मंगा विवरण में चित्र दिखाएँ सुरक्षा एनालिटिक्स और क्रैश लॉग्स क्रैश लॉग्स और एनालिटिक्स भेजने से हम समस्याएँ पहचानकर ठीक कर पाएँगे, प्रदर्शन सुधार पाएँगे, और भविष्य के अपडेट आपकी ज़रूरतों के अनुसार बना पाएँगे स्मार्ट अपडेट गुम हुए अध्याय के संकेत छुपाएँ विश्वसनीय अज्ञात एक्सटेंशन्स रद्द करें एक्सटेंशन रिपॉजिटरीज आपने कोई रिपॉ सेट नहीं किया है। रिपॉ जोड़ें रिपॉ URL %s में अतिरिक्त रिपॉज़ जोड़ें। यह एक URL होना चाहिए जो \"index.min.json\" पर समाप्त होता हो। यह रिपॉ पहले से मौजूद है! रिपॉ हटाएँ अमान्य रिपॉ URL क्या आप रिपॉ \"%s\" हटाना चाहते हैं? क्या आप रिपॉ \"%s\" जोड़ना चाहते हैं? ओपन सोर्स रिपॉ बदलें साइनिंग की फिंगरप्रिंट पहले से मौजूद है रिपॉजिटरी %1$s का साइनिंग की फिंगरप्रिंट %2$s के समान है।\nयदि यह अपेक्षित है, तो %2$s को बदला जाएगा, अन्यथा अपने रिपॉ मेंटेनर से संपर्क करें। घुमाए गए चौड़े पृष्ठों की ओरिएंटेशन उलटें दुबारा टैप करके ज़ूम करें पृष्ठ बदलने पर फ्लैश करें ई-इंक डिस्प्ले पर घोस्टिंग कम करता है फ्लैश की अवधि %1$s मिलीसेक हर बार फ्लैश करें के साथ फ्लैश करें काला सफ़ेद सफ़ेद और काला कस्टम हार्डवेयर बिटमैप सीमा डिफ़ॉल्ट (%d) यदि रीडर खाली छवि लोड करता है तो सीमा धीरे-धीरे कम करें।\nचयनित: %s लॉन्ग स्ट्रिप रीडर के लिए पुराना डिकोडर उपयोग करें प्रदर्शन को प्रभावित करता है। केवल तभी सक्षम करें जब बिटमैप सीमा कम करने से खाली छवि की समस्याएं ठीक न हों कस्टम डिस्प्ले प्रोफ़ाइल ज़ूम आउट अक्षम करें कोई स्टोरेज स्थान सेट नहीं किया गया है डाउनलोड डायरेक्टरी बनाने में विफल डायरेक्टरी बनाने में विफल: %s दोहरे पढ़े गए अध्याय डाउनलोड करना छोड़ें लंबी छवियों को विभाजित करें पढ़े गए के रूप में चिह्नित करते समय प्रगति अपडेट करें ट्रैकर लॉगिन स्टोरेज स्थान स्वचालित बैकअप, अध्याय डाउनलोड और स्थानीय स्रोत के लिए उपयोग किया जाता है। बनाएँ पूर्ण त्रुटि: JSON बैकअप समर्थित नहीं है बैकअप फ़ाइल भ्रष्ट हो गई है ऐप सेटिंग्स स्रोत सेटिंग्स एक्सटेंशन रिपॉजिटरीज संवेदनशील सेटिंग्स शामिल करें (जैसे, ट्रैकर लॉगिन टोकन) सभी पढ़ी गई प्रविष्टियाँ स्टोरेज अनुमति नहीं मिली है बैकअप फ़ाइल बनाने में असमर्थ अंतिम स्वचालित बैकअप: %s स्टोरेज उपयोग उपलब्ध: %1$s / कुल: %2$s निर्यात करें पुस्तकालय सूची पुस्तकालय निर्यातित हो गया पुस्तकालय सिंक हो रहा है अमान्य यूज़र एजेंट स्ट्रिंग ऐप को डाउनलोड किए गए अध्याय फिर से जांचने के लिए मजबूर करें आप डेटाबेस से प्रविष्टियाँ हटाने वाले हैं पढ़े गए अध्याय और गैर-पुस्तकालय प्रविष्टियों की प्रगति खो जाएगी पढ़े गए अध्याय वाली प्रविष्टियाँ रखें पुस्तकालय मंगा शीर्षक स्रोत से मेल खाने के लिए अपडेट करें चेतावनी: यदि किसी मंगा का नाम बदला जाता है, तो वह डाउनलोड कतार से हटा दिया जाएगा (यदि मौजूद हो)। F-Droid बिल्ड आधिकारिक तौर पर समर्थित नहीं हैं।\nअधिक जानने के लिए टैप करें। एक्सटेंशन के लिए पढ़ने के इतिहास को रोकें लॉगिन हो रहा है… ओवरले परिणाम हैं लेखक कलाकार अज्ञात शीर्षक संभावित डुप्लिकेट्स हर बार अनुमान लगाएं हर बार अपडेट करने के लिए सेट करें नए अध्याय लगभग %1$s में रिलीज़ होने की संभावना है, लगभग हर %2$s में जांच की जा रही है। यह मंगा या तो पूरा हो चुका है, या कोई अनुमानित रिलीज़ तारीख उपलब्ध नहीं है। जल्द ही कस्टम अपडेट आवृत्ति: स्कैनलेटर को बाहर करें कोई स्कैनलेटर नहीं मिला ट्रैकर्स को अध्याय %d तक अपडेट करें? ट्रैकर्स को अध्याय %d तक अपडेट किया गया निजी तौर पर ट्रैक किया गया निजी रूप से ट्रैक करें सार्वजनिक रूप से ट्रैक करें %1$s त्रुटि: %2$s तारीख हटाएं? यह आपके पहले चुने गए प्रारंभ तिथि %s को हटा देगा यह आपके पहले चुने गए समाप्ति तिथि %s को हटा देगा %s ट्रैकिंग हटाएं? यह ट्रैकिंग को स्थानीय रूप से हटा देगा। अभी अभी कभी नहीं आगामी अपडेट देखें आगामी मार्गदर्शिका अगला महीना पिछला महीना अरे! %s को एक अप्रत्याशित त्रुटि का सामना करना पड़ा। हम सुझाव देते हैं कि आप क्रैश लॉग्स हमारे Discord सपोर्ट चैनल में साझा करें। एप्लिकेशन पुनः प्रारंभ करें समीक्षा पूर्ण किए गए प्रविष्टियाँ पढ़ने का समय प्रविष्टियाँ वैश्विक अपडेट में कुल पढ़ा ट्रैकर्स ट्रैक की गई प्रविष्टियाँ औसत स्कोर प्रयुक्त लागू नहीं %dd %dh %dm %ds लाइब्रेरी अपडेट हो रही है… (%s) छोड़ दिया गया क्योंकि सीरीज़ को अपडेट की आवश्यकता नहीं है छोड़ दिया गया क्योंकि आज कोई रिलीज़ अपेक्षित नहीं थी स्थायी फ़ोल्डर एक्सेस प्राप्त करने में विफल। ऐप असामान्य रूप से काम कर सकता है। कोई फ़ाइल चयनित नहीं श्रेणी खाली है इस श्रेणी में कोई प्रविष्टियाँ नहीं मिलीं Cloudflare सहायता के लिए यहां टैप करें *आवश्यक डाउनलोड जांच रहे हैं HTTP %d, वेबसाइट WebView में जांचें इंटरनेट कनेक्शन नहीं है %s तक पहुँच नहीं पाया उस भाग का आनंद लिया जहाँ… चयनित उपलब्ध सभी चुनें कोई नहीं चुनें सक्षम स्रोत चुनें पिन किए गए स्रोत चुनें जारी रखें स्थानांतरित करने के लिए डेटा स्थानांतरण के बाद वर्तमान प्रविष्टि के डाउनलोड हटाएं अतिरिक्त कीवर्ड (वैकल्पिक) अतिरिक्त कीवर्ड जोड़कर खोज परिणामों को सीमित करने में मदद करता है मेल न खाने वाली प्रविष्टियाँ छुपाएं नए अध्याय नहीं वाले प्रविष्टियाँ छुपाएं केवल तब प्रविष्टि दिखाएं जब मैच में अतिरिक्त अध्याय हों ये विकल्प धीमे और जोखिम भरे हैं और स्रोतों से प्रतिबंधों का कारण बन सकते हैं उन्नत खोज मोड विस्तृत खोज के लिए शीर्षक को कीवर्ड में विभाजित करता है अध्याय संख्या के आधार पर मिलान करें यदि सक्षम है, तो सबसे आगे वाले मिलान को चुनता है। अन्यथा, स्रोत प्राथमिकता के अनुसार पहला मिलान चुनता है। स्थानांतरण स्थानांतरण (%1$d/%2$d) कॉपी स्थानांतरित कोई विकल्प नहीं मिला नवीनतम: %1$s अज्ञात मैन्युअल रूप से खोजें स्थानांतरित न करें अभी स्थानांतरित करें अभी कॉपी करें स्थानांतरण रोकें? रोकें रद्द करें कॉपी स्थानांतरण रद्द रद्द कोई अध्याय नहीं मिला, इस प्रविष्टि का उपयोग स्थानांतरण के लिए नहीं किया जा सकता ग़ैर-ASCII फ़ाइल नामों की अनुमति न दें यह उन स्टोरेज मीडिया के साथ संगतता सुनिश्चित करता है जो यूनिकोड का समर्थन नहीं करते, और सक्षम होने पर स्रोत व मंगा फ़ोल्डरों के गैर-ASCII अक्षरों को उनके छोटे अक्षरों वाले UTF-8 हेक्साडेसिमल रूप में मैन्युअली बदलना आवश्यक होता है, जबकि चैप्टर फ़ाइलों के नाम बदलने की आवश्यकता नहीं होती। टैब बंद करें एक साथ स्रोत डाउनलोड एक साथ पेज डाउनलोड प्रति स्रोत एक साथ डाउनलोड किए जाने वाले पृष्ठ ================================================ FILE: i18n/src/commonMain/moko-resources/hr/plurals.xml ================================================ Nakon %1$s minute Nakon %1$s minute Nakon %1$s minuta %d kategorija %d kategorije %d kategorija Poglavlja %1$s i još jedno Poglavlja %1$s i još %2$d Poglavlja %1$s i još %2$d Za %d unos Za %d unosa Za %d unosa %1$s preostalo %1$s preostala %1$s preostalih Dostupna je %d nova verzija proširenja Dostupne su %d nove verzije proširenja Dostupno je %d novih verzija proširenja %1$d novo poglavlje %1$d nova poglavlja %1$d novih poglavlja Obavljeno u %1$s s %2$s greškom Obavljeno u %1$s s %2$s greške Obavljeno u %1$s s %2$s grešaka %1$s poglavlje %1$s poglavlja %1$s poglavlja %d usluga praćenja %d usluge praćenja %d usluga praćenja Preskače se %d poglavlje. Ne postoji u izvoru ili je filtrirano Preskaču se %d poglavlja. Ne postoje u izvoru ili su filtrirana Preskače se %d poglavlja. Ne postoje u izvoru ili su filtrirana Jučer Prije %1$d dana Prije %1$d dana Sljedeće nepročitano poglavlje Sljedeća %d nepročitana poglavlja Sljedećih %d nepročitanih poglavlja Sljedeće poglavlje Sljedeća %d poglavlja Sljedećih %d poglavlja Nedostaje %1$s poglavlje Nedostaju %1$s poglavlja Nedostaje %1$s poglavlja %d dan %d dana %d dana %d repozitorij %d repozitorija %d repozitorija Sutra Za %1$d dana Za %1$d dana %1$s stranica %1$s stranice %1$s stranica Premjestiti %1$d unos? Premjestiti %1$d unosa? Premjestiti %1$d unosa? Kopirati %1$d unos? Kopirati %1$d unosa? Kopirati %1$d unosa? %1$d unos je preskočen %1$d unosa su preskočena %1$d unosa je preskočeno ================================================ FILE: i18n/src/commonMain/moko-resources/hr/strings.xml ================================================ Nikada Uvijek Cjeloekranski prikaz Ovo proširenje više nije dostupno. Možda neće ispravno funkcionirati i može izazvati probleme s aplikacijom. Preporučuje se deinstalirati proširenje. Zlonamjerno proširenje može pročitati sve spremljene podatke za prijavu ili izvršiti proizvoljni kod. \n \nVjerujući ovom certifikatu, prihvaćaš te rizike. Nepovjerljivo proširenje Deinstaliraj Nepovjerljivo Vjeruj Instalirano Instaliranje Preuzimanje Na čekanju Instaliraj Zastarjelo Aktualiziraj Aktualiziranja na čekanju Sve Uvijek pitaj Standardna kategorija Preskoči unose sa stanjem „Završeno“ Kad se puni Ograničenja uređaja za automatska aktualiziranja Tjedno Svaka 2 dana Dnevno Svakih 12 sati Svakih 6 sati Isključeno Automatska aktualiziranja Globalno aktualiziranje Polegnuti format Uspravni format Broj stavki po retku Prikaz Sakrij sadržaj obavijesti Siguran ekran skriva sadržaj aplikacije prilikom prebacivanja između aplikacija i blokira snimke ekrana Siguran ekran Zaključaj prilikom mirovanja Zahtijevaj otključavanje Sigurnost i privatnost Upravljaj obavijestima Format datuma Sustav Tamna Svijetla Informacije Napredno Praćenje Preuzimanja Čitač Biblioteka Opće Aplikacija nije dostupna Učitavanje … Osvježi Naprijed Natrag Poglavlja Kategorije Nemaš kategorija. Za stvaranje kategorije i organiziranje biblioteke dodirni gumb plus. Tvoja je biblioteka prazna Ništa nije nedavno čitano Nema nedavnih aktualiziranja Nema preuzimanja Pomoć Podaci proširenja Proširenja Premjesti Sigurnosna kopija i obnavljanje Izvori Povijest Aktualiziranja Biblioteka Popis preuzimanja Postavke Više Ime Obnovi Otvori zapisnik Poništi Obnovi Spremi Dijeli Instaliraj Premjesti na kraj Premjesti na vrh Najstarije Najnovije Razvrstaj Prekini sve Prekini Otkvači Prikvači Preuzeta poglavlja Popis Kompaktno Prikaz Modus prikaza Otvori u WebView Otvori u pregledniku Nastavi Ukloni Pokušaj ponovo Sljedeće poglavlje Prethodno poglavlje Pauziraj Pogledaj poglavlja Uredi naslovnicu Postavi kategorije Preimenuj kategoriju Uredi kategorije Dodaj kategoriju Dodaj Uredi Aktualiziraj biblioteku Izbriši Ukloni zabilješku poglavlja Zabilježi poglavlje Preuzmi Označi prethodno kao pročitano Označi kao nepročitano Označi kao pročitano Odaberi inverzno Odaberi sve Globalna pretraga Traži Najnovije poglavlje Zadnje čitano Ukupan broj poglavlja Abecednim redom Ukloni filtar Nepročitano Zabilježeno Filtar Izbornik Postavke Povijest Praćenje Unosi u biblioteci %1$02d min, %2$02d s Obnavljanje je završeno Sigurnosna kopija je stvorena Učestalost automatskog spremanja sigurnosnih kopija Obnovi biblioteku iz sigurnosne kopije Obnovi sigurnosnu kopiju Može se koristiti za obnavljanje trenutačne biblioteke Stvori sigurnosnu kopiju Usluge praćenja Aktualiziraj napredak nakon čitanja Preuzmi nova poglavlja Peto prije zadnjeg pročitanog poglavlja Četvrto prije zadnjeg pročitanog poglavlja Pretpredzadnje pročitano poglavlje Predzadnje pročitano poglavlje Zadnje pročitano poglavlje Deaktivirano Automatski izbriši nakon čitanja Nakon ručnog označivanja kao pročitano Odmak od ruba Čitanje Uvijek prikaži prijelaze između poglavlja Alpha Plava Zelena Crvena Zaključan polegnuti format Zaključan uspravni format Slobodno Standardno okretanje Brzo Normalno Bez animacije Sredina Desno Lijevo Automatski Početni položaj zumiranja Pametna prilagodba Izvorna veličina Prilagodi visinu Prilagodi širinu Rastegni Prilagodi ekranu Vrsta skaliranja Stranice Kontinuirano listanje s razmacima Kontinuirano listanje Stranica (okomito) Stranica (s desna na lijevo) Stranica (s lijeva na desno) Standardni modus čitanja Crna Siva Bijela Ostavi ekran uključen Potamni Posvijetli Ekran Pomnoži Prekrij Modus stapanja filtra boja Prilagođeni filtar boja Prilagođena svjetlina Odreži rubove Prikaži broj stranice Brzina animacije dvostrukim dodirom Animiraj prijelaze stranica Prikaži sadržaj u izrezanom području Boja pozadine Prikaži radnje pri dugom dodiru Preokreni tipke za glasnoću Tipke za glasnoću Navigacija Preskoči filtrirana poglavlja Preskoči pročitana poglavlja Dostupna je nova verzija! Greška pri preuzimanju Dodirni za instaliranje nove verzije Preuzimanje … Nema novih verzija Preuzmi Odaberi datoteku sigurnosne kopije Odaberi sliku naslovnice Prije toga, dodajte stavku u biblioteku Neuspjelo aktualiziranje naslovnice Poglavlja %1$s Poglavlje %1$s i još %2$d Poglavlje %1$s Pronađena su nova poglavlja Neuspjelo preuzimanje poglavlja. Pokušaj ponovo u odjeljku preuzimanja Kopiraj Premjesti Odaberi izvor iz kojeg se migrira Odaberi podatke koje želiš uključiti Pogl. %1$s – %2$s Aktualiziranje biblioteke Neuspjelo učitavanje stranica: %1$s Učitavanje stranica … Nema prethodnog poglavlja Nema sljedećeg poglavlja Prethodno: Sljedeće: Trenutačno: Završeno: Modus čitanja Za ovu seriju Ovu sliku koristiti kao naslovnicu? Nije bilo moguće učitati sliku Sljedeće poglavlje nije pronađeno Stranica: %1$d Naslovnica aktualizirana Postavi kao naslovnicu Prilagođeni filtar Slika spremljena Obnovi sva poglavlja za ovaj unos Ovo će ukloniti datum čitanja ovog poglavlja. Je li to stvarno želiš? Izbrisane kategorije Kategorija s ovim imenom već postoji! Vrsta Stanje Stanje Naslov Ocjena Ponovno čitanje Planiram čitati Zaustavljeno Na čekanju Ispušteno Završeno Čitanje Dodaj praćenje Praćenje Stvarno želiš izbrisati odabrana poglavlja? Nepročitano Preuzmi Po broju poglavlja Po izvoru Broj poglavlja Naslov izvora Zaustavljeno Greška Preuzimanje (%1$d/%2$d) Poglavlje %1$s Dodati u biblioteku? Izvor nije instaliran: %1$s Kopirano u međuspremnik: \n%1$s Izbrisati preuzeta poglavlja? Manje Više Uklonjeno iz biblioteke Dodano u biblioteku Ukloni iz biblioteke U biblioteci Dodaj u biblioteku Licencirano Nepoznato Nastavljajući Vodič za lokalni izvor Pregledaj Najnoviji Globalna pretraga … Označeni Zadnji korišteni Drugi Lokalni izvor Nema rezultata Nema daljnjih rezultata Ažuriranje kategorije Nepoznata greška Odjava uspjela Odjava Odjaviti se iz %1$s? Prijava uspjela Prijava Lozinka Adresa e-pošte Korisničko ime Prijavi se na %1$s Filtrira sve unose u biblioteci Samo preuzeto Pomaže pri ispravljanju grešaka. Ne šalju se nikoji privatni podaci Pošalji izvještaj o prekidu rad aplikacije Traži nove verzije Licence otvorenog koda Verzija Web-stranica Nije moguće otvoriti postavke uređaja Optimiranje baterije je već deaktivirano Pomaže pri aktualiziranju biblioteke i spremanju sigurnosnih kopija u pozadini Deaktiviraj optimiranje baterije Unosi su izbrisani Izbriši povijest za unose koji nisu spremljeni u biblioteci Isprazni bazu podataka Kolačići su izbrisani Ukloni kolačiće Došlo je do greške prilikom brisanja Predmemorija je izbrisana. Broj izbrisanih datoteka: %1$d Korišteno: %1$s Isprazni predmemoriju poglavlja Obnavljanje prekinuto Obnavljanje neuspjelo Obnavljanje sigurnosnom kopijom Obnavljanje je već u tijeku Sigurnosna kopija neuspjela Stvaranje sigurnosne kopije Što želiš spremiti kao sigurnosnu kopiju? Spremanje sigurnosne kopije je već u tijeku Neuspjelo zaobilaženje Cloudflare-a Za funkcioniranje aplikacije je potreban WebView Aktualiziranja proširenja Aktualiziranja poglavlja Opće Preuzimanje zaustavljeno Nema mrežne veze Nema Wi-Fi veze Poglavlje nije moguće preuzeti zbog neočekivane pogreške Greška Preuzimanja Za bolju kompatibilnost, aktualiziraj WebView Aktualiziraj naslovnice biblioteke Po datumu prijenosa Podaci Nedostaju izvori: Sigurnosna kopija ne sadrži unose u biblioteci. Neispravna datoteka sigurnosne kopije: Jednosmjerna sinkronizacija za aktualiziranje napretka poglavlja u eksternoj usluzi praćenja. Postavi praćenje pojedinačnih unosa manga putem gumba za praćenje. Provjeri nove naslovnice i pojedinosti prilikom aktualiziranja biblioteke Automatski osvježi metapodatke Premjesti Deaktiviraj sve Aktiviraj sve Nema stranica Kartice Nakratko prikaži trenutačni modus kad se čitač otvori Prikaži modus čitanja Prikaži kartice kategorija Mreža Pokreni Deaktiviraj Izvor nije pronađen Zahtijeva ponovno pokretanje aplikacije Umreženi rad Oboje Okomito Vodoravno Ništa Preokreni područja za dodirivanje Nepoznato stanje Nepoznat autor Aktualizirano na v%1$s Što je novo Neuspjelo preuzimanje poglavlja zbog nedovoljne memorije Traži „%1$s” globalno Modus čitanja Tema Datum dodavanja Nemaš označenih izvora Gotovo Napredak Greške Dozvoli brisanje zabilježenih poglavlja Izbriši poglavlja Izvori ovog proširenja mogu sadržavati neprikladan sadržaj (18+) 18+ Usluge praćenja bez prijave: To ne sprečava neslužbene ili potencijalno krivo označena proširenja prikazati neprikladan sadržaj (18+) unutar aplikacije. Nema poglavlja Standardne postavke poglavlja su aktualizirane %1$s: %2$s, %3$d. stranica Postavi kao standardno Također primijeni na sve unose u mojoj biblioteci Stvarno želiš spremiti ove postavke kao standardne? Postavke poglavlja Postavke pretrage Iz biblioteke Preuzeta poglavlja Anonimni modus Zaustavlja čitanje povijesti Izbriši povijest Sigurno? Izgubit ćeš svu povijest. Povijest je izbrisana Sljedeća stranica Prethodna stranica Vodič za migraciju izvora Izvori neprikladnog sadržaja (18+) Nije pronađena nijedna aplikacija za biranje datoteka Ponovo se prijavi na MAL Prikaži u popisu izvora i proširenja Datum kraja Datum početka Sprema zapise grešaka u datoteku za dijeljenje podataka s programerima Dijeli zapise prekida rada aplikacije Područja dodira Rub Kao Kindle U obliku slova L Silazno Uzlazno Po broju poglavlja Po datumu preuzimanja Praćeno Desno i lijevo Prikaži broj elemenata Možda ćeš morati instalirati sva nedostajuća proširenja i naknadno se prijaviti na usluge praćenja za njihovo korištenje. Ako se položaj rastavljenih širokih stranica ne podudara sa smjerom čitanja Obrni položaj rastavljene stranice Rastavi široke stranice Kratko prikaži kada je čitač otvoren Desno Lijevo Sljedeće Prethodno Prikaži raspored navigacije DNS preko HTTPS-a (DoH) Ništa Unosi u isključenim kategorijama neće se ažurirati čak i ako su također u uključenim kategorijama. Automatsko preuzimanje Isključi: %s Uključi: %s Unosi u isključenim kategorijama neće se aktualizirati čak i ako su u uključenim kategorijama. Datum preuzimanja poglavlja Dodirni za prikaz detalja Ove se Android verzija više ne podržava Kopiranje nije uspješno Polegnuti format Uspravni format Sive nijanse Deaktiviraj anonimni modus Okretanje Automatski Stvara mape na osnovi naslova unosa Spremi stranice u zasebne mape Radnje Prekini sve za ovu seriju Poglavlje nije pronađeno Nepročitano Lokalni izvor Greška tijekom dijeljenja naslovnice Greška tijekom spremanja naslovnice Naslovnica spremljena Još nemaš kategorija. Ništa nije pronađeno Izvor nije podržan Naslovnica Datum Redoslijed Nevažeći format poglavlja Vodič za praćenje Isključeno Uključeno Postavke kategorija za sortiranje Ograničenja: %s Pokreni preuzimanje sada Neki proizvođači imaju dodatna ograničenja za aplikaciju koja onemogućuju usluge u pozadini. Ova web-stranica sadrži daljnje informacije o tome kako to popraviti. Tako Ponoćni sumrak Zelena jabuka Dinamički Tema aplikacije Yotsuba Jin i Jang Invertirano Danas Potpuno crna tamna tema Daiquiri jagoda Izgled Vodič za pokretanje Ovjeri za potvrditi promjenu Standardno Spremanje sigurnosne kopije i obnavljanje možda neće ispravno raditi, ako MIUI optimizacija nije aktivirana. Pomogni prevoditi Ukupan broj unosa Jezik Upozorenje Shizuku ne radi Instaliraj i pokreni Shizuku za korištenje Shizukua kao instalacijskog programa za proširenja. Svaka 3 dana Aktualiziraj sve Instaliranje proširenja … Podaci aplikacije Samo putem Wi-Fi veze Upozorenje: velika skupna preuzimanja mogu dovesti do usporavanja izvora i/ili blokiranja %s. Za daljnje informacije dodirni. Plavozelena i tirkiz Broj unosa u bazi odataka koje nisu u zbirci: %1$d Opširno zapisivanje Ispiši opširan zapis u zapisnik sustava (smanjuje performanse aplikacije) Čuvaj sigurnosne kopije i na drugim mjestima. Sigurnosne kopije mogu sadržati osjetljive podatke uključujući sve spremljene lozinke; oprez pri dijeljenju podataka. Korisničko sučelje tableta Velika aktualiziranja štete izvorima i mogu usporiti aktualiziranja i povećati potrošnju baterije. Dodirni i saznaj više. Niska Aktivnost u pozadini Osjetljivost za skrivanje izbornika pri listanju Izbriši predmemoriju poglavlja tijekom pokretanja aplikacije Aktualiziranja aplikacije Nema se što raščistiti Preskoči unose s nepročitanim poglavljima Poboljšane usluge praćenja Pruža poboljšane značajke za određene izvore. Unosi se automatski prate kada se dodaju u biblioteku. Prati Politika privatnosti Neuspjelo preuzimanje dostupnih proširenja Instalacijski program Stari način Najviša Isključene kategorije Visoka Najniža Objavljivanje završeno Prekinuto Zaustavljeno Za pomoć o tome kako popraviti greške aktualiziranja biblioteke, pogledaj %1$s Spremi kao CBZ arhivu Prikaži unos Samo naslovnice Panoramski prikaz širokih slika Automatski zumiraj u široke slike Preskoči nepokrenute unose Preskočeno, jer je serija kompletna Preskočeno, jer nijedno poglavlje nije pročitano Preskočeno, jer postoje nepročitana poglavlja Nauspjela aktualiziranja: %1$d Dodirni za daljnje informacije Preokreni uspravni format Premjesti seriju na vrh Deaktivirano Nema unosa u biblioteci za spremanje u sigurnosnu kopiju Poboljšava performanse čitača Potpun popis WebView podaci su izbrisani Izbriši WebView podatke Popis čitanja Popis želja Na popisu čekanja Popis nedovršenih Stranica %d nije pronađena tijekom rastavljanja Radi samo ako je trenutačno i sljedeće poglavlje već preuzeto. Zadnja provjera aktualiziranja Samo na mrežom bez ograničenja Broj nepročitanih Izbriši kategoriju Želiš li izbrisati kategoriju „%s”? Automatski preuzmi tijekom čitanja Interna greška: Provjeri zapisnike o prekidu aplikacije za daljnje informacije Jezik aplikacije Zatvori Ukloni sve Lavanda Jezik Verzija Popularni Dobna granica Preuzmi unaprijed Višejezičnost Dozvole za spremište nisu odobrena Tsunami Nevažeće mjesto: %s Zapisnici iznenadnog gašenja aplikacije, optimizacije baterije Započeto Lokalno Traži … Kategorije, globalno aktualiziranje, prelistavanje poglavlja Ručne i automatske sigurnosne kopije, količina spremišta Statistike Preuzeto Gumb za nastavljanje čitanja Tema, format datuma i vremena Izvori, ekstenzije, globalno pretraživanje Modus čitanja, prikaz, navigacija Automatsko preuzimanje, preuzimanje unaprijed Zaključavanje aplikacije, siguran zaslon Jednosmjerna sinkronizacija napretka, poboljšana sinkronizacija Otvori nasumični unos Obnovi standardni izraz korisničkog agenta Nevažeći niz korisničkog agenta Prisili aplikaciju da ponovno provjeri preuzeta poglavlja Standardni niz korisničkog agenta Niz korisničkog agenta ne može biti prazan Ponovo indeksiraj preuzimanja Obnovi postavke čitača serija Nije moguće otvoriti zadnje čitano poglavlje Prilagođena naslovnica Nema opisa Unosi Globalno aktualiziranje Usluge praćenja Srednja ocjena Korišteno %dd %ds Pa, ovo je nezgodno Nepoznat naslov Zadnje aktualiziranje biblioteke: %s Sigurno? Neočekivana greška u aplikaciji %s. Predlažemo da podijeliš zapis o prekidu rada aplikacije u našem kanalu za podršku na Discordu. Pregled Dovršene stavke Trajanje čitanja Ukupno Pročitano Praćeni unosi -- %dh %dm Izvor nije pronađen Jedno aktualiziranje je već u tijeku Neuspjelo obnavljanje postavki čitača Sve postavke čitača su obnovljene Ukloniti datum? Time ćete ukloniti prethodno odabrani datum početka iz %s Time ćete ukloniti prethodno odabrani datum završetka iz %s Nije pronađen instalirani izvor Obnavlja modus čitanja i položaj svih serija Pogreška pri spremanju slike Ponovno pokretanje aplikacije Ups! Nije instalirano Upravo sada F-Droid verzije nisu službeno podržane. \nDodirnite da biste saznali više. Provjeravanje preuzimanja Otvori na GitHubu Preskočeno jer serija ne zahtijeva aktualiziranja Pogledaj nedavno aktualizirane unose u biblioteci Uklonit ćeš „%s” iz svoje biblioteke Widget nije dostupan kada je zaključavanje aplikacije aktivirano Nije pronađen nijedan unos u ovoj kategoriji Nije moguće pronaći putanju datoteke stranice %d Ne sada Prikaži broj nepročitanih na ikoni aktualiziranja Kategorija je prazna Kopirano u međuspremnik Dostupne, ali izvor nije instaliran: %s Preskoči dupla poglavlja %1$s greška: %2$s *obavezno Sakrij unose koji se već nalaze u biblioteci Kopiraj u međuspremnik Aktualiziraj katogoriju Rastavi visoke slike Oznake Prilagodi prikaz širokih stranica okretanjem Preokreni položaj širokih stranica Informacije o otklanjanju grešaka Poglavlje pri povlačenju ulijevo Dodirni dvaput za zumiranje Poglavlje pri povlačenju udesno Postavi interval Prilagođeni interval aktualiziranja Procijeni svakih Sljedeće očekivano aktualiziranje Postavi aktualiziranje svakih U redu Predvidi vrijeme sljedećeg izdanja Intervali Ukloniti praćenje %s? Preskočeno, jer se danas nije očekivalo izdanje Ovo će ukloniti lokalno praćenje. Također ukloni iz %s Izbriši preuzete Ima rezultate Sinkroniziranje biblioteke Sinkroniziranje biblioteke završeno Dodirni ovdje za pomoć s Cloudflareom Prijava za uslugu praćenja Ponovno stvaranje indeksa preuzimanja Nije bilo moguće stvoriti datoteku sigurnosne kopije Otključaj %s Ne postoji veza s internetom HTTP %d, provjeri web stranicu u WebView Nije bilo moguće povezati se s računalom %s Premjesti seriju na kraj Relativne vremenske oznake „%1$s” umjesto „%2$s” Aktualiziranje biblioteke … (%s) Nije odabrana nijedna datoteka Postavke izvora Postavke aplikacije Podaci i spremište Nikada Smanjuje artefakte na ekranima s e-tintom Zadnja automatska sigurnosna kopija: %s Zabljesni prilikom listanja Stvori Primijeni Obnovi standardne vrijednosti Nije pronađen nijedan amaterski prevoditelj Amaterski prevoditelj Korištenje spremišta Rezultat tragača Isključi amaterske prevoditelje Mjesto spremišta Koristi se za automatske sigurnosne kopije, preuzimanje poglavlja i lokalni izvor. Više opcija Odabrano Neodabrano Navigiraj prema gore Odaberi mapu Započni Moraš odabrati jednu mapu Dozvola za obavijesti Dozvola za instaliranje aplikacija Preskoči Dalje Za instaliranje izvornih proširenja. Primaj obavijesti o aktualiziranju biblioteke i više. Odobri Dobro došao, dobro došla! Vodič za početno pokretanje Koristiš %s po prvi puta? Preporučujemo da pogledaš vodič za pokretanje. Ponovo istalirati %s? Izbjegni prekide pri dugotrajnim aktualiziranjima biblioteke, preuzimanjima i obnavljanja sigurnosnih kopija. Upotreba baterije u pozadini Hajdemo najprije postaviti neke stvari. Ako želiš možeš ih kasnije promijeniti u postavkama. Nije postavljeno mjesto spremišta Odaberi mapu u koju će %1$s spremati preuzimanja poglavlja, sigurnosne kopije i drugo. \n \nPreporučujemo koristiti zasebnu mapu. \n \nOdabrana mapa: %2$s Nord Za instaliranje proširenja su potrebne dozvole. Dodirni ovdje za odobrenje. Potpuna greška: Repozitoriji proširenja Nemaš postavljenih reopzitorija. Aktualiziraš sa starije verzije i ne znaš što odabrati? Potraži informacije u vodiču spremišta. Vodič spremišta Ovaj repozitorij već postoji! Prilagođena učestalost aktualiziranja: Pametno aktualiziranje Dodaj repozitorij Izbriši repozitorij URL repozitorija Dodaj dodatne repozitorije u %s. To bi trebao biti URL koji završava s „index.min.json”. Neispravan URL repozitorija Opozovi pouzdana nepoznata proširenja Želiš li izbrisati repozitorij „%s”? Otvori repozitorij izvora Uključi osjetljive postavke (kao što su tokeni za prijavu za usluge praćenja) Predviđa se da će nova poglavlja biti izdana za oko %1$s, provjera se svakih %2$s. Uskoro Dostupno: %1$s / Ukupno: %2$s Deaktiviraj smanjivanje zumiranja Prilagođeni profil prikaza Predstojeći Svejedno dodaj Prethodni mjesec Zamijeni Sljedeći mjesec Pogledaj nadolazeća aktualizirane verzije Vodič za nadolazeće verzije Digitalni otisak prsta za potpisivanje već postoji Repozitorij %1$s ima isti digitalni otisak ključa za potpisivanje kao %2$s. \nAko se to očekuje, %2$s će se zamijeniti, u suprotnom se obrati svom održavatelju repozitorija. Neuspjelo dobivanje trajnog pristupa mapi. Aplikacija se može ponašati neočekivano. Kopiraj poveznicu Trajanje bljeskalice %1$s ms Zabljesni sa Crna Bijela i crna Zabljesni svakih Bijela Preskoči preuzimanje duplih pročitanih poglavlja JSON sigurnosna kopija nije podržana Repozitoriji proširenja Ovaj je manga dovršen ili ne postoji procijenjeni datum izdanja. Sigurnosna kopija je pokvarena Svi pročitani unosi Nasumce Pošalji zapis o prekidu aplikacije Šalji anonimne zapise o prekidu aplikacije programerima. Dozvoli analizu Šalji anonimne podatke o korištenju aplikacije u svrhu poboljšanja njenih funkcija. Analiza i zapisi o prekidima aplikacije Slanje zapisa o prekidima rada aplikacije i analitike omogućit će nam identificirati i riješiti probleme, poboljšati performancu i prilagoditi buduća aktualiziranja kako bi što bolje odgovarala tvojim potrebama Aktualiziraj napredak kada je označen kao pročitan Aktualizirati praćenja na poglavlje %d? Praćenja aktualizirana na poglavlje %d Sigurnost Ukloni Ukloniti proširenje? Stvarno želiš ukloniti proširenje „%s”? Želiš li dodati repozitorij „%s”? Ako čitač učita praznu sliku, postupno smanji prag.\nOdabrano: %s Prilagođeni hardverski prag bitmapa Standardno (%d) Utječe na performansu. Aktiviraj samo ako smanjenje praga bitmapa ne riješi probleme s praznim slikama Automatski Nepročitana poglavlja Bilješke Uredi bilješke Catppuccin Jednobojno Stvaranje direktorija za preuzimanje nije uspjelo Stvaranje direktorija nije uspjelo: %s Izvezi Popis biblioteka Biblioteka je izvezena Ponašanje Označi duplo pročitano poglavlje kao pročitano Nakon čitanja poglavlja Nakon dohvaćanja novog poglavlja Sakrij indikatore nedostajućih poglavlja Koristi zastarjeli dekoder za čitač kontinuiranog listanja Uklonit ćeš unose iz baze podataka Izgubit će se pročitana poglavlja i napredak unosa koji se ne nalaze u biblioteci Zadrži unose s pročitanim poglavljima Aktualiziraj naslove manga iz biblioteke kako bi odgovarali izvoru Upozorenje: ako se manga preimenuje, uklonit će se iz popisa za preuzimanje (ako postoji). Pauziraj povijest čitanja za proširenje Prijava u tijeku … Autor Ilustrator Mogući duplikati U tvojoj biblioteci imaš unose sa sličnim imenom.\n\nOdaberi unos za premještanje ili dodavanje. Privatno praćeno Prati privatno Prati javno Sviđa mi se dio, gdje … Odabrano Dostupno Odaberi sve Odaberi ništa Premještanje Premještanje (%1$d/%2$d) Kopiraj Kopiraj Premjesti Premjesti Traži ručno Nemoj premjestiti Premjesti sada Kopiraj sada Zaustaviti premještanje? Zaustavi Prekini Prekini Prekini Nije pronađena nijedna alternativa Odaberi aktivirane izvore Odaberi prikvačene izvore Nastavi Podaci za premještanje Izbriši preuzimanja trenutačnog unosa nakon premještanja Dodatne ključne riječi (opcionalno) Pomaže smanjiti broj rezultata pretrage dodavanjem dodatnih ključnih riječi Sakrij unose bez podudaranja Sakrij unose bez novijih poglavlja Prikaži unos samo ako podudaranje ima dodatna poglavlja Ove su opcije spore i opasne te mogu dovesti do ograničenja od strane izvora Napredni način pretraživanja Rastavlja naslov na ključne riječi za širu pretragu Podudaranje na temelju broja poglavlja Ako je aktivirano, bira se najudaljeniji rezultat. U suprotnom se bira prvi rezultat prema prioritetu izvora. Najnovije: %1$s Nepoznato Nije pronađeno nijedno poglavlje. Ovaj se unos ne može koristiti za premještanje Doniraj Iscrtaj slike u opisima manga Zabrani imena datoteka koji nisu u ASCII formatu Osigurava kompatibilnost s određenim medijima za spremanje podataka koji ne podržavaju Unicode. Kada je ova opcija aktivirana, morat ćeš ručno preimenovati izvor i mape s mangama zamjenjivanjem znakova koji nisu ASCII s njihovim UTF-8 heksadecimalnim vrijednostima (u malim slovima). Datoteke poglavlja se ne moraju preimenovati. Istovremena preuzimanja izvora Istovremena preuzimanja stranica Istovremeno preuzete stranice po izvoru Zatvori karticu Izračunavanje … Filtriraj isključene amaterske prevoditelje Zabilježeno ================================================ FILE: i18n/src/commonMain/moko-resources/hu/plurals.xml ================================================ Egy új bővítményfrissítés érhető el %d bővítményfrissítés érhető el %1$s perc múlva %1$s perc múlva %d kategória %d kategória %1$s fejezet %1$s fejezet 1 új fejezet %1$d új fejezet Tegnap %1$d napja %d nyilvántartó %d nyilvántartó %d elemnek %d elemnek %d fejezet kihagyása, hiányzik a forrás, vagy ki lett szűrve %d fejezet kihagyása, hiányoznak a források, vagy ki lettek szűrve %1$s van hátra %1$s van hátra Befejezve %1$s alatt, %2$s hibával Befejezve %1$s alatt, %2$s hibával %1$s fejezet és még 1 %1$s fejezet és még %2$d Következő olvasatlan fejezet Következő %d olvasatlan fejezet Következő fejezet Következő %d fejezet %1$s fejezet hiányzik %1$s fejezet hiányzik 1 nap %d nap Holnap %1$d nap múlva %d repo %d repok 1 oldal %1$s oldal ================================================ FILE: i18n/src/commonMain/moko-resources/hu/strings.xml ================================================ Név Kategóriák Könyvtári elemek Fejezetek Nyilvántartás Előzmények Beállítások Előzmények Biztonsági mentés és visszaállítás Beállítások Keresés Eltávolítás Megnyitás böngészőben Szűk rács Lista Telepítés Megosztás Mentés Visszaállítás Visszavonás Betöltés… Általános Olvasó Letöltések Nyilvántartás Speciális Névjegy Elemek soronként Álló Fekvő Frissítések gyakorisága Ki 6 óránként 12 óránként Naponta 2 naponta Hetente Összes Frissítések korlátozása Töltés közben \"Befejezett\" állapotú elemek kihagyása Alapértelmezett kategória Mindig kérdezzen rá Teljes képernyő Oldalszám megjelenítése Képernyő bekapcsolva tartása Lapozás Hangerőszabályzó gombokkal Gombok felcserélése Háttérszín Verzió Összeomlás-jelentések küldése Befejezett Eldobva Tervezett Értékelés Cím Állapot %1$d. oldal Nem található a következő fejezet A hálózat nem érhető el Letöltési sor Könyvtár Frissítések Szűrők Könyvjelzőzve Olvasatlan Szűrők eltávolítása Betűrendben Fejezetek száma Legutóbb olvasott Globális keresés Olvasottnak jelölés Olvasatlannak jelölés Előző olvasottnak jelölése Letöltés Fejezet könyvjelzőzése Fejezet eltávolítása a könyvjelzők közül Törlés Könyvtár frissítése Szerkesztés Hozzáadás Kategória hozzáadása Kategóriák szerkesztése Kategória átnevezése Kategóriák beállítása Borító szerkesztése Szüneteltetés Előző fejezet Következő fejezet Újra Folytatás Megjelenítési mód Megjelenés Rendezés Összes kijelölése Mégse Napló megnyitása Visszaállítás Az app nem elérhető Olvasás után a fejezetek haladásának frissítése Áttűnés lapozáskor Szegélyek vágása Egyéni fényerő Egyéni színprofil Fehér Fekete Alapértelmezett olvasás mód Lapozott (balról jobbra) Lapozott (jobbról balra) Lapozott (függőlegesen) Hosszú szalag Képernyőhöz igazítás Áttelepítés Bővítmények Nem megbízható Eltávolítás Bővítmény információ Frissítés Telepítés Függőben Letöltés Telepítés Telepítve Megnyitás WebView-ben Segítség Csak letöltött Több Források Dátum formátum Sötét Világos Könyvtár Frissítés Előre Vissza Legrégebbi Legújabb Legújabb fejezet Letöltött fejezetek Áttelepítés Kezdés Fejezetek megtekintése Összes kikapcsolása Összes engedélyezése Kiválasztás megfordítása Menü A könyvtárad üres Nincs új frissítés Nincs letöltés folyamatban Bővítményfrissítések Fejezetfrissítések Gyakori Letöltés szüneteltetve Nincs Wi-Fi kapcsolat Egy váratlan hiba miatt nem sikerült letölteni a fejezetet Hiba A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást Új verzió érhető el! Letöltési hiba Érints meg a telepítéshez E-mail-cím NSFW (18+) források Fejezetszám Eredeti méret Utoljára olvasott fejezet Soha Bejelentkezés Több Kevesebb Értesítés tartalmának elrejtése Az alkalmazás tartalmának elrejtése az alkalmazások közötti váltáskor és a képernyőképek készítésének blokkolása Mindig Biztonság Értesítések kezelése Rendszer Téma Ugrás legalulra Ugrás legfelülre Keresési beállítások Hozzáadás dátuma Nem megbízható bővítmény Elavult Függőben lévő frissítések Új borító és részletek keresése a könyvtár frissítésekor Metaadatokat frissítse automatikusan Minden frissítése Megjelenés Ez nem akadályozza meg a nem hivatalos vagy az esetlegesen helytelenül megjelölt bővítményeket a 18+-os tartalmak megjelenítésétől az alkalmazáson belül. Megjelenítés a forrás- és kiterjesztéseklistában Rövid ideig mutassa a jelenlegi módot az olvasó megnyitásakor Olvasó mód mutatása Tartalmazhat felnőtt (18+) tartalmat 18+ Ez a bővítmény nem elérhető többé. Előfordulhat, hogy nem működik megfelelően, és problémákat okozhat az alkalmazásban. Az eltávolítása javasolt. Könyvtárhoz adás Ismeretlen állapot Ismeretlen szerző Ismeretlen Bejelentkezve Eltávolítás a könyvtárból Könyvtárban Olvasás Adat Biztonsági mentés létrehozva Nincsenek kategóriái. Érintse meg a plusz gombot, hogy létrehozzon egyet a könyvtára rendezéséhez. Kitűzött Egyéb Nyilvántartás Vágólapra másolva: \n%1$s Törli a kijelölt fejezeteket? Előző oldal Hiba Weboldal Frissítések keresése Nyílt forráskódú licenc Lapok Manga a könyvtárból Előző %1$s. fejezet Borító frissítve Beállítás borítóként Egyedi szűrő Eltávolítva a könyvtárból Könyvtárhoz adva Következő oldal Hibák Befejezve Előrehaladás Központ Jobb Bal Mindkettő Függőleges Vízszintes Semmit nem olvasott a közelmúltban Jobb Bal Következő Jobb és bal Másolás Áttelepítés %1$s. fejezet A Mihon működéséhez WebView szükséges %1$s fejezet %1$s. fejezet és további %2$d %1$s:%2$s, %3$d. oldal Újraolvasás Biztosan törölni akarja a kijelölt fejezeteket? Olvasatlan Szünetel Manga könyvtárhoz adása? Forrás nincs telepítve: %1$s Folyamatban van Utoljára használt Letöltött fejezetek Kategóriák frissítése Ismeretlen hiba Mostmár ki van jelentkezve Kijelentkezés Jelszó Felhasználónév Sütik törölve A változtatások érvénybe lépéséhez újra kell indítania az applikációt Érvénytelen biztonsági mentési fájl: Él Könyvtár frissítése Nem található fejezet Licenszelt Egy rosszindulatú bővítmény hozzáférhet a tárolt bejelentkezési adatokhoz, vagy tetszőleges kódot futtathat. \n \nHa megbízik ebben a bővítményben, elfogadja ezeket a kockázatokat. Bizalom Tiltott: %s Kedvelt: %s Semmi Elemek a tiltott kategóriákban nem lesznek letöltve, még akkor se, ha a kedvelt kategóriában is vannak. Elemek a tiltott kategóriákban nem lesznek frissítve, még akkor se, ha a kedvelt kategóriákban is vannak. Biztonságos képernyő Zárás tétlen állapotban Biometrikus zár Hibák mutatása Kijelentkezel a következőből: %1$s? Böngészés Csökkenő Növekvő Fejezet száma szerint Feltöltési idő szerint Mégse az összesre a sorozatból Mégse az összesre Tűzés visszavonása Kitűzés Kikapcsolás Tárgyak számának mutatása Kategória fülek mutatása Kényelmes rács Lekérési dátum Korlátozások: %s Tartalom mutatása a levágott területen Ha a szétvágott oldalak elhelyezése nem egyezik az olvasás irányával Szétvágott oldalak elhelyezésének fordítása Szétvágása a széles oldalaknak Pillanatnyilag megjelníti, amikor az olvasó meg van nyitva Érintési zónák átfedésének mutatása Alkalmazás információ Kategóriakénti beállítások rendezéshez Polip Eper koktél Ma Teljesen fekete sötét mód Yotsuba Jin és Jang Cián-zöld és türkiz Éjfél szürkület Zöldalma Dinamikus Alkalmazás témája Kinézet Letöltés elkezdése most Helyi forrás Nyilvántartva Hitelesítsd magad a változtatás elfogadásához Alapértelmezett Szolgáltatások Nyilvántartási útmutató Új fejezetek letöltése Automatikus letöltés Ötödik utoljára olvasott fejezet Negyedik utoljára olvasott fejezet Harmadik utoljára olvasott fejezet Második utoljára olvasott fejezet Kikapcsolva Tiltott kategóriák Könyvjelzőzött fejezetek törlésének engedélyezése Automatikus törlés olvasás után Olvasottnak jelölés után Fejezetek törlése Legalacsonyabb Alacsony Magas Legmagasabb Görgetés közbeni menü-elrejtés érzékenysége Bélés oldalon Olvasási mód Mindig mutasson fejezet áttűnést Áttetszőség Kék Zöld Piros Lezárt fekvő Lezárt álló Fekvő Álló Szabad Forgatás típus Alapértelmezett forgatás típus Gyors Normál Nincs animáció Automatikus Nagyítás kezdő pozíciója Okos igazítás Magassághoz igazítás Szélességhez igazítás Kiterjesztés Kindle-féle L alakú Skálázási típus Érintési zónák Lapozott Hosszú szalag lyukakkal Automatikus Szürke Mappák létrehozása elemek címe szerint Mentse a lapokat külön mappákba Cselekmények mutatása hosszú koppintáskor Műveletek Egyik sem Érintési zónák fordítása Szűrt fejezetek kihagyása Olvasottnak jelölt fejezetek átugrása Égetés / Sötétítés Fakítás / Világosítás Szendvicsnegatív Szendvicspozitív Átfedés Színprofil keverés módja Fordított Szürkeárnyalatos Ki Be Dupla koppintás animációjának sebessége Telepítő Bővítmény telepítése… Összes elem Az összes frissítése Nyelv Telepítsd és indítsd el a Shizukut, hogy kiegészítő telepítőként használd. Továbbfejlesztett szolgáltatások Figyelmeztetés A Shizuku nem fut Régi Egyirányú szinkronizálás, hogy a fejezetben való előrehaladás frissítve legyen a követési szolgáltatásokban. Állíts be követést egyéni elemekre, a követés gomb lenyomásával. 3 naponta Csak Wi-Fi-n keresztül A biztonsági mentésekről más helyeken is érdemes másolatokat tartani. A biztonsági mentések érzékeny adatokat tartalmazhatnak, beleértve a tárolt jelszavakat is; legyen óvatos a megosztáskor. Nincs könyvtári elem, amit menteni lehetne Helyi forrás Legújabb Dátum Biztos benne? Minden előzmény elvész. Kategória törlése Alkalmazás nyelve Olvasatlan Beállítás alapértelmezettként Tablet mód Lista elejére Globális keresés erre: \"%1$s\" Nincs több találat Nincs találat Globális keresés… Feltöltési dátum szerint Ez eltávolítja a fejezet olvasási dátumát. Biztos benne? Olvasatlan fejezet(ek)et tartalmazó elemek kihagyása Törölni akarja a %s kategóriát ? InternalError: Nézze meg a hibaüzenetet további információért Csak korlátlan hálózatokon Mit tartalmazzon a biztonsági mentés? Biztonsági mentés/helyreállítás nem biztos,hogy működik ha a MIUI Optimalizáció ki van kapcsolva. Helyreállítás folyamatban van Felhasznált: %1$s Adatbázis törlése Nem könyvtári elemek előzményeinek törlése %1$d nem könyvtári manga az adatbázisban Fejezet gyorsítótárának törlése kilépéskor Helytelen fejezet formátum Hálózat Nem lehetett a fejezeteket letölteni. Próbálja újra a letöltések menüpontban Válaszon ki egy forrást, ahonnan importálni szeretne Nem lehetett letölteni kevés tárhely miatt Biztonsági mentés létrehozása Biztonsági mentés sikertelen Sütik törlése Gyorsítótár törölve: %1$d fájl lett törölve Hiba történt törlés közben Nem található fájl választó alkalmazás Nincsenek még kategóriáid. Nem sikerült megkerülni a Cloudflare-t Automatikusan nagyítsa a széles képeket Helyreállítás befejeződött %1$02d perc, %2$02d mp. Előfordulhat, hogy telepítenie kell a hiányzó bővítményeket, majd később be kell jelentkeznie a nyilvántartási szolgáltatásokba a használatukhoz. Könyvtár fedők frissítése Hibaüzenetetek törlése Sorozat beállításainak visszaállítása Néhány gyártónak extra korlátozása van arra, hogy kikapcsolja a háttér folyamatokat. Ezen a web oldalon több információt találsz, hogy hogyan oldható meg. Olvasási előzmények rögzítésének szüneteltetése Fedlap Szüneteltetve Kategóriák törölve Válasszon képet a fedlapnak Nem található új frissítés Verzió Nyelv Korhatár Minden olvasói beállítás visszaállítva Jelentkezz be %1$s-ba/be Típus A forrás nem található Utolsó frissítés megtekintése Olvasatlanok száma Elem mutatása Kizárólag fedlapok mutatása Hiányzó források: DNS a HTTPS mellett (DoH) Háttér aktivitás Nem lehetett megnyitni a beállításokat Útmutató helyi forráshoz Nincs kitűzött forrás A fejezet nem található Szűrés Nem sikerült másolni Fedlap elmentve Fejezet beállítások Biztos, hogy ezeket a beállításokat alapértelmezettként akarod elmenteni? Hiba fedlap mentése közben Könyvtárban lévő tartalmakra is Előzmények törlése Előzmények törölve Nincs forrás Nem található oldal Fej. %1$s - %2$s Kezdési útmutató Adatbázis törlése El nem kezdett elemek kihagyása Új fejezet Biztonsági mentés már folyamatban van Nincs telepítve Figyelmeztetés: a tömeges letöltések a források lelassulásához és/vagy a %s leállásához vezethetnek. Koppintson további információért. Koppintson további információért Nem sikerült a fedlap frissítése Először adja az elemet a könyvtárhoz Átugorva, mivel tartalmaz olvasatlan fejezeteket Átugorva, mivel nincs olvasott fejezet Letöltés Megnyitás GitHub-on Ez az Android verzió már nem támogatott Alkalmazás frissítések Nem sikerült megnyitni az utoljára olvasott fejezetet Frissítve erre: v%1$s Széles képek pásztázása Mentés CBZ archívumkén Levendula WebView adatok törlése Feljegyzi a hibát egy fájlba, hogy meg lehessen osztani a fejlesztővel A biztonsági mentés nem tartalmazza az elemeket. Megszakított helyreállítás Letöltés Publikálás befejezve Nincs leírás Letöltés (%1$d/%2$d) Felvétel nyilvántartáshoz Elkezdett Válaszon beletartozó adatokat Fejezet beállításai frissültek Letöltő Letöltés… Nincs telepített forrás Forrás imortálási útmutató Kép elmentve A képet nem lehetett betölteni Ennek a sorozatnak Olvasó mód Befejezve: Jelenlegi: Hát, ez kínos A nagy frissítések kárt okoznak a forrásoknak, és lassabb frissítésekhez, valamint megnövekedett akkumulátorhasználathoz vezethetnek. Koppintson további információért. %1$d frissítés sikertelen Javítja az olvasó teljesítményét Nem bejelentkezett nyilvántartó: Inkognitó mód Inkognitó mód kikapcsolása Szűri a könyvtár összes tartalmát Hiba a fedlap megosztása közben Bezár Fordított álló Megállítva Olvasási lista Kívánságlista Teljes lista Befejezetlen lista Állapot Kezdés dátuma Befejezés dátuma Kérjük, jelentkezzen be MAL-ba újra A forrás nem támogatott Nincs egyezés Ilyen nevű kategória már létezik! Összes fejezet visszaállítása ebben az elemben Hiba a kép mentése közben Szüneteltettek listája Egyéni fedlap Következő: Előző: Nincs több fejezet Nincs előző fejezet %1$s oldalt nem lehetett betölteni Oldalak betöltése… Nyilvántart Nem sikerült a kiterjesztési lista megnyitása Kikapcsolva Szolgáltatások, amelyek fejlett funkciókat kínálnak. Az elemek automatikusan könyvtárhoz lesznek adva és frissítve lesznek. Biztonsági mentés készítése Felhasználható az aktuális könyvtár visszaállítására Biztonsági mentésből visszaállítás Könyvtár visszaállítása biztonsági mentésről Biztonsági mentések gyakorisága Biztonsági mentés helyreállítása Nem sikerült a biztonsági mentés helyreállítása Elemek törölve Fejezet gyorsítótárának törlése WebView adatok törölve Helyreállítja az olvasó módot és orientációt minden elemnél Nem lehetett visszaállítani az olvasói beállításokat Akkumulátor optimalizálás kikapcsolása Segít háttérbeli könyvtár frissítésben és a biztonsági mentésekben Akkumulátor optimalizálás már ki van kapcsolva Bő feljegyzés Részletes naplók irása a rendszernaplóba (csökkenti az alkalmazás teljesítményét) Újdonságok Segíts fordítani Adatvédelmi irányelvek Segít a hibák javításában. Semmilyen bizalmas információ nem lesz elküldve Félbeszakított Szünetelő Forrás címe Forrás szerint Fejezetek száma szerint Könyvtárfrissítési hibák kijavításához sgítségért, tekintese meg %1$s Átugorva, mivel a sorozat befejeződött %d oldal nem található felosztás közben Nem található az útvonal a %d-ik oldalhoz Ez a kép legyen a fedlap? Biztonsági mentési fájl kiválasztása Alap hálózati kliens szöveg Alap hálózati kliens szöveg visszaállítása Minden Eltávolitása Lásd nemrég frissített mangádat Widget nem elérhető amikor az alkalmazás zárolva van Téma, dátum és idő formátuma Keresés… Kényszerítse az alkalmazást a letöltött fejezetek újbóli ellenőrzésére Automatikus letöltés olvasás közben Elkezdett Letöltött Helyi Statisztika Ismeretlen cím Áttekintés Összes Olvasott Átlagos értékelés Véletlenszerű elem megnyitása Könyvtár utoljára frissítve: %s Nyilvántartók Az olvasatlanok számának megjelenítése a Frissítések ikonon Olvasás folytatása gomb Kategóriák, globális frissítés, fejezet csúsztatás Alkalmazás zárolás, képernyő zár Összeomlás naplók kiírása, akkumulátor optimalizálások Hibás hely: %s Csak akkor működik, ha az aktuális és a következő fejezet már letöltött. Letöltés előre Olvasó mód, kijelző, navigáció Szökőár Ne most Automatikus letöltés, letöltés előre Egyirányú haladás szinkronizálás, fejlesztett szinkronizálás Manuális és automatikus biztonsági mentés Több Források, bővítmények, globális keresés Másolás a vágólapra Kategória frissítése Vágólapra másolva Ez eltávolítja az eddig kiválasztott kezdeti dátumot a(z) %s szolgáltatásból F-Droid csomagok nem hivatalosan támogatottak. \nKattincs további információért. Befejezett olvasmányok Hoppá! Elérhető de a forrás nincs telepítve: %s Tárhely engedély nincs megadva Használt %1$s hiba: %2$s Biztos vagy benne? Kategória üres Ez eltávolítja az eddig kiválasztott befejezési dátumot a(z) %s szolgáltatásból Olvasási időtartam Nem található elem ebben a kategóriában A/az \"%s\"-t elfogod távolítani a könyvtáradból Éppen most Letöltések ellenőrzése Debug információ Felkapott A frissités már folyamatban van %s hibába ütközött. A hiba üzenetet kérünk oszd meg velünk a Discord szerverünkön. Dátum eltávolítása? Applikáció újrainditása Globális frissítésben *kötelező Fejezet balra húzásakor Duplikált fejezetek átugrása Időköz állítása Egyedi frissítési időköz Következő várt frissítés Dupla koppintás a nagyításhoz Már könyvtári elemek elrejtése Bejelentkezés nyilvántartóhoz Letöltött törlése Magas képek szétvágása Következő kiadás idejének megjóslása Széles oldalak forgatása az illeszkedéshez Fejezet jobbra húzásakor Forgatott széles oldalak megfordítása Ok Tárolási hely Érints ide, ha Cloudflare segítségre van szükséged Soha Átlépve, mert a sorozatot nem kell frissíteni E-ink képernyőkön csökkenti a visszamaradó képet %s feloldása Automatikus biztonsági mentésekhez, fejezetek letöltéséhez, és helyi forráshoz használt. Frissítés beállítása minden Könyvtár szinkronizálása Biztonsági mentés készítése nem sikerült Intervallumok Visszaállítás alapértelmezettre Felhasználói ágens (user agent) szöveg nem lehet üres További lehetőségek Könyvtár szinkronizálása elkészült Utolsó automatikus biztonsági mentés: %s Kiválasztott Nincsenek szkennelő-fordítók Nem kiválasztott Sorozat alulra küldése Szkennelő-fordító Villantson fehéren lap változtatáskor Nincs internet kapcsolat Tárolóhely felhasználás Könyvtár frissítése... (%s) Elemek Felnavigálás Adatok és tárolás Átlépve, mert ma nem várható kiadás Nincs fájl kiválasztva Érvénytelen felhasználói ágens (user agent) szöveg Forrás beállítások Applikáció beállítások Vannak eredmények Relatív időbélyegek HTTP %d, nézd meg a honlapot WebViewban \"%1$s\", ahelyett hogy \"%2$s\" %s nem elérhető Szkennelő-fordítók tiltása Alkalmazás Bevezetési útmutató Üdvözöljük! Következő Kezdjünk hozzá Kihagyás Válasszon ki egy mappát, ahol a(z) %1$s a fejezetek letöltéseit, biztonsági mentéseket és egyebeket tárolja. \n \nAjánlott egy külön mappa használata. \n \nKiválasztott mappa: %2$s Válasszon ki egy mappát Ki kell választani egy mappát Régebbi verzióról frissít, és nem tudja, mit válasszon? További információkért olvassa el a tárolási útmutatót. Tárolási útmutató Alkalmazások telepítésének engedélyezése A forrásbővítmények telepítéséhez. Értesítési engedély Értesüljön a könyvtári frissítésekről és egyéb információkról. Háttérben lévő akkumulátor-használat Kerülje el a hosszan tartó könyvtárfrissítések, letöltések és biztonsági mentések helyreállításának megszakítását. Engedélyezés Új a(z) %s az ön számára? Javasoljuk, hogy olvassa el a Kezdő útmutatót. Újratelepíti a(z) %s? Intelligens frissítés A bővítmények telepítéséhez engedélyek szükségesek. Az engedélyezéshez koppintson ide. Megbízható ismeretlen kiterjesztések visszavonása Bővítmény tárolók Nincsenek beállítva tárolók. Tároló felvétele Tároló URL További tárolók hozzáadása a %shoz. Ennek az URL-nek \"index.min.json\"-ra végződő URL-nek kell lennie. Ez a tároló már létezik! Tároló törlése Érvénytelen tároló URL Szeretné törölni a(z) \"%s\" tárolót? Nyílt forráskódú tároló Nincs tárolási hely beállítva Létrehoz Teljes hiba: Kezdetnek állítsunk be néhány dolgot. Ezeket később bármikor módosíthatja a beállításokban. Felület Törlés a(z) %s szolgáltatásból Ezzel leállítja a helyi nyilvántartást. N/A %d perc %d mp. %d nap %d óra Nyilvántartási pont Nord Érzékeny beállítások megadása (Pl. szolgáltatások bejelentkezési tokenei) Letöltések újraindexelése Új fejezetek megjelenése %1$s múlva várható, frissítési időköz: %2$s. Leállítja a(z) %s nyilvántartását? Nyilvántartott elemek Kicsinyítés letiltása Elérhető: %1$s / Összesen: %2$s Letöltési index érvénytelenítve Mind becslése Hamarosan Egyedi frissítési időköz: Hozzáadás mindenképp Egyedi megjelenítési profil Lecserélés Aláíró kulcs ujjlenyomat már létezik A(z) %1$s tárolónak ugyanaz az aláíró kulcs ujjlenyomat, mint a(z) %2$s tárolónak. \nHa ez várható volt, akkor a(z) %2$s lecserélődik, ellenkező esetben lépjen kapcsolatba a tároló karbantartójával. Közelgő Következő hónap Közelgő frissítések megtekintése Közelgő útmutató Előző hónap Hivatkozás másolása Összeomlási jelentés küldése Analitika engedélyezése Anonimizált használati adatok küldése a funkciók fejlesztésének érdekében. Véletlenszerű Biztonság Analitika és összeomlási jelentések Anonimizált összeomlási jelentés küldése a fejlesztőknek. Ha az olvasó üres képet tölt be, fokozatosan csökkentse a küszöbértéket.\nKijelölt: %s Hosszú szalagolvasóhoz régi dekóder használata JSON biztonsági mentés nem támogatott Bővítmény repók Minden olvasott elem Könyvtár exportálva Olvasási előzmények szüneteltetése ehhez bővítményhez Vannak hasonló nevű elemek a könyvtárában.\n\nVálasszon ki egy elemet az áttelepítéshez vagy a hozzáadáshoz. Lehetséges duplikációk Fehér és fekete Az összeomlási naplók és elemzések elküldése lehetővé teszi számunkra, hogy azonosítsuk és javítsuk a problémákat, javítsuk a teljesítményt, és a jövőbeli frissítéseket még inkább az Ön igényeihez igazítsuk A biztonsági másolat fájl sérült %1$s ms Automatikus Új fejezet lekérése után Befolyásolja a teljesítményt. Csak akkor engedélyezze, ha a bitkép küszöbértékének csökkentése nem oldja meg az üres kép problémákat Fehér Könyvtár lista Nyilvántartók frissítve a(z) %d. fejezetre Szeretné hozzáadni a \"%s\" repót? Jelölje meg a duplikált olvasott fejezetet olvasottként Jegyzetek szerkesztése Jegyzetek Viselkedés Fejezet olvasása után Fekete Exportálás Ez a manga vagy befejeződött, vagy nincs megjósolt megjelenési dátum. Eltávolítás Bővítmény eltávolítása? Duplikált fejezetek letöltésének kihagyása Nem sikerült megszerezni a mappához való állandó hozzáférést. Az alkalmazás váratlanul viselkedhet. Monokróm Nyilvántartók frissítése a(z) %d. fejezetre? Privátan nyilvántartva Tényleg el akarja távolítani a(z) \"%s\" bővítményt? Alapértelmezett (%d) Egyedi hardveres bitmap küszöbérték Olvasatlan fejezetek Elemeket készül eltávolítani az adatbázisból Az elolvasott fejezetek és a nem könyvtári bejegyzések előrehaladása elveszik Tartsa meg az elolvasott fejezetekkel rendelkező elemeket Művész Szerző Privát nyilvántartás Nyilvános nyilvántartás Élveztem azt a részt, ahol… ================================================ FILE: i18n/src/commonMain/moko-resources/in/plurals.xml ================================================ Setelah %1$s menit %1$d bab baru Bab %1$s dan %2$d lainnya Untuk entri %d Terdapat %d perbaruan ekstensi %1$s lagi %d kategori Selesai dalam %1$s dengan %2$s kesalahan %1$s bab %d pelacak Melewati %d bab, entah sumbernya hilang atau telah difilter %1$d hari yang lalu Selanjutnya chapter %d yang belum dibaca berikutnya %d chapter %1$s bab hilang %d hari %d repo Dalam %1$d hari %1$s halaman Migrasikan %1$d entri? Salin %1$d entri? %1$d entri dilewati ================================================ FILE: i18n/src/commonMain/moko-resources/in/strings.xml ================================================ Kategori Entri pustaka Bab Pelacakan Riwayat Pengaturan Antrean unduhan Pustaka Riwayat Pembaruan Pencadangan dan pemulihan Pengaturan Filter Ditandai Belum dibaca Hapus filter Menurut abjad Total bab Terakhir dibaca Pencarian Pilih semua Tandai sebagai dibaca Tandai sebagai belum dibaca Tandai sebelumnya sebagai sudah dibaca Unduh Tandai bab Hapus penanda bab Hapus Perbarui pustaka Ubah Tambah Tambah kategori Ubah kategori Ubah nama kategori Tentukan kategori Ubah gambar sampul Hentikan sementara Bab sebelumnya Bab selanjutnya Coba lagi Hapus Lanjut Buka di peramban Mode tampilan Tampilan Daftar Batal Urutkan Pasang Bagikan Simpan Atur ulang Kembalikan Buka log Nama Grid kompak Pulihkan Memuat… Aplikasi tidak tersedia Umum Pembaca Unduhan Sinkronisasi Lanjutan Tentang Item per baris Layar tegak Layar mendatar Pembaruan otomatis Matikan Tiap 6 jam Tiap 12 jam Tiap hari Tiap 2 hari Tiap minggu Semua Pembatasan pembaruan otomatis Saat mengisi daya Lewati daftar dengan status \"Selesai\" Perbarui kemajuan setelah membaca Kategori bawaan Selalu tanya Layar penuh Animasikan transisi halaman Tampilkan nomor halaman Potong pinggiran Biarkan layar tetap menyala Navigasi Tombol volume Balikkan tombol volume Warna latar Putih Hitam Mode baca bawaan Halaman (kiri ke kanan) Halaman (kanan ke kiri) Halaman (vertikal) Strip panjang Tipe skala Pas layar Rentangkan Pas lebar Pas tinggi Ukuran asli Pas pintar Posisi awal zoom Otomatis Kiri Kanan Tengah Rotasi bawaan Bebas Terkunci tegak Terkunci mendatar Merah Hijau Biru Alfa Setelah secara manual ditandai telah dibaca Otomatis hapus setelah dibaca Tidak Aktif Bab terakhir yang dibaca Bab kedua dari terakhir dibaca Chapter ketiga dari terakhir dibaca Chapter keempat dari terakhir dibaca Chapter kelima dari terakhir dibaca Unduh bab baru Pelacakan Buat cadangan Dapat digunakan untuk memulihkan isi pustaka saat ini Pulihkan cadangan Pulihkan isi pustaka dari berkas cadangan Frekuensi pencadangan otomatis Cadangan dibuat Pemulihan selesai Apa saja yang ingin Anda cadangkan? Memulihkan cadangan Membuat cadangan Hapus cache bab Terpakai: %1$s Cache dibersihkan, %1$d file dihapus Terjadi kesalahan saat membersihkan Hapus cookies Cookies dihapus Hapus database Hapus riwayat untuk entri yang tidak disimpan di perpustakaan Anda Entri dihapus Versi Kirim laporan kerusakan Bantu memperbaiki bug. Tidak ada data sensitif yang akan dikirim Masuk ke %1$s Nama pengguna Kata sandi Masuk Sudah Masuk Kesalahan tidak diketahui Memperbarui kategori Tidak ada hasil lainnya Sumber lokal Berlanjut Tak diketahui Berlisensi Hapus dari pustaka Hapus bab terunduh? Bab %1$s Mengunduh (%1$d/%2$d) Kesalahan Jeda Judul Nomor bab Sumber Nomor bab Unduh Belum dibaca Yakin ingin menghapus bab yang dipilih? Pelacakan Membaca Selesai Tidak diselesaikan Ditahan Akan dibaca Nilai Judul Status Kategori dengan nama ini sudah ada! Kategori dihapus Ini akan menghapus tanggal baca bab ini. Apakah Anda yakin? Setel ulang semua bab untuk entri ini Tambahkan ke pustaka? Gambar disimpan Filter khusus Terapkan sebagai sampul Sampul telah diperbarui Halaman: %1$d Bab berikutnya tak ditemukan Gambar tidak dapat dimuat Gunakan gambar ini sebagai sampul? Tidak dapat mengunduh bab. Anda bisa mencoba lagi di bagian unduhan Bab baru ditemukan Gagal memperbarui sampul Tolong tambahkan entri ke pustaka Anda sebelum melakukan ini Pilih gambar sampul Pilih berkas cadangan Unduh Pembaruan tidak tersedia Mengunduh… Ketuk untuk menginstal pembaruan Terjadi kesalahan saat mengunduh Versi baru tersedia! Tidak ada unduhan Tidak ada pembaruan terkini Tidak ada yang dibaca baru-baru ini Pustaka Anda kosong Pengunduh Gagal Terjadi kesalahan saat mengunduh bab Tidak terhubung dengan Wi-Fi Tidak ada koneksi jaringan yang tersedia Unduhan dijeda Pencarian Global Diunduh Lainnya Pencarian global… Terbaru Jelajahi Umum Anda belum memiliki kategori. Tekan tombol tambah untuk menambahkan kategori baru untuk mengatur pustaka Anda. Migrasi Ekstensi Info Ekstensi Perbarui Pasang Tertunda Mengunduh Memasang Terpasang Percaya Tidak terpercaya Lepas Ekstensi tidak terpercaya Ekstensi berbahaya dapat membaca semua kredensial login yang disimpan atau menjalankan kode berbahaya. \n \nDengan mempercayai sertifikat ekstensi ini, Anda menerima risiko ini. Kecepatan animasi ketukan dua kali Tanpa animasi Normal Cepat Ditambahkan ke pustaka Dihapus dari pustaka Tersalin ke papan klip: \n%1$s Pilih data yang ikut dipindah Pindah Salin Halaman Sumber tidak terpasang: %1$s Baca ulang Status Tipe Selesai: Saat ini: Selanjutnya: Sebelumnya: Tak ada bab selanjutnya Tak ada bab sebelumnya Memuat halaman… Gagal memuat halaman: %1$s Buka dalam WebView Lewati bab yang sudah dibaca Tampilkan tindakan saat tekan lama Mode saringan warna campur Lapisan Gandakan Layar Dodge / Cerahkan Burn / Gelapkan Bantuan Hasil tidak ditemukan Pilih sumber yang akan dipindah Kembali Teruskan Muat ulang Pustaka Usang Ekstensi ini tidak lagi tersedia. Ini mungkin tidak berfungsi dengan baik dan dapat menyebabkan masalah dengan aplikasi. Disarankan untuk menghapus instalasi. Format tanggal Bab terbaru Lihat bab Batalkan semua Terang Gelap Sistem Kelola notifikasi Keamanan dan privasi Menu Terbaru Terlama Pindahkan ke atas Pindahkan ke bawah Lainnya Pembaruan Memerlukan buka kunci Kunci saat diam Selalu Tidak pernah Pembaruan tertunda Tampilkan konten di area yang terpotong Sembunyikan konten aplikasi saat berpindah aplikasi dan blokir tangkapan layar Sembunyikan konten notifikasi Selalu tampilkan transisi bab Keluar Anda sudah keluar Dijeda Gagal untuk menembus Cloudflare Harap perbarui aplikasi WebView untuk kompatibilitas yang lebih baik Pembaruan bab Nonaktifkan optimisasi baterai Optimalisasi baterai sudah dimatikan Alamat surel Amankan layar Keluar dari %1$s? Tampilan Bab %1$s Bab %1$s dan %2$d lainnya Bab %1$s Membantu pembaruan pustaka dan pencadangan di latar belakang Sumber Pembaruan ekstensi Membaca WebView diperlukan agar aplikasi dapat berfungsi Bab %1$s - %2$s Memperbarui pustaka Tambahkan pelacak Lebih sedikit Selengkapnya Di pustaka Tambahkan ke pustaka Lisensi terbuka Gagal memulihkan data dari cadangan Pencadangan data gagal Pinggiran samping Lewati bab yang difilter Hilangkan tanda Tandai Pilih kebalikan Hanya yang sudah diunduh Tersemat Situs web Strip panjang dengan celah Petunjuk sumber lokal Terakhir digunakan Saring semua entri di perpustakaan Anda Periksa pembaruan Pemulihan dibatalkan Pemulihan masih dalam proses Pencadangan masih dalam proses %1$02d menit, %2$02d detik Mode membaca Abu-abu Untuk seri ini Tidak dapat membuka pengaturan perangkat Muat ulang sampul pustaka Sinkronisasi satu arah untuk memperbarui kemajuan bab di layanan pelacak eksternal. Siapkan pelacakan untuk setiap entri dari tombol pelacaknya. Periksa sampul dan detail baru saat memperbarui pustaka Segarkan metadata secara otomatis Pindah Data Sumber yang hilang: Cadangan tidak berisi entri perpustakaan apa pun. File cadangan tidak valid: Menurut tanggal pengunggahan Grid nyaman Tab Tampilkan tab kategori Halaman tidak ditemukan Nonaktifkan semua Aktifkan semua Perlihatkan mode saat ini secara singkat saat pembaca dibuka Tampilkan mode membaca Mulai Sumber tidak ditemukan Mulai ulang aplikasi untuk menerapkan pengaturan Jaringan Nonaktif Keduanya Tegak Mendatar Tidak Balikkan zona ketuk Status tidak diketahui Penulis tidak diketahui Diperbarui ke v%1$s Apa yang baru Tidak dapat mengunduh bab karena ruang penyimpanan rendah Pencarian untuk \"%1$s\" secara global Mode membaca Tema Tanggal ditambahkan Anda tidak memiliki sumber yang disematkan Lengkap Kemajuan Masalah Pelacakan tidak tersinkronisasi di: Sumber dari ekstensi ini mungkin berisi konten DEWASA (NSFW 18+) 18+ Hapus bab yang ditandai Hapus chapter Hal ini tidak mencegah ekstensi non-resmi atau konten DEWASA (NSFW 18+) yang tidak ditandai dengan benar muncul di dalam aplikasi. Tidak ada bab yang ditemukan Pengaturan bab bawaan diperbarui Terapkan sebagai bawaan Terapkan pula untuk semua entri di pustaka saya Apakah anda yakin ingin menyimpan pengaturan ini sebagai bawaan? Pengaturan bab %1$s: %2$s, halaman %3$d Cari pengaturan Bab terunduh Dari pustaka Jeda riwayat membaca Mode penyamaran Hapus riwayat Apakah anda yakin? Semua riwayat akan terhapus. Riwayat telah dihapus Sumber NSFW (18+) Halaman selanjutnya Halaman sebelumnya Petunjuk migrasi Tidak ada aplikasi pemilih berkas yang ditemukan Harap login kembali ke MAL Tampilkan di daftar sumber dan ekstensi Tepi Bentuk L Urutan turun Urutan naik Menurut nomor bab Menurut tanggal unggahan Dilacak Bagikan log kerusakan Tanggal selesai Tanggal mulai Simpan log kerusakan ke sebuah berkas untuk dibagikan dengan pengembang aplikasi Zona ketuk Kanan dan Kiri Tampilkan jumlah item Kosong Ketuk untuk melihat detail Tanggal bab dimasukkan Aksi Kanan Kiri Lanjut Sebelum Otomatis Menyimpan halaman ke dalam folder terpisah Membuat folder menurut judul entri Kecuali: %s Termasuk: %s Membagi halaman lebar Batal semua untuk seri ini Versi Android ini tidak lagi didukung Gagal menyalin ke papan klip DNS melalui HTTPS (DoH) semacam Kindle Unduh otomatis Anda mungkin perlu memasang ulang ekstensi yang hilang dan log in ke layanan pelacakan setelahnya untuk menggunakannya. Matikan mode penyamaran Sumber tidak didukung Tidak ditemukan kecocokan Belum dibaca Layar mendatar Layar Tegak Entri dalam kategori yang dikecualikan tidak akan diunduh meskipun mereka juga termasuk dalam kategori yang disertakan. Rotasi Skala abu-abu Tampilkan zona ketukan Entri dalam kategori yang dikecualikan tidak akan diperbarui meskipun mereka juga termasuk dalam kategori yang disertakan. Tanggal Urutkan menurut Format bab tidak valid Bab tak ditemukan Jika penempatan halaman lebar terpisah tidak sesuai dengan arah membaca Balikkan penempatan halaman pemisah Tunjukkan secara singkat saat pembaca dibuka Batasan: %s Sumber lokal Gagal berbagi sampul Gagal menyimpan sampul Sampul disimpan Sampul Matikan Aktif Panduan pelacakan Pengaturan per-kategori untuk urutan Anda belum memiliki kategori apapun. Mulai mengunduh sekarang Beberapa pabrikan mempunyai batasan aplikasi tambahan yang mematikan layanan latar belakang. Website ini memiliki info lebih lanjut untuk memperbaikinya. Pencadangan/pemulihan mungkin tidak berfungsi jika Optimisasi MIUI dimatikan. Menyediakan fitur yang disempurnakan untuk sumber tertentu. Entri secara otomatis dilacak ketika ditambahkan ke perpustakaan Anda. Pelacak yang ditingkatkan Mode gelap hitam pekat Empat Daun Yin dan Yang Tako Stroberi Daiquiri Senja Tengah Malam Hijau Apel Dinamis Tema aplikasi Aktivitas latar belakang Terendah Rendah Sensitivitas untuk menyembunyikan menu dalam gulir Tinggi Tertinggi Terbalik Hari Ini Panduan awal mulai Lacak Teal & Pirus Tampilan Autentikasi untuk mengonfirmasi perubahan Bawaan Kategori yang dikecualikan Bantu terjemahkan UI tablet Informasi aplikasi Shizuku tidak berjalan Pasang dan mulai Shizuku untuk menggunakan Shizuku sebagai pemasang ekstensi. Memasang ekstensi… Warisan Pemasang Total entri Pembaruan berskala besar membahayakan sumber, dapat membuat pembaruan lambat dan meningkatkan penggunaan baterai. Ketuk untuk mempelajari lebih lanjut. Peringatan: mengunduh dalam jumlah besar bisa menyebabkan sumber menjadi lambat dan/atau memblokir %s. Ketuk untuk mempelajari lebih lanjut. Peringatan Cetak catatan berlebih ke catatan sistem (mengurangi kinerja aplikasi) Anda juga harus menyimpan salinan cadangan di tempat lain. Cadangan mungkin berisi data sensitif termasuk kata sandi yang tersimpan; berhati-hatilah jika berbagi. Pencatatan berlebihan Filter warna kustom Atur kecerahan Bahasa Tiap 3 hari Hanya pada Wi-FI Pembaruan aplikasi Perbarui semuanya Bersihkan cache bab saat aplikasi dibuka Tidak ada yang perlu dibersihkan %1$d entri non-perpustakaan dalam database Gagal mendapatkan ekstensi yang tersedia Lewati daftar dengan chapter yang belum dibaca Kebijakan privasi Penerbitan selesai Dibatalkan Sedang Hiatus Untuk bantuan cara memperbaiki kesalahan pembaruan pustaka, lihat %1$s Simpan sebagai arsip CBZ Lihat entri Grid sampul saja Lewati dafter yang belum mulai dibaca Dilewati karena seri telah selesai Dilewati karena ada bab yang belum dibaca Dilewati karena tidak ada bab yang dibaca Secara otomatis melebarkan gambar Geser gambar lebar Pelajari lebih lanjut Layar tegak terbalik %1$d pembaruan gagal Pindahkan seri ke atas Dinonaktifkan Gagal menyimpan gambar Tidak ada entri perpustakaan untuk dicadangkan Buka di Github Membersihkan data WebView Data WebView telah dibersihkan Tutup Sumber yang diinstal tidak ditemukan Tidak ada sumber yang ditemukan Pembaruan terakhir Jumlah belum dibaca Meningkatkan kinerja pembaca Halaman %d tidak ditemukan saat dipisah Tidak dapat menemukan jalur file halaman %d Atur ulang semua pengaturan pengguna Muat ulang pengaturan per-pengguna Atur ulang mode dan orientasi dari semua seri Yah, ini aneh Tidak bisa mengatur ulang setelan pembaca Versi Bahasa Rating Umur Daftar Bacaan Daftar Yang Belum Selesai Daftar Keinginan Daftar Selesai Daftar Tertahan Hanya di jaringan tanpa batasan Gagal membuka bab terakhir dibaca Sampul kustom Tidak terinstall Bahasa aplikasi Bunga Lavender Tidak ada deskripsi Apakah anda ingin menghapus kategori \"%s\"? InternalError: Periksa log kerusakan untuk informasi lebih lanjut Hapus kategori String agen pengguna default Setel ulang string agen pengguna default Hapus semua Lihat entri pustaka Anda yang baru saja diperbarui Widget tidak tersedia saat kunci aplikasi diaktifkan Pembaruan sudah berjalan String agen pengguna wajib diisi Gelombang Pasang Unduh di depan Unduh otomatis ketika sedang membaca Hanya berfungsi jika bab saat ini + bab berikutnya sudah diunduh. Kamu akan menghapus \"%s\" dari pustaka Pustaka terakhir diperbarui: %s Semua Apa kamu yakin? Populer Izin penyimpanan tidak diberikan Dilewati karena seri ini tidak memerlukan pembaruan Cari… Sumber, ekstensi, pencarian global Mode membaca, tampilan, navigasi Sinkronisasi progres searah, sinkronisasi yang ditingkatkan %s mengalami kesalahan tak terduga. Kami menyarankan Anda membagi log kerusakan di saluran dukungan kami di Discord. Unduh otomatis, unduh terlebih dahulu Kunci aplikasi, amankan layar Tema, format tanggal & waktu Kategori, pembaruan global, geser chapter Pencadangan manual & otomatis, ruang penyimpanan Buat log kerusakan, pengoptimalan baterai Aduh! Mulai ulang aplikasi Lokasi tidak valid: %s Judul tidak diketahui String agen pengguna tidak valid Baru saja Buka entri acak Memeriksa unduhan Tidak ada entri yang ditemukan dalam kategori ini Build F-Droid tidak didukung secara resmi. \n Ketuk untuk mempelajari lebih lanjut. Tombol lanjutkan membaca Hapus tanggal? Mengindeks ulang unduhan Paksa aplikasi untuk mengecek ulang bab ter-unduh Ini akan menghapus tanggal mulai yang Anda pilih sebelumnya dari %s Ini akan menghapus tanggal selesai yang Anda pilih sebelumnya dari %s Statistik Entri Dalam pembaruan global Total Baca Rata-rata nilai Telah digunakan %djam Dimulai Lokal Terunduh Durasi baca Pelacak Entri yang dilacak %ddetik %dmenit Ringkasan Entri selesai Tidak tersedia %dhari Nanti Tampilkan jumlah yang belum dibaca pada ikon Pembaruan Kategori ini kosong Tersalin di papan klip Tersedia tetapi sumber tidak terpasang: %s Melewati bab terduplikasi %1$s eror: %2$s *dibutuhkan Semua catatan tersembunyi sudah ada di perpustakaan Salin ke papan klip Perbarui kategori Potong gambar tinggi Lapisan awal Memutar halaman lebar agar pas Orientasi balik halaman lebar yang diputar Info debug Bab tentang geser ke kanan Bab tentang geser ke kiri Ketuk dua kali untuk memperbesar Terapkan jeda waktu Penyesuaian frekuensi update Dilewati karena tidak ada rilis yang diharapkan hari ini Pembaruan yang diharapkan berikutnya Interval Prediksikan waktu rilis selanjutnya Perkirakan setiap Atur untuk memperbarui setiap Hapus %s pelacakan? Oke Ini akan menghapus pelacakan lokal. Hapus juga dari %s Hapus unduhan Memiliki hasil Sinkronisasi pustaka Sinkronisasi pustaka selesai Ketuk di sini untuk bantuan dengan Cloudflare Membuat ulang indeks unduhan Pelacak login Tidak dapat membuat file cadangan Buka kunci %s Tidak ada koneksi Internet HTTP %d, periksa situs web di WebView Tidak dapat mencapai %s Pindahkan seri ke bawah Penanda waktu \"%1$s\" seharusnya \"%2$s\" Memperbarui pustaka... (%s) Tidak ada file yang dipilih Pengaturan sumber Pengaturan aplikasi Buat Tidak pernah Mengurangi ghosting pada tampilan e-ink Terapkan Kembalikan ke default Terakhir dicadangkan secara otomatis: %s Tidak ditemukan pemindai Pemindai Perlihatkan kilatan saat halaman berubah Penggunaan penyimpanan Skor pelacak Data dan penyimpanan Kecualikan pemindai Opsi lainnya Dipilih Tidak dipilih Navigasi ke atas Lokasi penyimpanan Digunakan untuk pencadangan otomatis, pengunduhan bab, dan sumber lokal. Pilih direktori Panduan awal Baru mengenal %s? Kami menyarankan Anda membaca panduan awal. Selesai Harap pilih direktori terlebih dahulu Izin notifikasi Izin pasang aplikasi Selamat Datang! Install ulang %s? Lewati Hindari gangguan pada pembaruan pustaka, pengunduhan, dan pemulihan cadangan yang berlangsung lama. Selanjutnya Penggunaan baterai di latar belakang Untuk memasang ekstensi. Mari kita atur beberapa hal terlebih dahulu. Anda juga selalu dapat mengubahnya di menu pengaturan nanti. Lokasi penyimpanan belum ditentukan Dapatkan notifikasi untuk pembaruan pustaka dan sebagainya. Izinkan Pilih direktori untuk menyimpan konten dari %1$s, termasuk unduhan chapter, data backup, dan lainnya. \n \nSebaiknya menggunakan direktori terpisah. \n \nDirektori yang dipilih: %2$s Panduan penyimpanan Pembauan pintar Memperbarui dari versi lama dan tak yakin harus pilih mana? lihat panduan penyimpanan untuk informasi lebih lanjut. Tambahkan repo Tambahkan repo lain ke %s. Seharusnya URL yang memiliki akhiran \"index.min.json\". Repositori ekstensi Anda tidak memiliki repositori yang ditetapkan. Kesalahan penuh: Repositori ini sudah ada! URL Repo URL repo tidak valid Sertakan pengaturan sensitif (contohnya, token login pelacak) Izin diperlukan untuk memasang ekstensi. Klik disini untuk memberi izin. Hapus repo Apa Anda yakin ingin menghapus repo \"%s\"? Bab baru diperkirakan akan dirils sekitar %1$s, diperiksa setiap sekitar %2$s. Tersedia:%1$s/Total:%2$s Frekuensi pembaruan khusus: Nord Segera Cabut izin ekstensi tidak dikenal yang tepercaya Repo sumber terbuka Menonaktifkan zoom out Yang akan datang Repositori %1$s memiliki Signing Key Fingerprint yang sama dengan %2$s. \nJika hal ini diharapkan, %2$s akan diganti, jika tidak, hubungi pengelola repo Anda. Tambahkan saja Profil tampilan khusus Ganti Signing Key Fingerprint sudah ada Lihat Pembaruan Mendatang Panduan Mendatang Bulan Depan Bulan Kemarin Manga ini sudah selesai, atau belum ada tanggal rilis yang diperkirakan. Gagal mendapatkan akses folder yang terus-menerus. Aplikasi mungkin berperilaku tak terduga. Durasi lampu kilat %1$s ms Flash setiap Flash dengan Hitam Putih Hitam Putih Salin link Ekstensi Penyimpanan Pencadangan JSON tidak didukung File cadangan rusak Apakah Anda ingin menambahkan repo \"%s\"? Lewati pengunduhan bagian yang sudah dibaca berulang kali Perbarui pelacak ke bab %d? Acak Kirim log kerusakan Kirim catatan kerusakan yang anonim ke pengembang. Izinkan analitik Kirim data penggunaan anonim untuk meningkatkan fitur aplikasi. Analisis dan Log Kerusakan Mengirim log kerusakan dan analitik akan memungkinkan kami mengidentifikasi dan memperbaiki masalah, meningkatkan kinerja, dan membuat pembaruan mendatang lebih relevan dengan kebutuhan anda Keamanan Semua entri yang sudah dibaca Apa anda yakin ingin menghapus ekstensi \"%s\"? Hapus Hapus Ekstensi? Kemajuan pembaruan saat ditandai sebagai telah dibaca Pelacak diperbarui ke bab %d Batas bitmap perangkat keras kustom Jika pembaca memuat gambar kosong, kurangi threshold secara bertahap.\nPilih: %s Bawaan (%d) Mempengaruhi performa. Aktifkan hanya jika menurunkan batas bitmap tidak memperbaiki gambar kosong Jeda riwayat pembacaan untuk ekstensi Otomatis Gunakan dekoder lama untuk bacaan strip panjang Tandai bab duplikat sebagai sudah dibaca Monokrom Ekspor Daftar pustaka Pustaka diekspor Penulis Seniman Dilacak secara pribady Lacak secara pribadi Lacak secara publik Ubah catatan Catatan Chapter belum dibaca Catppuccin Perilaku Setelah membaca satu bab Setelah mengambil bab baru Sembunyikan indikator bab yang hilang Gagal membuat direktori unduhan Donasi Render gambar dalam deskripsi manga Gagal membuat direktori: %s Anda akan menghapus entri dari database Membaca bab dan kemajuan entri non-perpustakaan akan hilang Simpan entri dengan bab yang sudah dibaca Perbarui judul manga perpustakaan agar sesuai dengan sumbernya Peringatan: Jika sebuah manga diganti namanya, maka manga tersebut akan dihapus dari antrean unduhan (jika ada). Sedang masuk… Duplikat yang mungkin Anda memiliki entri di perpustakaan Anda dengan nama yang serupa.\n\nPilih entri yang ingin Anda pindahkan atau tambahkan tetap. Suka bagian di mana… Dipilih Tersedia Pilih semua Tidak memilh Pilih sumber yang diaktifkan Pilih sumber yang disematkan Lanjutkan Data yang akan dipindahkan Hapus unduhan entri saat ini setelah migrasi Kata kunci tambahan (opsional) Membantu mempersempit hasil pencarian dengan menambahkan kata kunci tambahan Sembunyikan entri yang tidak cocok Sembunyikan entri yang tidak memiliki bab baru Hanya tampilkan entri jika pertandingan memiliki bab tambahan Opsi-opsi ini lambat dan berbahaya, dan dapat menyebabkan pembatasan dari sumber-sumber Mode pencarian lanjutan Memecah judul menjadi kata kunci untuk pencarian yang lebih luas Cocokkan berdasarkan nomor bab Jika diaktifkan, memilih pertandingan yang paling jauh di depan. Jika tidak, memilih pertandingan pertama berdasarkan prioritas sumber. Migrasi Migrasi (%1$d/%2$d) Salin Migrasi Alternatif tidak ditemukan Terbaru: %1$s Tidak Diketahui Cari secara manual Jangan migrasi Migrasi sekarang Salin sekarang Berhenti bermigrasi? Berhenti Batal Salin Migrasi Batal Batal Tidak ditemukan bab, entri ini tidak dapat digunakan untuk migrasi Jangan izinkan nama file non-ASCII Memastikan kompatibilitas dengan beberapa media penyimpanan yang tidak mendukung Unicode. Jika opsi ini diaktifkan, Anda harus mengganti nama folder sumber dan manga secara manual dengan mengganti karakter non-ASCII menjadi representasi heksadesimal UTF-8 huruf kecil. File chapter tidak perlu diganti namanya. Ambil berkas sumber secara bersamaan Ambil berkas halaman secara bersamaan Halaman yang diunduh secara bersamaan per sumber Tutup tab Filter yang mengecualikan pemindai ================================================ FILE: i18n/src/commonMain/moko-resources/it/plurals.xml ================================================ Dopo %1$s minuto Dopo %1$s minuti Dopo %1$s minuti Aggiornamento estensione disponibile %d estensioni hanno aggiornamenti disponibili %d estensioni hanno aggiornamenti disponibili Capitoli %1$s e un altro Capitoli %1$s e altri %2$d Capitoli %1$s e altri %2$d %1$d nuovo capitolo %1$d nuovi capitoli %1$d nuovi capitoli Per %d voce Per %d voci Per %d voci %1$s rimanente %1$s rimanenti %1$s rimanenti Completato in %1$s con %2$s errore Completato in %1$s con %2$s errori Completato in %1$s con %2$s errori %d categoria %d categorie %d categorie %1$s capitolo %1$s capitoli %1$s capitoli %d tracker %d trackers %d trackers %d capitolo saltato, la fonte non ce l\'ha o è stato filtrato %d capitoli saltati, la fonte non li ha o sono stati filtrati %d capitoli saltati, la fonte non li ha o sono stati filtrati Ieri %1$d giorni fa %1$d giorni fa Il prossimo capitolo non letto I prossimi %d capitoli non letti I prossimi %d capitoli non letti Prossimo capitolo Prossimo %d capitoli Prossimo %d capitoli Manca %1$s capitolo Mancano %1$s capitoli Mancano %1$s capitoli Un giorno %d giorni %d giorni Domani Tra %1$d giorni Tra %1$d giorni %d repository %d repository %d repository 1 pagina %1$s pagine %1$s pagine Migrare %1$d voce? Migrare %1$d voci? Migrare %1$d voci? Copia %1$d voce? Copia %1$d voci? Copia %1$d voci? Una voce è stata saltata %1$d voci sono state saltate %1$d voci sono state saltate ================================================ FILE: i18n/src/commonMain/moko-resources/it/strings.xml ================================================ Nome Impostazioni Coda download Libreria Cronologia Novità Backup e ripristino Impostazioni Filtro Segnalibri Non letti Rimuovi filtro Alfabeticamente Ultimi letti Ricerca Seleziona tutto Segna come letto Segna come non letto Segna precedenti come letti Scarica Aggiungi segnalibro Rimuovi segnalibro Cancella Aggiorna libreria Modifica Aggiungi categoria Modifica categorie Rinomina categoria Assegna categorie Modifica copertina Pausa Capitolo precedente Capitolo successivo Riprova Rimuovi Riprendi Apri nel browser Modalità di visualizzazione Visualizzazione Griglia compatta Lista Annulla Ordina Installa Condividi Salva Caricamento… Generale Lettore Download Avanzate Info Oggetti per riga Verticale Orizzontale Aggiornamenti automatici Disabilitati Ogni 6 ore Ogni 12 ore Ogni giorno Ogni 2 giorni Tutte Restrizioni del dispositivo agli aggiornamenti automatici Quando si carica Con stato «Completata» Aggiorna il tracking dopo la lettura Schermo Intero Animare le transizioni di pagina Mostra numero pagina Luminosità personalizzata Filtro colore personalizzato Mantieni lo schermo acceso Navigazione Tasti volume Colore sfondo Bianco Nero Modalità di lettura predefinita Per pagina (da sinistra a destra) Per pagina (da destra a sinistra) Per pagina (verticale) Verticale lungo Tipo di scala Adatta a schermo Riempi schermo Adatta a larghezza Adatta ad altezza Dimensione originale Scala intelligente Posizione iniziale zoom Automatico Sinistra Destra Centro Rotazione predefinita Libero Bloccato verticale Bloccato orizzontale Rosso Verde Blu Alfa Dopo averli contrassegnati manualmente come letti Cancella automaticamente dopo la lettura Disabilitato Ultimo capitolo letto Penultimo capitolo letto Terzultimo capitolo letto Quartultimo capitolo letto Quintultimo capitolo letto Scarica nuovi capitoli Servizi di tracking Cancella cache capitoli Usati: %1$s Cache cancellat, %1$d file cancellati Errore durante la cancellazione Cancella cookie Cookie cancellati Pulisci database Elimina la cronologia delle voci che non sono presenti nella libreria Elementi eliminati Versione Invia segnalazioni crash Aiuta a correggere eventuali bug. Non verranno inviati dati sensibili Accedi a %1$s Nome utente Password Accedi Accesso riuscito Errore sconosciuto Aggiornamento categoria In corso Sconosciuto Concesso in licenza Rimuovi dalla libreria Capitolo %1$s Scaricando (%1$d/%2$d) Errore Titolo della fonte Numero del capitolo Per fonte Per numero di capitolo Scarica Non letti Sei sicuro di voler eliminare i capitoli selezionati? In lettura Completato Abbandonato In sospeso Da leggere Punteggio Titolo Stato Capitoli Esiste già una categoria con questo nome! Questo rimuoverà la data lettura di questo capitolo. Sei sicuro? Reimposta tutti i capitoli di questa voce Immagine salvata Filtro personalizzato Imposta come copertina Copertina aggiornata Pagina: %1$d Capitolo successivo non trovato Non è stato possibile caricare l\'immagine Usare questa immagine come copertina? Impossibile scaricare i capitoli. Puoi riprovare nella sezione download Nuovi capitoli trovati Impossibile aggiornare la copertina Prima di compiere questa azione per favore aggiungi la voce alla libreria Seleziona immagine di copertina Seleziona file di backup Scarica Non ci sono nuovi aggiornamenti disponibili Download in corso… Tocca per installare l\'aggiornamento Errore di scaricamento Nuova versione disponibile! Nessun download Nessuna novità recente Nessuna lettura recente La tua libreria è vuota Gestione Download Errore Impossibile scaricare il capitolo a causa di un errore imprevisto Nessuna connessione Wi-Fi disponibile Nessuna connessione di rete disponibile Categorie Voci della libreria Cronologia Capitoli totali Aggiungi Annulla Apri registro Ripristina App non disponibile Ogni settimana Categoria predefinita Tracciamento Tracciamento Chiedi sempre Ritaglia bordi Inverti i tasti del volume Crea backup Può essere utilizzato per ripristinare la libreria attuale Ripristina backup Ripristina la libreria da un file di backup Frequenza dei backup automatici Backup creato Ripristino completato Di cosa vuoi fare il backup? Ripristino backup Creazione backup Nessun altro risultato Fonte locale Eliminare i capitoli scaricati? In pausa Tracciamento Aggiungere alla libreria? Download in pausa Migra Estensioni Informazioni estensione Ricerca globale Capitoli scaricati Reimposta Aggiorna Installa In coda Scaricamento in corso Installazione in corso Installato Attendibile Non attendibile Disinstalla Estensione non attendibile Le estensioni dannose possono leggere le credenziali di accesso memorizzate o eseguire codice arbitrario. \n \nFidandoti di questa estensione, accetti questi rischi. Velocità animazioni doppio tocco Per pagina Senza animazione Normale Veloce Altro Ricerca globale… Ultimi Sfoglia Aggiunto alla libreria Rimosso dalla libreria Copiato negli appunti: \n%1$s Fonte non installata: %1$s Rileggendo Stato Tipo Categorie rimosse Seleziona i dati da includere Migra Copia Non hai categorie. Tocca il pulsante più per crearne una e organizzare la tua libreria. Comune Finito: Corrente: Prossimo: Precedente: Nessun capitolo successivo Nessun capitolo precedente Caricamento pagine… Caricamento pagine fallito: %1$s Apri in WebView Salta i capitoli segnati come letti Schermo Mostra azioni con un tocco prolungato Modalità di fusione del filtro colore Sovrimpressione Moltiplica Schiarisci Brucia / Scurisci Aiuto Nessun risultato trovato Seleziona una fonte da cui migrare Indietro Avanti Aggiorna Libreria Obsoleta Questa estensione non è più disponibile. Potrebbe non funzionare correttamente e causare problemi con l\'app. Si consiglia di disinstallarla. Formato data Aggiornamenti globali Disconnettersi da %1$s? Disconnetti Ora sei disconnesso In pausa Altro Ultimo capitolo Visualizza capitoli Annulla tutto Chiaro Scuro Sistema Gestisci le notifiche Sicurezza e privacy Richiedi sblocco Blocca quando inattivo Sempre Mai Schermo sicuro Aggiornamenti in sospeso Mostra il contenuto dell\'area ritagliata Impossibile bypassare Cloudflare Per favore aggiorna l\'app WebView per una migliore compatibilità Aggiornamenti capitoli Schermo sicuro nasconde i contenuti dell\'app quando cambi applicazione e blocca gli screenshot Visualizzazione Aggiornamenti estensione Capitoli %1$s Capitolo %1$s e altri %2$d Capitolo %1$s Indirizzo e-mail Ottimizzazione batteria già disattivata Facilita gli aggiornamenti e i backup in secondo piano Disattiva ottimizzazione batteria Mostra sempre la transizione tra capitoli Nascondi contenuto notifiche Sposta in fondo Sposta in cima Più vecchi Più recenti Menù Fonti Libreria in aggiornamento In Lettura Salta capitoli filtrati Fissa Aggiungi tracking Nella libreria Aggiungi alla libreria Fissato Riempimento laterale Verticale lungo con interruzioni Sblocca Inverti selezione Cap. %1$s - %2$s Meno Altro Licenze open source Sito web Ripristino cancellato Ripristino backup fallito Ripristino già in corso Backup fallito Il backup è già in corso Solo scaricati WebView è necessaria per il funzionamento dell\'app Modalità di lettura Per questa serie Guida alle fonti locali Ultimo usato Filtra tutte le voci nella tua libreria Controlla aggiornamenti Impossibile aprire le impostazioni del dispositivo Aggiorna le copertine della libreria %1$02d minuti, %2$02d secondi Sincronizzazione a senso unico per aggiornare l\'avanzamento dei capitoli sui servizi di tracking. Imposta il tracking per le singole voci dai loro pulsanti di tracking. Grigio Nessuna pagina trovata Per data di aggiunta Schede Dati Fonti mancanti: Il backup non contiene alcuna voce di libreria. File di backup invalido: Controlla nuove copertine e descrizioni durante l\'aggiornamento della libreria Ricarica metadati automaticamente Mostra schede delle categorie Griglia confortevole Migra Disabilita tutto Abilita tutto Entrambi Verticale Orizzontale Nessuno Inverti le zone di tocco Fonte non trovata Stato sconosciuto Autore sconosciuto Aggiornato alla v%1$s Le novità Richiesto riavvio dell\'app per applicare le modifiche Rete Mostra brevemente la modalità corrente all\'apertura del lettore Mostra modalità di lettura Disabilita Inizia Ricerca «%1$s» globalmente Impossibile scaricare i capitoli a causa dello spazio di archiviazione insufficiente Modalità di lettura Tema Data di aggiunta Progresso Errori Completo Non hai fonti fissate Consenti eliminazione capitoli con segnalibro Elimina capitoli Fonti di questa estensione potrebbero contenere materiale NSFW (18+) 18+ Tracker non collegati: Nessun capitolo trovato Questo non impedisce a estensioni non ufficiali oppure incorrettamente segnalate di mostrare contenuti 18+ all\'interno dell\'applicazione. Impostazioni predefinite dei capitoli aggiornate %1$s: %2$s, pagina %3$d Imposta come predefinito Applica anche a tutte le voci nella mia libreria Sei sicuro di voler salvare queste impostazioni come predefinite? Impostazioni del capitolo Ricerca impostazioni Capitoli scaricati Dalla libreria Sospendi cronologia di lettura Modalità incognito Svuota cronologia Sei sicuro? Tutta la cronologia verrà persa. Cronologia cancellata Pagina successiva Pagina precedente Guida alla migrazione delle fonti Fonti NSFW (18+) Mostra nelle liste delle fonti e delle estensioni Per favore accedi di nuovo a MAL Nessuna app per la selezione dei file trovata Zone di tocco Bordo Stile Kindle A forma di L Data fine Data inizio Salva un registro degli errori su un file per condividerlo con gli sviluppatori Condividi il registro dei crash Decrescente Crescente Per numero di capitolo Per data di caricamento Tracciati Mostra numero elementi Destra e Sinistra Dividi le pagine larghe Se il posizionamento delle pagine larghe divise non corrisponde alla direzione di lettura Inverti il posizionamento delle pagine divise Potresti aver bisogno di installare estensioni mancanti ed accedere ai servizi di tracking per utilizzarle. Escludi: %s Includi: %s Nessuna Data di recupero capitolo Download automatico Successivo Precedente Le voci che si trovano in categorie escluse non saranno scaricate nonostante si trovino anche in categorie incluse. Destra Sinistra Le voci in categorie escluse non saranno aggiornati nonostante si trovino anche in categorie incluse. DNS su HTTPS (DoH) Mostra sovrapposizione con zone di tocco Mostra brevemente quando il lettore viene aperto Tocca per vedere i dettagli Questa versione di Android non è più supportata Impossibile copiare negli appunti Rotazione Disabilita modalità incognito Orizzontale Verticale Auto Crea cartelle in base al titolo delle voci Annulla tutti per questa serie Salva pagine in cartelle separate Azioni Scala di grigi Nessun risultato trovato Ordina per Capitolo non trovato Fonte non supportata Data Disattivo Errore nella condivisione della copertina Errore nel salvataggio della copertina Copertina salvata Non letti Impostazioni di ordinamento per categoria Non hai ancora nessuna categoria. Attivo Restrizioni: %s Fonte locale Copertina Formato capitolo non valido Guida al tracking Inizia a scaricare ora Alcuni produttori hanno restrizioni aggiuntive per le app che chiudono i servizi in secondo piano. Questo sito ha più informazioni su come risolvere il problema. Più basso Basso Alto Più alto Sensibilità per nascondere il menù allo scorrimento Inversa Oggi Modalità scura con nero puro Yotsuba Yin e Yang Verde Acqua e Turchese Tako Daiquiri alla Fragola Crepuscolo di Mezzanotte Mela Verde Dinamico Tema applicazione Autenticarsi per confermare le modifiche Predefinita Attività in secondo piano Le funzioni di backup e ripristino potrebbero non funzionare correttamente se le ottimizzazioni MIUI sono disabilitate. Offrono funzioni migliorate per fonti specifiche. Le voci sono tracciate automaticamente quando aggiunte alla libreria. Servizi di tracking migliorati Aspetto Traccia Guida introduttiva Interfaccia tablet Categorie escluse Aiuta a tradurre Informazioni app Installa e avvia Shizuku per usarlo come installatore delle estensioni. Shizuku non è in esecuzione Legacy Installatore Installazione dell\'estensione… Voci totali Salva i registri dettagliati nel registro di sistema (riduce le prestazioni dell\'app) Registrazione dettagliata Lingua Attenzione Dovresti tenere delle copie dei backup anche in altri posti. I backup possono contenere dati sensibili comprese le password memorizzate; fate attenzione al condividerli. Grossi aggiornamenti danneggiano le fonti, possono rallentare gli aggiornamenti e aumentare il consumo di batteria. Tocca per saperne di più. Solo su Wi-Fi Ogni 3 giorni Attenzione: grossi download di massa possono rallentare le fonti e/o bloccare %s. Tocca per saperne di più. Aggiorna tutto Aggiornamenti dell\'applicazione Cancella la cache capitoli all\'avvio dell\'app %1$d voci non presenti in libreria nel database Niente da Pulire Impossibile ottenere l\'elenco estensioni Politica sulla privacy Con capitoli non letti Per un aiuto su come risolvere gli errori di aggiornamento della libreria vedi %1$s Salva come archivio CBZ Cancellata In pausa Pubblicazione terminata Mostra voce Scorri le immagini larghe Ingrandisci automaticamente le immagini larghe Griglia con solo copertine Che non sono state iniziate Saltato perché la serie è completa Saltato perché ci sono capitoli non letti Saltato perché non ci sono capitoli letti %1$d aggiornamento(i) fallito(i) Tocca per approfondire Verticale inverso Sposta la serie in cima Disattivato Errore durante il salvataggio dell\'immagine Nessuna voce in libreria di cui eseguire il backup Apri su GitHub Cancella dati WebView Dati WebView cancellati Chiudi Nessuna fonte installata trovata Nessuna fonte trovata Conteggio non letti Ultimo aggiornamento Migliora le prestazioni del lettore Pagina %d non trovata durante la divisione Impossibile trovare il percorso della pagina %d Reimposta la modalità di lettura e l\'orientamento per tutte le serie Reimposta le opzioni del lettore per ogni serie Ripristinate tutte le opzioni del lettore Impossibile ripristinare le opzioni del lettore Beh, questo è imbarazzante Classificazione per età Versione Lingua In Pausa Lista di lettura Da Leggere Completati Non Completati Solo su rete non a consumo Copertina personalizzata Impossibile aprire l\'ultimo capitolo letto Non installato Lingua dell\'applicazione Nessuna descrizione Lavanda Errore Interno: Controllare i registri dei crash per ulteriori informazioni Vuoi eliminare la categoria «%s»? Elimina categoria Ripristina la stringa «user agent» del browser Stringa «user agent» del browser Rimuovi tutto Widget non disponibile quando il blocco app è attivo Vedi le voci aggiornate di recente È già in corso un aggiornamento La sringa «user agent» non può essere vuota Maremoto Scarica i prossimi Download automatico durante la lettura Funziona se il capitolo corrente e quello successivo sono già stati scaricati. Sei sicuro? Multiple Ultimo aggiornamento libreria: %s Stai per rimuovere «%s» dalla tua libreria Popolare Autorizzazioni per l\'archiviazione non concesse Saltato perché la serie non richiede aggiornamenti Ricerca… Tema, formato data e ora %s ha riscontrato un errore imprevisto. Ti suggeriamo di condividere il registro degli arresti anomali nel nostro canale di supporto su Discord. Categorie, aggiornamenti globali, azioni di scorrimento capitoli Download automatico, download anticipato Fonti, estensioni, ricerca globale Modalità di lettura, aspetto, navigazione Sincronizzazione unidirezionale avanzamenti, sincronizzazione migliorata Backup manuali e automatici, spazio di archiviazione Blocco app, schermo protetto Registro arresti anomali, ottimizzazioni batteria Ops! Riavvia l\'applicazione Posizione invalida: %s Titolo sconosciuto Stringa «user agent» non valida Proprio adesso Controllando i download Apri una voce casuale Nessuna voce trovata in questa categoria Le versioni F-Droid non sono ufficialmente supportate. \nToccare per saperne di più. Pulsante \"continua a leggere\" Rimuovere la data? Verrà rimossa la data di fine precedentemente selezionata da %s Verrà rimossa la data di inizio precedentemente selezionata da %s Reindicizza i download Forza l\'app a ricontrollare i capitoli scaricati Iniziati Panoramica Voci Statistiche Voci completate In locale Durata lettura Voci tracciate In uso N/D %d min Scaricati Nell\'aggiornamento globale Letti Punteggio medio %d o Totale Tracciatori %d s %d g Non ora La categoria è vuota Mostra il numero dei capitoli non letti nell\'icona Novità Copiato negli appunti Disponibile ma la fonte non è installata: %s Salta i capitoli duplicati %1$s errore: %2$s *obbligatorio Nascondi le voci già in libreria Copia negli appunti Aggiorna categoria Dividi immagini alte Sovrimpressione Ruota le pagine larghe per adattarle allo schermo Capovolgi l\'orientamento delle pagine larghe ruotate Informazioni di debug Doppio tocco per ingrandire Capitoli allo scorrimento a destra Capitoli allo scorrimento a sinistra Imposta intervallo Fuori dal periodo di rilascio previsto Intervalli Stima ogni Intervallo di aggiornamento personalizzato Prossimo aggiornamento previsto Imposta l\'aggiornamento ogni Saltato perché oggi non era previsto alcun rilascio Rimuovere il tracking di %s? Rimuovi anche da %s OK Questo rimuoverà il tracciamento locale. Cancella scaricati Con risultati Sincronizzazione libreria completata Sincronizzazione libreria Tocca qua per assistenza con Cloudflare Indice dei download invalidato Login del trakcer Non è stato possibile creare un file di backup HTTP %d, controlla il sito nella WebView Nessuna connessione ad internet %s non raggiungibile Sblocca %s Spostare la serie in fondo Timestamp relativi «%1$s» invece di «%2$s» Impostazioni app Impostazioni delle fonti Aggiornando libreria... (%s) Il selettore di file ha restituito file all\'app Dati e archiviazione Scegli una cartella Iniziamo Applica Devi selezionare una cartella Permessi di notifica Reimposta predefiniti Permessi per installare app Ti diamo il benvenuto! Altre opzioni Selezionato Non selezionato Scanlator Salta Prossimo Uso della batteria in secondo piano Per installare le estensioni delle fonti. Navigare su Per prima cosa impostiamo alcune cose. Puoi sempre cambiarle successivamente nelle impostazioni. Ricevi notifiche per aggiornamenti della libreria e altro. È necessaria l\'autorizzazione per installare le estensioni. Tocca qui per concederla. Selezione una cartella dove %1$s salverà i capitoli scaricati, i backup e altro. \n \nÈ raccomandato usare una cartella dedicata. \n \nCartella selezionata: %2$s Posizione di archiviazione Crea Mai Riduce il ghosting sugli schermi e-ink Guida di benvenuto Usato per i backup automatici, download capitoli e fonti locali. Nuovo su %s? Ti consigliamo di dare un\'occhiata alla guida introduttiva. Disponibile: %1$s / Totale: %2$s Ultimo backup automatico: %s Hai già usato %s in precedenza? Nessuno scanlator trovato Lampeggia al cambio pagina Evita interruzioni a lunghi aggiornamenti libreria, download e ripristino di backup. Archiviazione utilizzata Punteggio del tracker Cartella di archiviazione non impostata Includi impostazioni sensibili (es. token di login dei tracker) Consenti Escludi scanlator Guida all\'archiviazione Repository delle estensioni Aggiungi repository URL repository Questa repository esiste già! Elimina repository URL repository non valida Repository open source Presto Frequenza di aggiornamento personalizzata: Sti aggiornando da una vecchia versione e non sai cosa selezionare? Consulta la guida all\'archiviazione per info. Nord Aggiornamento intelligente Revoca le estensioni sconosciute affidabili Non hai repository impostate. Aggiungi altri repository a %s. Questo dovrebbe essere un URL che termina con \"index.min.json\". Vuoi eleminare la repository \"%s\"? Errore completo: Si prevede che i nuovi capitoli saranno rilasciati tra circa %1$s, con controlli ogni %2$s. Aggiungere comunque La Firma dell\'Impronta Digitale della Chiave Esiste Già Profilo di visualizzazione personalizzato La repository %1$s ha la stessa Firma d\'Impronta Digitale della Chiave %2$s. \nSe è quello che si desidera, %2$s verrà sostituita, altrimenti contatta il manutentore della repository. Sostituisci Disattiva zoom indietro Prossimamente Controlla i Prossimi Aggiornamenti Guida in arrivo Mese prossimo Mese scorso Durata del flash %1$s ms Flash con Nero Bianco Non si è potuto ottenere l\'accesso permanente alle cartella. L\'applicazione potrebbe comportarsi inaspettatamente. Flash ogni Bianco e Nero Tutte le voci lette Copia collegamento Casuale Invia registri dei crash Consenti l\'analitica Invia dati di uso anonimizzati per migliorare le funzionalità dell\'app. Invia registri anonimizzati dei crash agli sviluppatori. Sicurezza Analitica e registri di crash Repository delle estensioni Aggiornare i tracker al capitolo %d? Salta il download dei capitoli letti duplicati L\'invio dei registri dei crash e delle analitiche ci consentirà di identificare e risolvere i problemi, migliorare le prestazioni e rendere gli aggiornamenti futuri più pertinenti alle tue esigenze Vuoi aggiungere il repository \"%s\"? Rimuovi Rimuovere l\'estensione? Vuoi davvero rimuovere l\'estensione \"%s\"? Backup JSON non supportato Il file di backup è corrotto Questo manga è completato o non c\'è data di rilascio prevista. Aggiorna il progresso quando segnato come letto Tracker aggiornati al capitolo %d Predefinito (%d) Se il lettore carica un\'immagine vuota, riduci progressivamente il limite.\nSelezionato: %s Limite di elaborazione immagini hardware personalizzato Automatico Monocromatico Esporta Autore Artista Note Modifica note Capitoli non letti Usa decoder legacy per lettore di strisce lunghe Traccia pubblicamente Tracciato privatamente Segna capitoli duplicati come letti Comportamento Dopo aver letto in capitolo Dopo aver cercato nuovi capitoli Tracciato privatamente Influisce sulle prestazioni. Abilitare solo se riducendo la soglia bitmap non risolve i problemi di immagine vuota Lista libreria Libreria esportata Metti in pausa la cronologia di lettura per l\'estensione Aggiorna i titoli della libreria perchè coincidano con la fonte Attenzione: se un manga viene rinominato, sarà rimosso dalla coda download (se presente). Autenticazione in corso… Possibili duplicati Gattuccino Annulla selezione Seleziona fonti attive Seleziona fonti fissate Continua Disponibile Seleziona tutto Selezionato I capitoli letti e i progressi di lettura di entità non in libreria andranno persi Mantieni entità con capitoli letti Stai per rimuovere elementi dal database Hai altre voci nella libreria con un nome simile.\n\nSelezione una voce da migrare o aggiungi comunque. Creazione della cartella download fallita Creazione della cartella %s fallita Mi è piaciuta la parte dove… Dona Chiudi scheda Renderizza immagini nella descrizioni dei manga Nascondi gli indicatori dei capitoli mancanti Non consentire nomi di file non ASCII Garantisce la compatibilità con alcuni supporti di memorizzazione che non supportano Unicode. Quando questa opzione è abilitata, sarà necessario rinominare manualmente le cartelle sorgente e manga sostituendo i caratteri non ASCII con le relative rappresentazioni esadecimali UTF-8 minuscole. Non è necessario rinominare i file dei capitoli. Download da fonti simultanee Download da pagine simultanee Pagine scaricate simultaneamente per fonte Dati da migrare Elimina i download della voce corrente dopo la migrazione Parole chiave aggiuntive (facoltative) Aiuta a restringere i risultati della ricerca aggiungendo parole chiave aggiuntive Nascondi le voci senza corrispondenza Nascondi le voci senza nuovi capitoli Mostra la voce solo se ha capitoli aggiuntivi Queste opzioni sono lente e pericolose e possono comportare restrizioni da parte delle fonti Modalità di ricerca avanzata Suddivide il titolo in parole chiave per una ricerca più ampia Corrispondenza in base al numero del capitolo Se abilitato, sceglie l\'ultima corrispondenza. Altrimenti, sceglie la prima corrispondenza in base alla priorità della fonte. Migrazione Migrazione (%1$d/%2$d) Copia Migra Nessuna alternativa trovata Ultimo: %1$s Sconosciuto Cerca manualmente Non migrare Migra ora Copia ora Interrompere la migrazione? Interrompi Annulla Copia Migra Annulla Annulla Nessun capitolo trovato, questa voce non può essere utilizzata per la migrazione ================================================ FILE: i18n/src/commonMain/moko-resources/ja/plurals.xml ================================================ %1$s分後 %1$d件の新しい章 残り%1$s件 %1$sで完了しました (%2$s件のエラー) %d件のカテゴリー %d件の拡張機能の更新が利用可能です %1$s章と他%2$d章 %d件の項目 %1$s章 %d個のトラッカー %d章をスキップします。ソースに章が存在しないか、フィルタリングされています。 %1$d日前 次の未読の%d章 次の%d章 %1$s章が存在しません %d日 %dリポジトリ %1$d 日後 %1$s ページ %1$d 個のエントリを移行しますか? %1$d 個のエントリをコピーしますか? %1$d 件のエントリがスキップされました ================================================ FILE: i18n/src/commonMain/moko-resources/ja/strings.xml ================================================ 名前 カテゴリー ライブラリの項目 履歴 設定 ダウンロードキュー ライブラリ 履歴 新着 バックアップと復元 設定 絞り込む お気に入り 未読 フィルタを削除 アルファベット順 章の数順 最後に読んだ順 検索 グローバル検索 すべて選択 ダウンロード 章にブックマークを追加 章のブックマークを削除 コンパクトグリッド リスト ソート トラッキング 拡張機能 拡張機能の情報 移行 既読にする 未読にする 削除する ライブラリを更新 編集 カテゴリを追加 カテゴリを編集 表紙を編集 一時停止 前の章 次の章 リトライ 再開 ブラウザで開く 表示モード 表示 ダウンロードした章の数 キャンセル シェア 保存 リセット ログを開く リストア 読み込み中… アプリは利用不可 全般 ダウンロード その他 アプリについて 縦向き 横向き 自動更新 OFF 6時間ごと 12時間ごと 毎日 2日ごと 毎週 全て 自動更新の条件 充電中 ステータスが「完結済み」の作品をスキップ 読んだ後に読書進捗を更新 デフォルトカテゴリー 毎回尋ねる 更新 インストール 保留 ダウンロード中 インストール インストール済み 信用する 信用できない アンインストール 信頼できない拡張 フルスクリーン ページ遷移エフェクトを表示 ダブルタップアニメーション速度 クロップボーダー カスタムの明るさ カスタムカラーフィルター ナビゲーション 音量キー 音量キーを反転 背景色 ブラック 既定のビューアモード ページ分割 (左から右) ページ分割 (右から左) ページ分割 (上から下) 縦長のストリップ ページに分ける スケールの種類 画面サイズに合わせる ストレッチ 幅に合わせる オリジナルサイズ スマートフィット ズーム開始位置 自動 中央 通常 速い 既定の画面向き 自動回転 縦向き画面を強制 アルファ 手動で既読にした後 読んだ後自動で削除 無効 最後に読んだ章の2番目 新しい章をダウンロード バックアップを作成 現在のライブラリを復元するために使用できます バックアップを復元 バックアップファイルからライブラリを復元する 自動バックアップの頻度 バックアップが作成されました チャプタキャッシュをクリア 消去中にエラーが発生しました データベースをクリア ライブラリにない項目の履歴を削除 バージョン クラッシュレポートを送信する %1$sにログイン ユーザー名 パスワード ログイン ログインしました 追加 カテゴリー名を編集 カテゴリーを設定 削除 インストール 取り消し ヘルプ 前の章を既読にする WebView で開く ビューア 同期 悪意のある拡張機能は保存されているすべてのログイン情報を読み取ることや、任意コード実行をすることができます。 \n \nこれらのリスクを受け入れ、この拡張機能を信頼しますか? ページ数を表示 画面を常にON 高さに合わせる アニメ効果をOFF 横向き画面を強制 最後に読んだ章 最後に読んだ章の3番目 最後に読んだ章の4番目 最後に読んだ章の5番目 トラッカー 復元が完了しました バックアップしたいのは? バックアップを復元中 バックアップを作成中 サイズ: %1$s キャッシュがクリアされ、%1$d 個のファイルが削除されました Cookiesを削除 Cookiesを削除しました エントリーを削除しました バグの修正などに役立ちます。個人情報を送信しません 不明なエラー カテゴリーを更新中 これ以上の結果はありません グローバル検索… 最近の更新 ブラウズ 連載中 不明 ライセンス済み ライブラリから削除 ライブラリに追加しました ライブラリから削除しました ダウンロードした章を削除してもよろしいですか? 次をクリップボードにコピーしました: \n%1$s 第%1$s章 ダウンロード中 (%1$d/%2$d) エラー 一時停止済み ソースタイトル 章の数 ソースに基づいた順 章番号順 ダウンロード 未読 選択した章を削除してもよろしいですか? 同期 読書中 完結済み 放棄済み 保留中 読む予定 評価 タイトル ステータス ステータス タイプ この名前が既に存在しています! カテゴリーが削除されました この章の読書日時を削除してもよろしいですか? この項目の章をすべてリセット ライブラリに追加しますか? 画像を保存しました カスタム フィルタ カバーとして設定 カバーとして設定しました ページ: %1$d 次の章が見つかりません 画像をロードできませんでした カバーとして設定しますか? 移行するデータを選択 移行 コピー 章のダウンロードに失敗しました。「ダウンロード」にて再試行してください 新しい章が見つかりました カバーを更新できませんでした まずは項目をライブラリに追加してください カバー画像を選択 バックアップファイルを選択 ダウンロード 新しいバージョンがありません ダウンロード中… タップでアップデートをインストール ダウンロード中にエラー発生 アップデート利用可能! ダウンロードがありません 最近の更新はありません 最近は何も読んでいません ライブラリは空です カテゴリーがありません。「+」をタップしてカテゴリーを追加し、ライブラリを整理できます。 ダウンロード エラー 予期せぬエラーが発生したため、ダウンロードは失敗しました Wi-Fi接続は利用できません ネットワーク接続が利用できません ダウンロード一時停止済み 一般設定 読み返し中 未インストールのソース: %1$s 読み終わりました: 読んでいます: 次: 前: 次の章がありません 前の章がありません ページをロード中… ページのロードに失敗: %1$s 長押しでアクションを表示 読み終わった章をスキップ カラーフィルターブレンドモード オーバーレイ スクリーン 結果が見つかりませんでした 移行元を選択 前へ 次へ 更新 ライブラリ 廃止済み この拡張機能は利用不可になったため、正常に機能しなかったり、アプリでエラーを起こしたりする恐れがあります。アンインストールすることをお勧めします。 日付形式 グローバルアップデート %1$sからログアウトしますか? ログアウト ログアウトしました 一時停止 その他 その他 最新章の更新順 章を見る すべてキャンセル ライト ダーク システム 通知設定 セキュリティとプライバシー アンロックを必要とする タイムアウトロック 常時 しない セキュア画面 第%1$s章 最新 ソース ローカルソース タブ メールアドレス ライブラリにある項目はフィルターされます ダウンロード済みのみ 更新を確認 オープンソースライセンス Webサイト デバイス設定を開きませんでした バッテリー最適化は既に無効です バックグラウンドでのライブラリ更新とバックアップの役に立ちます バッテリー最適化を無効にする ライブラリの表紙を更新 データ 復元をキャンセルしました バックアップを復元できませんでした 既に復元中です バックアップできませんでした 既にバックアップ中です %1$02d分%2$02d 秒 ソースがありません: バックアップにはライブラリの項目が含まれません。 無効なバックアップファイル: 一方同期の外部追跡サービスにある章の読書進捗を更新します。個別の項目の「同期」ボタンで追跡サービスを設定してください。 余白 読書中 章の間の遷移ページを常に表示 ギャップ付き縦長のストリップ グレー フィルターされた章をスキップ 焼き込み/比較(暗) 覆い焼き/比較(明) 乗算 画面の切り抜きエリアにも内容を表示 更新あり ライブラリを更新時、新しい表紙と情報を確認します メタデータを自動で更新 行あたりのアイテム数 画面 通知内容を非表示 セキュア画面はアプリを切り替える時アプリの内容を非表示し、画面キャプチャを無効化します 底に移動 トップに移動 最古 ピン留めを外す ピン留め カテゴリータブを表示 快適グリッド 移行 全て無効にする 全て有効にする 選択を反転 メニュー 章の更新 WebViewアプリを更新して互換性を向上させてください WebViewが必要です ライブラリを更新中 ビューアモード 詳細を非表示 拡張機能の更新 Cloudflareをバイパスできませんでした 第%1$s章とその他%2$d章 第%1$s章 第%1$s章 - %2$s ページが見つかりません このシリーズでは 追跡を追加 ライブラリに追加 アップロード日付順 詳細を表示 ライブラリ内 ローカルソースガイド ピン留め済み 最近に使用 現在のビューアモードを、ビューアが立ち上がるとしばらく表示します ビューアモードを表示 ソースが見つかりませんでした 無効化 開始 両方 水平 なし 不明なステータス 作者不明 変更を適用するには再起動してください ネットワーク タップでのページめくりを反転 v%1$sに更新しました 更新情報 読み方 完了 プログレス 空き領域不足のため、章をダウンロードできませんでした ピンソースがありません グローバルで「%1$s」を探す テーマ ライブラリへの追加日付順 エラー ログインしていないトラッカー: ブックマークした章の削除を許可 章を削除 この拡張機能のソースには成人向けのコンテンツが含まれる可能性があります 成人向け 非公式や誤ってフラグ付けされた可能性のある拡張機能の成人向けのコンテンツはこれからも表示される恐れがあります。 章が見つかりません デフォルトの章設定を更新しました %1$s: %2$s、第%3$dページ デフォルトとして設定 ライブラリにあるすべての項目にも適用 デフォルト設定として保存しますか? 章の設定 検索設定 ダウンロードした章の数 ライブラリ内から 閲覧履歴の記録を一時停止します シークレット モード 履歴を全消去 履歴がすべて失われます。続行しますか? 履歴が削除されました 次のページ 前のページ ソース移行ガイド 成人向けのソース ソース・拡張機能リストに表示 ファイルを選択できるアプリが見つかりません もう一度MALにログインしてください アイテム数を表示する 読み終わった日付 読み始めた日付 章の番号順 アップロードされた日付順 登録済み 開発者に渡すよう、エラー ログを保存します クラッシュ ログを共有 タップ可能なゾーン 右と左 Kindleスタイル L形 降順 昇順 分割された幅広いページの配置が読む方向と一致しない場合は有効にしてください 分割ページの配置を反転 幅広いページの分割 後で手動で必要な拡張機能をインストールし、使用したい追跡サービスにログインしてください。 次へ 前へ ビューアが立ち上がるとしばらく表示します タップ可能なゾーンを表示 DNS over HTTPS (DoH) 含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。 自動ダウンロード 下記を除外: %s 下記を含む: %s なし 含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。 タップで詳細を表示 章の取得された日付順 まだカテゴリを登録していません。 このAndroidはもうサポートされていません 結果が見つかりませんでした 非対応ソースです 未読 表紙を共有できませんでした 表紙を保存できませんでした 表紙を保存しました 表紙 クリップボードにコピーできませんでした 日付 並び替え 章フォーマットが無効です 章が見つかりませんでした シークレットモードを無効にする 追跡ガイド 画面向き 自動 項目のタイトルに基づいてフォルダを作成 別々のフォルダにページを保存 操作 グレースケール オフ オン カテゴリ別のソート設定 制限: %s このシリーズの全項目をキャンセル ローカル ソース 横向き 縦向き 真っ黒モード 四つ葉 陰陽 Tako ストロベリーダイキリ 黄昏 青りんご アプリテーマ ダウンロードを開始します ダイナミック 一部のスマホメーカーはバックグラウンドサービスを終了する追加のアプリ制限を施しています。修正する方法についてはこのWebサイトをご覧ください。 バックグラウンドアクティビティ MIUI最適化が有効な場合はバックアップ・復元が正常に機能しない恐れがあります。 最低 低い 高い 最高 反転配色 今日 翻訳に協力 入門ガイド タブレットUI 追跡 除外されるカテゴリー メニューを自動非表示するスクロール量 ティール & ターコイズ 外観 認証を行って変更を確認してください デフォルト レガシー インストーラ アプリの情報 Shizukuを拡張機能インストーラーとして使用するには、Shizukuをインストールして起動してください。 Shizukuは実行中ではありません 項目数 拡張機能をインストール中… 高度な追跡サービス 特定ソース専用の高度な機能を提供します。項目はライブラリに追加される時、自動で追跡され始めます。 ほかの場所にもバックアップのコピーを保管してください。バックアップには保存されたパスワードなどの機密性の高い情報が含まれることがあります。共有時に十分ご注意ください。 システムログにverboseログを出力(アプリのパフォーマンスが低下します) 大規模のアップデートはソースに有害で、ソースを遅くし、電池の消耗を増加する可能性があります。詳しくはタップでご覧ください。 言語 警告 Verboseログ出力 警告:大量のダウンロードは、ソースの速度低下や %s のブロックにつながる可能性があります。詳細を確認するにはタップしてください。 3日ごと Wi-Fi接続時のみ 全て更新 アプリ更新 データベースにはライブラリにない項目は%1$d件あります アプリ起動時に章のキャッシュを消去 消去できるものはありませんでした 利用可能な拡張機能を取得できませんでした プライバシーポリシー 未読の章がある作品をスキップ ライブラリ更新エラーの修正については、%1$sをご覧ください CBZアーカイブとして保存 完結済み キャンセル済み 休載中 項目を表示 表紙グリッド 読み始めていない作品をスキップ 未読の章がある為スキップしました 横長の画像に自動でズームイン 完結済みの為スキップしました 読了した章がない為スキップしました 幅広い画像を左右に移動 タップでもっと詳しく %1$d件の更新に失敗しました 縦向き (反転) シリーズをトップに移動 無効 バックアップできるライブラリ項目はありません GitHubに移動 画像の保存時にエラー発生 閉じる WebViewデータを消去 WebViewデータを消去しました ソースが見つかりません インストール済みのソースが見つかりません 前回の更新確認 未読の章数 ビューアのパフォーマンスを向上させます 分割時にページ%dが見つかりませんでした シリーズ別のビューア設定をリセット 各シリーズのビューアモードと画面向きをリセットします ページ%dのファイルパスが見つかりませんでした ビューア設定を全てリセットしました ビューア設定をリセットできませんでした えっと、こりゃまずいですね バージョン 言語 レイティング区分 非従量制課金接続でのみ 読書中リスト 読みたいリスト 未読了リスト 読了リスト 後で読むリスト 最後に読んだ章を開けませんでした カスタム表紙 未インストール アプリ言語 ラベンダー 説明がありません カテゴリー「%s」を削除しますか? カテゴリーを削除 InternalError: 詳しくはクラッシュ ログをご参照ください デフォルトのユーザーエージェント文字列 デフォルトのユーザーエージェント文字列をリセットする 全て削除 最近更新されたライブラリの項目を見る アプリロックがONの時、ウィジェットは利用できません アップデートはすでに進行中です ユーザーエージェント文字列を入力してください 津波 事前ダウンロード 読書中に自動でダウンロード 現在のと次の章は既にダウンロード済みの場合のみ有効です。 本当に実行しますか? 多言語 前回のライブラリ更新: %s ライブラリから「%s」を削除しようとしています 人気 ストレージ権限を持っていません シリーズは更新を必要としないため、スキップされました 検索… %sでは予期せぬエラーが発生しました。お手数ですが、クラッシュ ログを Discord のサポート チャネルで共有するようお願い致します。 無効な場所: %s 不明なタイトル ユーザー エージェント文字列が無効です おっと! ちょうど今 アプリケーションを再起動 ビューアモード、表示、ナビゲーション 自動ダウンロード、事前ダウンロード 一方同期、高度な同期 ソース、拡張機能、グローバル検索 手動・自動バックアップ、ストレージ領域 アプリロック、セキュア画面 クラッシュ ログのダンプ、バッテリーの最適化 テーマ、日付と時刻の形式 カテゴリ、グローバル アップデート、章の間のスワイプ おまかせ閲覧 このカテゴリに項目がありません ダウンロード内容を検査しています F-Droidビルドは正式にサポートされていません。 \n詳細はタップしてご覧ください。 続きを読むボタン 日付を削除しますか? ダウンロードのインデックスを再作成する %sで指定された終了日付を消去します %sで指定された開始日付を消去します ダウンロードした章の再スキャンを強制 ローカル 開始済み 閲覧時間 作品 グローバルアップデート 合計 閲覧済み トラッカー トラッキング中の作品 使用中 N/A %d時間 %d分 %d秒 統計情報 概要 読み終わった作品 ダウンロード済み 平均 %d日 後で カテゴリが空です アップデートアイコンに未読メッセージの件数を表示 クリップボードにコピーしました 利用可能ですが未インストールのソース: %s 重複の章をスキップ %1$s エラー: %2$s *必須 クリップボードにコピー ライブラリにある項目を非表示 カテゴリを更新 長い画像を分割 オーバーレイ 画面に合わせるように幅広いページを回転 回転した幅広いページの向きを反転 デバッグ情報 左にスワイプする章 右にスワイプする章 ダブルタップでズーム 間隔を設定 カスタマイズした更新頻度 次の更新予定 次の更新時点を予測 間隔 今日、連載更新が予想されていないためスキップしました 結果あり %s の追跡を削除しますか? 毎に評価 ごとに更新するように設定する ローカルの追跡が削除されます。 %s からも削除 ダウンロードを削除 OK ライブラリを同期しています ライブラリを同期しました Cloudflareに関するヘルプ情報はこちら ダウンロード インデックスを消去しました バックアップ ファイルを作成できませんでした 追跡サービスにログイン HTTP %d、WebViewでこのWebサイトを確認してください インターネット接続がありません %sにアクセスできませんでした %sをアンロック シリーズを底に移動 相対的なタイムスタンプ 「%2$s」の代わりに「%1$s」を使用 ライブラリの更新中… (%s) ソース設定 アプリ設定 選択したファイルがありません なし Eインク画面の焼き付きを軽減 前回の自動バックアップ: %s ページめくりの時、画面を点滅させる 使用中のストレージ領域 データとストレージ トラッカーの評価点数 作成 適用 デフォルトに戻す スキャンレーターが見つかりませんでした スキャンレーター スキャンレーターを除外 その他のオプション 選択済み 未選択 上に移動 保存場所 自動バックアップ、章のダウンロード、ローカル ソースの保存位置となります。 フォルダを選択してください 初回設定ガイド %sは初めて?入門ガイドをチェックしてみしましょう。 はじめる フォルダを選択してください ようこそ! %sを再インストールしていますか? スキップ 次へ はじめに初回設定をしていきましょう。このあとも「設定」にていつも変更できます。 保存場所が設定されていません %1$sのダウンロード、バックアップなどの保存先のフォルダを設定してください。 \n \nアプリ専用のフォルダの作成・使用がおすすめです。 \n \n選択したフォルダ:%2$s 通知の許可 アプリのインストールの許可 時間のかかるライブラリ更新、ダウンロードやバックアップの復元などへの中断を防ぎます。 バックグラウンドでのバッテリー使用量 ソース拡張機能をインストールするために必要です。 ライブラリ更新などの通知を送信します。 許可 空き領域:%1$s/総計:%2$s 新章は%1$sぐらいでリリースされると予測しており、%2$sごとに確認する予定です。 詳細なエラー情報: 拡張機能をインストールするためには権限が必要です。タップで許可してください。 このリポジトリは既に存在しています! カスタム更新頻度: リポジトリを削除 リポジトリ「%s」を削除してもよろしいですか? ストレージ ガイド トラッカーログイン情報などの機密性の高い情報を含む 間もなく 不明な拡張機能の信頼を取り消す 拡張機能リポジトリ リポジトリURLが無効です %sにリポジトリを追加します。「index.min.json」で終わるURLを入力してください。 リポジトリを追加 ソース リポジトリを開く 古いバージョンからバージョンアップしたばかりで、選択に悩んでいますか?ストレージ ガイドにご参照ください。 リポジトリを設定していません。 リポジトリURL Nord スマート・アップデート ズームアウトを無効にする 追加 交換 カスタムディスプレイプロファイル 前月 翌月 近々公開 今後のアップデート 署名キーのフィンガープリントはすでに存在します 今後のご案内 リポジトリ %1$s は %2$s と同じ署名キー指紋を持っています。 \nこれが予想される場合は %2$s が置換されますが、そうでない場合はリポジトリのメンテナーに連絡してください。 閃光時間 %1$s ms フラッシュ・エブリ フラッシュ ブラック ホワイト 白と黒 このマンガは完結しているか、あるいは発売予定日が決まっていない。 永続フォルダアクセスの取得に失敗しました。 アプリが予期しない動作をする可能性があります。 リンクをコピーする 拡張機能リポジトリ JSONバックアップはサポートされていません バックアップファイルが壊れている トラッカーが章 %d に更新されました ランダム 匿名化されたクラッシュ ログを開発者に送信します。 分析を許可する 安全 分析とクラッシュログ 重複して読んだ章のダウンロードをスキップする 既読としてマークされた場合の更新の進行状況 すべての既読エントリ クラッシュログを送信する アプリの機能を向上させるために、匿名化された使用状況データを送信します。 クラッシュ ログと分析を送信することで、問題を特定して修正し、パフォーマンスを向上させ、今後のアップデートを貴方のニーズに合わせたものにすることができます 取り除く 拡張機能を削除しますか? 本当に\"%s\"拡張機能を削除しますか? リポジトリ\"%s\"を追加しますか? トラッカーを章 %d に更新しますか? パフォーマンスに影響する。 ビットマップのしきい値を下げてもブランク画像の問題が解決しない場合のみ有効にしてください。 デフォルト (%d) カスタム・ハードウェア・ビットマップ閾値 リーダが空の画像を読み込んだ場合は、しきい値を徐々に下げてください。\n選択されました: %s ライブラリをエクスポートしました ノート ノートを編集 バックアップ 行動 章の読了後 ライブラリーのマンガのタイトルをソースに合わせて更新 拡張機能の閲覧履歴を一時停止 ログイン中… 重複する既読章を既読としてマークする 新章取得後 ライブラリに類似した名前のエントリが存在します。\n\n移行するエントリを選択するか、そのまま追加してください。 著者 アーティスト 未読の章 ダウンロードディレクトリの作成に失敗しました ディレクトリの作成に失敗しました: %s データベースから作品が削除されます 非図書館エントリの章の読み取りと進捗は失われます 読み終えた章を含むエントリーを保持する 重複の可能性 寄付する 自動車 キャットプッチン モノクロ マンガの描写で画像をレンダリングする 欠落している章のインジケーターを非表示にする レガシーデコーダーを長尺ストリップリーダーに使用する ライブラリーリスト 非ASCIIファイル名を許可しない 特定のUnicode非対応ストレージメディアとの互換性を確保します。有効にした場合、ソースフォルダとマンガフォルダは手動で名前を変更する必要があります。非ASCII文字を小文字のUTF-8 16進数表記に置き換えてください。チャプターファイルの名前変更は不要です。 同時ソースダウンロード 同時ページダウンロード ソースごとの同時ダウンロードページ数 警告:マンガのタイトルが変更された場合、ダウンロードキューから削除されます(存在する場合)。 非公開で追跡 非公開で追跡する 公開で追跡する タブを閉じる 利用可能 すべて選択 有効なソースを選択 固定されたソースを選択 移行するデータ ================================================ FILE: i18n/src/commonMain/moko-resources/jv/plurals.xml ================================================ %1$d dinten kala-wingi Sawise %1$s menit %d kategori %1$d Dino engkas Nggawe %d chapter sing gorong diwoco Mari kurang %1$s karo %2$s kaluputan Kurang %1$s %d dina %1$s latar %1$s bab Ilang %1$s bab Puniki %d chapter %d pelacak Nglangkungi %d bab, embuh sumbere ilang utawa wis difilter kanggo entri %d %1$d bab anyar Bab %1$s lan %2$d liyane Wonten %d Nganyari ekstensi %d repo Pindhah %1$d entri? Salin %1$d entri? %1$d entri lewatin ================================================ FILE: i18n/src/commonMain/moko-resources/jv/strings.xml ================================================ Ndonlot… Donlot Jinis Judhul Ora ditemokake bab Donlot bab %1$s Liyane Sandhi Jeneng pangguna Versi DNS liwat HTTPS Dipateni Alfa Biru Ijo Abang Cepet Nengen Ngiwa Nengen moro ngiwa Ngiwa moro nengen Nengen Ngiwa Ireng Klawu Putih Layar wutuh Kabeh Pas ngisi daya Saben minggu Saben 2 dina Saben dina Saben 12 jam Saben 6 jam Lansekap Potret Tampilan Format tanggal Murup Mati Tema Donlot Bali Mbukak log Simpen Pindhah paling ngisor Pindhah paling ndhuwur Paling lawas Paling anyar Pateni Dhaptar Bukak ing WebView Bukak ing browser Jajal maneh Bab sabanjure Bab sadurunge Ndeleng bab Ganti jeneng kategori Sunting kategori Tambah kategori Tambah Sunting Pateni kabeh Aktifke kabeh Mbusak Donlot Pilih kuwalik Pilih kabeh Golek setting Golek Tanggal ditambahke Bab paling anyar Total bab Miturut abjad Durung kewoco Saringan Pengaturan Sejarah Kategori Ora ono updetan anyar Ora ono donlotan Nulungi Info Ekstensi Ekstensi Pindah Serep lan mulihake Sumber Sejarah Nganyari Perpustakaan Antrian Donlot Setelan Liyane Jeneng Entri perpustakaan Donlotan mandheg Donloder Komplit Durung maca Opo-opo Jeda Nyunting sampul Ngatur kategori Nganyari perpustakaan Ngilangi penunjuk bab Penujuk bab Tandai sadurunge dadi diwaca Tandai dadi durung diwaca Tandai dadi diwaca Penggolekan global Tanggal njupuk chapter Terakhir di waca Ngilangno saringan Kelacak Diwenehi tandha Menu Ngelacak Bab Sampeyan ora duwe kategori. Dhemok tombol tambah kanggo nggawe siji kategori kanggo ngatur perpustakaane sampeyan. Koleksine sampeyan kosong Babagan Majeng Ngelacak Pamaca Koleksi Tampilan Umum Aplikasi ora ono Ngemot… Wiwiti ngunduh saiki Segerke Maju Pulihke Klik gae Inpo luwih lanjut Baleni Balekke Bagi Pasang Mudun Munggah Miturut tanggal unggah Miturut nomer bab Urutke Batalke kabeh seri iki Batalke kabeh Batalke Copot pin Pin Tampilaken jumlah item Tampilaken tab kategori Lokal manga Chapter downloadan Kothak penak Kothak kompak Tampilan Mode tampilan Migrasi Teruske Mulai Hapus Total entri Otentikasi kanggo konfirmasi perubahan Default Nampilno manga Awas basa Tutup Batesan: %s Karo status \"Rampung\" Kothak sampul Tumuti sistem Tema aplikasi Dinamis Ijo apel Iki ora nyegah ekstensi kang ora resmi utawa salah dilabeli kanggo nampilake konten NSFW (18+) ing aplikasi. Dinten puniki Mati Kaamanan Tansah Sumber NSFW (18+) Tampilaken ing sumber lan dhaptar ekstensi Karo bab durung diwaca Kelola notifikasi Amanaken layar sembunikan konten aplikasi wektu ngaleh aplikasi lan blokir tangkapan layar Surup wengi Kunci wektu meneng Pindah seri mendhuwur Stroberi Daiquiri Tako Yin lan Yang Yotsuba Mode ireng banget Umpetake konten notifikasi Amanaken layar Saben 3 dinten Namung ing Wi-Fi Ora kapracaya Iku durung diwiwiti periksa sampul lan rinci anyar wektu memerbarui pustaka kategori gawan Kalebu: %s Kajaba: %s Nganyari tertunda Nganyari Nganyari kabeh pasang Ngetrap Pracaya Ekstensi ora kapracaya Tansah takon Tampilake nomer halaman Kuwalik Tampilake mode maca Tengen lan Kiwa Masang Item saben baris ora tau Ucul Ekstensi iki ora kasedhiya maneh. Gagal kanggo entuk dhaptar ekstensi 18+ Sumber saka ekstensi iki bisa ngemot konten NSFW (18+) Masang ekstensi… Pemasang Shizuku ora lumaku Pasang lan wiwit Shizuku kanggo migunakake Shizuku dadi pemasang ekstensi. Ora Kaping duane Werna latar Kaya Kindle Tepi Walik tombol volume Tampilake konten di wilayah kang terpotong Lewati bab dithandani kawaca Tombol volume Wangun L Priksa nganyari pungkasan Total gak diwoco Updatean umum Updatean otomatis Mbutuhake mbukak kunci Nganyari metadata otomatis Jaringan gak kebates tok Bohoso aplikasi Ekstensi iki ditandatangani nganggo sertifikat sing ora dipercaya lan ora diaktifake.\n\nEkstensi angkoro bisa maca kredensial login sing disimpen ing Mihon utawa nglakokake kode sewenang-wenang. Kanthi percaya karo sertifikat iki, sampeyan nampa risiko kasebut. Ndownload Tampilake overlay zona tutul Manga ing kategori sing ora kalebu ora bakal dianyari sanajan uga ana ing kategori sing kalebu. Ora ono Ketunda Versine Bohoso Rating umur Infone aplikasi Tampilake kanthi ringkes nalika maca dibukak Pamisahan kaca kaping pindho Nganyari otomatis watesan piranti Setelan saben kategori kanggo ngurutake lan tampilan Apa sampeyan pengin mbusak kategori \"%s\"? Busak kategori Tampilake mode saiki kanthi ringkes nalika maca dibukak InternalError: Priksa log kacilakan kanggo informasi luwih lengkap Morop Lavender Ketok pinggiran Ganti panggonan pamisah kaca kaping pindho Yen panggonan pamisah kaca dobel ora cocog karo arah maca Seda Padhang khusus Animasi transisi kaca Kacepetan animasi tutul kaping pindho Walik zona tutul Horisontal Nggawe folder miturut judhul manga Numpuki Layar Pandhu arah Vertikal Ngobong / peteng Nangkis / Padang Skip bab sing disaring Skala abu-abu Vertikal Otomatis Mode maca standar Sakdurunge Lanjut Vertikal sakteruse Dipateni Filter warna khusus Mode campuran filter warna Layar urip terus Aksi Tampilake ing tunyuk dawa Simpen kaca menyang folder sing kapisah Statistik Lokal Diwiwiti Diundhuh Telusuri… Ngehapus downloadan Dipunpilih Mboten dipunpilih Pilihan liane Data lan penyimpanan Bakal muncul navigasi mendhuwur Diluru Sumbangan Otomatis Bikak kunci %s Trapake jeda wayah Nganyari panyaris frekuensi nganyari kang diarep-arep sabanjure Skor pelacak mawut Mbaharui kategori Bikak entri acak Busek sedaya Santun dhateng blabak klip Santun link Bab durung diwaca Tombol lajengaken maos Terapaken OK Pindhah seri ka ngisor Cathetan Ganti cathetan Mbalikake marang default Ora saiki Tambahaken mawon Panuntun wiwitan Sugeng rawuh! Ayo awakdewe atur sawetara perkara ndhisik. Sampeyan uga mesthi isa ngowahi ing menu setelan mengko. Terusane Rampung Nglangkungi Milih direktori kanggo nyimpen isi saka %1$s, kalebu unduhan bab, data backup, lan liya-liyane. \n \nApike kudu nganggo direktori kapisah. \n \ndirektori ingkang dipunpilih: %2$s ================================================ FILE: i18n/src/commonMain/moko-resources/ka-rGE/plurals.xml ================================================ ნაპოვნია გაფართოების განახლება ნაპოვნია %d გაფართოების განახლება თავები %1$s და კიდევ 1 თავები %1$s და კიდევ %2$d ნაპოვნია ახალი თავი ნაპოვნია %1$d ახალი თავი %d ჩანაწერისთვის %d ჩანაწერისთვის 1 თავი %1$s თავი დარჩა 1 დარჩა %1$s დასრულების დრო %1$s. %2$s შეცდომა დასრულების დრო %1$s. %2$s შეცდომა %d კატეგორია %d კატეგორიები 1 წუთის შემდეგ %1$s წუთის შემდეგ გუშინ %1$d დღის წინ ხვალ %1$d დღეში შემდეგი წაუკითხავი თავი შემდეგი %d წაუკითხავი თავი 1 დღე %d დღე 1 გვერდი %1$s გვერდი აკლია %1$s თავი აკლია %1$s თავი შემდეგი თავი შემდეგი %d თავი %d ტრეკერი %d ტრეკერი გამოტოვებულია %d ტავი. ან წყარო აღმოჩენილი არაა, ან ფილტრში მოჰყვა გამოტოვებულია %d ტავი. ან წყარო აღმოჩენილი არაა, ან ფილტრში მოჰყვა %d რეპო %d რეპო ================================================ FILE: i18n/src/commonMain/moko-resources/ka-rGE/strings.xml ================================================ სახელი კატეგორიები ბიბლიოთეკის ჩანაწერები ისტორია მეტი პარამეტრები გადმოწერის რიგი ბიბლიოთეკა განახლებები ისტორია დახმარება პარამეტრები მენიუ ფილტრი ჩანიშნული წაუკითხავი ფილტრის წაშლა ანბანის მიხედვით თავების რაოდენობა ბოლოს წაკითხული ბოლო თავი ძებნა ყველას მონიშვნა მონიშვნის ინვერსია ყველას წაკითხულად მონიშვნა ყველას წაუკითხავად მონიშვნა წინას წაკითხულად მონიშვნა გადმოწერა მონიშნული მონიშვნის მოხსნა წაშლა ბიბლიოთეკის განახლება რედაქტირება დამატება კატეგორიის დამატება კატეგორიის რედაქტირება კატეგორიის სახელის ვცლილება თავების ხილვა პაუზა წინა თავი შემდეგი თავი თავიდან ცდა წაშლა გაგრძელება ბრაუზერში გახსნა WebView-ში გახსნა ჩვენების რეჟიმი ჩვენება კომპაქტური ბადე სია კომფორტული ბადე გადმოწერის ნიშნაკი კატეგორიის ჩანართების ჩვენება გააუქმე გააუქმე ყველა დალაგება უახლესი უძველესი თავში ატანა ბოლოში ჩამოტანა დაინსტალირება გაზიარება შენახვა გადატვირთვა გაუქმება ლოგის გახსნა აღდგენა უკან წინ განახლება იტვირთება… აპლიკაცია არ არის ხელმისაწვდომი ზოგადი ბიბლიოთეკა წამკითხველი გადმოწერები თვალყურის დევნება დამატებით ინფორმაცია სისტემური მსუბუქი ჩართული თარიღის ფორმატი შეტყობინებების მართვა უსაფრთხოება და კონფიდენციალობა განბლოკვის მოთხოვნა ბლოკირება უმოქმედობის დროს ყოველთვის არასდროს უსაფრთხოების ფანჯარა შეტყობინების შიგთავსის დამალვა დისპლეი ელემენტი თითოეულ მწკრივში პორტრეტი პეიზაჟი განახლებები ბიბლიოთეკის განახლების სიხშირე ხელით ყოველ 6 საათში ყოველ 12 საათში ყოველდღე ყოველ 2 დღეში ერთხელ ყოველ კვირა ბიბლიოთეკის განახლების შეზღუდვები იტენება მხოლოდ განაახლე მიმდინარე მანგა ავტომატურად განაახლე მეტადატა მიგრაცია ნაგულისხმევი კატეგორია ყოველთვის მკითხე ყველა განაცლება დაინსტალირება ინსტალირდება დაისნტალირებული იტვირთება მოლოდინში წაშლა მთლიან ეკრანზე კონტენტის ჩვენება ჩამოჭრილ ადგილზე გვერდის გადასვლების ანიმირება გვერდის ნომრის ჩვენება კითხვის რეჟიმის ჩვენება მოკლედ აჩვენე ახლანდელი რეჟიმი როცა მკითხველი გახსნილია კუთხეების ჩამოჭრა გაამრავლე ეკრანი განათება დაბნელება დატოვე ეკრანი ანთებული გამოტოვე წაკითხული თავები გამოტოვე გაფილტრული თავები ნავიგაცია ხმის კლავიშები ხმის კლავიშების ფუნქციების გაცვლა ფონის ფერი თეთრი ნაცრისფერი შავი ნაგულისხმევი კითხვის რეჟიმი მარცხნიდან მარჯვნივ მარჯვნიდან მარცხნივ ვერტიკალური ვერტიკალური განგრძობითი სკალირების ტიპი ეკრანზე მორგება გაწელვა სიგანეზე მორგება სიმაღლეზე მორგება ორიგინალური ზომა ჭკვიანურად მორგება საწყისი პოზიციის დაზუმვა ავტომატური მარცხნივ მარჯვნივ შუაში ანიმაციის გარეშე ნორმალური სწარფი გადმოტრიალება თავისუფალი პორტრეტის რეჟიმი პეიზაჟის რეჟიმი წითელი მწვანე ლურჯი ალფა ყოველთვის აჩვენე თავებს შორის გადასვლა კითხვა ცარიელი არეა გვერდებზე წაშალე წაკითხულად მონიშვნის შემდეგ წაკკითხვის შემდეგ წაშალე გამორთული ბოლო წაკითხული თავი ბოლოს წინა წაკითხული თავი ბოლოდან მესამე წაკითხული თავი ბოლოდან მეოთხე წაკითხული თავი ბოლოდან მეხუთე წაკითხული თავი გადმოწერე ახალი თავები სერვისები განაახლე თავის პროგრესი წაკითხვის შემდეგ რეზერვის შექმნა შესაძლებელია გამოყენებულ იქნას ახლანდელი ბიბლიოთეკის ასადგენად რეზერვის აღდგენა ბიბლიოთეკის აღდგენა რეზერვიდან რეზერვის შექმნის სიხშირე რეზერვი შექმნილია არასწორი სარეზერვო ფაილი მარქაფი ბიბლიოთეკის ჩანაწერებს არ შეიცავს. დაკარგული წყაროები: აღდგენა შესრულებულია %1$02d წთ, %2$02d წმ მარქაფი უკვე მიმდინარეობს რას გსურს რომ შეუქმნა რეზერვი? რეზერვის შექმნა რეზერვის შექმნა ვერ მოხერხდა აღდგენა უკვე მიმდინარეობს რეზერვის აღდგენა რეზერვის აღდგენა ვერ მოხერხდა აღდგენა გაუქმებულია მონაცემები თავის ქეშის გასუფთავება გამოყენებულია: %1$s ქეში გასუფთავებულია. წაიშალა %1$d ფაილი შსევდომა დაფიქსირდა ქეშის გასუფთავებისას Cookie -ების გასუფთავება Cookie -ები გასუფთავებულია მონაცემთა ბაზის გასუფთავება ისტორიიდან წაიშლება ჩანაწერები, რომლებიც თქვენს ბიბლიოთეკაში არაა შენახული ჩანაწერები წაშლილია ბიბლიოთეკის მანგების ყდის ცვლილება ელემენტის ოპტიმიზაცუა უკვე გამორთულია ვერ მოხერხდა მოწყობილობის პარამეტრების გახსნა ვებსაიტი ვერსია განახლებების მოძებნა ქრეშის რეპორტის გაგზავნა ეხმარება შეცდომების გამოსწორებაში. სენსიტიური მონაცემები არ იქნება გაგზავნილი მხოლოდ გადმოწერილები თქვენს ბიბლიოთეკაში ყველა ჩანაწერის გაფილტვრა შესვლა %1$s-ში მომხმარებლის სახელი ელ. ფოსტა პაროლი შესვლა შესულია გამოვიდე %1$s-დან? გამოსვლა გამოსვლა წარმატებით მოხერხდა დაფიქსირდა უცნობი შეცდომა კატეგორია ახლდება ჩანართები შედეგების სიის დასასრული შედეგი ვერ მოიძებნა ლოცალური წყარო სხვა ბოლოს გამოყენებული გლობალური ძებნა… უკანასკნელი დათვალიერება მიმდინარე უცნობი ლიცენზირებული ბიბლიოთეკაში დამატება ბიბლიოთეკაშია ბიბლიოთეკიდან წაშლა დამატებულია ბიბლიოთეკაში წაშლილია ბიბლიოთეკიდან მეტი ინფორმაციის ჩვენება ნაკლები ინფორმაციის ჩვენება წაიშალოს გადმოწერილი თავები? დაკოპირებულია ბუფერში: \n%1$s წყარო არ არის დაინსტალირებული: %1$s დავამატო ბიბლიოთეკაში? თავი %1$s მიმდინარეობს გადმოწერა (%1$d/%2$d) შეცდომა დაპაუზებულია წყაროს სათაური თავის ნომერი წყაროს მიხედვით თავის ნომრის მიხედვით თარიღის მიხედვით გადმოწერა წაუკითხავი დარწმუნებული ხართ რომ გსურთ არჩეული თავების წაშლა? თვალტყურის დევნება თვალი ადევნე ვკითხულობ შესრულებულია გადაგდებული ლოდინის რეჟიმში დაპაუზებული ვგეგმავ წაკითხვას თავიდან ვკითხულობ შეფასება სათაური სტატუსი სტატუსი ტიპი კატეგორია მოცემული სახელით უკვე არსებობს! კატეგორიები წაიშალა ეს წაშლის ამ თავის წაკითხვის თარიღს. დარწმუნებული ხართ? სურათი შენახულია გვერდი: %1$d შემდეგი თავი ვერ მოიძებნა გამოსახულებსი ჩატვირთვის შეცდომა ამ სერიებისთვის კითხვის რეჟიმი დამთავრებულია: მიმდინარე: შემდეგი: წინა: შემდეგი თავი არ არის წინა თავი არ არის გვერდები იტვირთება… გვერდების ჩატვირთვა ვერ მოხერხდა: %1$s ვერცერთი გვერდი ვერ მოიძევნა ბიბლიოთეკის განახლება თავ. %1$s - %2$s ამოირჩიე მონაცემები შესაყვანად ამოირჩიე წყარო საიდანაც გინდა მიგრაცია მიგრაცია კოპირება ვერ მოხერხდა თავების გადმოწერა. შეგიძლია სცადო თავიდან გადმოწერების სექციაში ახალი თავები მოიძებნა თავი %1$s თავი %1$s და %2$d მეტი თავები %1$s ვერ მოხერხდა ყდის განახლება გთხოვთ ჯერ დაამატოთ ჩანაწერი თქვენს ბიბლიოთეკაში ამოირჩიე ყდის სურათი ამოირჩიე რეზერვის ფაილი გადმოწერა განახლება ვერ მოიძებნა გადმოწერა… განახლების დასაყენებლად დაატყაპუნეთ გადმოწერის შეცდომა ხელმისაწვდომია ახალი ვერსია! გადმოწერები არ არის განახლებები არ არის თქვენი ბიბლიოთეკა ცარიელია Wi-Fi კავშირი არ არის ხელმისაწვდომი ინტერნეტთან კავშირი არ არის ხელმისაწვდომი გადმოწერა შეჩერებულია საერთო თავების განახლებები გავრცობის განახლებები თავები თვალყურის დევნება წყაროები რეზერვი გავრცობები გავრცობის შესახებ გლობალური ძებნა კატეგორიების მინიჭება ყდის რედაქტირება მიგრაცია მიმაგრება მიმაგრების მოხსნა ბიბლიოთეკის განახლებისას მოძებნე ახალი ყდები და დეტალები განახლებები მოლოდინის რეჟიმშია მოძველებული ნდობა არასანდო არასანდო დამატება დამატება ხელმისაწვდომი აღარაა. მან შეიძლება არასწორად იმუშაოს და აპლიკაციას პრობლემები შეუქმნას. გირჩევთ, წაშალოთ ის. ორჯერ დაჭერისას ანიმაციის სისწრაფე გამოიყენე პერსონალიზებული სიკაშკაშე გამოიყენე პერსონალიზებული ფერთა ფილტრი ფერთა ფილტრის შეხამების რეჟიმი დიალოგი ხანგრძლივი დაჭერისას ვებ კომიქსი დანომრილი გამორთე ბატარეის ოპტიმიზაცია ეხმარება უკანა ფონში მიმდინარე ბიბლიოთეკის განახლებებსდა რეზერვს ღია კოდის ლიცენზია მიმაგრებული ლოკალური წყაროს გიდი ამ ჩანაწერის ყველა თავის თავიდან წაკითხვა პრესონიფიცირებული ფილტრი ყდად დაყენება ყდა განახლდა გამოვიყენოთ ეს სურათი ყდის ნახატად? ბოლო ხანებში არაფერი არ არის წაკითხული შენ არ გაქვს კატეგორიები, აირჩიე \"+\" ღილაკი რათა შექმნა ერთი, შენი ბიბლიოთეკის დასაორგანიზებლად. WebView არის აუცილებელი Mihon-ს სამუშაოდ გთხოვთ განაახლოთ WebView აპლიკაცია უკეთესი თავსებდობისთვის გადმომწერი შეცდომა გაუთვალისწინებელი შეცდომის გამო თავის გადმოწერა ვერ მოხერხდა ჩართე ყველა გამორთე ყველა აპლიკაციებს შორის გადართვისას შემადგენლობის დამალვა და სკრინშოტების დაბლოკვა ეს დამატება ხელმოწერილია უცნობი სერთიფიკატის მიერ და არ არის აქტივირებული. \n \nმავნე დამატებას შეუძლია წაიკითხოს შესვლის მონაცემები შენახული ამ აპლიკაციაში ან გაუშვას თავისი კოდი. \n \nამ სერტიფიკატის ნდობით თქვენ თქვენს თავზე იღებთ რისკებს და პასუხისმგებლობას. ცალმხრივი სინქრონიზაცია თვალყურის სადევნებელ სერვისებში თავების პროგრესის განსაახლებლად. მიადევნე თვალყური ინდივიდუალურ ჩანაწერებს მათი ჩანართებიდან. გადაფარება ვერ მოხერხდა CloudFlare-ს შემოვლა ორივე ვერტიკალური ჰორიზონტალური არცერთი დაჭერის ინვერსია შეუძლებელია თავების გადმოწერა დისკზე ადგილის უკმარისობის გამო წყარო ვერ მოიძებნა უცნობი სტატუსი უცნობი ავტორი მოიძებნოს \"%1$s\"-თვის გლობალურად განახლებულია v%1$s-მდე რა არის ახალი ასამოქმედებლად საჭიროა აპლიკაციის გადატვირთვა ქსელი კითხვის რეჟიმი თემა გამორთვა დაწყება დამატების თარიღი შეიძლება შეიჩაცდეს უცენზურო(18+) კონტენტს 18+ მონიშნული თავების წაშლა თავების წაშლა მარჯვენა და მარცხენა განიერი გვერდების გაყოფა ეს არ აღმოფხვრავს პროგრამაში NSFW (18+) შიგთავსის არაოფიციალურ, ან შესაძლო არასწორად მონიშნული გაფართოებებოიდან გამოჩენას. საგნების რაოდენობის ჩვენება პარამეტრების ძიება დაიწყე ჩამოტვირთვა მწვანე ვაშლი დინამიური აპლიკაციის თემა გაფრთხილება აუთენტიკაცია ცვლილების დასადასტურებლად გარეგნობა ნაგულისხმევი დააჭირე დეტალების სანახავად წაუკითხავი ================================================ FILE: i18n/src/commonMain/moko-resources/kk/plurals.xml ================================================ Кеше %1$d күн бұрын %1$s минуттан кейін %1$s минуттан кейін %d санат %d санаттар %1$s дегеннен кейін %2$s қателікпен орындалды %1$s дегеннен кейін %2$s қателікпен орындалды Келесі оқылмаған тарау Келесі %d оқылмаған тарау %1$s тарау қалды %1$s тарау қалды %d бақылау %d бақылаулар %1$s тарау %1$s тарау %1$s тарау және біреу %1$s тарау мен %2$d Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді %1$d жаңа тарау %1$d жаңа тарау Кеңейту үшін жаңарту бар %d кеңейту үшін жаңарту бар %d жазбасы үшін %d жазбасы үшін Келесі тарау Келесі %d тарау Жоқ %1$s тараулары Ертең %1$d күнде ================================================ FILE: i18n/src/commonMain/moko-resources/kk/strings.xml ================================================ Баптау Жүктеу кезегі Кітапхана Жаңартпа Дереккөз Сақтық көшірме Кеңейтпе Кеңейтпе туралы Көмек Санат Кітапханадағы топтама Тарауы Аңду Көшу Әдепкі Ескертпе Өзгертуді растау үшін аутентификацияла Мәзір Сүзгі Бетбелгіленген Бет (оңнан солға) Беттік (тік) Ұзын жолақ Экранға сыйғыздыру Тарту Жүктеулер жоқ Жаңа жаңартулар жоқ Жақында ештеңе оқылмады Кітапханаңыз бос Атауы Тағы Тарих Тарих Баптау Сол Оң Бет (солдан оңға қарай) Санаттарыңыз жоқ. Жаңа санат жасау үшін және кітапханаңызды ұйымдастыру үшін қосу батырмасын басыңыз. Келесі Соңғы жаңартпа тексеруі Оқылмаған тарауы Тізім Жүктелген тараулар Қолданба экранын қорғау Қолданба кейпі Динамикалық Жасыл Алма Ымырт Аңду Ақпарат Жабу Кейіп Кітапхана Оқыма Жүктеулер Толығырақ Кейіп Жүйе бойынша Өшірулі Қосулы Құлпынай Дайкири Тако Йотсуба Қызғылт пен жасыл Қап-қараңғы режим Инь мен Йянь Бүгін Өшірулі Әр 6 сағат сайын Әр 12 сағат сайын Күн сайын Әр 2 күн сайын Әр 3 күн сайын Апта сайын Автоматты жаңартуларға құрылғы шектеулері Тек Wi-Fi болғанда Қуаттандыру кездінде Шектеулер: %s Қауіпсіз экран қолданбаларды ауыстырған кезде қолданба мазмұнын жасырады және скриншот жасауды бұғаттайды NSFW (18+) дереккөздері Дереккөздер мен кеңейтулер тізімінде көрсету Бұл қолданбадағы NSFW (18+) мазмұнын көрсетуге бейресми немесе ықтимал қате белгіленген кеңейтулерге кедергі жасамайды. Оқылған деп белгілеу Оқылмаған деп белгілеу Алдыңғысын оқылған деп белгілеу Аңдулы Оқылмаған Сүзгіні алу Атауынша Түгел топтама Тарау санынша Соңғы оқылған Соңғы тарау Тарау шыққаны бойынша Қосылған күні Іздеу Баптау іздеу Ауқымды іздеу Түгелін таңдау Жүктеп алу Тарауды бетбелгілеу Тарау бетбелгісін өшіру Жою Кітапхананы жаңарту Керісінше таңдау Бейнебет Түгелін қосу Түгелін өшіру Өңдеу Қосу Санат қосу Санаттарды өңдеу Санаттың атын өзгерту Санаттарды орнату Мұқабасын өзгерту Тарауларды қарау Тоқтату Алдыңғы тарау Келесі тарау Қайталау Жою Бастау Браузерде ашу Жазбаны көрсету WebView-де ашу Көшу Бейнебет режимі Локалды дереккөз Тіл Санат қойындыларын көрсету Элементтер санын көрсету Өшіру Бекіту Ажырату Болдырмау Барлығын болдырмау Осы туынды үшін барлығын болдырмау Сұрыптау Жүктелген күні бойынша Тарау нөмірі бойынша Жаңарақ Ескірек Артуы бойынша Кемуі бойынша Басына оралу Туындыны басына апару Соңына бару Орнату Бөлісу Сақтау Қалпына келтіру Болдырмау Тіркеуді ашу Толық ақпарат алу үшін басыңыз Қалпына келтіру Артқа Алға Жаңарту Жүктеуді қазір бастау Жүктелуде… Қолданба қолжетімсіз Жалпы Күн пішімі Хабарландыруларды басқару Қауіпсіздік пен құпиялық Құлыпты ашуды талап етеді Әрекетсіз болғанда бұғаттау Әрдайым Ешқашан Хабарландыру мазмұнын жасыру Әр жолдағы элемент саны Көрсету Портрет Пейзаж Ауқымды жаңарту Автоматты жаңартулар Жалғастыру Қолданба тілі Әрқашан сұраңыз Әдепкі санат Сұрыптау және көрсету үшін әр санат баптауы Жою Жаңарту Күтілуде Бұл кеңейту енді қолжетімсіз. Ол дұрыс жұмыс істемеуі немесе қолданбада ақаулық тудыруы мүмкін. Оны жойып тастауға кеңес береміз. Орнатушы Әдепкі қалпы Shizuku қосылмаған Қос бетті бөлу оқу бағытына сәйкес келмесе Оқу режимін көрсету Қосулы Жүктелуде Өшірулі Өзгермелі жарықтық Сұр реңктері Төңкерілген Өзгермелі түс фильтрі Тек шексіз желіде Нұсқа Тіл Жас рейтингі Ыңғайлы кесте Атаусыз кесте Метадеректерді автоматты түрде жаңарту Шығарылған санаттардағы жазбалар енгізілген санаттарда болса да жаңартылмайды. Барлығы Ешқайсы Шығару: %s Қосу: %s Орнатылуда Орнатылды Сенім Сенімсіз Shizuku-ны кеңейту орнатушысы ретінде пайдалану үшін Shizuku-ны орнатып іске қосыңыз. Түрту аймақтарының қабаттасуын көрсету Оқыма ашылғаннан кейін қысқаша көрсету Қең беттерді бөлу Бет нөмірін көрсету Жарықты сүзу режимі Тарауы оқылмаған топтаманы өткізе беру «Аяқталған» күйімен Қос бетті бөлуді инверттеу Ықшам кесте Оқыма ашылғаннан кейін оқу түрін қысқаша көрсету Кесу жиектері Кеңейтулер тізімін алу сәтсіз өтті Мазмұнды кесу аймағында көрсету Бұл басталған жоқ Кітапхананы жаңарту кезінде жаңа мұқаба мен мәліметтерді тексеру Жаңартулар күтілуде Барлығын жаңарту Ескірген Орнату Қолданба туралы Сенімсіз кеңейту Бұл кеңейту сенімсіз сертификатпен қол қойылған және іске қосылмаған. \n \nЗиянды кеңейту Mihon-де сақталған кез келген кіру тіркелгі деректерін оқуы немесе еркін кодты орындауы мүмкін. \n \nОсы сертификатқа сену арқылы сіз осы қауіп-қатерді қабылдайсыз. 18+ Бұл кеңейту дереккөзінде NSFW (18+) мазмұны болуы мүмкін Кеңейту орнатылуда… Толық экранды Беттің ауысуын анимациялау Қосарлы түрту анимация жылдамдығы Кітапханада Аяқталған Кітапханадан жою Тарихты тазалау Қателік Оқылуда Тарау %1$s - %2$s Оқылды деп белгіленген тарауларды өткізіп жіберу «%s» деген санатты жойғыңыз келеді ме? Санатты жою Ішкі қателік: Қосымша ақпарат алу үшін қателіктер тіркеуін тексеріңіз Лаванда Сүзілген тарауларлы өткізіп жіберу Барлығын жою Қабаттасу Көбейту Экран Экранды қосулы ұстау Шарлау Сол Оң мен сол Оң Ені бойынша Бастапқы мөлшері Кері портрет Бумаларды жазбалар атауына сәйкес жасау Көлденең Бүйірлік шегініс Қ Кескінді көлденеңінен үлкейту Үлкейтудің бастапқы қалпы Қара Автоматты Әрекеттер Ұзақ түртуде көрсету Сұр Әдепкі оқу режимі Ең жоғары Саналмайтын санаттар Қолмен оқылған деп белгіленгеннен кейін Оқығаннан кейін автоматты түрде жою Бетбелгіленген тарауларды жоюға рұқсат беру Жоқ дереккөздер: CBZ архивы ретінде сақтау Дерек Тарау кешің тазалау Өшірулі Желі Куки тазартылды Қалыпты Әдепкі айналу түрі Айналу түрі Жүйелі Портрет А Куки тазарту Құлыпталған көлденең Ж К Ақ %1$02d мин, %2$02d сек Тараулардың ауысуын әрдайым көрсету Құлыпталған портрет Жоғары Төмен Ең төмен Тарауларды жою Өшірулі Соңғы оқылған тарау Соңғыдан бұрын оқылған тарау Соңғы оқылғаннан үшінші тарау Соңғы оқылғаннан төртінші тарау Қызметтер Сақтық көшірме жасау Беттерді бөлек бумаларға сақтау Түсқағаз Алдыңғ Биіктігі бойынша Ақылды Орталық Анимациясыз Жылдам Автоматты Оқу режимі Соңғы оқылғаннан бесінші тарау Авто-жүктеу Жаңа тарауларды жүктеу Саналмайтын санаттардағы жазбалар саналатын санаттарда болса да жүктелмейді. Күшейтілген қызметтер Көптілді Көлденең Оқығанда дағдылы жүктеу Алдын ала жүктеу Көтерілу Толқыны Жарық қылу Қараңғы қылу Басу аймағын терістету Тік Kindle тәріздес Кітапханадағы жазбаларда ғана жұмыс істейді, сондай-ақ ағымдағы және келесі тарау әлдеқашан жүктелген болса Шеті Дыбыс пернелері Екеуі де Оқыманың өнімділігін жақсартады Кең суретті басқанда панорамалау L тәріздес Іздеу… Айналдырғандағы мәзірді жасыру сезгіштігі Масштабтау Тоқтаусыз тік Басу аймағы Теріс дыбыс пернелері Жоқ Беттеп Аңду нұсқамасы Аңду қызметіндегі прогрессті жаңарту үшін біржақты үйлестіру. Аңду батырмасы арқылы аңди бастаңыз. Оқығаннан кейін прогрессті жаңарту Оқу тарихын тоқтатады Сақтық көшірме құрылды Сақтық көшірмесінің қате файлы Қалпына келтіру дайын Әдепкі қалпы бойынша user agent Кірілді %1$s-ден шығасыз ба? Жадыға рұқсаттар берілмеді Жүктелген тараулар Бекітілген Сақтық көшірмеде кітапхана жазбалары жоқ. Кітапханадағы емес %1$d жазбалар дерекқорда MIUI өңтайландыруы қосылып тұрмаса сақтық көшірмесі / Қалыпқа келтіру дұрыс істемеуі мүмкін. Қателіктер тіркеуін әзірлеушілерге жіберу үшін файлға сақтайды Аялық кітапхананың жаңартуымен және сақтық көшірмесіне көмектеседі Баттареяның оңтайландыруы әлдеқашан өшірілу Инкогнито режимін өшіру Жан-жақты тіркеуді жүйелі тіркеуге жазу (қолданба өнімділігін азайтады) Электрондық пошта мекенжайы Шығу Белгісіз қателік Дерекқорды тазалау Қателіктер туралы есептерді жіберу Сізде бекітілген дереккөздер жоқ Кітапханада сақтайтын түк жоқ Кітапханаңыздағы барлық жазбаларды сүзеді Күші жойылған Басылымы яқталды Кітапханаға қосу Қателер тіркеулерімен бөлісу Жазбалар жойылды Тазалайтын түк жоқ Туындылар мұқабасын жаңарту Cloudflare айналып өтілмеді Жақсырақ үйлесімділік үшін WebView-ді жаңартыңыз Бақылау қызметіне кірілмеген: Соңғы Сұрыптау Нұсқа Open source лицензасы %1$s дейін жаңартылды Жарамсыз тарау пішіні Күн Шығып жатыр Қалпына келтіру әлдеқашан орындалуда Сақтық көшірмесіне нені қалайсыз? Сақтық көшірмесін қалпына келтіру Сақтық көшірмесі әлдеқашан орындалуда Оқыма баптауы қалпына келтірілмеді Оқыманың барлық баптауы қалпына келді Не жаңалық Аудармамен көмектесу Сақтық көшірмесін қалпына келтіру сәтсіз өтті DNS арқылы HTTPS (DoH) Қалпына келтіру күші жойылды Танымал Сақтық көшірме файлынан дерек қалпына келеді. \n \nОны қолдану үшін сізге түгел жетпей тұрған кеңейтулерді жүктеп, бақылау қызметтеріне кіру керек. Тарау табылмады Бақылау Планшетті интерфейс Инкогнито режимі Қойындылар Басқа нәтиже жоқ Пайдаланушының есімі Күшіне ену үшін қолданбаны қайта іске қосу қажет Сақтық көшірмесі сәтсіз өтті Локал дереккөзді қолдану нұсқаулығы Басқа Сақтық көшірмелерін басқа жерлерде де сақтауыңызға кеңес береміз. User agent бос бола алмайды Қолданба жабылғанда тараулар кешің тазалау Оқыма баптауын әрбір туынды үшін қалпына келтіру Барлық туындылар үшін оқу режимі мен бағдарын қалпына келтіреді Аялық белсенділік Батареяның оңтайландыруын өшіру Құрылғы баптауы ашылмады Құпиялық саясаты Барлық мүмкін қателерді түзетуге көмектеседі. Пайдаланушы деректері жіберілмейді Жүктелгенді ғана %1$s-ге кіру Құпиясөз Кіру Сіз шығып кеттіңіз Санатты жаңартып жатырмыз Кітапханадан Нәтиже жоқ Локал дереккөз Ақырғы қолданылған Белгісіз Белгісіз автор Белгісіз күй Лицензаланған Үзілісте Белгілі бір дереккөз үшін жақсартылған мүмкіндікті қамтамасыз ететін қызмет. Кітапханаға қосылған кезде топтама автоматты түрде аңдылады. Сақтық көшірмеден қайтару Қазіргі кітапхананы қалпына келтіру үшін қолдануға болады Сақтық көшірме жиілігі Сақтық көшірмеден кітапхананы қайтару Сақтық көшірмесін жасау Қолданылған: %1$s Тазалауда қателік пайда болды Кітапханада жоқ жазбалардың тарихын жою WebView дерегін тазалау WebView дерегі тазаланды Кейбір өндірушілерде аялық қызметтерді өшіретін қолданбаларға қосымша шектеулер бар. Бұл сайтта оны қалай түзетуге болатыны туралы толығырақ ақпарат бар. Тіркеуді жан-жақты жүргізу Сайт Ауқымды іздеу… \"%1$s\" ауқымды іздеу Іздеу User agent-ті әдепкіге қайтару Кеш тазаланды. %1$d файл жойылды Жаңартуларға тексеру Орнатылған дереккөз табылмады Жаңарту әлдеқашан қосылған Оқылмаған тараулар бар болғандықтан өткізіп жіберілді %1$s-Тарау Бақылау Бақылау қосу Тасталған Кейінге қалған Тоқтатылған Қайта оқылуда Оқылудағылар Тізімі Жаңалтулар жоқ Mihon-ны қолдану үшін WebView керек Әдепкі тарау параметрлері жаңартылды Желі байланысы жоқ Сіздің кітапханаңызда санаттар жоқ. Оқылуда Тараулар жоқ Сенімдісіз бе? Оқылмаған Кітапхана жаңаруда Ақырғы оқылған тарау ашылмай тұр Кітапхананың ақырғы жаңаруы: %s Дереккөз табылмады MyAnimeList-ке қайтадан кіріңіз Ұқсастық табылмады Дереккөз қолжетімсіз Сурет сақталмады Келесі: Сенімдісіз бе? Бар тарих жоғалады. Дереккөз табылмады %1$d жаңарту сәтсіз өтті Мұқаба жаңартылмады Жаңа нұсқа қолжетімді! %d бет табылмады, бөлінгенде Аяқталды Оқу түрі, көрсету, навигация Дереккөздер, кеңейтулер, ауқымды іздеу Қолданбаны бұғаттау, экранды қорғау Азырақ Кітапханаға қосылды Сипаттамасыз Жүктелген күні бойынша Жүктеп алу Мұқаба Мұқаба сақталмады Оқылмаған Мұқаба жіберілмеді Мұқаба сақталды Бұл баптауды әдепкі қылып сақтағыңыз келеді ме? Көбірек білу үшін басу Жүктеп алу Ортақ Прогресс Сонымен қоса кітапханадағы жазбаларға қолдану Тарау баптауы Қателік Тоқтатылды Күйі Жоспардағылар Тізімі Қай деректі тасымалдау керек Орнатылмады %1$s Тарау Кітапхананы жаңарту қателіктерін жөндеу үшін %1$s Кейіп, күні мен уақыт пішімі Санаттар, ауқымды жаңарту Прогрессті біржақты синхрондау, кеңейтілген синхрондау Қолмен және автоматты сақтық көшірмелері Қателер тіркеуін түсіру, батареяны оңтайландыру Кітапханадан жойылды (%1$d/%2$d) жүктелуде Тарау нөмірі Тарау нөмірі бойынша Түрі Бұндай санат атауы әлдеқашан бар! Сурет сақталды Мұқабаға қою Осы туынды үшін Оқу түрі Қазіргі: %1$s: %2$s, бет %3$d Бет: %1$d Осы суретті мұқаба ретінде қолданайық па? Дереккөз атауы Бұл жазба үшін түгел тарауларды қалпына келтіру Санаттар жойылды Мұқаба жаңартылды Оқитын тарау болмағандықтан өткізіп жіберілді Мұқаба таңдау Сақтық көшірме файлын таңдау Ойбай! %s күтпеген қатеге ұшырады. Жаңылыс журналдарын Discord сайтындағы қолдау арнамызда ортақ пайдалануды ұсынамыз. Қолданбаны өшіріп қосу Тараулар жүктелмеді. Жүктеулер кезегіне барып, сол жерден байқап көре аласыз Жадта орын аз болғандықтан тараулар жүктелмейді %1$s тарау мен %2$d Бұны істер алдыңда жазбаны кітапханаңызға қосыңыз Туынды аяқталған үшін өткізіп жіберілді GitHub-та ашу Бұл Android нұсқасы қолжетімсіз Белгісіз қателіктің кесірінен тарау жүктеп алынбады Бет файлының жолы %d табылмады Тарау жаңартулары Қолданба жаңартулары Кеңейту жаңартулары Алдыңғы бет Келесі бет Жақында кітапханада жаңартылған жазбаларды қарау \"%s\"ті кітапханадан жойғай тұрсыз Туындыға жаңарту керек жоқ болғандықтан өткізіп жіберіледі Жүктелуде… Жүктеу қателігі Жаңартуды орнату үшін басыңыз Қателіктер Аяқталмағандар Тізімі Бағалау Атауы Күйі Басталған күні Аяқталған күні Бұл осы тараудың оқылған уақытын жояды. Сенімдісіз бе? Беттер жүктелуде… Аяқталған: Алдыңғы: Тарих жойылды Көшу Қай жерден көшетін деректі таңдаңыз Көшіру Қателік пайда болды Жүктеуіш Файл таңдайтын қолданба табылмады Оқылғандар Тізімі Тоқтап тұрғандар Тізімі Келісі тарау табылмады Сурет жүктелінбеді Жеке мұқаба Қолдана бастау нұсқаулығы Дереккөз бойынша Таңдалған тараулардың жойылуын қалайсыз ба? Жоспарланған Дереккөздерді тасымалдау нұсқаулары Wi-Fi байланысы жоқ Жүктеулер тоқтатылды Биометриялық бұғаттау қосылып тұрғанда виджет қолжетімді емес Жеке сүзгі Көп жаңалтулар саны дереккөздер жұмысын баяулата және батарея жұмысын өтімін көбейте алады. Көбірек білу үшін басыңыз. %1$s-Тарау Ескерту: Көп жүктеулер саны дереккөздер жұмысын баяулата алады және/немесе %s бұғатталына алады. Толығырақ оқу үшін басыңыз. Жаңа тараулар табылды Автоматты жүктеу, алдын ала жүктеу Көбірек Жүктелген тарауларды жоямыз ба? Буферге көшірілді: \n%1$s Буферге көшірілмеді Дереккөз орнатылмаған: %1$s Кітапханаға қосайық па? Әдепкі қылып орнату Беттер табылмады Келесі тарау жоқ Алдыңғы тарау жоқ Беттер жүктелінбеді: %1$s Атауы белгісіз Жарамсыз орын: %s Жаңа ғана User agent жолы жарамсыз Бұл санатта жазба жоқ Кездейсоқ жазбаны ашу F-Droid құрастыруларына ресми түрде қолдау көрсетілмейді. \nТолығырақ білу үшін басыңыз. Жүктеулерді тексеру «Оқуды жалғастыру» батырмасы Бұл %s ішінен бұрын таңдалған аяқталу күнін жояды Бұл бұрын таңдалған басталу күнін %s ішінен жояды Күнің жоямыз ба? Жүктеулер индексін тазалау Қолданбаны жүктеп алынған тарауларды қайта тексеруге мәжбүрлейді Статистика Басталды Құрылғыдағы Жүктелген Аяқталған сессиялар Оқу ұзақтығы Барлығы Орта баға Қолданылған Д/Ж %dкүн %dмин %dсек Қазір емес Шолу Оқылған %dсағ Жазбалар Ауқымды жаңартуда Бақыланудағы жазбалар Бақылау қызметтері Жаңартулар белгішесінде оқылмаған тараулар санын көрсету Бұл санат бос Қолжетімді, бірақ дереккөзі орнатылған жоқ: %s Аралық сақтағышқа көшірілді Қайталанған бөлімдерді өткізіп жіберу %1$s қателік: %2$s *қажетті Санатты жаңарту Айырбастау буферіне көшіріп алу Кітапханада бар туындыларды жасыру Ұзын суреттерді бөлу Қабаттасу Кең беттерді сыйғызу үшін бұрыңыз Бұрылған кең беттерді аудару бағдары Дебаг туралы ақпарат Дерек пен жад Таңдалған Таңдалмаған Жоғары өту Жүктелгенді жою Аударған Тағы баптау Аралығын қою %s шешу Өзгермелі жаңарту жиілігі Келешек ================================================ FILE: i18n/src/commonMain/moko-resources/km/plurals.xml ================================================ %1$d ថ្ងៃមុន %d ភាគបន្ទាប់ដែលមិនទាន់អាន ================================================ FILE: i18n/src/commonMain/moko-resources/km/strings.xml ================================================ កំពុងទាញយក ស្វែងរកក្នុងការកំណត់ ភាគ បំរាម មិនទាន់អាន អានចុងក្រោយគេ ភាគមុន ការតាមដានការអាន ប្រភព ប្រវត្តិ តម្រៀបតាមអក្ខរក្រម ឈ្មោះ ការតម្រៀបថ្នាក់ ប្រវត្តិ ច្រើនទៀត ការកំណត់ បណ្ណាល័យ បច្ចុប្បន្នភាព ផ្លាស់ប្ដូរ ប្រភពម៊េងហ្គា ជំនួយ លំនាំដើម តម្រង បានចំណាំ បានតាមដានការអាន ជម្រុះតម្រងចេញ ចំនួនត្លុកសរុប ចំនួនភាគសរុប ថ្ងៃខែដែលបានឆែកមើល តាមកាលបរិច្ឆេទដែលបានបញ្ចូល ស្វែងរកជាសកល ជ្រើសរើសផ្ទុយ បញ្ជាក់ថាបានអាន ទាញយក ចំណាំភាគនេះទុក ប្ដូរឈ្មោះថ្នាក់ក្រម កំណត់ ផ្លាស់ប្ដូរកម្របត្លុក មើលភាគ ផ្អាក ព្យាយាមម្ដងទៀត ដកចេញ ចាប់ផ្ដើម បន្តវិញ ម៊ូដនៃការបង្ហាញ ការបង្ហាញ ជ្រុងCompact ជ្រុងសម បញ្ជី ជ្រុងដែលមានតែគម្រប ភាគដែលបានទាញយក ម៊េងហ្គាដែលមានស្រាប់ក្នុងឧបករណ៍ ភាសា បង្ហាញtabនៃថ្នាក់ បិទ ខ្ទាស់ ឈប់ខ្ទាស់ ឈប់ធ្វើ ឈប់ធ្វើទាំងអស់ Cancelទាំងអស់ចំពោះម៊េងហ្គាមួយនេះ តម្រៀប តម្រៀបតាមកាលបរិច្ឆេទ តម្រៀបតាមភាគ ថ្មីបំផុត ចាស់បំផុត ឡើង ចុះ មិនមានការទាញយក មិនមានបច្ចុប្បន្នភាពថ្មីៗ អ្នកពុំបានអានអ្វីថ្មីឡើយ អំពីប្រភពម៊េងហ្គា បណ្ណាល័យរបស់អ្នកទទេស្អាត អ្នកពុំមានការទម្រៀបម៊េងហ្គាឡើយ។ ចុចប៊ូតុងសញ្ញាបូកដើម្បីទម្រៀបម៊េងហ្គាសម្រាប់បណ្ណាល័យរបស់អ្នក។ បណ្តុំក្នុងបណ្ណាល័យ ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវដើម្បីបញ្ជាក់ការផ្លាស់ប្តូរ ការកំណត់ មនុយ បញ្ចាក់ភាគមុនថាបានអាន លុប ភាគថ្មីបំផុត ស្វែងរក ជ្រើសទាំងអស់ លែងចំណាំភាគនេះ បញ្ជាក់ថាមិនទាន់បានអាន ធ្វើបច្ចុប្បន្នភាពបណ្ណាល័យ បើកទាំងអស់ បន្ថែមថ្នាក់ក្រម បិទទាំងអស់ ផ្លាស់ប្ដូរ បញ្ចូល កែប្រែ ភាគបន្ទាប់ បើកនៅក្នុងកម្មវិធីរុករក បង្ហាញត្លុក បើកនៅក្នុងWebView ប្ដូរ បង្ហាញចំនួនលេខនៃធាតុ យកទៅខាងលើ យកទៅខាងក្រោម តម្លើង ចែករំលែក រក្សាទុក Reset ត្រឡប់វាវិញ បើកlog ប៉ះដើម្បីមើលលម្អិត restore ត្រឡប់ ចាប់ផ្ដើមទាញយកឥឡូវនេះ កំពុងដំណើរការ… កម្មវិធីមិនដំណើរការ រូបរាង បណ្ណាល័យ កន្លែងអាន ការទាញយក ការតាមដានការអាន ការកំណត់ពិសេស អំពីរ ពណ៌ តាមទូរសព្ទ បិទ បើក ឌីណាមិច ប៉ោមបៃតង មីដណាយdusk ស្ត្របឺរីដៃគីរី តាកូ បៃតងខ្ចី យីងនិងយ៉ាង ខ្មៅដិត ទម្រង់ថ្ងៃខែ កំណត់ការជូនដំណឹង សន្តិសុខនិងឯកជនភាព ត្រូវការការបើកសោ ចាក់សោនៅពេលមិនធ្វើអ្វី គ្រប់ពេល ការពារអេក្រង់ ប្រភពមិនល្អ(១៨+) បង្ហាញនៅក្នុងបញ្ចីប្រភព ថ្ងៃនេះ ការបង្ហាញ ធាតុក្នុងមួយជួ បញ្ឈរ ផ្ដេក ការធ្វើប្ចុប្បន្នភាពដោយស្វ័យប្រវត្ត បិទ រាល់៦ម៉ោងម្ដង រាល់២ថ្ងៃម្ដង រាល់៣ថ្ងៃម្ដង រាល់សប្ដាហ៍ ធ្វើប្ចុប្បន្នភាពdevice restrictionsដោយស្វ័យប្រវត្ត នៅពេលបើកWi-Fiប៉ុណ្ណោះ ទៅមុខ រីហ្វ្រេស ទូទៅ ពណ៌កម្មវិធី យ៉ុតស្ស៊ូបា លាក់ការជូនដំណឹង រាល់១២ម៉ោងម្ដង ការពារអេក្រង់លាក់contentរបស់កម្មវិធីនៅពេលswitchingកម្មីធីនិងប្លុកscreenshots មិនដែល ការសម្រេចចិត្តនេះមិនបិទការflagនៃប្រភពទៅលើរឿង(១៨+)នៅក្នុងកម្មវិធីឡើយ។ រាល់ថ្ងៃ ការធ្វើបច្ចុប្បន្នភាពសកល ចំណងជើង បានបញ្ចប់ការចេញផ្សាយ កំពុងតែចេញផ្សាយ ថ្នាក់ធម្មតា ត្រូវបានផ្អាកការចេញផ្សាយ មិនច្បាស់ ទម្រង់ភាគមិនត្រឹមត្រួវ គ្មានភាគ គ្មានភាគ ត្រូវបានបញ្ឈប់ការចេញផ្សាយ ចេញផ្សាយចប់ហើយ កំពុងតែធ្វើបច្ចុប្បន្នភាពបណ្ណាល័យ មានឡាយសិន ម​គ្គុ​ទេស​ក៍​ ស្វែងរក ទាំងអស់ កំពុងទាញយក… ស្ថិតិ បានទាញយក បរាជ័យក្នុងការឆ្លងកាត់Cloudflare ស្វែងរក… មានភាគថ្មី ចម្លងទៅក្ដារតម្បៀតខ្ទាស់ បម្រុងទុក និងស្ដារឡើងវិញ លុបអ្វីដែលបានទាញហើយ ក្នុងទូរស័ព្ទ បើក ធ្វើបច្ចុប្បន្នភាពថ្នាក់ក្រម ជម្រើសបន្ថែមទៀត បិទ តើអ្នកចង់លុបថ្នាក់ក្រម %s ឬ? បានជ្រើសយក មិនបានជ្រើសយក អ្នកបកប្រែ រុករកទៅលើ ទិន្នន័យ និងអង្គផ្ទុក ដកអ្វីៗទាំងអស់ចេញ បើកត្លុកដោយចៃដន្យ បានចាប់ផ្តើមហើយ ចំនួនមិនទាន់អាន ពិនិត្យបច្ចុប្បន្នភាពចុងក្រោយ លុបថ្នាក់ក្រម ភាគថ្មីរំពឹងទុកនៅ ================================================ FILE: i18n/src/commonMain/moko-resources/kn/plurals.xml ================================================ 1 ನಿಮಿಷದ ನಂತರ %1$s ನಿಮಿಷಗಳ ನಂತರ %2$s ದೋಷದೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ %2$s ದೋಷಗಳೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ %d ವರ್ಗ %d ವರ್ಗಗಳು ವಿಸ್ತರಣೆ ನವೀಕರಣ ಲಭ್ಯವಿದೆ %d ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು 1 ಹೆಚ್ಚು ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು 1 ಹೊಸ ಅಧ್ಯಾಯ %1$d ಹೊಸ ಅಧ್ಯಾಯಗಳು 1 ಶೀರ್ಷಿಕೆಗಾಗಿ %d ಶೀರ್ಷಿಕೆಗಳಿಗಾಗಿ 1 ಉಳಿದಿದೆ %1$s ಉಳಿದಿದೆ 1 ಚಾಪ್ಟರ್ %1$s ಚಾಪ್ಟರಗಳು 1 ಟ್ರಾಕರ್ %d ಟ್ರಾಕರ್ ಗಳು 1 ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿದೆ %d ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿವೆ ================================================ FILE: i18n/src/commonMain/moko-resources/kn/strings.xml ================================================ ಅಡ್ಡವಾದ ಪುಟ ಉದ್ದವಾದ ಪುಟ ಪ್ರತಿ ಸಾಲಿಗೆ ವಸ್ತುಗಳು ಪ್ರದರ್ಶಿಸು ಸೂಚನೆ ವಿಷಯವನ್ನು ಮರೆಮಾಡಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುವಾಗ ಮತ್ತು ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುವಾಗ ಅಪ್ಲಿಕೇಶನ್ ವಿಷಯಗಳನ್ನು ಮರೆಮಾಡಿ ಸುರಕ್ಷಿತ ಪುಟ ಎಂದಿಗೂ ಇಲ್ಲ ಯಾವಾಗಲೂ ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ಲಾಕ್ ಮಾಡಿ ಅನ್ ಲಾಕ್ ಅಗತ್ಯವಿದೆ ಭದ್ರತೆ ಸೂಚನೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ ದಿನಾಂಕ ಸ್ವರೂಪ ಸಿಸ್ಟಮ್ ಅನುಕರಿಸಿ ಆನ್ ಆಫ ಅಪ್ಲಿಕೇಶನ್ ಬಗ್ಗೆ ಸುಧಾರಿತ ಟ್ರ್ಯಾಕಿಂಗ್ ಡೌನ್ಲೋಡ್ ಸಂಯೋಜನೆಗಳು ಓದುವ ಸಂಯೋಜನೆಗಳು ಗ್ರಂಥಾಲಯ ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್ ಲಭ್ಯವಿಲ್ಲ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ… ರಿಫ್ರೆಶ್ ಮಾಡಿ ಮುಂದೆ ಹಿಂದೆ ಮರುಸ್ಥಾಪಿಸಿ ಲಾಗ್ ತೆರೆಯಿರಿ ರದ್ದುಗೊಳಿಸಿ ಮರುಹೊಂದಿಸಿ ಉಳಿಸಿ ಹಂಚಿಕೊಳ್ಳಿ ಇನ್ಸ್ಟಾಲ್ ಕೆಳಕ್ಕೆ ಸರಿಸಿ ಮೇಲಕ್ಕೆ ಸರಿಸಿ ಹಳೆಯದು ಹೊಸತು ವಿಂಗಡಿಸಿ ಎಲ್ಲವನ್ನೂ ರದ್ದುಮಾಡಿ ರದ್ದುಮಾಡಿ ತೆಗೆದುಹಾಕಿ ಚುಚ್ಚು ಡೌನಲೋಡ್ ಗುರುತುಗಳು ಪಟ್ಟಿ ಕಾಂಪ್ಯಾಕ್ಟ್ ಗ್ರಿಡ್ ಪ್ರದರ್ಶೀಸು ಪ್ರದರ್ಶನ ರೀತಿ ವೆಬ್‌ವೀಕ್ಷಣೆಯಲ್ಲಿ ತೆರೆಯಿರಿ ಬ್ರೌಸರ್ನಲ್ಲಿ ತೆರೆಯಿರಿ ಪುನರಾರಂಭಿಸು ತೆಗೆದುಹಾಕಿ ಮರುಪ್ರಯತ್ನಿಸಿ ಮುಂದಿನ ಅಧ್ಯಾಯ ಹಿಂದಿನ ಅಧ್ಯಾಯ ವಿರಾಮ ಅಧ್ಯಾಯಗಳನ್ನು ವೀಕ್ಷಿಸಿ ಕವರ್ ತಿದ್ದಿ ವರ್ಗಗಳನ್ನು ಹೊಂದಿಸಿ ವರ್ಗವನ್ನು ಮರುಹೆಸರಿಸಿ ವರ್ಗವನ್ನು ತಿದ್ದಿ ವರ್ಗವನ್ನು ಸೇರಿಸಿ ಸೇರಿಸಿ ತಿದ್ದು ಗ್ರಂಥಾಲಯ ನವೀಕರಿಸಿ ತೆಗೆದು ಹಾಕು ಅಧ್ಯಾಯದ ಬುಕ್‌ಮಾರ್ಕ್ ತೆಗೆದುಹಾಕಿ ಬುಕ್ ಮಾರ್ಕ್ ಅಧ್ಯಾಯ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಹಿಂದಿನದನ್ನು ಓದಿದಂತೆ ಗುರುತಿಸಿ ಓದಿಲ್ಲ ಎಂದು ಗುರುತಿಸಿ ಓದಿರುವುದಾಗಿ ಗುರುತಿಸು ಎಲ್ಲವನ್ನೂ ತ್ಯಜಿಸಿ ಎಲ್ಲವನ್ನು ಆರಿಸು ಎಲ್ಲೆಡೆ ಹುಡುಕಿ ಹುಡುಕಿ ಇತ್ತೀಚಿನ ಅಧ್ಯಾಯ ಕೊನೆಯದಾಗಿ ಓದಿದ ಒಟ್ಟು ಅಧ್ಯಾಯಗಳು ವರ್ಣಮಾಲೆಯ ಪ್ರಕಾರ ಸೋಸು ತೆಗೆದುಹಾಕಿ ಓದದ ಬುಕ್ಮಾರ್ಕ್ ಮಾಡಿದ ಸೋಸು ಸಲಹಾಕಾರ ಸಂಯೋಜನೆಗಳು ಇತಿಹಾಸ ಟ್ರ್ಯಾಕಿಂಗ್ ಅಧ್ಯಾಯಗಳು ಮಾಂಗಾ ವರ್ಗಗಳು ನೀವು ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ವರ್ಗ ಒಂದನ್ನು ರಚಿಸಲು ಪ್ಲಸ್ ಬಟನ್ ಒತ್ತಿರಿ. ನಿಮ್ಮ ಲೈಬ್ರರಿ ಖಾಲಿಯಾಗಿದೆ, ಯಾವುದೇ ಮೂಲದಿಂದ ನಿಮ್ಮ ಲೈಬ್ರರಿಗೆ ಸರಣಿಯನ್ನು ಸೇರಿಸಿ. ಇತ್ತೀಚೆಗೆ ಏನೂ ಓದಿಲ್ಲ ಹೊಸ ನವೀಕರಣಗಳಿಲ್ಲ ಡೌನ್‌ಲೋಡ್‌ಗಳಿಲ್ಲ ಸಹಾಯ ವಿಸ್ತರಣೆ ಮಾಹಿತಿ ವಿಸ್ತರಣೆಗಳು ಮೂಲ ಸ್ಥಳಾಂತರ ಬ್ಯಾಕಪ್ ಮತ್ತು ಮರುಸ್ಥಾಪನೆ ಮೂಲಗಳು ಇತಿಹಾಸ ನವೀಕರಣಗಳು ಗ್ರಂಥಾಲಯ ಡೌನ್‌ಲೋಡ್ ಸಾಲು ಸಂಯೋಜನೆಗಳು ಇನ್ನಷ್ಟು ಹೆಸರು %1$02d ನಿಮಿಷ, %2$02d ಸೆಕೆಂಡು ಮರುಸ್ಥಾಪನೆ ಪೂರ್ಣಗೊಂಡಿದೆ ಬ್ಯಾಕಪ್ ರಚಿಸಲಾಗಿದೆ ಬ್ಯಾಕಪ್ ಆವರ್ತನ ಬ್ಯಾಕಪ್ ಫೈಲ್‌ನಿಂದ ಗ್ರಂಥಾಲಯವನ್ನು ಮರುಸ್ಥಾಪಿಸಿ ಬ್ಯಾಕಪ್ ಮರುಸ್ಥಾಪಿಸಿ ಪ್ರಸ್ತುತ ಗ್ರಂಥಾಲಯವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲು ಬಳಸಬಹುದು ಬ್ಯಾಕಪ್ ರಚಿಸಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇವೆಗಳಲ್ಲಿ ಅಧ್ಯಾಯದ ಪ್ರಗತಿಯನ್ನು ನವೀಕರಿಸಲು ಏಕಮುಖ ಸಿಂಕ್. ಅವರ ಟ್ರ್ಯಾಕಿಂಗ್ ಬಟನ್ ನಿಂದ ಪ್ರತ್ಯೇಕ ಮಾಂಗಾ ನಮೂದುಗಳಿಗಾಗಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಅನ್ನು ಹೊಂದಿಸಿ. ಸೇವೆಗಳು ಓದಿದ ನಂತರ ಅಧ್ಯಾಯದ ಪ್ರಗತಿಯನ್ನು ನವೀಕರಿಸಿ ಹೊಸ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಐದನೆಯದು ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ನಾಲ್ಕನೆಯದು ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಮೂರನೆಯದು ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಎರಡನೆಯದು ಕೊನೆಯದಾಗಿ ಓದಿದ ಅಧ್ಯಾಯ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಓದಿದ ನಂತರ ಓದಿದಂತೆ ಗುರುತಿಸಿದಾಗ ತೆಗೆದುಹಾಕಿ ಸೈಡ್ ಪ್ಯಾಡಿಂಗ್ ಓದುತ್ತಿರುವ ಅಧ್ಯಾಯ ಪರಿವರ್ತನೆಯನ್ನು ಯಾವಾಗಲೂ ತೋರಿಸಿ A B G R ಲಾಕ್ ಮಾಡಿದ ಅಗಲಚಿತ್ರ ಲಾಕ್ ಮಾಡಿದ ಉದ್ದಚಿತ್ರ ಉಚಿತ ಡೀಫಾಲ್ಟ್ ತಿರುಗುವಿಕೆ ಪ್ರಕಾರ ವೇಗವಾಗಿ ಸಾಮಾನ್ಯ ಅನಿಮೇಷನ್ ಇಲ್ಲ ಮಧ್ಯ ಬಲ ಎಡ ಸ್ವಯಂಚಾಲಿತ ಪ್ರಾರಂಭದ ಸ್ಥಾನವನ್ನು ಜೂಮ್ ಮಾಡಿ ಚತುರತೆಯಿಂದ್ ಹೊಂದಿಸಿ ಮೂಲ ಗಾತ್ರ ಎತ್ತರ ಹೊಂದಿಸಿ ಅಗಲ ಹೊಂದಿಸಿ ಹಿಗ್ಗಿಸು ಪರದೆಯನ್ನು ಹೊಂದಿಸಿ ಪ್ರಮಾಣದ ಪ್ರಕಾರ ಪುಟ ಸಂಯೋಜನೆಗಳು ನಿರಂತರ ಲಂಬ ವೆಬ್‌ಟೂನ್ ಲಂಬ ಬಲದಿಂದ ಎಡಕ್ಕೆ ಎಡದಿಂದ ಬಲಕ್ಕೆ ಡೀಫಾಲ್ಟ್ ಓದುವ ರೀತಿ ಕಪ್ಪು ಬೂದು ಬಿಳಿ ಹಿನ್ನೆಲೆ ಬಣ್ಣ ಲಾಂಗ್ ಟ್ಯಾಪ್‌ನಲ್ಲಿ ತೋರಿಸಿ ಧ್ವನಿ ಕೀಲಿಗಳನ್ನು ಬದಲಿಮಾಡಿ ಧ್ವನಿ ಕೀಲಿಗಳು ನ್ಯಾವಿಗೇಷನ್ ಫಿಲ್ಟರ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಿ ಓದಿದ ಗುರುತು ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಿ ಪರದೆಯನ್ನು ಆನ್ ಮಾಡಿ ಇರಿಸಿ ಬರ್ನ್ / ಡಾರ್ಕನ್ ಡಾಡ್ಜ್ / ಹಗುರಗೊಳಿಸಿ ಪರದೆ ಗುಣಿಸಿ ಒವರ್ಲೆ ಬಣ್ಣಗಳು ಫಿಲ್ಟರ್ ಮಿಶ್ರಣ ರೀತಿ ಕಸ್ಟಮ್ ಬಣ್ಣಗಳ ಫಿಲ್ಟರ್ ಕಸ್ಟಮ್ ಬೆಳಕು ಗಡಿಗಳನ್ನು ಕತ್ತರಿಸಿ ಪುಟ ಸಂಖ್ಯೆಯನ್ನು ತೋರಿಸಿ ಡಬಲ್ ಟ್ಯಾಪ್ ಅನಿಮೇಷನ್ ವೇಗ ಪುಟ ಪರಿವರ್ತನೆಗಳನ್ನು ಅನಿಮೇಟ್ ಮಾಡಿ ಕಟೌಟ್ ಆದಂತಹ ಪ್ರದೇಶದಲ್ಲಿ ವಿಷಯವನ್ನು ತೋರಿಸಿ ಪೂರ್ಣ ಪರದೆ ಈ ವಿಸ್ತರಣೆ ಇನ್ನು ಮುಂದೆ ಲಭ್ಯವಿಲ್ಲ. ಈ ವಿಸ್ತರಣೆಯನ್ನು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಪ್ರಮಾಣಪತ್ರದೊಂದಿಗೆ ಸಹಿ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿಲ್ಲ. \n \nದುರುದ್ದೇಶಪೂರಿತ ವಿಸ್ತರಣೆಯು ತಚಿಯೋಮಿಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಯಾವುದೇ ಲಾಗಿನ್ ರುಜುವಾತುಗಳನ್ನು ಓದಬಹುದು ಅಥವಾ ಅನಿಯಂತ್ರಿತ ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು. \n \nಈ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನಂಬುವ ಮೂಲಕ ನೀವು ಈ ಅಪಾಯಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ. ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ವಿಸ್ತರಣೆ ಅನ್ಇನ್ಸ್ಟಾಲ್ ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲ ನ೦ಬು ಇನ್ಸ್ಟಾಲ್ಲ್ಡ್ ಇನ್ಸ್ಟಾಲಿಂಗ್ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ ಬಾಕಿ ಉಳಿದಂತಹ ಇನ್ಸ್ಟಾಲ್ ಬಳಕೆಯಲ್ಲಿಲ್ಲದ ನವೀಕರಿಸಿ ಬಾಕಿ ಉಳಿದಿರುವ ನವೀಕರಣಗಳು ಎಲ್ಲಾ ಯಾವಾಗಲೂ ಕೇಳಿ ಡೀಫಾಲ್ಟ್ ವರ್ಗ ಚಾಲ್ತಿಯಿರುವ ಮಾಂಗಾವನ್ನು ಮಾತ್ರ ನವೀಕರಿಸಿ ಚಾರ್ಜಿಂಗ್ ನವೀಕರಣ ನಿರ್ಬಂಧಗಳು ವಾರಕ್ಕೊಮ್ಮೆ ಪ್ರತಿ 2 ದಿನಗಳಿಗೊಮ್ಮೆ ಪ್ರತಿದಿನ ಪ್ರತಿ 12 ಗಂಟೆಗಳಿಗೊಮ್ಮೆ ಪ್ರತಿ 6 ಗಂಟೆಗಳಿಗೊಮ್ಮೆ ಸ್ವಂತ ಮಾಡು ನವೀಕರಣ ಆವರ್ತನ ನವೀಕರಣಗಳು ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು ಅಧ್ಯಾಯ ನವೀಕರಣಗಳು ಸಾಮಾನ್ಯ ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ ಯಾವುದೇ ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ ಯಾವುದೇ ವೈ-ಫೈ ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ ಅನಿರೀಕ್ಷಿತ ದೋಷದಿಂದಾಗಿ ಅಧ್ಯಾಯವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ದೋಷ ಡೌನ್‌ಲೋಡರ್ ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಗಾಗಿ ದಯವಿಟ್ಟು ವೆಬ್‌ವೀಕ್ಷಣೆ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನವೀಕರಿಸಿ ತಚಿಯೋಮಿಗೆ ವೆಬ್‌ವೀಕ್ಷಣೆ ಅಗತ್ಯವಿದೆ ಕ್ಲೌಡ್‌ಫ್ಲೇರ್ ಅನ್ನು ಬೈಪಾಸ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ! ಡೌನ್‌ಲೋಡ್ ದೋಷ ಡೌನ್‌ಲೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ… ಹೊಸ ನವೀಕರಣಗಳು ಲಭ್ಯವಿಲ್ಲ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಬ್ಯಾಕಪ್ ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ ಕವರ್ ಇಮೇಜ್ ಆಯ್ಕೆಮಾಡಿ ಇದನ್ನು ಮಾಡುವ ಮೊದಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಮಾಂಗಾವನ್ನು ಸೇರಿಸಿ ಕವರ್ ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ ಅಧ್ಯಾಯಗಳು %1$s ಅಧ್ಯಾಯ %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು ಅಧ್ಯಾಯ %1$s ಹೊಸ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿವೆ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಡೌನ್‌ಲೋಡ್‌ಗಳ ವಿಭಾಗದಲ್ಲಿ ನೀವು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಬಹುದು ನಕಲಿಸಿ ಸ್ಥಳಾಂತರಿಸಿ ಮಾಂಗಾ ಸ್ಥಳಾಂತರಗೊಳಿಸಲು ಮೂಲವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ ಸೇರಿಸಲು ಡೇಟಾವನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಧ್ಯಾಯ. %1$s - %2$s ಗ್ರಂಥಾಲಯವನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ ಪುಟಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ: %1$s ಪುಟಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ… ಹಿಂದಿನ ಅಧ್ಯಾಯವಿಲ್ಲ ಮುಂದಿನ ಅಧ್ಯಾಯವಿಲ್ಲ ಮುಂದಿನದು: ಹಿಂದಿನದು: ಪ್ರಸ್ತುತ: ಮುಗಿದಿದೆ: ಓದುವಿಕೆ ರೀತಿ ಈ ಸರಣಿಗಾಗಿ ಈ ಚಿತ್ರವನ್ನು ಕವರ್ ಆರ್ಟ್ ಆಗಿ ಬಳಸುವುದೇ? ಈ ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ ಮುಂದಿನ ಅಧ್ಯಾಯ ಕಂಡುಬಂದಿಲ್ಲ ಪುಟ: %1$d ಕವರ್ ನವೀಕರಿಸಲಾಗಿದೆ ಕವರ್ ಆಗಿ ಹೊಂದಿಸಿ ಕಸ್ಟಮ್ ಫಿಲ್ಟರ್ ಚಿತ್ರ ಉಳಿಸಲಾಗಿದೆ ಈ ಮಾಂಗಾದ ಎಲ್ಲಾ ಅಧ್ಯಾಯಗಳನ್ನು ಮರುಹೊಂದಿಸಿ ಇದು ಈ ಅಧ್ಯಾಯದ ಓದುವ ದಿನಾಂಕವನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ? ವರ್ಗಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ ಈ ಹೆಸರಿನ ವರ್ಗವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ! ಮಾದರಿ ಸ್ಥಿತಿ ಸ್ಥಿತಿ ಪುನಃ ಓದುತ್ತಿರುವ ಶೀರ್ಷಿಕೆ ಅಂಕ ಓದಲು ಯೋಜನೆ ವಿರಾಮಗೊಳಿಸಲಾದ ತಡೆಹಿಡಿಯಲಾದ ಕೈಬಿಡಲಾದ ಪೂರ್ಣಗೊಂಡಿದೆ ಓದುತ್ತಿರುವ ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇರಿಸಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಆಯ್ದ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಓದದ ಡೌನ್‌ಲೋಡ್ ಅಧ್ಯಾಯದ ಸಂಖ್ಯೆಯ ಪ್ರಕಾರ ಮೂಲದ ಪ್ರಕಾರ ಅಧ್ಯಾಯ ಸಂಖ್ಯೆ ಮೂಲ ಶೀರ್ಷಿಕೆ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ ದೋಷ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ (%1$d/%2$d) ಅಧ್ಯಾಯ %1$s ಮಾಂಗಾವನ್ನು ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸುವುದೇ? ಮೂಲವನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ: %1$s ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ: \n%1$s ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸುವುದೇ? ಕಡಿಮೆ ಹೆಚ್ಚು ಗ್ರಂಥಾಲಯದಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸಲಾಗಿದೆ ಗ್ರಂಥಾಲಯದಿಂದ ತೆಗೆದುಹಾಕಿ ಗ್ರಂಥಾಲಯದಲ್ಲಿರುವ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸಿ ಪರವಾನಗಿ ಪಡೆದ ಗೊತ್ತಿರದ ಪ್ರಗತಿಯಲ್ಲಿರುವ ಲೋಕಲ್ ಮೂಲದ ಮಾರ್ಗದರ್ಶಿ ಬ್ರೌಸ್ ಹೊಸದಾದ ಎಲ್ಲೆಡೆ ಹುಡುಕಿ… ಪಿನ್ ಮಾಡಿದ ಕೊನೆಯದಾಗಿ ಉಪಯೋಗಿಸಿದ ಇತರೆ ಲೋಕಲ್ ಮೂಲ ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬರಲಿಲ್ಲ ಹೆಚ್ಚಿನ ಫಲಿತಾಂಶಗಳಿಲ್ಲ ವರ್ಗವನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ ಅಜ್ಞಾತ ದೋಷ ನೀವು ಈಗ ಲಾಗ್ ಔಟ್ ಆಗಿದ್ದೀರಿ ಲಾಗ್ ಔಟ್ %1$s ನಿಂದ ಲಾಗ್ ಔಟ್ ಆಗುವುದೇ? ಲಾಗ್ ಇನ್ ಮಾಡಲಾಗಿದೆ ಲಾಗಿನ್ ಪಾಸ್ ವರ್ಡ್ ಇಮೇಲ್ ವಿಳಾಸ ಬಳಕೆದಾರ ಹೆಸರು %1$s ಗೆ ಲಾಗ್ ಇನ್ ಮಾಡಿ ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದ ಎಲ್ಲಾ ಮಾಂಗಾವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡುತ್ತದೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿದ ಯಾವುದೇ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಕಳುಹಿಸಿ ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ ಓಪನ್ ಸೋರ್ಸ್ ಪರವಾನಗಿಗಳು ಆವೃತ್ತಿ ವೆಬ್ಸೈಟ್ ಡಿವೈಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಲಾಗಲಿಲ್ಲ ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ಈಗಾಗಲೇ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಹಿನ್ನೆಲೆ ಗ್ರಂಥಾಲಯದ ನವೀಕರಣಗಳು ಮತ್ತು ಬ್ಯಾಕಪ್‌ಗಳೊಂದಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಗ್ರಂಥಾಲಯದ ಮಾಂಗಾ ಕವರ್‌ಗಳನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ ನಮೂದುಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ಇಲ್ಲದ ಮಾಂಗಾದ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಿ ಡೇಟಾಬೇಸ್ ತೆರವುಗೊಳಿಸಿ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ. %1$d ಫೈಲ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ ಬಳಸಲಾಗಿದೆ: %1$s ಅಧ್ಯಾಯ ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಿ ಮರುಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ ಬ್ಯಾಕಪ್ ಮರುಸ್ಥಾಪಿಸುವುದು ವಿಫಲವಾಗಿದೆ ಬ್ಯಾಕಪ್ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ ಮರುಸ್ಥಾಪನೆ ಈಗಾಗಲೇ ಪ್ರಗತಿಯಲ್ಲಿದೆ ಬ್ಯಾಕಪ್ ವಿಫಲವಾಗಿದೆ ಬ್ಯಾಕಪ್ ರಚಿಸಲಾಗುತ್ತಿದೆ ನೀವು ಏನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಬಯಸುತ್ತೀರಿ? ಬ್ಯಾಕಪ್ ಈಗಾಗಲೇ ಪ್ರಗತಿಯಲ್ಲಿದೆ ಅಪ್‌ಲೋಡ್ ದಿನಾಂಕದ ಮೂಲಕ ಡೇಟಾ ಕಾಣೆಯಾದ ಮೂಲಗಳು: ಬ್ಯಾಕಪ್ ಯಾವುದೇ ಮಾಂಗಾವನ್ನು ಹೊಂದಿಲ್ಲ. ಬ್ಯಾಕಪ್ ಫೈಲ್ ಅಮಾನ್ಯವಾಗಿದೆ ಗ್ರಂಥಾಲಯವನ್ನು ನವೀಕರಿಸುವಾಗ ಹೊಸ ಕವರ್ ಮತ್ತು ವಿವರಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ ಮೆಟಾಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಿ ಮೂಲ ಸ್ಥಳಾಂತರ ಯಾವುದೇ ಪುಟಗಳು ಸಿಕ್ಕಿಲ್ಲ ಟ್ಯಾಬ್‌ಗಳು ರೀಡರ್ ತೆರೆದಾಗ ಪ್ರಸ್ತುತ ಮೋಡ್ ಅನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ತೋರಿಸಿ ಓದುವ ರೀತಿ ತೋರಿಸಿ ವರ್ಗ ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೋರಿಸಿ ಆರಾಮದಾಯಕ ಗ್ರಿಡ್ ಎಲ್ಲವನ್ನೂ ನಿಷ್ಕ್ರಿಯೆಗೊಳಿಸಿ ಎಲ್ಲವನ್ನೂ ಸಕ್ರಿಯಗೊಳಿಸಿ ಪ್ರಾರಂಭ ಮೂಲ ಕಂಡುಬಂದಿಲ್ಲ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಎರಡೂ ಉದ್ದದ ಅಡ್ಡ ಯಾವುದು ಅಲ್ಲ ಟ್ಯಾಪಿಂಗ ಅನ್ನು ತಿರುಗಿಸಿ ಕಡಿಮೆ ಶೇಖರಣಾ ಸ್ಥಳದ ಕಾರಣ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಅಜ್ಞಾತ ಸ್ಥಿತಿ ಅಜ್ಞಾತ ಲೇಖಕ \"%1$s\" ಅನ್ನು ಗ್ಲೋಬಲ್ ಸರ್ಚ್ ಮಾಡಿ v%1$s ಗೆ ಅಪ್ಡೇಟ್ ಆಗಿದೆ ಹೊಸತೇನಿದೆ ಅನ್ವಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್ ಮರುಪ್ರಾರಂಭದ ಅಗತ್ಯವಿದೆ ಅಡ್ವಾನ್ಸ್ಡ್ ಸೆಕ್ಷನ್ ಓದುವ ಮೊಡ್ ಜನರಲ್ ಸೆಲೆಕ್ಷನ್ ಹಾಕಿದ್ದ ದಿನಾಂಕ ಯಾವುದೆ ಪಿನ್ ಮಾಡಿರುವ ಸೋರ್ಸ್ ಗಳು ಇಲ್ಲ ಪೂರ್ಣ ಪ್ರಗತಿ ಇದು ಅನಧಿಕೃತ ಮತ್ತು ತಪ್ಪಾಗಿ ಚಿಹ್ನಿಸಿದ ವಿಸ್ತರಣೆಗಳಿಂದ 18+ ಮೂಲಗಳನ್ನು ಮರೆಮಾಚಲಾಗುವುದಿಲ್ಲ. ದೋಷಗಳು ಅಧ್ಯಾಯದ ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ %1$s: %2$s, ಪುಟ %3$d ಯಾವುದೇ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿಲ್ಲ ಡೀಫಾಲ್ಟ್ ಆಗಿ ಹೊಂದಿಸಿ ನನ್ನ ಗ್ರಂಥಾಲಯದಲ್ಲಿರುವ ಎಲ್ಲಾ ಮಾಂಗಾಗಳಿಗೂ ಅನ್ವಯಿಸಿ ಈ ಸೆಟ್ಟಿಂಗ್ ಗಳನ್ನು ಡೀಫಾಲ್ಟ್ ರೂಪದಲ್ಲಿ ಉಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಅಧ್ಯಾಯದ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳು ಗ್ರಂಥಾಲಯದಿಂದ ಮಾಂಗಾ ಟ್ರ್ಯಾಕರ್ ಗಳು ಲಾಗಿನ್ ಆಗಿಲ್ಲ: ಬುಕ್ ಮಾರ್ಕ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸಿ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸಿ NSFW (18+) ವಿಷಯವನ್ನು ಹೊಂದಿರಬಹುದು 18+ ಸಂಯೋಜನೆಗಳಲ್ಲಿ ಹುಡುಕಿ ಮುಂದಿನ ಪುಟ ಹಿಂದಿನ ಪುಟ ಯಾವುದೇ ಫೈಲ್ ಪಿಕ್ಕರ್ ಅಪ್ಲಿಕೇಶನ್ ಕಂಡುಬಂದಿಲ್ಲ ಮೂಲ ವಲಸೆ ಮಾರ್ಗದರ್ಶಿ ದಯವಿಟ್ಟು ಮತ್ತೆ MAL ಗೆ ಲಾಗಿನ್ ಮಾಡಿ ಓದುವ ಇತಿಹಾಸವನ್ನು ವಿರಾಮಗೊಳಿಸುತ್ತದೆ ಅಜ್ಞಾತ ಮೋಡ್ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಿ ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ? ಎಲ್ಲಾ ಇತಿಹಾಸವೂ ಕಳೆದುಹೋಗುತ್ತದೆ. ಇತಿಹಾಸವನ್ನು ಅಳಿಸಲಾಗಿದೆ ಮೂಲಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ತೋರಿಸಿ ವಯಸ್ಕ (18+) ಮೂಲಗಳು ಟ್ರ್ಯಾಕ್ ಮಾಡಲಾದ ಮೊದಲು ಚಿಕ್ಕದು ಮೊದಲ ಸಾಣ್ಣದ್ದು ಅಧ್ಯಾಯ ಸಂಖ್ಯೆಯಿಂದ ಅಪ್ಲೋಡ್ ದಿನಾಂಕ ದಂತೆ ವಸ್ತುಗಳ ಸಂಖ್ಯೆಯನ್ನು ತೋರಿಸಿ ಸಿಕ್ಕ ಮಾಹಿತಿ ಮುಕ್ತಾಯ ದಿನಾಂಕ ಆರಂಭದ ದಿನ ಡೆವಲಪರ್‌ಗಳೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ದೋಷದೆ ಲಾಗ್‌ಗಳನ್ನು ಫೈಲ್‌ಗೆ ಸೇರಿಸಿ ಕ್ರ್ಯಾಶ್ ಲಾಗ್‌ಗಳನ್ನು ಡಂಪ್ ಮಾಡಿ HTTPS ಮೇಲೆ DNS ಬಳಸಿ ಬ್ಯಾಕಪ್ ಫೈಲ್‌ನಿಂದ ಡೇಟಾವನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತದೆ. \n \nಕಾಣೆಯಾದ ಯಾವುದೇ ವಿಸ್ತರಣೆಗಳನ್ನು ನೀವು ಪುನಃ ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸಲು ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇವೆಗಳಿಗೆ ಲಾಗ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಹೊರಗಿಡಲಾದ ವಿಭಾಗಗಳಲ್ಲಿ ಮಾಂಗಾವನ್ನು ಸೇರಿಸಿದ ವಿಭಾಗಗಳಲ್ಲಿದ್ದರೂ ಅವುಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಸ್ವಯಂ ಡೌನ್‌ಲೋಡ್ ನ್ಯಾವಿಗೇಶನ್ ಲೇಔಟ್ ಬಲಕ್ಕೆ ಎಡಕ್ಕೆ ಮುಂದಿನ ಹಿಂದಿನ ಬಲ ಮತ್ತು ಎಡ ಅಂಚು ಕಿಂಡಲ್-ಇಶ್ L ಆಕಾರದ ಡ್ಯುಯಲ್ ಪೇಜ್ ಸ್ಪ್ಲಿಟ್ ನ ಪ್ಲೇಸ್ ಮೆಂಟ್ ಓದುವ ದಿಕ್ಕಿಗೆ ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ ಡ್ಯುಯಲ್ ಪೇಜ್ ಸ್ಪ್ಲಿಟ್ ಪ್ಲೇಸ್‌ಮೆಂಟ್ ಅನ್ನು ತಿರುಗಿಸಿ ಡ್ಯುಯಲ್ ಪುಟ ವಿಭಜನೆ ರೀಡರ್ ತೆರೆದಾಗ ಟ್ಯಾಪ್ ವಲಯಗಳನ್ನು ತೋರಿಸಿ ನ್ಯಾವಿಗೇಶನ್ ಲೇಔಟ್ ಓವರ್ ಲೇ ತೋರಿಸಿ ಹೊರಗಿಡಿ: %s ಸೇರಿಸಿ: %s ಯಾವುದು ಅಲ್ಲ ಹೊರಗಿಡಲಾದ ವರ್ಗಗಳಲ್ಲಿನ ಮಾಂಗಾ ಸೇರಿಸಿದ ವಿಭಾಗಗಳಲ್ಲಿದ್ದರೂ ನವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ. ದೋಷಗಳನ್ನು ತೋರಿಸು ಈ ಸರಣಿಯ ಎಲ್ಲವನ್ನೂ ರದ್ದುಮಾಡಿ ಸ್ಥಳೀಯ ಬ್ಯಾಡ್ಜ್ ಗಳು ನೀವು ಇನ್ನೂ ಯಾವುದೇ ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ಈ ಆಂಡ್ರಾಯ್ಡ್ ಆವೃತ್ತಿಯನ್ನು ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಯಾವುದೇ ಹೋಲಿಕೆ ಕಂಡುಬಂದಿಲ್ಲ ಮೂಲವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಓದದ ಕವರ್ ಹಂಚುವಿಕೆಯಲ್ಲಿ ದೋಷ ಕವರ್ ಉಳಿಸುವಲ್ಲಿ ದೋಷ ಕವರ್ ಉಳಿಸಲಾಗಿದೆ ಕವರ್ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ ದಿನಾಂಕ ಇದರ ಅನುಗುಣವಾಗಿ ಅಮಾನ್ಯ ಅಧ್ಯಾಯ ಸ್ವರೂಪ ಅಧ್ಯಾಯ ಸಿಗಲಿಲ್ಲ ಅಜ್ಞಾತ ಮೋಡ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಮಾರ್ಗದರ್ಶಿ ಅಡ್ಡವಾದ ಪುಟ ಉದ್ದವಾದ ಪುಟ ತಿರುಗುವಿಕೆಯ ಪ್ರಕಾರ ಸ್ವಯಂಚಾಲಿತ ಮಾಂಗಾ ಶೀರ್ಷಿಕೆಗೆ ಅನುಗುಣವಾಗಿ ಫೋಲ್ಡರ್ ಗಳನ್ನು ರಚಿಸುತ್ತದೆ ಪ್ರತ್ಯೇಕ ಫೋಲ್ಡರ್ ಗಳಲ್ಲಿ ಪುಟಗಳನ್ನು ಉಳಿಸಿ ಕ್ರಿಯೆಗಳು ಗ್ರೇಸ್ಕೇಲ್ ಆಫ ಆನ್ ಪ್ರತಿ ವರ್ಗದ ವಿಂಗಡಣೆ ಮತ್ತು ಪ್ರದರ್ಶನಕ್ಕಾಗಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ನಿರ್ಬಂಧಗಳು: %s ಈಗಲೇ ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭಿಸಿ ================================================ FILE: i18n/src/commonMain/moko-resources/ko/plurals.xml ================================================ %1$s 개 남음 총 %1$s화 %1$d일 전 소요 시간: %1$s, 발생한 오류: %2$s %1$s분 후 항목 %d개 %d개의 트래커 소스에 존재하지 않거나 필터링되어 있는 %d개의 회차를 건너뛰었습니다 %d개의 확장 앱 업데이트가 있습니다 %d개의 항목 %1$d개의 새로운 회차 %1$s화와 그 외 %2$d화 읽지 않은 다음 %d 회차 다음 %d화 누락된 회차 %1$s개 %d일 %d 저장소 %1$d일 후 %1$s 페이지 %1$d개 항목을 이동하시겠습니까? %1$d개 항목을 복사하시겠습니까? %1$d개 항목이 생략되었습니다 ================================================ FILE: i18n/src/commonMain/moko-resources/ko/strings.xml ================================================ 이름 카테고리 서재 항목 회차 동기화 백업 및 복원 설정 필터 북마크함 읽지 않음 필터 제거 가나다순 마지막으로 읽은 날짜순 검색 모두 선택 읽음으로 표시 읽지 않음으로 표시 항목 바로 전까지 읽음으로 표시 다운로드 챕터 북마크 챕터 북마크 제거 삭제 서재 업데이트 편집 추가 카테고리 추가 카테고리 편집 카테고리 이름 바꾸기 카테고리 지정 표지 편집 제거 계속 브라우저에서 열기 화면 표시 모드 작은 격자 목록 취소 정렬 설치 설정 화면 표시 기록 다운로드 대기열 서재 기록 업데이트 전체 챕터 개수순 이전 화 다음 화 다시 시도 공유 저장 초기화 실행 취소 로그 열기 복원 불러오는 중… 앱 이용 불가 일반 뷰어 다운로드 동기화 고급 정보 행당 항목 수 데이터 이전 확장 앱 확장 앱 정보 전체 검색 일시중지 세로 가로 자동 업데이트 끄기 6시간 12시간 1일 2일 1주 전부 자동 업데이트 조건 충전 중일 때만 기본 카테고리 업데이트 설치 대기 중 다운로드 중 설치 중 설치됨 신뢰 신뢰되지않음 삭제 신뢰할 수 없는 확장 앱 일부 악의적인 확장 앱은 Mihon에 저장된 로그인 정보를 읽거나 임의의 코드를 실행할 수도 있습니다. \n \n이 확장 앱을 신뢰하면 이러한 위험에 노출될 수 있습니다. 전체화면 더블 탭 애니메이션 속도 페이지 번호 표시 모서리 자르기 밝기 변경 컬러 필터 사용 화면 켜짐 유지 볼륨 키 볼륨 키 뒤바꾸기 기본 읽기 모드 페이지 (왼쪽에서 오른쪽) 페이지 (오른쪽에서 왼쪽) 페이지 (수직) 긴 스트립 늘리기 가로 맞추기 세로 맞추기 원본 크기 줌 시작 위치 자동 왼쪽 오른쪽 중앙 애니메이션 없음 보통 빠름 기본 회전 설정 자유 세로로 고정 가로로 고정 수동으로 읽음 표시 될 경우 삭제 읽은 후 자동으로 삭제 끄기 마지막 회차 새로운 화 다운로드 트래킹 서비스 백업 생성 백업 복원 백업 파일에서 서재 복원 백업 주기 백업 생성됨 복원 완료 백업 복원중 백업 생성중 회차별 캐시 삭제 %1$s 사용중 캐시 삭제됨, %1$d개의 파일이 삭제됨 지우는 동안 오류가 발생했습니다 쿠키 삭제 쿠키 삭제됨 데이터베이스 삭제 서재에 추가되지 않은 항목의 기록을 삭제합니다 버전 오류 보고서 전송 버그를 수정하는데 도움이 됩니다. 개인 정보는 전송되지 않습니다 %1$s 으로 로그인 사용자명 비밀번호 로그인 로그인 성공 알 수 없는 오류 카테고리 업데이트중 더이상 결과 없음 전체 검색… 최신 연재 알 수 없음 서재에서 제거 서재에 추가되었습니다 서재에서 제거되었습니다 다운로드된 회차를 삭제하시겠습니까? 소스 미설치: %1$s %1$s화 다운로드 중 (%1$d/%2$d) 오류 일시정지 회차 번호 소스 기준 회차 번호 기준 다운로드 읽지 않은 회차 선택된 회차를 삭제하시겠습니까? 동기화 평점 제목 상태 상태 카테고리 삭제됨 이 회차의 읽은 기록을 삭제합니다. 계속하시겠습니까? 모든 회차 기록 초기화 서재에 추가합니까? 사진 저장됨 이미지 필터 표지로 설정 표지 업데이트됨 페이지: %1$d 다음 화가 없습니다 이미지를 로드할 수 없습니다 이 이미지를 표지로 사용합니까? 완료: 현재: 다음: 이전: 다음 화가 없습니다 이전 화가 없습니다 페이지 로딩중… 페이지 로딩 실패: %1$s 새로운 회차 발견 표지 업데이트 실패 표지 이미지 선택 백업 파일 선택 다운로드 새로운 업데이트 없음 다운로드 중… 탭하여 업데이트 설치 다운로드 오류 업데이트 이용 가능! 다운로드 없음 최근 업데이트 없음 최근 읽은 기록 없음 다운로더 오류 다운로드 중에 예기치 않은 오류가 발생하였습니다 다운로드 일시중지됨 다운로드한 챕터 연재가 끝났을 때 항목 건너뛰기 읽은 기록 동기화 항상 물어보기 현재 서재를 나중에 복구하는 데 사용 가능 네비게이션 페이지 전환 효과 표시 배경 색상 흰색 검은색 페이지 설정 배율 설정 화면 맞춤 자동 맞춤 적색 녹색 청색 알파 끝에서 두번째 회차 끝에서 세번째 회차 끝에서 네번째 회차 끝에서 다섯번째 회차 어떤 항목들을 백업하겠습니까? 항목 삭제됨 로컬 저장소 기타 찾아보기 판권작 클립보드에 복사됨: \n%1$s 소스 제목 읽는 중 완결 포기함 일시중지중 계획중 다시 읽는 중 종류 같은 이름을 가진 카테고리가 이미 존재합니다! 포함할 데이터를 선택하세요 데이터 이전 복사 다운로드 실패. 다운로드 메뉴에서 다시 시도할 수 있습니다 이 행동을 하기 전 서재에 항목을 추가해주세요 서재가 비어있습니다 카테고리가 없습니다. 서재 구성을 위해 + 버튼을 눌러 생성하세요. Wi-Fi 연결 사용 불가능 네트워크 연결 사용 불가능 일반 길게 탭하여 액션 표시 WebView로 열기 읽음 표시된 회차 건너뛰기 컬러 필터 블렌딩 모드 오버레이 곱하기 스크린 닷지 / 밝게하기 번 / 어둡게하기 도움말 이메일 주소 웹사이트 메뉴 더 보기 소스 완료 현재 설정을 기본값으로 설정하시겠습니까? 회차 설정 표지 공유 오류 표지 저장 오류 표지 저장 표지 업로드 날짜 기준 로그아웃 되었습니다 로그아웃 %1$s 에서 로그아웃 하시겠습니까? 시크릿 모드 끄기 다운로드가 완료된 항목만 표시 시크릿 모드 v%1$s 으로 업데이트 됨 업데이트 확인 오픈 소스 라이선스 디바이스 설정을 열 수 없습니다 배터리 최적화 끄기 MIUI 최적화가 꺼져 있을 경우 백업/복원 기능이 정상 작동하지 않을 수 있습니다. 복원이 이미 진행중 입니다 앱을 재시작한 후에 적용됩니다 HTTPS를 통한 DNS (DoH) 데이터 백업이 이미 진행중입니다 백업 복원 실패 네트워크 복원 취소 백업 실패 %1$02d분 %2$02d초 잘못된 백업 파일: 자동 다운로드 북마크 표시된 회차 삭제 허용 회차 지우기 가로 세로 오른쪽 왼쪽 다음 이전 좌우 이동 회색 수평+수직 반전 수직 반전 수평 반전 그레이스케일 넓은 페이지 분할 보기 편한 격자 다크 모드에 검정색 사용 앱 테마 다크 라이트 시스템 모두 비활성화 다음 페이지 변경 확인을 위해 인증이 필요합니다 기본값 선택 반전 검색 설정 서재에 추가한 날짜순 최신 화가 올라온 날짜순 L자 모양 탭 영역 반전 없음 자동 Kindle식 빈 공간 채우기 회차 변경 항상 표시 작가 미상 읽기 모드 업데이트 내역 마지막으로 사용 분할 페이지 순서 뒤집기 양쪽 가장자리 챕터 목록 보기 탭 존 경고 번역에 참여하기 회전 설정 메타데이터 자동 갱신 현재 만화에만 적용 읽기 모드 서재의 모든 항목에 적용됩니다 모서리 여백 앱 정보 초기 설정 도움말 읽은 내역의 기록을 일시 정지합니다 모두 활성화 간격이 있는 긴 스트립 없음 날짜 형식 비활성화 색 반전 서재 서재에 추가 CBZ 파일로 저장 화면 보안을 켜면 앱을 전환할 때 내용이 숨겨지며 스크린샷을 찍을 수 없습니다 서재에 추가됨 데이터 이전 %1$s화 - %2$s 화면 보안 잠금 해제 필요 모양 오늘 전역 업데이트 보안 및 개인정보 보호 항상 끄기 자동 잠금 알림 내용 숨기기 제외된 카테고리 세로 (거꾸로 보기) Wi-Fi 에서만 활성화 서재 업데이트 중 넓은 이미지로 자동 확대 읽기 매우 낮음 읽기 모드 표시 높음 스크롤 시 메뉴 숨기기 민감도 낮음 조작 언어 뷰어가 켜질 때 현재 읽기 모드를 표시합니다 탭 영역 오버레이 표시 뷰어가 열렸을 때 간략히 표시 디스플레이 필터링된 회차 건너뛰기 매우 높음 확장 앱 업데이트 기본값으로 설정 알림 설정 서재의 모든 항목에 적용 앱 업데이트 진행 상황 오류 지울 것이 없습니다 터치하여 자세히 알아보기 기본 회차 설정을 업데이트 했습니다 회차 업데이트 포함: %s 백그라운드 활동 안 읽은 회차가 있을 때 항목 건너뛰기 카테고리 별 정렬 설정 Shizuku를 확장 앱 인스톨러로 사용하려면 Shizuku를 먼저 설치해 주세요. 전부 업데이트 백업에 항목이 포함되어 있지 않습니다. 개발자와 공유할 수 있는 오류 로그 파일을 생성합니다 개인정보 보호 정책 %1$s: %2$s, %3$d페이지 계속하시겠습니까? 모든 기록이 삭제됩니다. 비활성화 없어진 소스: 로그인 되지않은 트래커: 앱 실행 시 회차 캐시 삭제 서재에 없는 항목이 데이터베이스에 %1$d개 있습니다 일부 제조사는 백그라운드 서비스를 종료하는 추가적인 제한 사항이 있습니다. 자세한 사항은 웹사이트를 참조하세요. 태블릿 UI 핀 설정됨 \"%1$s\"를 전체 검색합니다 로컬 저장소 사용법 핀 설정된 소스가 없습니다 잘못된 챕터형식 알 수 없는 상태 휴재 상세정보 표시 상세정보 숨김 클립보드로 복사에 실패하였습니다 트래커 추가 일시정지 MAL에 다시 로그인해 주세요 소스를 찾을 수 없습니다 페이지를 찾을 수 없습니다 내역 삭제 기록이 삭제되었습니다 저장 공간이 부족하여 회차를 다운로드 할 수 없습니다 경고: 대량 다운로드는 원본 속도에 영향을 미치거나 %s을 차단할 수 있습니다. 탭하여 자세히 알아보기. 대규모 업데이트는 소스에 피해를 입히고 업데이트가 느려지고 배터리 사용량이 증가할 수 있습니다. 탭하여 자세히 알아보기. %1$s화 %1$d개의 업데이트가 실패했습니다 서재 업데이트 오류를 해결하려면 %1$s를 참조하세요 완결된 만화를 건너 뛰었습니다 읽지 않은 만화를 건너 뛰었습니다 이 안드로이드 버전은 더이상 지원되지 않습니다 Cloudflare를 통과하지 못했습니다 Mihon 앱의 기능을 사용하려면 WebView가 필요합니다 호환성을 위해 WebView 어플리케이션을 업데이트 해 주세요 넓은 이미지 이동 이 확장 프로그램은 더 이상 사용할 수 없습니다. 제대로 작동하지 않을 수 있으며 앱에 문제가 발생할 수 있습니다. 제거하는 것이 좋습니다. 확장 앱 설치 중… 레거시 트래킹 서재 표지 새로고침 오류 로그 공유 회차를 찾을 수 없습니다 결과가 없습니다 이 확장 앱의 소스는 성인 컨텐츠가 포함될 수 있습니다 트래커 사용 시작 지금 다운로드 시작 인스톨러 Shizuku가 실행 중이 아닙니다 서재에서 다운로드된 회차 완결됨 읽지 않음 취소됨 검색된 회차가 없습니다 지원되지 않는 소스입니다 이전 페이지 항목 표시 내림차순 다이내믹 표지만 있는 격자 최신 순 테마 황혼 지원 종료 검색 결과가 없습니다 넓은 페이지 분할 시 배치가 읽는 방향과 다를 경우 성인 컨텐츠 카테고리 탭 보이기 챕터를 가져온 날짜순 전체 항목 개수순 뒤로 배터리 최적화가 이미 꺼져 있습니다 회차 번호 순 맨 위로 이동 업로드 날짜 순 맨 아래로 이동 오름차순 오래된 순 옥색 딸기 칵테일 사용 가능한 확장 앱 가져오기 실패 제외: %s 트래킹 서비스에 항목 진행 상황을 업데이트합니다. 트래킹 버튼을 이용하여 각각의 항목 별로 트래킹을 설정하세요. 트래커 가이드 향상된 트래킹 서비스 카테고리가 다운로드에서 제외된 경우 다른 카테고리에 포함되어 있어도 다운로드 되지 않습니다. 특정 소스에 대해 향상된 기능을 제공합니다. 서재에 항목이 추가될 시 자동으로 트래킹 됩니다. 복구 완료 후 없어진 소스를 다시 설치하고 트래킹 서비스에 로그인 해야 합니다. 백업 파일은 복사하여 다른 장소에 나눠 보관하세요. 백업 파일에는 비밀번호 등의 민감한 정보가 포함될 수 있습니다. 백업 파일 공유시 주의하세요. 백그라운드 서재 업데이트와 라이브러리 업데이트를 도울 수 있습니다 자세한 로그 자세한 로그를 시스템 로그에 기록 (성능이 하락할 수 있습니다) 날짜 정렬 읽기 시작한 날짜 다 읽은 날짜 읽지 않은 회차가 있는 만화를 건너 뛰었습니다 등록된 카테고리가 없습니다. 항목 제목에 따라 폴더 생성 소스 이전 설명서 원본 소스를 선택하세요 로컬 소스 항목 수 보이기 끄기 고정 고정 해제 모두 취소 이 만화의 항목을 모두 취소 앞으로 각각의 폴더에 페이지 저장 읽지 않은 항목 건너뛰기 이 시리즈를 맨 위로 이동 새로고침 청사과 문어 음양 요츠바 성인 콘텐츠 소스 소스 및 확장 기능 목록에 보이기 이 옵션을 끄더라도 비공식 또는 분류가 잘못된 확장 기능으로 인하여 성인 컨텐츠가 표시될 수 있습니다. 터치하여 자세히 보기 3일 제한: %s 카테고리가 업데이트에서 제외된 경우 다른 카테고리에 포함되어 있어도 업데이트 되지 않습니다. 업데이트 대기 중 서재 업데이트 시 새로운 표지와 설명 확인 %1$s화와 그 외 %2$d화 %1$s화 파일 선택 어플리케이션이 없습니다 백업할 서재 항목이 없습니다 GitHub에서 열기 이미지 저장 오류 출처를 찾을 수 없습니다 설치된 소스를 찾을 수 없습니다 마지막으로 업데이트한 날짜순 읽지 않은 항목 개수순 닫기 WebView 데이터 지우기 WebView 데이터 삭제됨 리더 성능 향상 버전 언어 읽을 목록 위시리스트 모든 시리즈의 읽기 모드와 화면 방향 초기화 앱 언어 설치되지 않음 라벤더 무제한 네트워크에서만 \"%s\" 카테고리를 삭제하시겠습니까? 카테고리 삭제 내부 오류: 더 자세한 정보를 보고 싶으면 충돌 로그를 확인하세요 요약 없음 페이지 %d의 파일 경로를 찾을 수 없습니다 미완성된 목록 와...이거 좀 어색하네 맞춤 표지 연령 등급 모두 제거 모든 뷰어 설정을 초기화했습니다 기본 사용자 에이전트 문자열 기본 사용자 에이전트 문자열 초기화 완결 목록 뷰어 설정을 초기화 할 수 없습니다 시리즈마다 뷰어 설정 초기화 마지막 회차를 열 수 없습니다 최근에 업데이트된 항목 보기 보류 목록 분리 중 페이지 %d을 찾을 수 없습니다 앱 잠금 사용 중에는 위젯을 이용할 수 없습니다 파도 업데이트가 이미 실행 중입니다 사용자 에이전트 문자열은 비워 둘 수 없습니다 미리 다운로드 다언어 서재에서 \"%s\"을(를) 제거하려고 합니다 저장공간 사용 권한이 없음 읽을 때 자동 다운로드 마지막 서재 업데이트: %s 현재 회차 + 다음 회차가 이미 다운로드된 경우에만 작동됩니다. 인기 정말로 실행합니까? 만화에 업데이트가 필요하지 않음으로 건너뜀 검색… 카테고리, 전역 업데이트, 회차 스와이프 읽기 모드, 디스플레이, 탐색 단방향 진행 동기화, 향상된 동기화 소스, 확장 기능, 전체 검색 수동 및 자동 백업 앱 잠금, 화면 보안 오류 로그 덤프, 배터리 최적화 테마, 날짜 및 시간 형식 자동 다운로드, 미리 다운로드 앗! 애플리케이션 재시작 %s에 예기치 않은 오류가 발생했습니다. 충돌 로그를 공식 디스코드 채널에 공유하는 것을 추천합니다. 알 수 없는 제목 잘못된 위치: %s 잘못된 사용자 에이전트 문자열 방금 다운로드 확인 무작위 항목 열기 이 카테고리에 항목이 없습니다 F-Droid 빌드는 공식적으로 지원되지 않습니다. \n자세히 알아보려면 탭하세요. 계속 읽기 버튼 %s에서 이전에 선택한 완료 날짜가 제거됩니다 다운로드 인덱스 다시 설정 날짜를 제거 하시겠습니까? %s에서 이전에 선택한 시작 날짜가 제거됩니다 앱이 다운로드한 회차를 다시 확인하도록 강제 완료된 항목 전체 전역 업데이트 대상 사용됨 N/A %d분 %d초 통계 정보 시작됨 로컬 다운로드함 개요 읽은 시간 항목 동기화 동기화된 항목 읽음 평균 점수 %d일 %d시간 나중에 업데이트 아이콘에 읽지 않은 수 표시 카테고리가 비어 있습니다 클립보드에 복사됨 사용 가능하지만 소스가 설치되지 않음: %s 중복 회차 건너뛰기 %1$s 오류: %2$s *필수 클립보드에 복사 이미 서재에 있는 항목 숨기기 카테고리 업데이트 긴 이미지 분할 오버레이 화면에 맞게 넓은 페이지 회전 회전된 넓은 페이지의 회전 방향 디버그 정보 왼쪽으로 스와이프하는 챕터 오른쪽으로 스와이프하는 챕터 두 번 탭하여 줌 간격 설정 사용자 설정 업데이트 빈도 간격 다운로드 삭제 결과가 있는 것만 보기 이렇게 하면 로컬에서 동기화가 제거됩니다. %s에서도 제거 OK 오늘 연재가 예상되지 않았기 때문에 건너뛰었습니다 %s 동기화를 삭제 하시겠습니까? 다음 연재 기간 예측 다운로드 인덱스 재생성 다음 업데이트 예정 탭하여 Cloudflare에 관한 도움말 보기 %s를 잠금해제 항상 업데이트 하도록 설정 서재를 동기화합니다 백업 파일을 생성할 수 없습니다 서재가 동기화되었습니다 이 시리즈를 맨 아래로 이동 인터넷에 연결되지 않음 항상 평가하기 트래킹 서비스 로그인 HTTP %d, WebView의 웹 사이트를 확인해 주세요 %s에 연결할 수 없습니다 서재 업데이트 중...(%s) 소스 설정 앱 설정 확장 앱 설치를 위해 필요합니다. 서재 업데이트 등의 알림을 보냅니다. 오류 전체 보기: 민감한 설정 포함(예시: 트래커 로그인 토큰) 새 회차는 약 %1$s 후에 출시될 것으로 예상되며, 매 %2$s마다 확인됩니다. 스캔레이터가 발견되지 않았습니다 알림 권한 스캔레이터 제외 다음 폴더를 선택하기 건너뛰기 시간이 많이 걸리는 서재 업데이트, 다운로드 및 백업 복원이 중단되지 않도록 합니다. 스마트 업데이트 저장소 추가 잘못된 저장소 URL \"%s\" 저장소를 삭제하고 싶습니까? 이전 버전에서 업데이트하는데 무엇을 선택해야 할지 모르시나요? 자세한 내용은 저장공간 가이드를 참조하세요. 백그라운드 배터리 사용 허용 %s가 처음입니까? 시작 가이드를 확인하는 것을 추천합니다. 저장공간 가이드 저장소 URL 확장 앱을 설치하려면 권한이 필요합니다. 부가하려면 여기를 탭하세요. 저장소를 추가하지 않았습니다. 이 저장소는 이미 존재합니다! 저장공간 위치 앱 다운로드 권한 확장 앱 저장소 저장소 제거 신뢰한 알수없는 확장 앱 신뢰 취소 자동 백업, 챕터 다운로드 및 로컬 소스에 사용됩니다. 사용자 지정 업데이트 빈도: %s에 추가적으로 저장소를 추가합니다. \"index.min.json\"으로 끝나는 URL이어야 합니다. 소스 저장소 열기 곧 출시 먼저 몇 가지 사항을 설정해 보겠습니다. 나중에 언제든지 설정에서 변경할 수도 있습니다. 시작하기 %1$s가 다운로드, 백업 등을 할 폴더를 선택합니다. \n \n앱 전용폴더를 추천합니다. \n \n선택된 폴더: %2$s %s를 재설치 하시겠습니까? 스캔레이터 선택된 파일 없음 적용 기본값으로 되돌리기 생성 저장공간 사용량 선택됨 선택되지 않음 기타 옵션 위로 이동 트래커 점수 초보자 가이드 환영합니다! 폴더를 선택해야 합니다 저장공간 위치를 설정하지 않았습니다 상대적인 타임스탬프 \"%2$s\" 대신 \"%1$s\"를 사용 데이터와 저장공간 페이지 전환시 플래시 켜기 E잉크 디스플레이의 잔상 감소 마지막 자동 백업: %s 없음 사용가능: %1$s / 전체: %2$s Nord 곧 공개 기부 자동 무작위 링크 복사 읽지 않은 챕터 노트 노트 편집 추가 크래시 로그 전송 개발자에게 익명화된 로그를 전송합니다. 분석 허가 익명화된 사용 데이터를 전송하여 앱 기능 개선에 기여합니다. 캣푸친(Catppuccin) 모노크롬 만화 설명에 이미지를 렌더링합니다 보안 분석 및 크래시 로그 크래시 로그와 분석 데이터를 전송하면, 문제를 식별 및 해결하며, 성능을 개선하고, 향후 업데이트를 사용자 요구사항에 더 적합하게 만들 수 있습니다 행동 중복된 읽은 챕터를 읽은 것으로 표시 챕터를 읽은 후 새 챕터를 가져온 후 누락된 챕터 표시 숨기기 제거 확장 앱을 제거하시겠습니까? 정말로 \"%s\" 확장 앱을 제거하시겠습니까? \"%s\" 리포지토리를 추가하시겠습니까? 교체 서명 키 지문이 이미 존재합니다 %1$s 리포지토리는 %2$s와 같은 서명 키 지문을 가지고 있습니다.\n예상된 경우라면 %2$s가 대체되며, 그렇지 않을 경우 리포지토리 관리자에게 연락하십시오. 플래시 지속시간 %1$s ms 플래시 간격 커스텀 하드웨어 비트맵 임계값 기본값 (%d) 리더가 빈 이미지를 불러올 경우 임계값을 점진적으로 줄입니다.\n선택: %s 긴 스트립 리더에 레거시 디코더 사용 성능에 영향을 미칩니다. 비트맵 임계값을 줄여도 빈 이미지 문제가 해결되지 않을 경우에만 활성화하십시오 커스텀 디스플레이 프로필 줌아웃 비활성화 다운로드 경로 생성 실패 경로 생성 실패: %s 중복된 읽은 장 다운로드 스킵 읽음으로 표시될 때 진행상황 업데이트 JSON 백업은 지원되지 않습니다 백업 파일 파손 확장 앱 리포지토리 모든 읽은 항목 내보내기 라이브러리 목록 라이브러리 내보냄 데이터베이스에서 항목을 삭제하려 합니다 읽은 챕터와 라이브러리 항목에 없는 진행상황이 삭제됩니다 읽은 챕터가 있는 항목을 유지 라이브러리 만화 타이틀을 원본과 일치하도록 업데이트 경고: 만화의 이름이 변경될 경우 다운로드 대기열에서 (존재할 경우) 제거됩니다. 확장 앱 읽기 기록 중지 로그 기록 중… 저자 아티스트 중복 가능 라이브러리에 유사한 이름의 항목이 있습니다.\n\n이동하거나 추가할 항목을 선택하십시오. 이 만화는 완결되었거나 예상 출시일이 없습니다. 트래커를 %d 챕터에 업데이트하시겠습니까? 트래커가 %d 챕터에 업데이트 업데이트 예정 표시 예정일 안내 다음 달 이전 달 지속적인 폴더 액세스에 실패했습니다. 앱이 예상치 못하게 동작할 수 있습니다. 플래시 대상 흑색 백색 백색 및 흑색 비공개 트래킹됨 비공개 트래킹 공개 트래킹 선택됨 모두 선택 선택 해제 ASCII가 아닌 파일명 비허용 유니코드를 지원하지 않는 특정 저장 매체와의 호환성을 보장합니다. 이 기능을 활성화하면 원본 폴더와 만화 폴더의 이름을 수동으로 변경해야 합니다. ASCII가 아닌 문자를 해당하는 소문자 UTF-8 16진수 표현으로 대체하여 이름을 변경하십시오. 챕터 파일은 이름을 변경할 필요가 없습니다. 탭 닫기 동시 소스 다운로드 동시 페이지 다운로드 소스별 동시에 다운로드된 페이지 수 인상 깊었던 부분은… 사용 가능 활성화된 소스 선택 고정된 소스 선택 계속 마이그레이션할 데이터 마이그레이션 후 현재 항목 다운로드 삭제 추가 키워드 (선택사항) 추가 키워드를 입력하면 검색 결과를 좁히는 데 도움이 됩니다 일치하지 않는 항목 숨기기 새로운 챕터가 없는 항목 숨기기 매칭된 항목에 새로운 챕터가 있을 때만 표시 이 옵션들은 속도가 느리고 위험할 수 있으며, 소스로부터 제한을 받을 수 있습니다 고급 검색 모드 제목을 키워드로 분석해 검색 범위를 넓힙니다 챕터 번호 기준 매칭 활성화된 경우 가장 진도가 나간 매칭을 선택합니다. 그렇지 않으면 소스 우선순위에 따라 첫 번째 매칭을 선택합니다. 마이그레이션 마이그레이션 (%1$d/%2$d) 복사 마이그레이션 대안을 찾을 수 없습니다 최신: %1$s 알 수 없음 수동 검색 마이그레이션하지 않기 지금 마이그레이션 지금 복사 마이그레이션을 중지하시겠습니까? 중지 취소 복사 마이그레이션 취소 취소 챕터를 찾을 수 없어 이 항목은 마이그레이션에 사용할 수 없습니다 스캔레이터를 제외한 필터 계산 중… ================================================ FILE: i18n/src/commonMain/moko-resources/lt/plurals.xml ================================================ Vakar Prieš %1$d dienas Prieš %1$d dienų Po %1$s minutės Po %1$s minučių Po %1$s minučių %d kategorija %d kategorijos %d kategorijos Skyrius %1$s ir 1 daugiau Skyriai %1$s ir %2$d daugiau Skyriai %1$s ir %2$d daugiau %1$d naujas skyrius %1$d nauji skyriai %1$d nauji skyriai Atlikta %1$s su %2$s klaida Atlikta %1$s su %2$s klaidomis Atlikta %1$s su %2$s klaidomis %d įrašui %d įrašams %d įrašų %d plėtinio atnaujinimas pasiekiamas %d plėtinių atnaujinimai pasiekiami %d plėtinių atnaujinimai pasiekiami %1$s skyrius %1$s skyriai %1$s skyriai Liko vienas Liko %1$s Liko %1$s %d stebėjimo įrenginys %d stebėjimo įrenginiai %d stebėjimo įrenginių Praleidžiamas %d skyrius, arba jo nėra šaltinyje, arba jis buvo nepasirinktas Praleidžiami %d skyriai, arba jų nėra šaltinyje, arba jie buvo nepasirinkti Praleidžiamia %d skyrių, arba jų nėra šaltinyje, arba jie buvo nepasirinkti Kitas neskaitytas skyrius Kiti %d neskaityti skyriai Kiti %d neskaitytų skyrių ================================================ FILE: i18n/src/commonMain/moko-resources/lt/strings.xml ================================================ Filtras Meniu Nustatymai Istorija Sekimas Skyriai Bibliotekos įrašai Kategorijos Neturite jokių kategorijų. Paspauskite pliuso simbolį, kad sukurtumėte kategoriją jūsų bibliotekos organizavimui. Jūsų biblioteka tuščia Nėra neseniai skaitytų Naujinių nėra Atsiuntimų nėra Pagalba Papildinių info Papildiniai Migruoti Atsarginė kopija ir atkūrimas Šaltiniai Istorija Naujienos Biblioteka Atsisiuntimų eilė Nustatymai Daugiau Vardas Visada klausti Numatyta kategorija Tikrinti naujus viršelius ir informaciją kai biblioteka naujinama Automatiškai naujinti metaduomenis Kai yra \"Perskaityta\" statusas Ribojimai: %s Kai krovimas pajungtas Automatinio naujinimo ribojimai Kas savaitę Kas 2 dienas Kasdien Kas 12 valandų Kas 6 valandas Išjungti Automatiniai atnaujinimai Globalus naujinimas Kraštovaizdis Portretas Elementai eilutėje Rodinys Šiandien Tai nesustabdo neoficialių ar potencialiai neteisingai pažymėtų plėtinių nuo N18+ turinio rodymo programoje. Rodyti šaltiniuose ir plėtinių sąrašuose N18+ šaltiniai Slėpti pranešimo turinį Slėpti programos turinį, kai įjungiama kita programa ir neleisti daryti ekrano nuotraukų Saugus užraktas Niekada Visada Užrakinti kai neveiksnus Reikalauti atrakinimo Sauga Tvarkyti pranešimus Datos formatas Visiškai juodas tamsus režimas Yotsuba Jin ir Jang Teal ir Turquoise Tako Braškinis Daikiri Vidurnakčio saulėlydis Obuolių žalia Dinamiška Programos tema Įjungta Išjungta Pagal sistemą Tema Apie Papildomi Sekimas Atsiuntimai Skaityklė Biblioteka Išvaizda Bendriniai Programa negalima Įkeliama… Atsisiųsti dabar Naujinti Į priekį Atgal Atkurti Paspausti klaidų rodymui Atidaryti ataskaitą Įkelti iš naujo Anuliuoti veiksmą Išsaugoti Dalintis Įdiegti Kelti į apačią Kelti į viršų Mažėjimo tvarka Didėjimo tvarka Seniausi Naujausi Pagal skyrių skaičių Pagal įkėlimo datą Rikiavimas Atšaukti visus šiam kūriniui Atšaukti visus Atšaukti Atsegti Prisegti Išjungti Rodyti įrašų skaičių Rodyti kategorijų korteles Vietinis šaltinis Atsisiųsti skyriai Sąrašas Patogus tinklelis Kompaktiškas tinklelis Rodinys Rodymo režimas Migruoti Atverti per WebView Atverti naršyklėje Tęsti Pradėti Šalinti Bandyti iš naujo Sekantis skyrius Ankstesnis skyrius Pristabdyti Rodyti skyrius Keisti viršelį Perkelti kategorijas Pervardinti kategoriją Redaguoti kategorijas Pridėti kategorija Pridėti Redaguoti Išjungti visus Įjungti visus Naujinti biblioteką Ištrinti Pašalinti skyrių iš žymių Išsaugoti skyrių į žymes Atsisiųsti Žymėti pastarąjį, kaip skaitytą Žymėti, kaip neskaitytą Žymėti kaip skaitytą Atvirkščias žymėjimas Žymėti visus Globali paieška Paieškos nustatymai Paieška Pridėjimo data Atnaujinimo data Naujausiais skyriais Paskiausiai žiurėtas Skyrių skaičius Abėcėlės tvarka Panaikinti filtrą Neskaitytus Sekami Žymės Autentifikuokitės, kad patvirtintumėte pakeitimus Numatytas Rūšiavimo ir vaizdavimo nustatymai kiekvienai kategorijai Pasirinktinis ryškumas Išjungta Įjungta Apkarpyti kraštus Trumpai parodyti dabartinį rėžimą, kai skaitiniai yra atidaryti Parodyti skaitymo rėžimą Parodyti puslapio numerį Dvigubo paspaudimo animacijos greitis Puslapių perėjimų animacijos Parodyti turinį iškirptoje zonoje Jeigu perskirtų puslapių pozicijos nesutampa su skaitymo kryptimi Apkeisti perskirtų puslapių padėtį Perskirti plačius puslapius Trumpai parodyti skaitytuvą, kai atidarytas Pilno ekrano rėžimas Šaltiniuose gali būti N18 turinio 18+ Šis plėtinys nebėra prieinamas. Plėtinys gali veikti netinkamai arba sukelti problemas programėlėje. Rekomenduojama išdiegti plėtinį. Šis plėtinys buvo pasirašytas nepatikimu sertifikatu ir nebuvo aktyvuotas. \n \nPlėtinys, su negeranoriškais ketinimais, gali perskaityti prisijungimo duomenys patalpintus Mihon arba gali paleisti kenkėjišką kodą. \n \nJūs priimate šias rizikas pasitikėdami sertifikatu. Nepatikimas plėtinys Aplikacijos informacija Šalinti Patikimas Nepatikimas Įdiegtas Diegiasi Siunčiasi Laukiama Įdiegti Pasenusi Atnaujinimas Neįtraukti: %s Įtraukti: %s Nėra Visi Įrašai, kurie yra įtraukti į neįtraukiamas kategorijas, nebus atnaujinami, net jei yra įtraukti į įtrauktąsias kategorijas. Atsiuntimo klaida Nauja versija pasiekiama! Pagal aukštį talpinimas Balta Dešinė Iš kairės į dešinę Vertikalus Webtoon Diegimo programa Kai yra neskaitytų skyrių Kai dar neprasidėjo Instaliuojamas papildinys… Palikti ekraną įjungta Praleisti perskaitytus skyrius Praleisti perfiltruotus skyrius Vertikalus Veiksmai Parodyti ilgiau paspaudus Išsaugoti puslapius atskiruose aplankuose Sukuria aplankus pagal įrašo pavadinimą Fono spalva Ankstesnis Pilka Mastelio tipas Visada rodyti skyrių perėjimus Originalus dydis Skaitymo rėžimas Centruoti Be animacijų G Invertuoti spalvas Spalvų filtrų maišymo rėžimas Kitas Kairė Ištęstinis vertikalus Greitai B Atnaujinti viską Garso mygtukai Pritaikyti pagal ekraną Shizuku neveikia Perdanga Navigacija Apkeisti garso mygtukus Invertuoti paspaudimo zonas Juoda Automatinis Numatytas skaitymo rėžimas Dešinė ir Kairė Įprastai Ištempti Talpinti pagal plotį Pašviesinti L formos Taip pat kaip Kindle Rodyti įrašą Pasirinktinas spalvų filtras Multiplikuoti Ekranas Nėra Iš dešinės į kairę Dešiniau A Patamsinti Horizontalus Abu Puslapiai Paspaudimų išdėstymas Protingas pritaikymas Automatinis Kairiau Viso įrašų Numatytas sukimosi tipas Sukimosi tipas Neribojamas Portretas Peizažas Fiksuoti vertikaliai Fiksuoti horizontaliai R Kalba Nepavyko gauti papildinių sąrašo Instaliuoti ir paleisti Shizuku, kad galėtumėte naudoti Shizuku kaip papildinių instaliuotoją. Rodyti lietimui jautrias zonas Įspėjimas Kas 3 dienas Kai naudojamas Wi-Fi Yra naujinių Skaitoma Pasenusi Nespalvotai Priartinimo pradinė padėtis Atsarginių kopijų kūrimo dažnis Trečias nuo paskutinio skaityto Išjungtas Jautrumas, skirtas paslėpti meniu slinkant Žemas Atsisiųsti naujus skyrius Išsaugoti kaip CBZ archyvą Po perskaitymo atnaujinti statusą Trūksta šaltinių: Paslaugos Priešpaskutinis perskaitytas skyrius Ketvirtas skyrius nuo paskutinio skaityto Leisti naikinti žymėtus skyrius Penktas nuo paskutinio skaityto Automatinis atsisiuntimas Sukurta atsarginė kopija aukštas Naikinti skyrius Mažiausias Rankinių būdu pažymėtas, kaip skaitytas Perskaičius automatiškai naikinti Patobulintos paslaugos Atkurti biblioteką iš atsarginės failo kopijos Atsarginėje kopijoje nėra jokių bibliotekos įrašų. Netinkamas atsarginės kopijos failas Aukščiausias Kurti atsarginę kopiją Atkurti atsarginę kopiją Neįtrauktos kategorijos Paskiausiai skaitytas skyrius Įrašai neįtrauktose kategorijose nebus atsisiųsti, net jei jie taip pat yra įtraukti į kategorijas. Palieskite, kad sužinotumėte daugiau Pasirinkti atsarginės kopijos failą Įkeliami puslapiai… Kito skyriaus nėra Dideli atnaujinimai kenkia šaltiniams ir gali lemti lėtesnius atnaujinimus bei didesnį akumuliatoriaus naudojimą. Bakstelėkite , jei norite sužinoti daugiau. Skaitymo rėžimas Sk. %1$s - %2$s Atnaujinama biblioteka Atnaujinkite „WebView“ programą dėl geresnio suderinamumo Skyrius %1$s Istorija ištrinta Nepavyko pakrauti paveikslėlio Puslapių nerasta Ar tu tuo tikras? Visa istorija bus prarasta. Naudoti šį paveiksliuką kaip viršelį? Priskirti šiai serijai Baigta: Dabartinis: Nepavyko atnaujinti %1$d Prieš atlikdami šį veiksmą, pridėkite įrašą į savo biblioteką Praleista, nes nėra perskaitytų skyrių Nepavyko apeiti \"Cloudflare\" \"WebView\" reikalingas \"Mihon\" Šaltinis nerastas Pasirinkite šaltinį, iš kurio norite perkelti Perkelti Nepavyko atsisiųsti skyrių dėl mažos vietos saugykloje Jei reikia pagalbos, kaip ištaisyti bibliotekos naujinimo klaidas, žr. %1$s Nepavyko įkelti puslapių: %1$s Ankstesnis: Parsisiųsti Bakstelėkite, kad įdiegtumėte atnaujinimą Ši \"Android\" versija nebepalaikoma Naujų atnaujinimų nėra Pasirinkite duomenis, kuriuos norite įtraukti Kopijuoti Atrasti nauji skyriai Praleista, nes yra neperskaitytų skyrių Atsiunčiama… Pasirinkti viršelio vaizdą Jūs dar neturite jokių kategorijų. Ankstesnio skyriaus nėra Praleista, nes leidinys nebeleidžiamas Išvalyti istoriją Skyrius %1$s ir %2$d daugiau Skyriai %1$s Nepavyko atnaujinti viršelio Nerasta atitikmenų Iš naujo nustatyti visus šio įrašo skyrius Atnaujintas viršelis Dabar esate atsijungęs Nustatyti kaip viršelį Pristabdyta Šaltinis neįdiegtas: %1$s Pridėti į biblioteką? Тipas Pradžios data Skyrius %1$s Klaida Prisijungęs Nežinoma klaida Atsisiųsti skyriai Nukopijuota į iškarpinę: \n%1$s Nepavyko nukopijuoti į iškarpinę Atsisiunčiama (%1$d / %2$d) Skyriaus numeris Baigimo data Šaltinio pavadinimas Iš bibliotekos Prašome dar kartą prisijungti prie MAL Tai pašalins šio skyriaus skaitymo datą. Ar tu tuo tikras? Atsijungti nuo %1$s? Šaltinis nepalaikomas Atsijungti Ištrinti kategoriją Neskaitytų skaičius Paskutinis atnaujinimo patikrinimas Ar tikrai norite ištrinti kategoriją \"%s\"? Levandos Uždaryti Programos kalba Ištrinti viską InternalError: Patikrinkite klaidų žurnalus, kad gautumėte daugiau informacijos Kai duomenys neapmokestinami Perkelti seriją į viršų Sekimo priemonės, neprijungtos prie: Pagerina skaitytuvo našumą Kalba Amžiaus reitingas Apverstas portretas Trasa Kraštas Išjungtas Paslaugos turinčios patobulintas funkcijas, kurios teikia konkretus šaltiniai. Įrašai automatiškai stebimi, kai įtraukiami į jūsų biblioteką. Bakstelėdami slinkti plačius vaizdus Priartinti horizontalų vaizdą Versija Vienpusė sinchronizacija, skirta skaitymo progresui stebėjimo paslaugose atnaujinti. Nustatykite atskirą įrašų sekimą iš jų sekimo mygtuko. Galima naudoti dabartinei bibliotekai atkurti Šoninis spaudinėjimas Nėra bibliotekos įrašų, kurių atsargines kopijas būtų galima sukurti Įrašyti strigčių žurnalus į failą, kad būtų galima juos bendrinti su kūrėjais Atsarginės kopijos kūrimas DNS per HTTPS (DoH) Tinklo ryšis nepasiekiamas Nepavyko atsisiųsti skyriaus dėl netikėtos klaidos Valdiklis nepasiekiamas, kai įjungtas programėlės užraktas Peržiūrėkite neseniai atnaujintus bibliotekos įrašus Talpykla išvalyta. %1$d failai buvo ištrinti Išvalyti duomenų bazę Nerandama failų rinkiklio programos Atidaryti „GitHub“ svetainėje Programėlių atnaujinimai Plėtinių atnaujinimai Ankstesnis puslapis Atsarginės kopijos kūrimas / atkūrimas gali veikti netinkamai, jei \"MIUI Optimization\" yra išjungtas. Atšauktas atkūrimas Atsargines kopijas turėtumėte laikyti ir kitose vietose. Slapukai išvalyti Duomenys %1$d nebibliotekiniai įrašai duomenų bazėje Nepavyko atkurti atsarginės kopijos Tinklas Ką norite įtraukti į atsarginę kopiją? Ištrinti įrašai Išvalyti skyriaus talpyklą Naudota: %1$s Nepavyko atidaryti įrenginio nustatymų Na, tai nepatogu Valymo metu įvyko klaida Tik viršelių tinklelis Stebėjimo vadovas Nepavyko sukurti atsarginės kopijos Atkūrimas jau vyksta Atkuriama atsarginė kopija Kad įsigaliotų, reikia iš naujo paleisti programą Iš naujo nustatyti kiekvienos serijos skaitytuvo nustatymus Išmeskite strigčių žurnalus Nepavyko atsisiųsti skyrių. Galite pabandyti dar kartą atsisiųsti Numatytoji vartotojo agento eilutė Neįdiegtas Atnaujinti numatytus skyrių nustatymus Parsisiuntėjas Klaida Nėra „Wi-Fi“ ryšio Progresas Atsarginė kopija jau kuriama Įspėjimas: dėl didelių masinių atsisiuntimų šaltiniai gali tapti lėtesni ir (arba) jie blokuoti \"%s\". Bakstelėkite , jei norite sužinoti daugiau. Išjungti akumuliatoriaus optimizavimą Atkūrimas baigtas %1$02d min, %2$02d sek Nėra ką išvalyti „WebView“ duomenys išvalyti Darbo pradžios vadovas Puslapis %d nerastas skaidant Nepavyko rasti puslapio failo kelio %d Bendras Baigtas Atsisiuntimas pristabdytas Skyriaus atnaujinimai Kitas puslapis Išvalyti slapukus Išvalyti skyriaus talpyklą uždarius programą Ištrinkite įrašų istoriją, kurie nėra išsaugoti jūsų bibliotekoje Atsarginės failo kopijos duomenys bus atkurti. \n \nNorėdami jais naudotis, turėsite įdiegti trūkstamus plėtinius ir po to prisijungti prie stebėjimo paslaugų. Iš naujo nustatyti numatytąją vartotojo agento eilutę Išvalyti \"WebView\" duomenis Atnaujinti bibliotekos viršelius Iš naujo nustatyti visų serijų skaitymo režimą ir orientaciją Visų skaitytuvo nustatymų nustatymas iš naujo Nepavyko atstatyti skaitytuvo nustatymų Fono veikla Padeda su fono bibliotekos naujinimais ir atsarginėmis kopijomis Akumuliatoriaus optimizavimas jau išjungtas Klaidos Spausdinti verbalinius žurnalus į sistemos žurnalą (sumažina programos našumą) Daugiažodis registravimas Planšetinio kompiuterio UI Kai kurie gamintojai taiko papildomus programėlių apribojimus, kurie išjungia fono paslaugas. Šioje svetainėje rasite daugiau informacijos, kaip tai ištaisyti. Internetinis puslapis Versija Kas naujo Paskutinį kartą naudotas Skyrius nerastas Skaitinis nepublikuojamas Skirtukai Siųsti strigčių ataskaitas Planuojama skaityti Daugiau rezultatų nėra Ar tikrai norite ištrinti pasirinktus skyrius? Užbaigta Ieškoti programos atnaujinimų Privatumo politika Bibliotekoje Skaitoma Išsaugant viršelį įvyko klaida Padeda ištaisyti bet kokias klaidas. Skelbtini duomenys nebus siunčiami Slaptažodis Prisijungti Pagal šaltinį Pagal įkėlimo datą Atsisiųsti Data Kategorijos atnaujinimas Atnaujinta į v%1$s Prisijunkite prie %1$s Rezultatų nerasta Vykdoma Įtraukta į biblioteką Viršelis Prisegtas El. pašto adresas Pasaulinė paieška… Naujausia Vietos šaltinių vadovas Viršelis išsaugotas Skyrių nerasta Atmestas Pakartotinis skaitymas Skaitinių sąrašas Padėkite išversti programa Pristabdytas Pašalinti iš bibliotekos Vietinis šaltinis Ieškokite \"%1$s\" visame pasaulyje Neturite prisegtų šaltinių Netinkamas skyriaus formatas Kita Licencijuotas Ištrinti atsisiųstus skyrius? Nežinoma Nežinomas autorius Nežinoma būsena Nebepublikuojamas Nėra aprašymo Inkognito režimas Naršyti Publikavimas pristabdytas Pagal skyriaus numerį Daugiau Taip pat taikyti visiems mano bibliotekoje esantiems įrašams Nustatyti kaip numatytąjį Sekimas Atvirojo kodo licencijos Rodyti tik atsisiųstus Pristabdo skaitymo istoriją Išjungti inkognito režimą Filtruoja visus įrašus jūsų bibliotekoje Vartotojo vardas Rūšiuoti pagal Pridėti į biblioteką Pašalinti iš bibliotekos Mažiau Dar neskaitytus Individualus viršelis Įvyko klaida bendrinant viršelį Skyriaus nustatymai Ar tikrai norite išsaugoti šiuos nustatymus kaip numatytuosius? Pridėti stebėjimą Neskaityta Sulaikytas Norimų sąrašas Pilnas sąrašas Pavadinimas Klaidą išsaugojant paveikslą Būsena Rezultatas Kategorija su šiuo pavadinimu jau egzistuoja! Kategorijos ištrintos Pasirinktinas filtras Viršelis išsaugotas Būsena Užlaikytų sąrašas Nebaigtų sąrašas %1$s: %2$s, puslapis %3$d Kitas skyrius nerastas Šaltinis nerastas Šaltinio perkėlimo vadovas Nepavyko atidaryti paskutinio skaityto skyriaus Puslapis: %1$d Kitas: Įdiegtų šaltinių nerasta Potvynio banga Ieškoti… Vartotojo agento eilutė negali būti tuščia Atnaujinimas jau vykdomas Biblioteka paskutinį kartą atnaujinta: %s Ketinate pašalinti „%s“ iš bibliotekos Veikia tik bibliotekoje esantiems įrašams ir tik tada, jei jau atsisiųstas dabartinis ir kitas skyrius Atsisiųsti į priekį Automatinis atsisiuntimas beskaitant Praleista, nes serijai nereikia atnaujinimų Nesuteikti saugojimo leidimai Automatinis atsisiuntimas, atsisiuntimas į priekį Rankinės ir automatinės atsarginės kopijos Programos užraktas, saugus ekranas Tema, datos ir laiko formatas Skaitymo režimas, rodymas, navigacija Vienpusis progreso sinchronizavimas, patobulintas sinchronizavimas Šaltiniai, plėtiniai, visuotinė paieška Kategorijos, visuotinis atnaujinimas Kelių kalbų Eksportuoti gedimų žurnalus, akumuliatoriaus optimizavimą Netinkama vieta: %s Netinkama naudotojo agento eilutė Nežinomas pavadinimas Ką tik %s susidūrė su netikėta klaida. Siūlome padaryti šio pranešimo ekrano nuotrauką, išsisaugoti gedimų žurnalus ir pasidalyti tuo mūsų „Discord“ palaikymo kanale. Ar esate tikri? Populiaru Ups! Iš naujo paleiskite programą Indeksuojami atsisiuntimai F-Droid versijos oficialiai nepalaikomos. \nBakstelėkite, kad sužinotumėte daugiau. Šioje kategorijoje įrašų nerasta Atverti atsitiktinį įrašą Rodyti mygtuką „Tęsti” skaitymą Tai pašalins jūsų anksčiau pasirinktą pabaigos datą iš %s Pašalinti datą? Tai pašalins jūsų anksčiau pasirinktą pradžios datą iš %s Atsisiuntimų indekso panaikinimas Priversti programėlę iš naujo patikrinti atsisiųstus skyrius Atsiųsta Apžvalga Iš viso Perskaityta Sekliai Globaliame atnaujinime Vidutinis įvertinimas %d d. %d val. Naudojama nėra %d sek. Įrašai Skaitymo trukmė Sekami įrašai Užbaigti įrašai Statistika Pradėta Vietiniai %d min. Ne dabar Kategorija yra tuščia Nukopijuota į iškarpinę Turima, bet šaltinis nėra įdiegtas: %s Rodyti neperskaitytų skaičių ant Naujienų piktogramos Praleisti pasikartojančius skyrius ================================================ FILE: i18n/src/commonMain/moko-resources/lv/plurals.xml ================================================ Pabeigts %1$s ar %2$s kļūdām Pabeigts %1$s ar %2$s kļūdu Pabeigts %1$s ar %2$s kļūdām Pēc %1$s minūtēm Pēc %1$s minūtes Pēc %1$s minūtēm %d kategoriju %d kategorija %d kategorijas Šodien Vakar Pirms %1$d dienām %1$s atlikušas %1$s atlikusi %1$s atlikušas %d izsekotāju %d izsekotājs %d izsekotāji Priekš %d ierakstiem Priekš %d ieraksta Priekš %d ierakstiem Izlaisti %d nodaļu, vai nu to nav avotā, vai arī tie ir izfiltrēti Izlaists %d nodaļa, vai nu tā nav avotā, vai arī tā ir izfiltrēta Izlaistas %d nodaļas, vai nu tās nav avotā, vai arī tās ir izfiltrētas %1$d jaunu nodaļu %1$d jauna nodaļa %1$d jaunas nodaļas %1$s nodaļu %1$s nodaļa %1$s nodaļas Pieejami %d paplašinājumi atjaunināšanai Pieejams %d paplašinājums atjaunināšanai Pieejami %d paplašinājumi atjaunināšanai Nodaļu %1$s Nodaļa %1$s un vēl 1 Nodaļa %1$s un vēl %2$d Trūkst %1$s nodaļu Trūkst %1$s nodaļa Trūkst %1$s nodaļas Nākošā %d nodaļa Nākošā %d nodaļa Nākošās %d nodaļās Nākamā nelasītā nodaļa Nākamā nelasītā nodaļa Nākamās %d nelasītas nodaļas %d dienas %d diena %d dienas ================================================ FILE: i18n/src/commonMain/moko-resources/lv/strings.xml ================================================ Nosaukums Kategorijas Nodaļas Izsekošana Vēsture Iestatījumi Lejupieladēšanas rinda Bibliotēka Vēsture Atjauninājumi Dublēšana un atjaunošana Iestatījumi Filtrs Ar grāmatzīmēm Neizlasītie Dzēst filtru Alfabētiski Nodaļu daudzums Pēdēji izlasīti Meklēt Atlasīt visus Atzīmēt kā izlasītu Atzīmēt kā neizlasītu Atzīmēt iepriekšējus kā izlasītus Lejupieladēt Grāmatzīme Noņemt grāmatzīmi Dzēst Atjaunināt bibliotēku Rediģēt Pievienot Pievienot kategoriju Rediģēt kategorijas Pārdēvēt kategoriju Noteikt kategorijas Rediģēt vāku Pārtraukt Iepriekšēja nodaļa Nākama nodaļa Mēģināt vēlreiz Dzēst Turpināt Atvērt pārlūkā Displeja režīms Radīt Kompakts režģis Saraksts Atcelt Kārtot Instalēt Dalīties Saglabāt Sākt no jauna atraisīt Atvērt žurnālfailu Atjaunot Ieladēšana… Programma nav pieejama Vispārīgas Lasītājs Lejupieladējumi Izsekošana Papildu iestatījumi Par programmu Biežs Tīkla savienojums nav pieejams Nav pieejams Wi-Fi savienojums Nevarēja lejupielādēt nodaļu neparedzētas kļūdas dēļ Kļūda Lejupielādētājs Lai uzlabotu saderību, lūdzu, atjauniniet WebView lietotni Lai aplikācija strādātu ir nepieciešams WebView Dublējuma atjaunošana neizdevās Dublējuma atjaunošana Atjaunošana jau notiek Dublēšana neizdevās Izveido dublējumu Ko vēlaties dublēt? Dublēšana jau notiek %1$02d min, %2$02d sec Atjaunošana pabeigta Trūkstošie avoti: Dublējumā nav neviena bibliotēkas ieraksta. Paplašinājumu informācija Paplašinājumi Abi Vertikāls Horizontāls Nav Invertētas skāriena zonas Paplašinājumu atjauninājumi Nodaļu atjauninājumi Lejupielādes pauzētas Nav lejuplāžu Palīdzība Migrēt Avoti Vairāk Ērts režģis Migrēt Atvērt WebView Sākt Skatīt nodaļas Atspējot visu Iespējot visu Atlasiet apgrieztu Globālā meklēšana Pievienošanas datums Jaunākā nodaļa Izvēlne Jums nav nevienas kategorijas. Pieskarieties plus pogai, lai izveidotu kategoriju savas bibliotēkas organizēšanai. Jūsu bibliotēka ir tukša Nekas nesen lasīts Nekas nesen lasīts Jaunākais Atcelt visu Atspraust Piespraust Atspējot Rādīt kategoriju cilnes Nav pieejamas jaunas nodaļas Lejuplādēt Ainava Portrets Režģa izmērs Displejs Slēpt paziņojumu saturu Drošs ekrāns paslēpj saturu mainot lietotnes, un bloķē ekrānuzņēmumus Drošs ekrāns Nekad Vienmēr Bloķēt, ja dīkstāvē Vajadzīgs atbloķēt Drošība un privātums Pārvaldiet paziņojumus Datuma formāts Ieslēgts Izslēgts Sekot sistēmu Motīvs Bibliotēka Atjaunot Uz priekšu Atpakaļ Pārvietot uz leju Pārvietot uz augšu Vecākais Lejuplādēt nodaļas Dilstoši Augoši Pēc nodaļas numura Parādīt lietu skaitu Atjauninās bibliotēka Izsekots Noklusētā kategorija Meklēt Uzstādījumos Pabeigts Licencēts Nezināms Vēl turpinās Nosaukums Izdzēst nodaļas Automātiska lejupielāde Atjaunot dublējumu Sekotāji, kas nav pieteikušies: Dublējuma faila dati tiks atjaunoti. \n \nJums būs jāinstalē visi trūkstošie paplašinājumi un jāpiesakās izsekošanas pakalpojumos, lai tos izmantotu. Neizlasītie Visi Atjauninājums Lejupielādē Instalē Aplikācijas informācija 18+ Autentificējaties, lai apstriprinātu izmaiņas Ar \'\'Pabeigts\'\' statusu Sākt lejupielādi tūlīt Neizdevās iegūt paplašinājumu sarakstu Īsi parādīt, kad ir atvērts lasītājs Ierobežojums: %s Automātiski atsvaidzina metadatus Atjauninot bibliotēku, meklēt jaunu vāku un kopsavilkumu Tikai nemērītā tīklā Uzlādējot Versija Valoda Vecuma grupa Pēdējā atjauninājuma pārbaude Neizlasītais skaits Rādīt ierakstu Šī paplašinājuma avoti var saturēt NSFW (18+) saturu Instalē paplašinājumu… Instalētājs Shizuku nedarbojas Dinamisks Visi ieraksti Atcelt visu šai sērijai Pēc augšupielādes datuma NSFW (18+) avoti Rādīt avotos un paplašinājumu sarakstos Izslēgts Valoda Nodaļas ieneses datums Aizvērt Globāls atjauninājums Šis neliedz neoficiāliem vai, iespējams, nepareizi atzīmētiem paplašinājumiem parādīties NSFW (18+) saturu lietotnē. Šodien Automātiskie atjauninājumi Katru nedēļu Automātiskās atjaunināšanas ierīču ierobežojumi Izslēgt: %s Novecojis Instalēt Gaida Atinstalēt Neuzticams paplašinājums Šis paplašinājums tika parakstīts ar neuzticamu sertifikātu, un tas netika aktivizēts. \n \nĻaunprātīgs paplašinājums var nolasīt visus saglabātos pieteikšanās akreditācijas datus vai izpildīt patvaļīgu kodu. \n \nUzticoties šim sertifikātam, jūs piekrītat šiem riskiem. Mantots Instalējiet un startējiet Shizuku, lai izmantotu Shizuku kā paplašinājuma instalētāju. Pilnekrāns Rādīt skāriena zonu pārklājumu Ja sadalīto plato lapu izvietojums neatbilst lasīšanas virzienam Animēt lappušu pārejas Rādīt lappušu numuru Rādīt lasīšanas režīmu Pēc lasītāja atvēršanas īsi parādīt pašreizējo režīmu Ieslēgts Izslēgts Pielāgots spilgtums Pelēktoņu Pielāgots krāsu filtrs Krāsu filtra sajaukšanas režīms Parklājums Pārvietot sēriju uz augšu Izskats Aplikācijas tēma Zaļš Ābols Pusnakts Krēsla Zemeņu Daikirs Tako Teāls un Tirkīzs Jiņ & Jan Yotsuba Pilnīgi melns tumšais režīms Aplikācijas valoda Ar nelasītu(ām) nodaļu(ām) Kas nav sāktas Vienmēr jautāt Kategorijas iestatījumi kārtošanai Izslēgto kategoriju ieraksti netiks atjaunināti, pat ja tie ir iekļautajās kategorijās. Neviens Iekļaut: %s Atjaunināt visu Gaida atjauninājumu Instalēts Uzticams Neuzticams Šis paplašinājums vairs nav pieejams. Tas var nedarboties pareizi un var radīt problēmas ar lietotni. Ieteicams to atinstalēt. Sadalīt platas lapas Apvērst dalītās lapas izvietojumu Rādīt saturu izgriezuma apgabalā Dubultpieskāriena animācijas ātrums Apgriezt apmales Pieskarieties, lai skatītu detalizētu informāciju Ik pēc 6 stundām Ik pēc 12 stundām Katru dienu Ik pēc 2 dienam Ik pēc 3 dienām Tikai uz Wi-Fi Auto Turēt ekrānu ieslēgtu Centrs Rotācijas tips Brīvs Oriģinālais lielums Automātisks Pa kreisi Pa labi Normāls Atļaut dzēst ar grāmatzīmēm atzīmētās nodaļas Pēdējā lasītā nodaļa Pirmspēdējā nodaļa Lejupielādē jaunās nodaļas Pretējs portrets Melns Noklusējums Darbība R G B A Vienmēr rādīt nodaļu pāreju Jutīgums, lai ritinājumā paslēptu izvēlni Aizslēgts ainavas režīmā Zemākais Pēc manuālas atzīmēšanas kā lasītu Saglabāt kā CBZ arhīvu Nākamais L formas Pelēks Atspējots Balts Garā strīpā ar pārtraukumu Sānu platums Izslēgtās kategorijas Lokālais avots Saglabāt lappuses atsevišķās mapēs Iepriekšējais Noklusējuma lasīšanas režīms Kindle-ish Pa kreisi Mala Pa labi un pa kreisi Pa labi Lapaspuses (no kreisās puses uz labo) Garā strīpā Skāriena zonas Izstiept Ietilpt platumā Ietilpt augstumā Nav animācijas Ainava Portrets Aizslēgts portreta režīmā Lasīšanas režīms Lapaspuses (no labās puses uz kreiso) Lapaspuses (vertikāli) Bibliotēkas ieraksti Ātrs Noklusējuma rotācijas tips Augsts Augstākais Brīdinājums Izlaist izlasītās nodaļas Invertēts Reizināt Ekrāns Izlaist filtrētās nodaļas Navigācija Invertēt skaļuma regulēšanas taustiņus Rādīt darbīūbas ar ilgu pieskārienu Izveido mapes atbilstoši ieraksta nosaukumam Fona krāsa Mēroga tips Ietilpt ekrānā Viedā ietilpšana Tālummaiņas sākuma pozīcija Zems Pēc lasīšanas automātiski izdzēst nodaļas Atspējots Izslēgto kategorijas ieraksti netiks lejupielādēti pat tad, ja tie ir iekļautajās kategorijās. Skaļuma regulēšanas taustiņi Konfidencialitātes politika Var izmantot, lai atjaunotu pašreizējo bibliotēku Uzlabo lasītāja veiktspēju, sadalot garus lejupielādētus attēlus Pakalpojumi, kas nodrošina uzlabotus līdzekļus konkrētiem avotiem. Pievienojot bibliotēkai, ieraksts tiks automātiski izsekots. Izveidot dublējumu Nederīgs dublējuma fails Dublējumu biežums Kopijas vajadzētu glabāt arī citās vietās. Dažiem ražotājiem ir papildu lietojumprogrammu ierobežojumi, kas iznīcina fona pakalpojumus. Šajā vietnē ir vairāk informācijas par to, kā to izlabot. Vienvirziena sinhronizācija, lai atjauninātu izsekošanas pakalpojumu nodaļas progresu. Iestatiet izsekošanu atsevišķiem ierakstiem, izmantojot izsekošanas pogu. Palīdz ar fona bibliotēku atjauninājumiem un dublējumiem Akumulatora optimizācija jau ir atspējota Drukāt verbose žurnālus sistēmas žurnālā (samazina programmas veiktspēju) Atjaunot progresu pēc lasīšanas Izsekošanas rokasgrāmata Dalīties ar avārijas žurnālu Saglabā kļūdu žurnālus failā priekš koplietošanas ar izstrādātājiem Notīrīt nodaļas kešatmiņu Atsvaidzināt bibliotēkas vākus Ieraksti izdzēsti Nav bibliotēkas ierakstu, ko dublēt Atjaunošana atcelta Dublēšana/atjaunošana var nedarboties pareizi, ja ir atspējota MIUI Optimization. Notīriet nodaļu kešatmiņu, atverot lietotni %1$d ierakstu, kas nav bibliotēkas, ir datu bāzē Tīkls Dati Izmantots: %1$s Nav ko tīrīt Atspējot akumulatora optimizāciju Atjaunot bibliotēku no dublējuma faila Notīrīt sīkfailus Izvēlēties DNS pār HTTPS (DoH) Sīkfaili notīrīti Tīrīšanas laikā radās kļūda Notīrīt datu bāzi Dzēst vēsturi ierakstiem, kas nav saglabāti jūsu bibliotēkā Atiestatīt atsevišķu sēriju lasītāja iestatījumus Atiestatīt katras sērijas lasīšanas režīmu un orientāciju Planšetdatora lietotāja interfeiss Verbose reģistrēšana Tīmekļa vietne Versija Jaunumi Atjaunināts uz v%1$s Atvērtā avota licences Pārbaudīt, vai nav atjauninājumu Notīrīt WebView datus WebView dati notīrīti Fona darbība Nevarēja atvērt ierīces iestatījumus Serviss Dublējums izveidots Visi lasītāja iestatījumi atiestatīti Nevarēja atiestatīt lasītāja iestatījumus Lai stātos spēkā, ir nepieciešama lietotnes restartēšana Sekot Uzlabotie pakalpojumi Palīdzi tulkot Sūtīt avārijas ziņojumus Kešatmiņa nodzēsta. %1$d faili ir izdzēsti Tikai vāka režģis Lietotājvārds Parole Palīdz novērst jebkādas problēmas. Sensitīvi dati netiks nosūtīti E-pasta adrese Pieteikumvārds Pauzē lasīšanas vēsturi Inkognito režīms Rezultāti nav atrasti Filtrēt visus ierakstus bibliotēkā Vairāk rezultātu nav Pieteicies Izrakstīties no %1$s? Pieteikties %1$s No bibliotēkas Pēdējo reizi izmantots Meklēt \"%1$s\" globāli Jaunākais Šobrīd lasa Trešā pirmspēdējā izlasītā nodaļa Lapaspušu skats Izrakstīties Piesprausts Citi Tagad jūs esat izrakstījies Cilnes Lokālais avots Pārlūkot Lokālo avotu rokasgrāmata Jums nav piespraustu avotu Nodaļa nav atrasta Nezināma kļūda Ceturtā pirmspēdējā izlasītā nodaļa Tikai lejupielādētie Lejupielādētās nodaļas Izslēgt inkognito režīmu Atjaunina kategoriju Piektā pirmspēdējā izlasītā nodaļa Globālā meklēšana… Neizdevās apiet Cloudflare Kļūda Pārtraukts Lai uzzinātu, kā novērst bibliotēkas atjaunināšanas kļūdas, skatiet %1$s Pašreizējais: Lapas nav atrastas Statuss Nezināms autors Atcelta Bibliotēkā Noņemt no bibliotēkas Neizlasīto Attiecas arī uz visiem ierakstiem manā bibliotēkā Uzstādīt kā noklusējuma Šobrīd lasa Kategorija ar šādu nosaukumu jau pastāv! Kategorija izdzēsta Neizdevās ielādēt lapas: %1$s Nodaļa %1$s-%2$s Atlasīt iekļaujamos datus Lejupielādē (%1$d/%2$d) Statuss Notīrīt vēsturi %1$s: %2$s, lapa %3$d Pievienots bibliotēkai Pievienot bibliotēkai? Avota nosaukums Vāks Aizturēts Atiestatīt visas šī ieraksta nodaļas Nezināms statuss Publicēšana pabeigta Izsekošana Neizdevās atjaunināt vāku Izlaists, jo sērija ir pabeigta Nevar atrast lapas %d faila ceļu Pabeigts Kļūdas Lūdzu, piesakieties MAL vēlreiz Tiks noņemts šīs nodaļas lasīšanas datums. Vai esi pārliecināts? Lasīšanas režīms Nākošā nodaļa nav atrasta Nu, šis ir neveikli Atvērt vietnē GitHub Šī Android versija vairs netiek atbalstīta Lejupielādē… Progress Attēlu nevarēja ielādēt Vai izmantot šo attēlu kā vāku? Priekš šīs sērijas Pamests Brīdinājums: liela apjoma lejupielāde var izraisīt to, ka avoti kļūst lēnāki un/vai bloķē %s. Pieskarieties, lai uzzinātu vairāk. Izlaists, jo neviena nodaļa nav izlasīta Atlasiet vāka attēlu Atlasiet dublējuma failu Iepriekšējā lapa Kopēt Vērtējums Vēsture izdzēsta Lavanda Nederīgs nodaļas formāts Kārtot pēc Pievienot bibliotēkai Noņemts no bibliotēkas Vairāk Mazāk Neizdevās kopēt uz starpliktuvi Nav apraksta Nodaļas numurs Pēc avota Pēc nodaļas numura Lejuplādēt Kļūda koplietojot vāku Nav atrastu nodaļu Pievienot izsekošanu Pauzēts Plānoju lasīt Vēlmju saraksts Attēls saglabāts Kļūda, saglabājot attēlu Vāks atjaunināts Nav instalēts Daudz atjauninājumi kaitē avotiem un var izraisīt lēnākus atjauninājumus un arī lielāku akumulatora lietojumu. Pieskarieties, lai uzzinātu vairāk. Avots nav instalēts: %1$s Pabeigto saraksts Aizturēto saraksts Kopēts uz starpliktuvi: \n%1$s Kļūda saglabājot vāku Lasīšanas saraksts Nodaļas %1$s Atrastas jaunas nodaļas Nodaļa %1$s un vēl %2$d Nav atrasta failu atlases programma Lūdzu, pievienojiet ierakstu savai bibliotēkai, pirms to darāt Nodaļa %1$s Sadalīšanas laikā netika atrasta lapa %d Izlaists, jo ir nelasītas nodaļas %1$d atjauninājums(-i) neizdevās Pieskarieties, lai uzzinātu vairāk Lietotnes atjauninājumi Ir pieejama jauna versija! Atjaunināti noklusējuma nodaļu iestatījumi Automātiski tuvināt ainavas attēlus Nākošā lapa Izplest platus attēlus Nevar atvērt pēdējo lasīto nodaļu Pārlasīšana Vai dzēst lejupielādētās nodaļas? Datums Pārtraukumā Nodaļa %1$s Vāks saglabāts Vai esat pārliecināts? Visa vēsture tiks pazaudēta. Nav atrasts avots Neviens instalēts avots nav atrasts Pieskarieties, lai instalētu atjauninājumu Pielāgots vāks Nepabeigto saraksts Sākuma datums Pabeigšanas datums Tips Avots netiek atbalstīts Neizdevās atrast Pielāgots filtrs Iestatīt kā vāku Lapa: %1$d Pabeigts: Nākošais: Iepriekšējais: Nav nākošās nodaļas Nav iepriekšējās nodaļas Ielādē lapas… Avots nav atrasts Avota migrācijas rokasgrāmata Migrēt Vai esat pārliecināts, ka šos iestatījumus vēlaties saglabāt kā noklusējuma? Dodge / Gaišāks Burn / Tumšāks Pēc augšupielādes datuma Lejupielādēt kļūdu Vai esat pārliecināts, ka vēlaties dzēst atlasītās nodaļas? Nodaļu iestatījumi Izvēlieties avotu, no kura migrēt Nevarēja lejupielādēt nodaļas. Varat mēģināt vēlreiz lejupielādes sadaļā Nevarēja lejupielādēt nodaļas, jo trūkst krātuves vietas Darba sākšanas rokasgrāmata Jums vēl nav nevienas kategorijas. Nederīga lietotāja agent virkne Izlaist vienādas nodaļas Tādējādi no %s tiks noņemts iepriekš atlasītais beigu datums Dzēst kategoriju Lasīšanas režīmi, displejs, navigācija Avārijas žurnāli, akumulatora optimizācija Manuālā un automātiskā dublēšana Paisuma vilnis Vairāku Lejupielādēt uz priekšu Darbojas tikai ja pašreizējā nodaļa + nākošā nodaļa ir jau lejupielādēta. Nederīgs lejupielāžu indekss Pārskats Statistika Sākts Lejupielādēts Lokālais Nederīga atrašanās vieta: %s Nezināms nosaukums Izsekotāji Lasīts Izsekotie ieraksti Vidējais vērtējums Izmantots Nav piemērojams %dd %dm %ds Populārs Vai tu esi pārliecināts? Tikko Atjaunināt kategoriju Atvērt nejaušu ierakstu Noņemt visu Turpināt lasīt poga Automātiska lejupielāde lasīšanas laikā Pieejams, bet avots nav instalēts: %s Krātuves atļaujas nav piešķirtas Kopēts starpliktuvē Bibliotēka pēdējo reizi atjaunināta: %s Izlaists, jo sērijai nav nepieciešami atjauninājumi Tādējādi no %s tiks noņemts iepriekš atlasītais sākuma datums Pārklājums Aplikācijas slēdzis, ekrāna aizsargāšana Kopēt starpliktuvē Automātiskā lejupielāde, lejupielādes rinda Vienvirziena progresa sinhronizācija, uzlabota sinhronizācija Avoti, paplašinājumi, globālā meklēšana Tēma, datuma un laika formāti Kategorijas, globāli atjauninājumi, nodaļu vilkšana Rādīt nelasīto skaitu uz atjauninājumu ikonas Logrīks nav pieejams, ja ir iespējota lietotņu bloķēšana %dh InternalError: Par plašāku informāciju skatiet avārijas žurnālu Vai vēlaties dzēst kategoriju \"%s\"? %1$s kļūda: %2$s Atjauninājums jau darbojas %s radās neparedzēta kļūda. Mēs iesakām dalīties ar avārijas žurnālu mūsu atbalsta kanālā Discord lietotnē. Pagrieziet platas lapas, lai tās ietilptu Apvērst orientācija pagrieztām platām lapām Sadalīt augstus attēlus Slēpt ierakstus, kas jau ir bibliotēkā Vai noņemt datumu? Kategorija ir tukša Skatiet savus nesen atjauninātos bibliotēkas ierakstus Jūs gatavojaties noņemt \"%s\" no savas bibliotēkas Ne tagad Meklē… F-Droid versijas netiek oficiāli atbalstītas. \nPieskarieties, lai uzzinātu vairāk. Pārbauda lejupielādes Lietotāja agent virknes lauks nedrīkst būt tukšs Šajā kategorijā nav atrasts neviens ieraksts Noklusējuma lietotāja agent virkne Atiestatīt noklusējuma lietotāja agent virkni Piespiediet lietotni atkārtoti pārbaudīt lejupielādētās nodaļas Ak nē! Restartējiet lietotni Pabeigtie ieraksti Lasīšanas ilgums Ieraksti Globālajā atjauninājumā Kopā *obligāti Nevarēja izveidot dublējuma failu Lejupielādes indeks ir nederīgs Izlaists, jo šodien nebija gaidīta jauna nodaļa Vilkt uz labās puses darbību Atkļūdošanas informācija Pieskarieties šeit, lai iegūtu palīdzību ar Cloudflare Ir rezultāti Noņemt arī no %s Vilkt uz kreisās puses darbību Novērtēt katru Iestatīt intervālu Pielāgots datu iegūšanas intervāls Nākamais gaidāmais atjauninājums Pieteikšanās izsekošana Sinhronizē bibliotēku Bibliotēkas sinhronizācija ir pabeigta Intervāli Šis noņems locālo izsekošanu. Izdzēst lejupielādētos Vai noņemt %s izsekošanu? OK Ārpus paredzamā izlaišanas perioda Dubult-pieskarieties, lai tuvinātu Atbloķēt %s Atjaunināt katru HTTP %d, pārbaudiet vietni iekš WebView Nav interneta savienojuma Nevarēja sasniegt %s Izsekošanas rezultāts Dati un uzglabāšana Krātuves atrašanās vieta Izveidot Nekad Samazina spoku rašanos uz e-ink displejiem Izmanto automātiskajām dublējumkopijām, nodaļu lejupielādei un vietējam avotam. Pieteikties Atgriezt noklusējuma iestatījumus Vairāk iespēju Pēdējā automātiskā dublēšana: %s Atlasīts Nav atrasts neviens scanlators Nav atlasīts Pārvietot sēriju uz apakšu Skanlators Zibsnīt baltu, kad maina lapu Krātuves izmantošana Bibliotēkas atjaunināšana... (%s) Virzīties uz augšu Nav atlasīts neviens fails Avota iestatījumi Lietotnes iestatījumi Relatīviās laika stampas \"%1$s\", nevis \"%2$s\" Izslēgt skanlatorus ================================================ FILE: i18n/src/commonMain/moko-resources/ml/plurals.xml ================================================ ഇന്നലെ %1$d ദിവസം മുമ്പ് നാളെ %1$d ദിവസത്തിനുള്ളിൽ %2$s പിശകോടെ %1$s-നുള്ളിൽ ചെയ്തു %2$s പിശകുകളോടെ %1$s-നുള്ളിൽ ചെയ്തു %d അധ്യായം ഒഴിവാക്കുന്നു, ഒന്നുകിൽ ഉറവിടം അത് കാണുന്നില്ല അല്ലെങ്കിൽ അത് ഫിൽട്ടർ ചെയ്തിരിക്കുന്നു %d അധ്യായങ്ങൾ ഒഴിവാക്കുന്നു, ഒന്നുകിൽ ഉറവിടം കാണുന്നില്ല അല്ലെങ്കിൽ അവ ഫിൽട്ടർ ചെയ്തിരിക്കുന്നു വിപുലീകരണ അപ്ഡേറ്റ് ലഭ്യമാണ് %d വിപുലീകരണ അപ്‌ഡേറ്റുകൾ ലഭ്യമാണ് അടുത്ത അധ്യായം അടുത്ത %d അധ്യായങ്ങൾ %1$s മിനിറ്റിന് ശേഷം %1$s മിനിറ്റിന് ശേഷം %d വിഭാഗം %d വിഭാഗങ്ങൾ അടുത്ത വായിക്കാത്ത അധ്യായം അടുത്ത %d വായിക്കാത്ത അധ്യായങ്ങൾ %1$s ശേഷിക്കുന്നു %1$s ശേഷിക്കുന്നു 1 ദിവസം %d ദിവസം %1$s അധ്യായം കാണുന്നില്ല %1$s അധ്യായങ്ങൾ കാണുന്നില്ല %1$s അധ്യായം %1$s അധ്യായങ്ങൾ %d ട്രാക്കർ %d ട്രാക്കറുകൾ %1$d പുതിയ അധ്യായം %1$d പുതിയ അധ്യായങ്ങൾ അധ്യായങ്ങൾ %1$s-ഉം പിന്നെ 1-ഉം %1$s അധ്യായങ്ങളും പിന്നെ %2$d-ഉം %d റിപ്പോ %d റിപ്പോകൾ 1 പേജ് %1$s പേജ് %d എൻട്രിക്ക് %d എൻട്രികൾക്കായി ================================================ FILE: i18n/src/commonMain/moko-resources/ml/strings.xml ================================================ ഡാറ്റാ ആന്റ് സ്റ്റോറേജ് ചരിത്രം തിരയുക ആഗോള തിരയൽ ബുക്ക്മാർക്ക് അധ്യായം എല്ലാം പ്രവർത്തനക്ഷമമാക്കുക വായിച്ചിട്ടില്ലെന്ന് അടയാളപ്പെടുത്തുക എല്ലാം പ്രവർത്തനരഹിതമാക്കുക തിരുത്തുക ചേർക്കുക വിഭാഗം അപ്ഡേറ്റ് ചെയ്യുക ക്രമരഹിതമായ എൻട്രി തുറക്കുക വിഭാഗം ചേർക്കുക കവർ എഡിറ്റ് ചെയ്യുക അധ്യായങ്ങൾ കാണുക വിരാമം വീണ്ടും ശ്രമിക്കുക മുൻ അധ്യായം അടുത്ത അധ്യായം ഏറ്റവും പുതിയ അധ്യായം ഓഫ് തിരഞ്ഞെടുക്കപ്പെട്ട മുകളിലേക്ക് നയിക്കുക പേര് വിഭാഗങ്ങൾ അദ്ധ്യായങ്ങൾ ട്രാക്കിംഗ് ഡൗൺലോഡ് ചെയ്‌തത് ഇല്ലാതാക്കുക ഇനിയും ഡൗൺലോഡ് ക്യൂ ലൈബ്രറി അപ്ഡേറ്റുകൾ അടുത്തതായി ചരിത്രം ഉൽഭവം ബാക്കപ്പും റിസ്റ്റോറും ലൈബ്രറി എൻട്രികൾ സ്ഥിതിവിവരക്കണക്കുകൾ മൈഗ്രേറ്റ് ചെയ്യുക വിപുലീകരണങ്ങൾ വിപുലീകരണ വിവരം സഹായം സ്ഥിരസ്ഥിതി മുന്നറിയിപ്പ് ആരംഭിച്ചു പ്രാദേശികമായ ഡൗൺലോഡ് ചെയ്തു %s അൺലോക്ക് ചെയ്യുക മാറ്റം സ്ഥിരീകരിക്കാൻ പ്രാമാണീകരിക്കുക ക്രമീകരണങ്ങൾ പട്ടിക ഫിൽട്ടർ ചെയ്യുക ഇടവേള സജ്ജമാക്കുക ബുക്ക്‌മാർക്ക് ചെയ്തു ട്രാക്ക് ചെയ്തു വായിക്കാത്തത് ഇഷ്‌ടാനുസൃതമാക്കിയ അപ്‌ഡേറ്റ് ആവൃത്തി ഫിൽട്ടർ നീക്കം ചെയ്യുക അക്ഷരമാലാക്രമത്തിൽ ആകെ എൻട്രികൾ ആകെ അധ്യായങ്ങൾ അവസാനം വായിച്ചത് അവസാന അപ്ഡേറ്റ് പരിശോധന വായിക്കാത്ത എണ്ണം അടുത്തതായി പ്രതീക്ഷിക്കുന്ന അപ്ഡേറ്റ് അധ്യായം ലഭിച്ച തീയതി തീയതി ചേർത്തു ട്രാക്കർ സ്കോർ തിരയുക… തിരയൽ ക്രമീകരണങ്ങൾ എല്ലാം തിരഞ്ഞെടുക്കുക വിപരീതം തിരഞ്ഞെടുക്കുക വായിച്ചതായി അടയാളപ്പെടുത്തുക മുമ്പത്തേത് വായിച്ചതായി അടയാളപ്പെടുത്തുക ഡൗൺലോഡ് അൺബുക്ക്മാർക്ക് അധ്യായം ഇല്ലാതാക്കുക ലൈബ്രറി അപ്ഡേറ്റ് ചെയ്യുക വിഭാഗങ്ങൾ എഡിറ്റ് ചെയ്യുക വിഭാഗത്തിൻ്റെ പേരുമാറ്റുക വിഭാഗങ്ങൾ സജ്ജമാക്കുക \"%s\" എന്ന വിഭാഗം ഇല്ലാതാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ? വിഭാഗം ഇല്ലാതാക്കുക ഓൺ കൂടുതൽ ഓപ്ഷനുകൾ തിരഞ്ഞെടുത്തില്ല സ്കാൻലേറ്റർ ക്രമീകരണങ്ങൾ നീക്കം ചെയ്യുക എല്ലാം നീക്കം ചെയ്യുക ആരംഭിക്കുക പുനരാരംഭിക്കുക ബ്രൗസറിൽ തുറക്കുക ക്ലിപ്പ്ബോർഡിലേയ്ക്ക് പകർത്തുക വെബ്‌വ്യൂവിൽ തുറക്കുക മൈഗ്രേറ്റ് ചെയ്യുക ഡിസ്പ്ലേ മോഡ് ഏറ്റവും പഴയത് റദ്ദാക്കുക വായന തുടരുക ബട്ടൺ ഭാഷ എല്ലാം റദ്ദാക്കുക ശരി ഈ സീരീസിനായി എല്ലാം റദ്ദാക്കുക മുകളിലേക്ക് നീങ്ങുക അധ്യായ നമ്പർ പ്രകാരം ഏറ്റവും പുതിയത് എൻട്രി കാണിക്കുക കോംപാക്റ്റ് ഗ്രിഡ് സുഖപ്രദമായ ഗ്രിഡ് ഡൌൺലോഡ് ചെയ്ത അധ്യായങ്ങൾ ലോക്കൽ സോഴ്സ് ഡിസേബിൾ പിൻ ചെയ്യുക അപ്ലൈ സോർട് ലിസ്റ്റ് ചിത്രം മാത്രമുള്ള ഗ്രിഡ് പുനഃസജ്ജമാക്കുക പരമ്പര മുകളിലേക്ക് നീക്കുക വിഭാഗം ടാബുകൾ കാണിക്കുക അൺപിൻ ചെയ്യുക അപ്‌ലോഡ് തീയതി പ്രകാരം ആരോഹണം അവരോഹണം ഇൻസ്റ്റാൾ താഴേക്ക് നീക്കുക പങ്കിടുക പ്രദർശിപ്പിക്കുക സേവ് സ്വാഗതം! ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യാനുള്ള അനുവാദം ഡൌൺലോഡ് ചെയ്യാൻ തുടങ്ങുക ഒരു ഫോൾഡർ സെലക്ട് ചെയുക സ്റ്റോറേജ് ഗൈഡ് നോട്ടിഫിക്കേഷൻ കാണിക്കാനുള്ള അനുവാദം ലോഡിങ്ങ്… ഒരു ഫോൾഡർ തിരഞ്ഞെടുക്കണം വിശദാംശങ്ങൾ കാണാൻ ടാപ്പുചെയ്യുക അടയ്ക്കുക ഇനങ്ങളുടെ എണ്ണം കാണിക്കുക സ്ഥിരസ്ഥിതിയിലേക്ക് മടങ്ങുക അൻഡൂ ലോഗ് തുറക്കുക ഇൻസ്റ്റാൾ വിശ്വസിക്കൂ എല്ലാ 2 ദിവസവും ആഴ്ചയിൽ ഒരിക്കൽ എല്ലാ ദിവസവും ഈ എക്സ്റ്റൻഷൻ ഇനി ലഭ്യമല്ല. ഇത് ശരിയായി പ്രവർത്തിച്ചേക്കില്ല, ആപ്പിൽ പ്രശ്നങ്ങൾ ഉണ്ടാക്കാം. ഇത് അൺഇൻസ്റ്റാൾ ചെയ്യാൻ റെകമെൻഡ് ചെയ്യുന്നു. ചാർജ് ചെയ്യുമ്പോൾ അപ്ഡേറ്റ് ചെയ്യരുത് മുന്നോട്ട് പുറകിലുള്ള റിസ്റ്റോർ ഓരോ 12 മണിക്കൂറിലും ഓരോ 6 മണിക്കൂറിലും ലാൻഡ്സ്കേപ്പ് ഗ്രിഡ് വലിപ്പം അപ്ഡേറ്റ് എല്ലാം എപ്പോഴും ചോദിക്കുക ഡൗൺലോഡ് ചെയ്യുന്നു അൺഇൻസ്റ്റാൾ അവിശ്വസനീയം ഇൻസ്റ്റാൾ ചെയ്യുന്നു സാധാരണ ഡവലപ്പർമാർക്ക് അനാമീകരിച്ച ക്രാഷ് ലോഗുകൾ അയയ്‌ക്കുക വീക്ഷണം അപ്ലിക്കേഷന്റെ ഫീച്ചറുകൾ മെച്ചപ്പെടുത്താൻ അനാമീകരിച്ച ഉപയോക്തൃ ഡാറ്റ അയയ്‌ക്കുക. വിശകലനത്തിനുവഴി അനുവദിക്കുക ക്രാഷ് ലോഗുകൾ അയയ്ക്കുക ലൈബ്രറി %s-ൽ പുതിയവനാവോ? ആരംഭിക്കാൻ മാർഗരേഖ കാണാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു. അനുവദിക്കുക %s-നെ പുനഃസ്ഥാപിക്കുകയാണോ? ലിങ്ക് പകര്‍ത്തുക വിപുലീകരണം ഇൻസ്റ്റാൾ ചെയ്യുന്നു… വിപുലീകരണങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ അനുമതികൾ ആവശ്യമാണ്. അനുവദിക്കാൻ ഇവിടെ അടിക്കുക. യാദൃച്ഛികം ഭാഷ സ്വയമേവ ഷിസുകു പ്രവർത്തനമല്ല ഇടത് വയസ്സ് റേറ്റിംഗ് 18+ വിശകലനവും തകരാറ് ലോഗുകളും അൺലോക്ക് ആവശ്യമാണ് തീയതി രൂപം അറിയിപ്പുകൾ കൈകാര്യം ചെയ്യുക ആപ്പ് ഭാഷ സുരക്ഷയും സ്വകാര്യതയും ഉറവിടങ്ങളിലും വിപുലീകരണ പട്ടികയിലും കാണിക്കുക ഇത് അനൗദ്യോഗികമായോ തെറ്റായി അടയാളപ്പെടുത്തിയോ ഉള്ള വിപുലീകരണങ്ങൾ ആപ്പിനുള്ളിൽ NSFW (18+) ഉള്ളടക്കം പ്രദർശിപ്പിക്കുന്നത് തടയില്ല. ഇന്ന് ആദ്യമായി ചില ക്രമീകരണങ്ങൾ സജ്ജമാക്കാം. പിന്നീട് ഇവയെല്ലാം സെറ്റിംഗ്സിൽ നിന്ന് എപ്പോൾ വേണമെങ്കിലും മാറ്റാനാകും. എപ്പോഴും കുറിച്ച് അടുത്തത് ആരംഭിക്കുക ഒഴിവാക്കുക %1$s ചാപ്റ്റർ ഡൗൺലോഡുകൾ, ബാക്കപ്പുകൾ എന്നിവയും മറ്റും സംഭരിക്കുന്ന ഒരു ഫോൾഡർ തിരഞ്ഞെടുക്കുക.\n\nഒരു പ്രത്യേക ഫോൾഡർ ശുപാർശ ചെയ്യുന്നു.\n\nതിരഞ്ഞെടുത്ത ഫോൾഡർ: %2$s പഴയ പതിപ്പിൽ നിന്ന് അപ്ഡേറ്റ് ചെയ്യുകയാണ്, എന്ത് തിരഞ്ഞെടുക്കണമെന്ന് ഉറപ്പില്ലേ? കൂടുതൽ വിവരങ്ങൾക്ക് സ്റ്റോറേജ് ഗൈഡ് കാണുക. To install source extensions. ലൈബ്രറി അപ്‌ഡേറ്റുകൾക്കും മറ്റും അറിയിപ്പ് നേടുക. പശ്ചാത്തല ബാറ്ററി ഉപയോഗം ദീർഘകാല ലൈബ്രറി അപ്‌ഡേറ്റുകൾ, ഡൗൺലോഡ്, ബാക്കപ്പ് പുനഃസ്ഥാപിക്കൽ എന്നിവയ്ക്കുള്ള തടസ്സങ്ങൾ ഒഴിവാക്കുക. ================================================ FILE: i18n/src/commonMain/moko-resources/mr/plurals.xml ================================================ %d श्रेणी %d श्रेण्या 1 मिनीटानंतर %1$s मिनीटांनंतर ================================================ FILE: i18n/src/commonMain/moko-resources/mr/strings.xml ================================================ नाव अध्याय अधिक सेटिंग्ज इतिहास बॅकअप आणि रीस्टोर मदत सेटिंग्ज फिल्टर न वाचलेले फिल्टर काढा एकूण अध्याय इतिहास वर्णक्रमानुसार शेवटचे वाचले नवीन अध्याय शोध सर्व निवडा वाचलेले म्हणून चिन्हांकित करा वाचले नाही अशी खुण करा डाउनलोड हटवा काळा सामान्य मेनू बुकमार्क आहे ट्रॅकिंग लायब्ररी इंत्रिज श्रेण्या तुम्ही श्रेण्या बनविल्या नाही आहेत, प्लस वर दाबून तुम्ही श्रेणी बनवू शकता. तुमची संग्रहालय खाली आहे अलीकडे काहीही वाचले नाही कोणतेही अलीकडील अद्यतने नाही डाऊनलोड नाहीत एक्स्टेन्शन माहिती एक्स्टेन्शन स्त्रोत स्तालांतर स्त्रोत अपडेट्स संग्रहालय डाऊनलोड रांग पुनर्संचयित करा लॉग उघडा पूर्ववत करा रीसेट करा जतन करा शेअर स्थापित करा सगळ्यात खाली हलवा वर हलवा सगळ्यात जुने सगळ्यात नवे क्रमवारी लावा सगळे रद्द करा रद्द करा पिन काढा पिन Download बॅज यादी ग्रीड प्रदर्शन प्रदर्शन मोड वेबव्ह्यू मध्ये उघडा ब्राऊझर मध्ये उघडा सुरू करा काढून टाका पुन्हा प्रयत्न करा पुढील अध्याय मागील अध्याय विराम द्या अध्याय बघा कव्हर बदलवा श्रेणी सेट करा श्रेणी पुन्हा नामांकित करा श्रेणी संपादन श्रेणी जोडा जोडा सुधहरण संग्रहालय अध्यातानित करा बुकमार्क काढा बुकमार्क मागील वाचलेले म्हणून चिन्हांकित करा व्यस्त निवडा जागतिक शोध अ‍ॅप्स स्विच करताना अॅप मधील सामग्री लपवा व स्क्रीनशॉट अवरोधित करा स्क्रीन सुरक्षित करा कधीही नाही नेहमी निष्क्रिय झाल्यावर लॉक करा बिॉमेट्रिकस सह लॉक करा सुरक्षा सुचनेचे व्यवस्थापन तारिकेचा स्वरूप तंत्राचे अनुसरण करा डार्क लाइट ॲप बद्दल प्रगत ट्रॅकिंग डाउनलोडस वाचक संग्रहालय जनरल ऐप उपलब्ध नाही लोड होत आहे … रीफ्रेश पुढे मागे जा सीमानां कापा पृष्ठ क्रमांक दर्शवा दोनदा टॅप साठी अ‍ॅनिमेशन गती पृष्ठ संक्रमण संजीवित करा कटआउट क्षेत्रात सामग्री दर्शवा हे एक्सटेन्शन उपलब्ध नाही. हे एक्सटेन्शन एका अविश्वासू प्रमानपत्रासहित आले आहे म्हणून हे स्थापित होऊ शकले नाही. \n \nअसे अविश्वासू एक्सटेन्शन आपले लॉगिन बाबत माहिती चोरू शकते. \n \nव अश्या एक्सटेन्शन वर विश्वास करून तुम्ही ह्या सगद्या जोखीम घेत आहेत. अविश्वासू एक्सटेन्शन विस्थापित करा अविश्वासू विश्वास स्थापित झाले स्थापित होत आहे डाउनलोड होत आहेत प्रलंबित स्थापित करा कालबाह्य अध्यातणीत करा प्रलंबित अध्यातणे सगडे नेहमी विचारायचे मूलभूत श्रेणी फक्त चालू असलेल्याच मांगा आधीतणीत करायचे चार्ज होत आहे लायब्ररी अद्ययावत प्रतिबंधी अनिमेशन नाही सेंटर उजवी बाजू डावी बाजू ऑटोमॅटिक प्रारंभ स्तीतीला झूम करून स्मार्ट फिट मूळ आकार फिट उंची फिट रुंदी ताणून लांब करणे फिट स्क्रीन स्केल प्रकार पृष्ठबद्ध सतत उभे वेबटून सरळ उजवीकडून डावीकडे डावीकडून उजवीकडे डीफॉल्ट वाचन मोड फिक्का काडा पांढरा बॅकग्राऊंड रंग दीर्घ टॅप संवाद व्हॉल्यूम की उलटा करा व्हॉल्यूम की नॅव्हिगेशन फिल्टर केलेले अध्याय वगळा अध्याय वाचले म्हणून चिन्हांकित करा स्क्रीन सुरू ठेवा जाडे / गडद करा डॉज / लाईट करा स्क्रीन गुणाकार थर रंग फिल्टर मिश्रण मोड कस्टम रंग फिल्टर वापरा कस्टम ब्राइटनेस वापरा फुलस्क्रीन साप्ताहिक दर २ दिवसांत दररोज दर १२ तासाला दर ६ तासाला स्वतः करा लायब्ररी अद्यतन वारंवारता अद्यतने लँडस्केप पोर्ट्रेट आयटम प्रती पंक्ती दाखवा सूचना सामग्री लपवा सामान्य नैविगेशन माध्य उजवी डावी पुढचं मागचं उजवी आंही डावी कडा किंडल सारख प्रदर्शन शेवटी वाचलेला पाठ नेटवर्क केवळ डाउनलोड केलेले थीम चालु केले लोकल डाऊनलोड झाले चालु बदलांची पुष्टी करण्यासाठी प्रमाणीकरण करा चेतावणी बंद मध्यांतर ट्रॅक केले कस्टमाईज्ड फेच इंटरवल ================================================ FILE: i18n/src/commonMain/moko-resources/ms/plurals.xml ================================================ Selepas %1$s minit %1$d bab baharu Bab %1$s dan %2$d lagi Untuk entri %d %d kemas kini sambungan tersedia %1$s baki %d kategori Selesai dalam %1$s dengan %2$s ralat Jumlah bab: %1$s %d penjejak Melangkau %d bab, sama ada sumber tidak mempunyai bab tersebut, atau ia ditapis keluar %1$d hari lalu %d bab tidak dibaca seterusnya %d bab seterusnya Hilang %1$s bab %d hari %d repositori Dalam %1$d hari %1$s halaman Berhijrah %1$d Kemasukan? Salin %1$d penyertaan? %1$d Penyertaan telah dilangkau ================================================ FILE: i18n/src/commonMain/moko-resources/ms/strings.xml ================================================ Nama Kategori Entri pustaka Bab-bab Penjejakan Sejarah Tetapan Giliran muat turun Pustaka Sejarah Kemas kini Sandaran dan memulih Tetapan Tapis Ditanda Belum dibaca Kosongkan tapisan Abjad Jumlah bab Bacaan terakhir Carian Carian keseluruhan Pilih semua Tandakan sebagai sudah dibaca Tandakan sebagai belum dibaca Tandakan yang sebelum sebagai sudah dibaca Muat turun Penanda bab Buang penanda bab Padam Kemas kini pustaka Ubah Tambah Tambah kategori Edit kategori Ubah nama kategori Tetapkan kategori Ubah muka hadapan Henti sebentar Bab sebelumnya Bab seterusnya Cuba semula Keluarkan Sambung Buka di pelayar Mod paparan Paparan Grid padat Senarai Batal Susun mengikut Pasang Kongsi Simpan Set semula Batal Buka log Kembalikan ke asal Muat… Aplikasi tidak tersedia Umum Pembaca Muat turun Penjejakan Lanjutan Tentang Item setiap baris Potret Landskap Kemas kini automatik Mati Setiap 6 jam Setiap 12 jam Setiap hari Setiap 2 hari Setiap minggu Semua Sekatan kemas kini automatik peranti Ketika mengecas Langkau entri dengan status \"Sudah selesai\" Kemas kini selepas dibaca Kategori lalai Sentiasa tanya Skrin penuh Menggerakkan peralihan muka surat Tunjuk nombor muka surat Potong pinggiran Kecerahan tersuai Turas warna tersuai Tetap nyalakan skrin Navigasi Butang volum Songsangkan butang kelantangan Warna latar Putih Hitam Mod membaca lalai Muka surat (kiri ke kanan) Muka surat (kanan ke kiri) Muka surat (menegak) Sebaris panjang Skala Muat skrin Regang Muat lebar skrin Muat ketinggian skrin Saiz asal Muat pintar Kedudukan permulaan zum Automatik Kiri Kanan Tengah Jenis putaran skrin lalai Bebas Kekal potret Kekal landskap Merah Hijau Biru Alpha Selepas secara manual ditandakan sebagai dibaca Selepas membaca padam secara automatik Dinyahkan Bab terakhir dibaca Bab kedua terakhir dibaca Bab ketiga terakhir dibaca Bab keempat terakhir dibaca Bab kelima terakhir dibaca Muat turun bab baharu Penjejak Buat sandaran Boleh digunakan untuk memulihkan pustaka semasa Pulihkan sandaran Pulihkan pustaka daripada fail sandaran Kekerapan sandaran automatik Sandaran dicipta Pemulihan selesai Apakah yang ingin anda sandarkan? Dalam proses memulihkan sandaran Dalam proses membuat sandaran Hapus cache bab %1$s digunakan Cache dihapuskan, %1$d fail dipadamkan Ralat berlaku ketika menghapus Hapus cookies Cookies dihapuskan Hapus pangkalan data Hapus sejarah entri yang tidak disimpan di dalam pustaka Entri dihapuskan Versi Hantar laporan ranap Bantu membaiki aplikasi. Tiada data sensitif dihantar Log masuk ke %1$s Nama pengguna Kata laluan Log masuk Log masuk berjaya Ralat tidak diketahui mengemaskinikan kategori Tiada lagi hasil Sumber lokal Lain Carian keseluruhan… Terkini Semak imbas Berterusan Tidak diketahui Berlesen Keluarkan daripada pustaka Padam bab-bab yang dimuat turun? Bab %1$s Memuat turun (%1$d/%2$d) Ralat Ditangguh Tajuk sumber Nombor bab Mengikut sumber Mengikut nombor bab Muat turun Belum dibaca Adakah anda pasti ingin memadamkan bab yang dipilih? Penjejakan Sedang baca Selesai Diabaikan Ditangguh Ingin baca Skor Tajuk Status Kategori dengan nama ini sudah wujud! Kategori dipadam Tarikh bacaan bab ini akan dipadam. Adakah anda pasti? Set semula semua bab bagi entri ini Tambah ke pustaka? Bab dimuat turun Gambar disimpan Tapisan tersuai Set sebagai muka hadapan Muka hadapan dikemas kini Muka surat: %1$d Bab seterusnya tidak dijumpai Imej tidak dapat dimuatkan Guna imej ini sebagai muka hadapan? Memuat turun bab tidak berjaya. Anda boleh mencuba lagi di bahagian muat turun Bab baharu dijumpai Gagal untuk kemas kini muka hadapan Sila tambahkan entri ke pustaka sebelum melakukan ini Pilih imej muka hadapan Pilih fail sandaran Muat turun Tiada versi baharu tersedia Memuat turun… Ketik untuk memasang kemas kini Ralat muat turun Versi baharu boleh didapati! Tiada muat turun Tiada kemas kini terkini Tiada bacaan setakat ini Pustaka kosong Pemuat turun Ralat Ralat tidak diketahui ketika memuat turun bab Tiada sambungan Wi-Fi yang tersedia Tiada sambungan rangkaian tersedia Muat turun dihentikan sebentar Biasa Pindah sumber Sambungan Info sambungan Buka dalam WebView Kemas kini Pasang Masih menunggu Memuat turun Memasang Dipasang Dipercayai Tidak dipercayai Nyahpasang Sambungan tak dipercayai Sambungan yang berniat jahat kemungkinan membaca sebarang kelayakan log masuk yang di simpan atau melaksanakan kod sesuka hati. \n \nDengan mempercayai sambungan ini, anda menerima risiko tersebut. Kelajuan animasi ketik dua kali Langkau bab yang sudah dibaca Tunjuk tindakan bila menahan ketik Muka surat Tiada animasi Biasa Laju Ditambah ke pustaka Dibuang dari pustaka Disalin ke papan keratan: \n%1$s Sumber tidak dipasang: %1$s Membaca semula Status Jenis Selesai: Sekarang: Seterusnya: Sebelumnya: Tiada bab seterusnya dijumpai Tiada bab sebelumnya dijumpai Memuatkan muka surat… Gagal untuk memuatkan muka surat: %1$s Pilih data untuk disertakan Beralih Salin Anda tidak mempunyai kategori. Ketik butang tambah untuk membuat satu untuk mengatur pustaka anda. Mod turas warna campuran Bantuan Lapisan atas Berganda Skrin Dodge / Mencerahkan Burn / Menggelapkan Tiada hasil dijumpai Pilih sumber untuk ditukar Ke belakang Ke depan Segar semula Pustaka Usang Sambungan ini tidak lagi ada. Ia mungkin tidak berfungsi dengan betul dan boleh menyebabkan masalah dengan aplikasi. Mengenyahpasang adalah disarankan. Format tarikh Kemas kini keseluruhan Log keluar daripada %1$s? Log keluar Anda telah log keluar Ditangguh Lain-lain Bab terkini Buka bab Batalkan semua Terang Gelap Sistem Uruskan pemberitahuan Keselamatan dan privasi Memerlukan buka kunci Kunci apabila terbiar Selalu Tidak akan Skrin keselamatan Kemas kini baharu Tunjuk kandungan dalam kawasan bertakuk Gagal untuk memintas Cloudflare Sila kemas kini aplikasi WebView untuk keserasian yang lebih baik Pengemaskinian bab Skrin keselamatan menyembunyikan kandungan aplikasi apabila menukar aplikasi dan sekat tangkapan skrin Paparan Bab %1$s Bab %1$s dan %2$d lagi Bab %1$s Sembunyikan kandungan pemberitahuan Nyahdaya pengoptimuman bateri Membantu dengan pengemaskinian latar belakang pustaka dan sandaran Pengoptimuman bateri sudah dinyahdayakan Alamat e-mel Sentiasa tunjuk peralihan bab Menu Terbaru Terlama Naik ke atas Turun ke bawah Kemas kini sambungan Mengemas kini pustaka Membaca Sebaris panjang dengan sela Lingkau bab yang ditapis Pilih songsang Sumber Tambahan sisi WebView diperlukan untuk aplikasi berfungsi Bab %1$s - %2$s Tambah penjejakan Tutup Buka Dalam Pustaka Tambah ke Pustaka Disematkan Lesen perisian sumber terbuka Laman web Pemulih dibatalkan Memulihkan sandaran gagal Pemulihan sedang dijalankan Sandaran gagal Sandaran sedang dijalankan Buang sematkan Sematkan Dimuat turun sahaja Terakhir digunakan Semak untuk kemas kini Panduan penggunaan sumber lokal %1$02d minit, %2$02d saat Tapis semua entri di dalam pustaka anda Kelabu Mod membaca Untuk siri ini Tetapan peranti tidak dapat dibuka Menyelaras satu hala untuk kemas kini bab kemajuan dalam sistem penjejak luaran. Sediakan penjejakan untuk entri individu daripada butang penjejakan mereka. Segar semula muka hadapan pustaka Mengikut tarikh muat naik Data Tiada sumber: Sandaran tidak mengandungi apa-apa entri pustaka. Fail sandaran tidak sah: Semak muka hadapan dan tentang baharu bila mengemaskini pustaka Segar semula metadata secara automatik Pindah sumber Grid selesa Tab Tunjuk tab kategori Tiada muka surat ditemui Matikan semua Hidupkan semua Tunjukkan seketika mod membaca yang digunakan apabila pembaca dibuka Tunjuk mod membaca Sumber tidak dijumpai Mula Matikan Mulakan semula aplikasi diperlukan untuk berkesan Rangkaian Kedua-dua Mod atas bawah Mod kanan kiri Tidak aktif Songsangkan zon ketik Status tidak diketahui Pengarang tidak diketahui Dikemas kini ke v%1$s Apa yang terbaharu Tarikh ditambah Memuat turun tidak berjaya kerana kekurangan ruang storan Cari untuk \"%1$s\" menggunakan carian keseluruhan Mod membaca Tema Tiada sumber yang disematkan Kemajuan Selesai Ralat Penjejak yang tidak dilog masuk: Benarkan memadam bab yang ditanda Padam bab Sumber daripada sambungan ini mungkin mengandungi kandungan 18+ tahun keatas 18+ Ini tidak menghalang sambungan yang tidak rasmi atau berpotensi tidak menggunakan tetapan yang betul daripada menayangkan kandungan 18+ tahun keatas dalam aplikasi. Tiada bab dijumpai Tetapan bab lalai dikemas kini Tetapkan sebagai lalai Gunakan juga untuk semua entri dalam pustaka Adakah anda pasti ingin simpan tetapan ini sebagai lalai? Tetapan bab %1$s: %2$s, muka surat %3$d Carian tetapan Bab dimuat turun Dari pustaka Menjeda sejarah membaca Mod inkognito Padamkan sejarah Anda pasti? Semua sejarah akan hilang. Sejarah dipadamkan Muka surat seterusnya Muka surat terdahulu Panduan memindahkan sumber Sumber NSFW (18+) Tunjuk dalam senarai sumber dan sambungan Tiada aplikasi memilih fail Sila log masuk ke MAL sekali lagi Zon ketik Sisi Serupa Kindle Bentuk L Menurun Menaik Mengikut nombor bab Mengikut tarikh muat naik Simpan log ralat untuk dikongsi dengan pembangunan aplikasi Kongsi log kerosakan Tarikh mula Tarikh selesai Dijejaki Tunjuk jumlah bilangan Kanan dan kiri Memisah muka surat lebar Jika kedudukan memisah muka surat lebar tidak sama dengan arah membaca Songsangkan kedudukan memisah muka surat Anda perlu memasang sambungan yang hilang dan log masuk ke penjejakan untuk menggunakannya. Sebelumnya Tunjukkan seketika apabila pembaca dibuka Kanan Kiri Tunjuk tindanan zon ketik Seterusnya DNS melalui HTTPS (DoH) Tarikh bab diambil Kecuali: %s Hanya: %s Tiada Entri di dalam kategori berkecuali tidak akan dikemas kini walaupun ianya ada di dalam kategori hanya. Entri di dalam kategori berkecuali tidak akan dimuat turun walaupun ianya ada di dalam kategori hanya. Muat turun automatik Ketik untuk lihat butiran Versi Android ini tidak lagi disokong Gagal menyalin ke papan keratan Landskap Potret Tindakan Mencipta folder mengikut tajuk entri Simpan muka surat ke folder berasingan Jenis putaran skrin Skala kelabu Nyahdaya mod inkognito Auto Batalkan semua untuk siri ini Tiada padanan dijumpai Sumber tidak disokong Belum dibaca Tarikh Susun mengikut Format bab tidak sah Bab tidak dijumpai Sekatan: %s Sumber lokal Mati Hidup Ralat berkongsi muka hadapan Ralat menyimpan muka hadapan Muka hadapan disimpan Muka hadapan Tetapan setiap kategori untuk susunan Panduan penjejakan Anda belum mempunyai kategori. Mula memuat turun sekarang Mod gelap hitam asli Yotsuba Yin & Yang Tako Tengah malam senja Epal Hijau Dinamik Tema aplikasi Perkidmatan yang menyediakan fungsi yang dipertingkatkan untuk sumber tertentu. Entri akan dijejaki secara automatik apabila ditambahkan ke pustaka. Sandaran/memulih mungkin tidak berfungsi dengan betul jika pengoptimuman MIUI dinyahaktifkan. Sesetengah pengeluar ada sekatan tambahan pada aplikasi yang akan menghentikan perkidmatan latar belakang. Laman web ini ada maklumat cara membaikinya. Pertingkat penjejak Strawberry Daiquiri Terendah Rendah Tinggi Tertinggi Sensitiviti menyembunyikan menu apabila skrol Aktiviti latar belakang Songsang Hari ini Teal & Turquoise Sahkan untuk mengesahkan perubahan Lalai Tampilan Jejak Panduan penggunaan UI tablet Kategori dikecualikan Bantu menterjemah Maklumat aplikasi Legasi Pasang dan mulakan Shizuku untuk guna Shizuku sebagai pemasang sambungan. Shizuku tidak dijalankan Pemasang Memasang sambungan… Jumlah entri Pengelogan berjela-jela Cetak log berjela ke log sistem (mengurangkan prestasi aplikasi) Amaran Bahasa Anda patut simpan salinan sandaran di tempat lain juga. Kemas kini yang besar membahayakan sumber dan mengakibatkan sumber menjadi perlahan dan juga peningkatan penggunaan bateri. Ketik untuk ketahui selebihnya. Hanya menggunakan Wi-Fi Setiap 3 hari Amaran: muat turun secara pukal besar boleh menyebabkan sumber menjadi lebih perlahan dan/atau menyekat %s. Ketik untuk ketahui selebihnya. Kemas kini semua Kemas kini aplikasi Hapus cache bab apabila membuka aplikasi Tiada apa untuk dibersihkan %1$d entri bukan pustaka dalam pangkalan data Gagal mendapatkan sambungan yang ada Dasar privasi Langkau entri dengan bab yang belum dibaca Untuk bantuan cara menyelesaikan ralat kemas kini pustaka, lihat %1$s Simpan sebagai arkib CBZ Dibatalkan Penerbitan selesai Dalam hiatus Tunjuk entri Cuma grid muka hadapan Dilangkau kerana siri sudah lengkap Langkau entri yang mana bacaan belum dimulakan Dilangkau kerana ada bab yang belum dibaca Dilangkau kerana tiada bab yang dibaca Zum secara automatik pada imej lebar Panorama imej lebar %1$d kemas kini gagal Ketik untuk ketahui selebihnya Potret terbalik Alih siri ke atas Dinyahkan Ralat menyimpan gambar Tiada entri pustaka untuk disandarkan Buka di GitHub Hapus data WebView Data WebView dihapuskan Tutup Tiada sumber dipasang ditemui Tiada sumber ditemui Bilangan belum dibaca Semakan kemas kini terakhir Meningkatkan prestasi pembaca Muka surat %d tidak dijumpai ketika memisah Lokasi fail muka surat %d tidak ditemui Menetapkan semula mod bacaan dan orientasi semua siri Tetapan pembaca diset semula Set semula tetapan pembaca setiap siri Hmm, ini agak menjanggalkan Tidak dapat set semula tetapan pembaca Versi Peringkat umur Bahasa Senarai Hajat Senarai Selesai Senarai Tangguh Senarai Belum Selesai Senarai Bacaan Hanya pada rangkaian tidak bermeter Tidak dapat membuka bab yang terakhir dibaca Muka hadapan tersuai Tidak dipasang Bahasa aplikasi Lavender Tiada deskripsi Adakah anda ingin padam kategori \"%s\"? RalatDalam: semak log kerosakan untuk maklumat lanjut Padam kategori Untaian ejen pengguna lalai Set semula untaian ejen pengguna lalai Buang semuanya Widget tidak tersedia apabila kekunci aplikasi digunakan Lihat kemas kini entri pustaka terkini anda Kemas kini sedang berjalan Untaian ejen pengguna tidak boleh kosong Muat turun automatik semasa membaca Tidal Wave Muat turun maju Hanya berguna sekiranya bab sekarang + seterusnya telah dimuat turun. Adakah anda pasti? Pelbagai Terakhir pustaka dikemas kini: %s Anda akan membuang \"%s\" ini daripada pustaka anda Popular Kebenaran storan tidak diberikan Dilangkau kerana siri tidak memerlukan kemas kini Cari… Tema, tarikh & format masa Kategori, Kemas kini keseluruhan, leret bab Mod membaca, paparan, navigasi Muat turun automatik, muat turun maju Menyelaras kemajuan satu hala, pertingkat menyelaras Manual & sandaran automatik Kumpulan log kerosakan, pengoptimuman bateri Kekunci aplikasi, skrin keselamatan Aduhai! Mulakan semula aplikasi Sumber, sambungan, carian keseluruhan %s mengalami ralat tidak dijangka. Kami mencadangkan anda untuk kongsi log kerosakan pada Discord kami di saluran bantuan. Tajuk tidak diketahui Lokasi tidak sah: %s Rentetan ejen pengguna tidak sah Sebentar tadi Buka entri rawak Tiada entri dijumpai di kategori ini Menyemak muat turun Binaan F-Droid tidak disokong secara rasmi. \nKetik untuk mengetahui lebih lanjut. Butang sambung membaca Membatalkan indeks muat turun Buang tarikh? Ini akan membuang tarikh mula yang dipilih oleh anda sebelum ini dari %s Ini akan membuang tarikh selesai yang dipilih oleh anda sebelum ini dari %s Memaksa aplikasi untuk semak semula bab dimuat turun lokal Dimuat turun Dalam kemas kini keseluruhan Jumlah Dibaca Entri dijejaki Skor purata Digunakan Statistik Dimulakan Keseluruhan Jangka bacaan Entri Penjejak Entri yang sudah selesai N/A %dh %dj %dm %ds Bukan sekarang Kategori kosong Tunjuk bilangan belum dibaca pada ikon Kemas kini Langkau bab pendua Tersedia tetapi sumber tidak dipasang: %s Disalin ke papan keratan %1$s ralat: %2$s *diperlukan Sembunyikan entri yang sudah ada di dalam pustaka Salin ke papan keratan Kemas kini kategori Memisah imej yang tinggi Tindanan Terbalikkan orientasi muka surat lebar yang diputarkan Putar muka surat lebar agar muat Maklumat nyahpepijat Bab mengenai leret ke kanan Ketik dua kali untuk zum Bab mengenai leret ke kiri Tetapkan jarak masa Kekerapan kemaskini tersuai Kemas kini seterusnya dijangka Tetapkan untuk kemas kini setiap Dilangkau kerana tiada keluaran yang dijangkakan hari ini Jarak masa Jangka masa keluaran seterusnya Anggaran setiap Buang penjejakan %s? Ini akan membuang penjejakan secara lokal. OK Juga buang daripada %s Padam dimuat turun Mempunyai hasil Tidak boleh menghasilkan fail sandaran Tidak dapat mencapai %s Menyelaraskan pustaka Pustaka selesai diselaraskan Tiada sambungan Internet Log masuk penjejak Indeks muat turun tidak sah Ketik di sini untuk bantuan berkenaan Cloudflare HTTP %d, semak laman web dalam WebView Buka kunci %s Kemaskini pintar Gerak siri ke bawah Nord Gunakan Kembali ke lalai Tidak dipilih Lain-lain pilihan Dipilih Pilih folder Panduan pertama penggunaan Selamat datang! Mari menetapkan sesuai terdahulu. Anda juga boleh menukar perkara ini di tetapan kemudian. Seterusnya Mari memulakan Langkau Pilih folder dimana %1$s akan simpan bab yang dibuat turun, sandaran, dan banyak lagi. \n \nFolder khas sangat digalakkan. \n \nFolder yang dipilih: %2$s Folder mestilah dipilih Cap masa relatif \"%1$s bukannya %2$s\" Baru ke %s? kami cadang lihat panduan permulaan. Ralat penuh: Termasuk tetapan sulit (cth., token log masuk penjejak) Tersedia:%1$s/Jumlah:%2$s Bab baharu dijangkakan akan keluar sekitar %1$s, semakan setiap %2$s. Tiada fail dipilih Pasang kebenaran aplikasi Penggunaan bateri latar belakang Tambah repositori Padam repositori Repositori URL tidak sah Buat Penggunaan storan Kekerapan kemas kini tersuai: Tiada scanlators dijumpai Mengemaskini daripada versi lama dan tidak pasti yang mana nak dipilih? Rujuk pada panduan storan untuk maklumat lanjut. Kebenaran pemberitahuan Memasang semula %s? Repositori ini sudah wujud! Tiada lokasi storan ditetapkan Tidak pernah Panduan storan Untuk pasang sumber sambungan. Elak gangguan pada kemas kini yang panjang, muat turun, dan pemulihan sandaran. Benarkan Dapatkan pemberitahuan untuk kemas kini pustaka dan banyak lagi. Kebenaran diperlukan untuk pasang sambungan. Ketik di sini untuk benarkan. repositori sambungan URL repositori Adakah anda bersetuju untuk padam repositori \"%s\"? Skor penjejak Batalkan sambungan dipercayakan yang tidak diketahui Anda tidak menetapkan repositori. Tambah repositori tambahan pada Mihon %s. Ini mestilah URL yang berakhir dengan \"index.min.json\". Buka sumber repositori Tidak lama lagi Pemindai Kecualikan scanlators Navigasi ke atas Digunakan untuk sandaran automatik, muat turun bab, dan sumber lokal. Lokasi storan Tetapan aplikasi Tetapan sumber Data dan storan Kilat pada perubahan muka surat Mengurangkan kesan \'ghosting\' pada skrin e-ink Sandaran automatik terakhir:%s Mengemaskini pustaka… (%s) Ganti Akan datang Lumpuhkan zum keluar Lihat kemas kini yang akan datang Panduan yang akan datang Bulan depan Bulan sebelumnya Menderma Otomatis Rawak Pautan salin Bab yang belum dibaca Nota Ubah Catatan Hantar log kemalangan Hantar log kemalangan tanpa nama kepada pemaju. Benarkan analisis Hantar data penggunaan tanpa nama untuk meningkatkan ciri aplikasi. Catppuccin Tambah sahaja Paparan profil tersuai Monokrom Memaparkan imej dalam huraian manga cagaran Analitis dan Log Ranap Menghantar log ranap dan analitis akan membolehkan kami mengenal pasti dan membetulkan isu, meningkatkan prestasi dan menjadikan kemas kini masa hadapan lebih berkaitan dengan keperluan anda kelakuan Tandakan pendua bab dibaca sebagai dibaca Selepas membaca satu bab Selepas mengambil bab baru Sembunyikan penunjuk bab yang hilang Alih keluar Alih keluar Sambungan? Adakah anda benar -benar mahu mengeluarkan \"%s\" Lanjutan? Adakah anda ingin menambah repo \"%s\"? Menandatangani cap jari utama sudah ada Repositori %1$s mempunyai cap jari utama yang menandatangani sama seperti %2$s.\nSekiranya ini dijangka, %2$s akan diganti, jika tidak hubungi penyelenggara repo anda. Tempoh kilat %1$s ms Flash setiap Kilat dengan Hitam Putih Putih dan Hitam Ambang bitmap perkakasan tersuai Lalai (%d) Sekiranya pembaca memuatkan imej kosong secara bertahap mengurangkan ambang.\nDipilih: %s Gunakan penyahkod warisan untuk pembaca jalur panjang Mempengaruhi prestasi. Hanya membolehkan jika mengurangkan ambang bitmap tidak membetulkan masalah imej kosong Gagal membuat direktori muat turun Gagal membuat direktori: %s Langkau memuat turun Bab Baca Duplikat Kemas kini kemajuan apabila ditandakan seperti yang dibaca Sandaran json tidak disokong Fail sandaran rosak Repos lanjutan Semua penyertaan membaca Eksport Senarai Perpustakaan Perpustakaan dieksport Anda akan mengeluarkan penyertaan dari pangkalan data Baca bab dan kemajuan penyertaan bukan perpustakaan akan hilang Simpan penyertaan dengan Bab Baca Kemas kini tajuk manga perpustakaan untuk memadankan sumber Amaran: Jika manga dinamakan semula, ia akan dikeluarkan dari barisan muat turun (jika ada). Jeda membaca sejarah untuk lanjutan Log masuk… Pengarang Artis Kemungkinan pendua Anda mempunyai entri di perpustakaan anda dengan nama yang serupa.\n\nPilih entri untuk berhijrah atau tambahkan pula. Manga ini sama ada selesai, atau tidak ada tarikh pelepasan yang diramalkan. Kemas kini pelacak ke bab %d? Penjejak dikemas kini ke bab %d Dijejaki secara peribadi Menjejaki secara peribadi Menjejaki secara terbuka Gagal memperoleh akses folder yang berterusan. Aplikasi ini mungkin berkelakuan tidak disangka -sangka. Menikmati bahagian di mana… Dipilih Terdapat Pilih Semua Pilih Tiada Pilih sumber yang diaktifkan Pilih sumber yang disematkan Teruskan Data untuk berhijrah Padamkan muat turun entri semasa selepas penghijrahan Kata kunci tambahan (pilihan) Membantu menyempitkan hasil carian dengan menambahkan kata kunci tambahan Sembunyikan penyertaan tanpa perlawanan Sembunyikan penyertaan tanpa bab yang lebih baru Hanya tunjukkan entri jika perlawanan mempunyai bab tambahan Pilihan ini lambat dan berbahaya dan boleh menyebabkan sekatan dari sumber Mod carian lanjutan Memecah tajuk ke dalam kata kunci untuk carian yang lebih luas Perlawanan berdasarkan nombor bab Jika diaktifkan, pilih perlawanan yang paling jauh ke depan. Jika tidak, pilih perlawanan pertama dengan keutamaan sumber. Penghijrahan Penghijrahan (%1$d/%2$d) Salin Berhijrah Tiada alternatif yang dijumpai Terkini: %1$s Tidak diketahui Cari secara manual Jangan berhijrah Berhijrah sekarang Salin sekarang Berhenti berhijrah? Berhenti Batalkan Salin Berhijrah Batalkan Batal Tidak ada bab yang dijumpai, entri ini tidak dapat digunakan untuk penghijrahan Tidak benarkan nama fail bukan ASCII Memastikan keserasian dengan media penyimpanan tertentu yang tidak menyokong Unicode. Apabila ini diaktifkan, anda perlu menamakan semula folder sumber dan manga secara manual dengan menggantikan aksara bukan-ASCII dengan representasi heksadesimal UTF-8 huruf kecil mereka. Fail bab tidak perlu dinamakan semula. Muat turun sumber serentak Muat turun halaman serentak Halaman yang dimuat turun secara serentak setiap sumber Tab Tutup ================================================ FILE: i18n/src/commonMain/moko-resources/my/strings.xml ================================================ ဖွင့်သည်။ ပိတ်သည်။ ရွေးချယ်ထားပြီး မရွေးချယ်ထားပါ။ ရွေးချယ်စရာများ အပေါ်သို့ အမည် အမျိုးအစားများ စာအုပ်စင် မှတ်တမ်းများ အပိုင်းများ ခြေရာခံ ဘာသာပြန်သူ ပိုမို၍ ဒေါင်းလုဒ် စာရင်း စာအုပ်စင် အပ်ဒိတ်များ မှတ်တမ်းများ ရင်းမြစ်များ ဒေတာနှင့် သိမ်းဆည်းမှု စာရင်းအင်းများ ပေါင်းစပ်မှု ချိတ်ဆက်မှု အချက်အလက် အကူအညီ ပုံသေ သတိပေးချက် စတင်သည်။ Local ဒေါင်းလုဒ်လုပ်ထားသည်။ ဒေါင်းလုဒ်များ ဖျက်မည်။ မှတ်တမ်း ဆက်တင်များ နောက်ဆက်တွဲ ချိတ်ဆက်မှုများ အရံသိမ်းဆည်းခြင်းနှင့် ပြန်လည်ရယူခြင်း %s ကို လော့ခ်ဖွင့်ပါ။ ဖြည့်ထားသည်ကို အတည်ပြုပါ။ ဆက်တင်များ မီနူး စစ်ထုတ်မှု အချိန်ကြားကို သတ်မှတ်ပါ။ မှတ်သားထားသည်။ နောက်ဆုံး ဖတ်ခဲ့သည်အားဖြင့် စီပါ နောက်ဆုံး အပ်ဒိတ်အားဖြင့် စီပါ တည်းဖြတ်ပါ စတင်ပါ ဆက်လက်ဖတ်ရှုရန် ခလုတ်ပြသရန် မလုပ်ဆောင်ပါ ပင်ထောက်မည်။ ပင်မထောက်တော့ပါ။ စတင်မည်။ သိုလှောင်မှုလမ်းညွှန် ခွင့်ပြုခြင်း %s ကို ခုမှ စသုံးသူးလား? စတင်အသုံးပြုနည်းလမ်းညွှန်ကို ကြည့်ရှုရန် အကြံပြုပါတယ်။ ပြန်လည်အသုံးပြုသူများအတွက်လမ်းညွှန် ယေဘူယျ ပုံစံ စာကြည့်တိုက် စာဖတ်သူ ဒေါင်းလုဒ်များ လမ်းညွှန်စက်များ မြင့်မားသော အကြောင်း ပုံစံအနှစ်ချုပ် စာကြည့်တိုက်အနှစ်ချုပ် လမ်းညွှန်စက်များအနှစ်ချုပ် အမှောင် စစ်ထုတ်မှု ဖယ်သည်။ ခြေရာခံထားသည်။ မဖတ်ရသေးသော စိတ်ကြိုက် အပ်ဒိတ် အကြိမ်ရေ အက္ခရာစဉ်အားဖြင့် စီပါ စာအုပ်စင်တွင်ရှိသော အရေအတွက်စုစုပေါင်း နောက်တစ်ခု အပ်ဒိတ်မည်အားဖြင့် စီပါ နောက်ဆုံး အပိုင်းအားဖြင့် စီပါ အပိုင်းစုစုပေါင်း မဖတ်ရသေးသော အရေအတွက်အားဖြင့် စီပါ အပိုင်းရရှိသည့် ရက်စွဲအားဖြင့် စီပါ ထည့်သွင်းသည့် ရက်စွဲအားဖြင့် စီပါ ခြေရာခံ အမှတ်အားဖြင့် စီပါ ကျပန်းစီမှု ရှာဖွေပါ ရှာဖွေလိုသည်ကို ထည့်ပါ… ရှာဖွေမှု ဆက်တင်များ အားလုံးကို ရွေးချယ်ပါ ရွေးချယ်မှု ပြောင်းပြန်ပါ ဖတ်ပြီးပြီး ကမ္ဘာလုံးဆိုင်ရာ ရှာဖွေမှု မဖတ်ရသေးဘူး ယခင် အပိုင်းများကို ဖတ်ပြီးပြီး သိမ်းယူထားမယ် စာအုပ်စင် အပ်ဒိတ်လုပ်ပါ အားလုံးကို ဖွင့်ပါ အားလုံးကို ပိတ်ပါ ထည့်ပါ အမျိုးအစားကို အပ်ဒိတ်လုပ်ပါ ကျပန်း စာအုပ်တစ်အုပ် ဖွင့်ပါ အမျိုးအစား ထည့်ပါ အမျိုးအစားများ တည်းဖြတ်ပါ စာအမှတ်အထား ထည့်ပါ စာအမှတ်အထား ဖယ်ရှားပါ ဖျက်ပါ အမျိုးအစား အမည်ပြောင်းပါ အမျိုးအစား ရွှေ့ပါ အမျိုးအစား ဖျက်မည်ဟု အတည်ပြုပါ အမျိုးအစား ဖျက်ပါ ရပ်လိုက်ပါ အဖုံးကို တည်းဖြတ်ပါ အပိုင်းများကို ကြည့်ရှုပါ ယခင် အပိုင်း နောက်ထပ် အပိုင်း ထပ်ကြိုးစားပါ ဘာသာစကားဘေ့ခ််ပြသမည် ထပ်အလုံးပြသရန် ပစ္စည်းအရေအတွက်ပြသရန် လုပ်ဆောင်မည်။ မလုပ်ဆောင်ပါ အိုကေ ဖယ်ရှားပါ အားလုံးကို ဖယ်ရှားပါ ပြန်စပါ ဘရောက်ဇာတွင် ဖွင့်ပါ စာအုပ်စင်ပြပါ ကလစ်ပို့ဒ်သို့ မိတ္တူပြုပါ လင့် မိတ္တူပြုပါ ဝဘ်အမြင်တွင်ဖွင့်ရန် အချက်အလက်ပြောင်းရွှေ့မည် ပြသမှု ပုံစံ ပြသမည် ဂရစ်အဖြစ်ပြသမည် သက်တောင့်သက်သာရှိသောဂရစ်အဖြစ်ပြသမည် စာရင်းအဖြစ်ပြသမည် အကဲဖြတ်စာမျက်နှာသာပြသသောဂရစ် ဒေါင်းလုဒ်ဘေ့ခ််ပြသမည် အားလုံးဖျက်မည် ဤအကြောင်းအရာအားလုံးကိုဖျက်မည် စီမည်။ ဒေသခံဘေ့ခ််ပြသမည် ရက် အလိုက် အခန်းနံပါတ် အလိုက် အသစ်ဆုံး အဟောင်းဆုံး Ascending Descending အောက်ဆုံးသို့ရွှေ့မည် ဤအကြောင်းအရာအားလုံးကိုအောက်ဆုံးသို့ရွှေ့မည် ထည့်သွင်းရန် မျှဝေမည် အပေါ်ဆုံးသို့ရွှေ့မည် စီးရီးများကို အပေါ်သို့သို့ရွှေ့မည် သိမ်းမည် ပြန်လည်သတ်မှတ်မည် ပုံမှန်ပြန်အလွဲမပြင် မလုပ်တော့ ပိတ်မည် ရှေ့သို့ Refresh မှတ်တမ်းဖွင့်မည် အသေးစိတ် ကြည့်ရန် နှိပ်ပါ ပြန်ထားမည် နောက်သို့ ခုပဲ ဒေါင်းလုဒ်လုပ်မည် ခုမဟုတ်ပါ ဘာဖြစ်ဖြစ် ထည့်မည် ခဏစောင့်ပါ။ … InternalError: ပြဿနာဖြေရှင်းရန် အတွက် ခရပ်စ်လော့ဂ်များကို စစ်ဆေးပါ။ အက်ပလီကေးရှင်းရရှိနိုင်ခြင်းမရှိပါ ကြိုဆိုပါတယ်။ လိုအပ်တာတွေကို အရင်ဆုံး လုပ်ဆောင်ပါ။ နောက်မှ ဆက်တင်များကို ပြန်လည်သတ်မှတ်လို့ရပါတယ်။ နောက်တစ်ဆင့် ကျော်မည်။ လမ်းညွှန်အကြောင်း အခန်းဒေါင်းလုဒ်များ၊ ဘက်အပ်များနှင့် အခြားသော ဖိုင်များကို %1$s သိမ်းဆည်းမည့် ဖိုလ်ဒါကို ရွေးချယ်ပါ။\n\nသီးခြားဖိုင်တစ်ခု သတ်မှတ်ရန် အကြံပြုပါသည်။\n\nရွေးချယ်ထားသော ဖိုင် - %2$s ဖိုင် ရွေးချယ်ပါ အက်ပလီကေးရှင်းများတပ်ဆင်ခွင့် အက်ပလီကေးရှင်းတပ်ဆင်ရန်ခွင့်ပြုပါ ဖိုင်တစ်ခုကို ရွေးချယ်ရပါမည် သတိပေးချက်များခွင့်ပြုမည် ဗားရှင်းဟောင်းမှ တင်မြှင့်မှု ပြုလုပ်နေပြီး ရွေးချယ်ရန် သေချာမသိပါက သိုလှောင်မှုလမ်းညွှန်ကို ဖတ်ပါ။ စာအုပ်စင် အပ်ဒေ့များနှင့် အခြားသော အကြောင်းအရာများအတွက် အကြောင်းကြားမှုများ ရယူပါ။ ဘက်ထရီအနေအထားများကိုသွင်းခြင်း ဘက်ထရီစွမ်းအင်ကြီးလွန်ခြင်းများအားလုံးဖော်ပြပါ အမှားဖြစ်သောအချက်အလက်များမှတ်တမ်းတင်ခြင်း အမှားအချက်များအတွက်ပါဝင်ရန် စွမ်းဆောင်မှုများစာရင်း မှတ်တမ်းများနှင့်ယခုနှင့်အတူ စွမ်းဆောင်မှုစစ်ဆေးမှု စာဖတ်သူအနှစ်ချုပ် ဒေါင်းလုဒ်များအနှစ်ချုပ် လမ်းညွှန်ရှာဖွေရေးအနှစ်ချုပ် အပေါ်မှာလမ်းညွှန်မှတ်သား လုံခြုံရေးအနှစ်ချုပ် မြင့်မားသောအနှစ်ချုပ် ပုံစံအဆင့် အက်ပလီကေးရှင်းပုံစံ စနစ်ပုံစံ အလင်း နေ့ရက် ပုံစံ အကြောင်းကြားချက်များကို စီမံခန့်ခွဲရန် အက်ပ် ဘာသာစကား လုံခြုံရေးနှင့် ကိုယ်ရေးကိုယ်တာ လုံခြုံရေး ခွဲခြမ်းစိတ်ဖြာမှုနှင့် ခရပ်စ်လော့ဂ်များ ကာကွယ်ထားသော စခရင် လုံခြုံသော စခရင်သည် အက်ပ်များကို ပြောင်းလဲသည့်အခါ အက်ပ်အကြောင်းအရာများကို ဖုံးကွယ်ပေးပြီး စခရင်ရှော့များကို ပိတ်ဆို့ပါမည်။ ဒါက တရားမဝင်တဲ့ ဒါမှမဟုတ် မှားယွင်းစွာ သတ်မှတ်ထားတဲ့ တိုးချဲ့ပလပ်အင်တွေက အက်ပ်ထဲမှာ လိင်ပိုင်းဆိုင်ရာ အကြောင်းအရာတွေ ပေါ်လာတာကို တားမရနိုင်ပါဘူး။ ခရပ်စ်လော့ဂ်များနှင့် ခွဲခြမ်းစိတ်ဖြာမှုဒေတာများကို ပေးပို့ခြင်းဖြင့် ပြဿနာများကို ဖော်ထုတ်ပြီး ပြင်ဆင်နိုင်မည်ဖြစ်ပြီး စွမ်းဆောင်ရည်ကို တိုးတက်စေကာ သုံးစွဲသူများ၏ လိုအပ်ချက်များနှင့် ပိုမိုသက်ဆိုင်သော အနာဂတ် အပ်ဒိတ်များကို ပြုလုပ်နိုင်မည်ဖြစ်သည်။\" ဖယ်ရှားမည်လား ဘယ်ဘက်သို့ ပွတ်ဆွဲရန် အကုန် အပ်ဒိတ်လုပ်မည်။ စောင့်ဆိုင်းဆဲ ထည့်သွင်းပြီး ယခုအခါ ရရှိနိုင်ပါတော့မည်မဟုတ်ပါ။ ၎င်းသည် စနစ်တကျ မလုပ်ဆောင်နိုင်တော့ဘဲ အက်ပ်လီကေးရှင်းတွင် ပြဿနာများ ဖြစ်ပေါ်စေနိုင်ပါသည်။ ဖယ်ရှားပစ်ရန် အကြံပြုအပ်ပါသည်။ နောက်မည့် အချိန်ကို ခန့်မှန်းခြင်း လော့ခ်ဖြည်ရန် လိုအပ်သည် အသုံးမပြုသည့်အခါ သော့ခတ်ရန် ဘာဖြစ်ဖြစ် ဘယ်တော့မှ အကြောင်းကြားချက်များကို ပိတ်ပါ NSFW (18+) ရင်းမြစ်များ ရင်းမြစ်များနှင့် တိုးချဲ့မှုများ စာရင်းတွင် ပြသရန် ယနေ့ ပိတ်သည် ၁၂နာရီတိုင်း ၆နာရီတိုင်း နေ့စဥ် နှစ်ရက်ခြား သုံးရက်ခြား အပတ်စဥ် အားသွင်းနေစဥ် မဖတ်ရသေးသော အခန်းများကို ကျော်သွားပါ ဖတ်ပြီးသား အခန်းများကို ကျော်သွားပါ မစရသေးသော အခန်းများကို ကျော်သွားပါ Wi-Fi ဖြင့်သာ အိုင်ကွန်ပေါ်တွင် မဖတ်ရသေးတဲ့ အရေအတွက်ကို ပြသပါ အချိန်တိုင်း မေးပါ။ ဝင်ရောက်ခွင့် ပိတ်ထားသော ကဏ္ဍများရှိ အခန်းများကို ပါဝင်ခွင့်ပြုထားသော ကဏ္ဍများတွင် ပါဝင်နေသည့်တိုင် အပ်ဒိတ်မပြုလုပ်ပါ အားလုံး တစ်ခုမဟုတ် အပါအဝင်: %s Exclude: %s ညာဘက်သို့ ပွတ်ဆွဲ အစုံ လုပ်ဆောင်နေဆဲ အပ်ဒိတ်လုပ်မည် ထည့်သွင်းမည် ဒေါင်းလုပ် လုပ်နေသည် ထည့်သွင်းနေသည် ဖယ်ရှားသည် အက်ပ် အချက်အလက် \"%s\" ကို တကယ်ဖယ်ရှားလိုပါသလား။ ရယူခြင်း ကျရှုံးသွားသည် ဗာရှင်း ဘာသာစကား အသက်အကန့်အသတ် ထည့်သွင်းရန် ခွင့်ပြုချက်လိုအပ်သည်။ ၁၈+ ထည့်သွင်းနေဆဲ… ဤတွင် လိင်ပိုင်းဆိုင်ရာ အကြောင်းအရာများ (၁၈+နှစ်အထက်သာ သင့်လျော်သော) ပါဝင်နိုင်ပါသည်။ repo ထည့်သွင်းရန် repo ရှိပြီးသားဖြစ်သည်၊ ဖျက်မည်။ အစားထိုးမည် မျက်နှာပြင်အပြည့် အမည်း အဖြူ အဖြူအမည်း စာမျက်နှာနံပါတ် ပြပါ။ \"%s\"ကို ဖျက်လိုပါသလား? \"%s\" ထည့်သွင်းလိုပါသလား? အလိုအလျောက် အပ်ဒိတ်များ ရှုခင်း ပုံတူ အတန်းအလိုက် ပစ္စည်းများ ဖုန်းမျက်နှာပြင် ကမ္ဘာလုံးဆိုင်ရာ အပ်ဒိတ် နီစိမ်းရောင် ခရမ်းနုရောင် အနီးစပ်ဆုံး အချိန်အမှတ်အသား \"%2$s\" မဟုတ်ဘဲ \"%1$s\" ဟုပြရန် metadataကို အလိုလျောက် ပြန်လည်ဆန်းသစ်ပေးပါ။ စာအုပ်စင်ကို အပ်ဒိတ်လုပ်လျှင် ကာဗာနှင့် အချက်အလက်သစ်များ ရယူရန်။ မူရင်းကဏ္ဍ အသုံးပြု၍မရ ယုံကြည်ရန် မယုံကြည်ရသေးသော အစိတ်အပိုင်းများ စုစည်းမှုများ၏ URL Extension စုစည်းရာ သင့်မှာ extension ထည့်ရန် စုစည်းမှုများ မထည့်ရသေးပါ။ အသုံးပြုမရသော စုစည်းမှုများ၏ URL ကန့်သက်ထားခြင်း %s ကန့်သက်မထားသော ကွန်ရက်ပေါ်တွင်သာ သင့်ဖုန်းမှ ဖယ်ရှားရန် Dynamic လှူဒါန်း အလိုအလျောက် ================================================ FILE: i18n/src/commonMain/moko-resources/nb-rNO/plurals.xml ================================================ Etter %1$s minutt Etter %1$s minutter %d kategori %d kateogrier %1$d nytt kapittel %1$d nye kapitler For %d oppføring For %d oppføringer %1$s kapittel %1$s kapitler %1$s gjenstående %1$s gjenstående Gjort på %1$s med %2$s feil Gjort på %1$s med %2$s feil %d tracker %d trackere Hopper over %d kapittel, enten så mangler kilden den eller så har den blitt filtrert ut Hopper over %d kapitler, enten så mangler kilden de eller så har de blitt filtrert ut Utvidelsesoppdatering tilgjengelig %d utvidelsesoppdateringer tilgjengelige Kapittel %1$s og 1 til Kapitler %1$s og %2$d til I går %1$d dager siden Neste uleste kapittel Neste %d uleste kapitler Neste kapittel Neste %d kapitler Mangler %1$s kapittel Mangler %1$s kapitler %d dag %d dager %d pakkebrønn %d pakkebrønner ================================================ FILE: i18n/src/commonMain/moko-resources/nb-rNO/strings.xml ================================================ Navn Kategorier Bibliotekoppføringer Kapitler Historikk Innstillinger Nedlastingskø Bibliotek Historikk Oppdateringer Sikkerhetskopier og gjenopprett Flytte Utvidelser Utvidelsesinfo Innstillinger Filter Bokmerket Ulest Fjern filter Alfabetisk Totale kapitler Sist lest Søk Velg alt Marker som lest Marker som ulest Merk forrige som lest Last ned Bokmerk kapittel Fjern bokmerke Slett Oppdater bibliotek Rediger Legg til Legg til kategori Rediger kategorier Gi kategori nytt navn Sett kategorier Rediger omslag Pause Forrige kapittel Neste kapittel Prøv igjen Fjern Fortsett Åpne i nettleser Visningsmodus Vis Kompakt rutenett Liste Avbryt Sorter Installer Del Lagre Tilbakestill Angre Åpne logg Gjenopprett Laster… Program ikke tilgjengelig Generelt Leser Nedlastinger Avansert Om Av Hver sjette time Hver tolvte time Daglig Annenhver dag Ukentlig Alle Lading Standard kategori Alltid spør Oppdater Installer Ventende Laster ned Installerer Installert Tillit Ubetrodd Avinstaller Ubetrodd utvidelse Fullskjermsvisning Sideovergangsanimasjoner Vis sidenummer Behold skjerm på Navigasjon Sporing Globalt søk Åpne i WebView Sporing Stående Liggende Automatiske oppdateringer Enhetsbegrensninger for automatiske oppdateringer Hopp over oppføringer med \"Fullført\" status Oppdater fremdrift etter lesing Beskjær kanter Egendefinert lysstyrke Egendefinert fargefilter Hopp over kapitler markert som lest Lydstyrkejusteringstaster Inverter lydstyrketaster Vis handlinger ved langt trykk Bakgrunnsfarge Hvit Svart Standard lesemodus Sider (venstre til høyre) Sider (høyre til venstre) Sider (loddrett) Lang stripe Skalatype Tilpass skjerm Strekk Tilpass bredde Tilpass høyde Opprinnelig størrelse Smart tilpasning Startposisjon for forstørring Automatisk Venstre Høyre Sentrer Ingen animasjon Normal Rask Standard rotasjon Fri Låst stående Låst liggende R G B A Etter manuelt markert som lest Slett automatisk etter lesing Avskrudd Sist leste kapittel Nest sist leste kapittel Tredje sist leste kapittel Fjerde sist leste kapittel Femte sist leste kapittel Last ned nye kapitler Sporere Opprett sikkerhetskopi Kan brukes til å gjenopprette nåværende bibliotek Gjenopprett sikkerhetskopi Gjenopprett bibliotek fra sikkerhetskopifil Sikkerhetskopieringsfrekvens Sikkerhetskopi opprettet Gjenoppretting fullført Hva ønsker du å sikkerhetskopiere? Gjenoppretter sikkerhetskopi Oppretter sikkerhetskopi Tøm kapittelhurtigbuffer Brukt: %1$s Hurtigbuffer tømt. %1$d filer slettet Feil oppstod under opprensing Tøm informasjonskapsler Informasjonskapsler slettet Tøm database Slett historikk for oppføringer som ikke er lagret i biblioteket ditt Oppføringer slettet Versjon Send krasjrapporter Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt Logg på %1$s Brukernavn Passord Logg inn Innlogget Ukjent feil Oppdaterer kategori Ingen flere resultater Lokal kilde Andre Globalt søk… Seneste Utforsk Pågående Ukjent Lisensiert Fjern fra bibliotek Lagt til i biblioteket Fjernet fra bibliotek Slett nedlastede kapitler? Kopiert til utklippstavle: \n%1$s Kilde ikke installert: %1$s Kapittel %1$s Laster ned (%1$d/%2$d) Feil Pauset Kildetittel Kapittelnummer Etter kilde Etter kapittelnummer Last ned Ulest Er du sikker på at du vil slette de valgte kapitlene? Sporing Leser Fullført Droppet På vent Planlagt lest Leser om igjen Poengsum Tittel Status Status Type En kategori ved dette navnet finnes allerede! Kategorier slettet Lesningsdato for dette kapittelet vil bli fjernet. Er du sikker? Tilbakestill alle kapitler for denne oppføringen Legg til i bibliotek? Bilde lagret Egendefinert filter Sett som omslag Omslag oppdatert Side: %1$d Fant ikke neste kapittel Bildet kunne ikke lastes inn Fullført: Nåværende: Neste: Forrige: Det finnes ikke flere kapittel Det er ikke noe tidligere kapittel Laster inn sider… Klarte ikke å laste inn sider: %1$s Velg data å inkludere Flytt Kopier Nye kapitler funnet Klarte ikke å oppdatere omslag Last ned Vanlig Skjerm Hjelp Last ned kapitler Rutenettstørrelse Skadelige utvidelser kan lese alle lagrede innloggingsdetaljer eller kjøre vilkårlig kode. \n \nVed å godta denne utvidelsen, aksepterer du disse risikoene. Animasjonshastighet ved dobbelklikk Sider Bruk dette bildet som omslag? Kunne ikke laste ned kapitler. Du kan prøve igjen i nedlastingsdelen Legg til oppføringen i biblioteket ditt før du gjør dette Velg omslagsbilde Velg sikkerhetskopifil Ingen nye oppdateringer tilgjengelige Laster ned… Trykk for å installere oppdatering Feil ved nedlasting Ny versjon tilgjengelig! Ingen nedlastinger Ingen nylige oppdateringer Ingenting lest nylig Biblioteket ditt er tomt Du har ingen kategorier. Trykk på pluss-knappen for å lage en for å organisere biblioteket ditt. Nedlaster Feil Kunne ikke laste ned kapittel grunnet uventet feil Ingen trådløstilkobling tilgjengelig Ingen nettverkstilkobling tilgjengelig Nedlastinger pauset Blandingsmodus for fargefilter Overlegg Multiplisere Unngå / lysne Brenn / mørkere Resultatløst Velg en kilde å flytte fra Tilbake Fram Gjenoppfrisk Bibliotek Foreldet Denne utvidelsen er ikke lengre tilgjengelig. Den fungerer kankje ikke som den skal og kan forårsake problemer med appen. Avinstallering anbefales. Datoformat Global oppdatering Logg ut fra %1$s? Logg ut Du er utlogget Pauset Mer Vis kapitler Avbryt alle Lyst Mørkt System Håndter merknader Sikkerhet og personvern Krev opplåsning Lås ved lediggang Alltid Aldri Sikker skjerm Kapitteloppdateringer Kapittel %1$s E-postadresse I biblioteket Legg til i bibliotek Flytt til bunnen Flytt til toppen Eldste Nyeste Opphev festin Fest Velg motsatt Meny Kilder Utvidelsesoppdateringer Appen fungerer ikke uten WebView Legg til sporing Mindre Mer Festet Nettside Sikkerhetskopiering mislyktes Leser Alltid vis kapittelovergang Lang stripe med mellomrom Hopp over filtrerte kapitler Skjul merknadsinnhold Sikker skjerm skjuler programinnhold ved bytting av programmer og blokker skjermavbildninger Kun nedlastet Lesemodus Klarte ikke bypassere Cloudflare Oppdaterer bibliotek Fant ingen sider Etter opplastingsdato Sist brukt Faner %1$02d min, %2$02d sek Manglende kilder: Grå Vis kategorifaner Komfortabelt rutenett Flytt Start Begge Loddrett vannrett Ingen Kilden ikke funnet For denne serien Ukjent status Ukjent forfatter Lokal kildeguide Filtrerer alle oppføringer i biblioteket ditt Se etter oppdateringer Kunne ikke åpne enhetens innstillinger Batterioptimalisering er allerede deaktivert Deaktiver batterioptimalisering Data Krever omstart for å tre i kraft Nettverk Avbrutt gjenoppretting Gjenoppretting allerede underveis Vis lesemodus deaktivere deaktiver alle aktiver alle Siste kapittel Inverter trykk Gjenoppretting av sikkerhetskopi mislyktes Sikkerhetskopiering allerede underveis Ugyldig sikkerhetskopieringsfil: Vis innhold i utklippsområde Se etter nye omslag og detaljer ved oppdatering av bibliotek Gjenoppfrisk metadata automatisk Skjerm Drakt Dato lagt til Oppdateringer som venter Lesemodus Sniktitt av nåværende modus når leseren åpnes Feil Fullført Kapittel %1$s og %2$d til Du har ingen festede kilder Framdrift Tillat sletting av bokmerkede kapitler Slett kapitler Kan inneholde innhold for 18+ 18+ Dette forhindrer ikke uoffisielle eller potensielt feilaktig kategoriserte tillegg fra å vise innhold for 18+ i appen. Kap. %1$s - %2$s %1$s: %2$s, side %3$d Kapittelinnstillinger Sett som standard Fant ingen kapitler Oppdater WebView-programmet for bedre kompatibilitet Oppdaterte standard kapittelinnstillinger Er du sikker på at du vil lagre disse innstillingene som standard? Søkeinnstillinger Kapitler %1$s Ikke nok lagringsplass til å laste ned kapitler Anvend også for allle oppføringer i biblioteket Søk etter \"%1$s\" globalt Oppdatert til v%1$s Friprog-lisenser Hva er nytt Hjelper med oppdatering og sikkerhetskopiering av biblioteket Gjenoppfrisk mangaomslag i biblioteket Sporingstjenester ikke logget inn i: Sikkerhetskopi inneholder ingen bibliotekoppføringer. Enveissynkronisering for å oppdatere kapittelfremdrift i eksterne sporetjenester. Sett opp sporing for individuelle oppføringer med sporingsknappen. Sidepolstring Neste side Forrige side Ingen app for filvelging funnet Veiledning for kilde-flytting Er du sikker? All historikk vil gå tapt. Historikken er slettet Slett historikk Vennligst logg på MAL igjen Sluttdato Startdato Nedlastede kapitler Fra biblioteket Setter lesehistorikken på pause Inkognitomodus Del krasjlogger Lagrer feillogger i en fil som kan sendes til utviklerne Navigasjonsoppsett Kant Kindle-basert L-formet Vis i kilde- og utvidelseslister Aldersgrense 18+ kilder Synkende Stigende Etter kapittelnummer Etter opplastingsdato Sporet Hvis plasseringen av sideoppsettet for delte brede sider ikke samsvarer med leseretningen Invertert sideoppsett for delte sider Del brede sider Vis overlay for navigasjonsoppsett Du vil måtte installere manglende utvidelser og logge inn på sporings-tjenester etterpå for å bruke dem. Vis tap-bare områder når leseren åpnes Ingen DNS over HTTPS (DoH) Høyre Venstre Neste Forrige Høyre og Venstre Vis antall gjenstander Eksluder: %s Inkluder: %s Dato hentet Oppføringer i utelukkede kategorier vil ikke bli nedlastet selv om de også er i inkluderte kategorier. Last ned automatisk Oppførninger i utelukkede kategorier vil ikke bli oppdatert selv om de også er i inkluderte kategorier. Trykk for å se detaljer Kunne ikke kopiere til utklippstavlen Denne Android-versjonen støttes ikke lenger Liggende Stående Rotasjon Oppretter mapper i henhold til oppføringenes tittel Lagre sider i egne mapper Handlinger Helt svart Oppstartsveiledning Du har ingen kategorier enda. Kilde støttes ikke Ulest Klarte ikke å dele omslag Klarte ikke å lagre omslag Omslag lagret Omslag Dato Sorter etter Ugyldig kapittelformat Fant ikke kapittelet Bakgrunnsaktivitet Spor Forbedret sporere Sporingsveiledning Utelukkede kategorier Laveste Lav Høy Høyeste Automatisk Invertert Gråskala Av Begrensninger: %s I dag Dynamisk Programdrakt Utseende Start nedlasting nå Avbryt alle for denne serien Identitetsbekreft for å endre Standard Noen produsenter har ytterligere appbegrensninger som dreper bakgrunnstjenester. Denne nettsiden har mer info om hvordan det kan fikses. Sikkerhetskopier/gjenoppretting kan krangle hvis MIUI-optimalisering er avskrudd. Gir forbedredet funksjoner for spesifikke kilder. Det holdes automatisk øye med oppføringer når de legges til i biblioteket ditt. Nettbrettsgrensesnitt Følsomhet for å skjule menyen når du ruller Innstillinger per kategori for sortering Yin og yang Blågrønn og turkis Tako Jordbær-Daiquiri Midnattsskumring Grønt eple Lokal kilde Ingen treff funnet Skru av inkognito-modus Bistå oversettelsen Yotsuba Installer og start Shizuku for å bruke det som utvidelsesinstallatør. Shizuku kjører ikke Foreldet Installatør Installerer utvidelse … Programinfo Totalt antall oppføringer Språk Sirlig loggføring Skriv utfyllende logg til systemloggen (reduserer programytelse) Advarsel Store oppdateringer skader kilder og kan føre til tregere oppdateringer samt økt batteribruk. Trykk for å lære mer. Du bør oppbevare ekstra kopier av sikkershetskopier andre steder også. Sikkerhetskopier kan inneholde sensitiv data, inkludert eventuelle lagrede passord. Vær forsiktig ved deling. Appoppdateringer Hver 3. dag Bare på Wi-Fi Vis oppføring Personvernerklæring Ferdig publisert Hopp over oppføringer med uleste kapitler Kansellert På pause Lagre som CBZ-arkiv Oppdater alle Ingenting å fjerne Hoppet over fordi det er uleste kapitler Hoppet over fordi serien er fullført Advarsel: store bulknedlastinger kan føre til at kilder blir tregere og/eller blokkerer %s. Trykk for å lære mer. For hjelp til å fikse bibliotekoppdateringsfeil, se %1$s Kun omslags-rutenett Hopp over oppføringer som ikke er påbegynt Zoom automatisk inn for brede bilder Panorer brede bilder %1$d ikke-bibliotek oppføringer i databasen Flytt serien til toppen Klarte ikke å hente tilgjengelige utvidelser Omvendt portrett Tøm kapittel hurtigbufferen ved oppstart av appen %1$d oppdatering(er) mislyktes Trykk for å finne ut mer Hoppet over fordi ingen kapitler er lest Deaktivert Ingen bibliotekoppføringer å sikkerhetskopiere Feil ved lagring av bilde Åpne på GitHub Lukk Slett WebView data WebView data slettet Vel, dette er pinlig Enveis fremdriftssynkronisering, forbedret synkronisering Kilder, utvidelser, globalt søk Manuelle & automatiske sikkerhetskopier Lavendel Bare på nettverk uten datamåling Språk Alle leserinnstillinger tilbakestilt Ukjent tittel Ugyldig plassering: %s Fungerer kun hvis det nåværende kapittelet + det neste allerede er lastet ned. Start applikasjonen på nytt Kunne ikke finne filbanen til side %d Applås, sikker skjerm Dump krasjlogger, batterioptimaliseringer Lagringstilgang er ikke gitt Ugyldig streng for brukeragent Ønskeliste Hoppet over fordi seriene ikke krever oppdateringer Side %d ble ikke funnet under deling Tilbakestill leserinnstillinger per serie Tidevannsbølge Aldersvurdering Strengen for brukeragent kan ikke være tom Komplett liste På vent liste Er du sikker? Du er i ferd med å fjerne \"%s\" fra biblioteket ditt Uferdig liste Last ned i forkant Tilbakestill standard streng for brukeragent Leseliste Siste oppdateringssjekk Kunne ikke tilbakestille leserinnstillingene Multi Last ned automatisk mens du leser Forbedrer leserytelsen Tilbakestiller lesemodus og orientering for alle serier Antall uleste Ønsker du å slette kategorien \"%s\"? Slett kategori InternalError: Sjekk krasjlogger for mer informasjon Oops! %s fikk en uventet feil. Vi foreslår at du deler krasjloggene i vår støttekanal på Discord. Appspråk Ingen beskrivelse Søk… Fjern alt Versjon Egendefinert omslag Populært Se de nylig oppdaterte biblotekoppføringene dine Moduler er ikke tilgjengelig når applås er aktivert Standard streng for brukeragent Tema, dato- og klokkeslettformat Kategorier, global oppdatering, kapittelsveip Automatisk nedlasting, last ned i forkant Lesemodus, skjerm, navigasjon En oppdatering kjører allerede Kan ikke åpne siste leste kapittel Bibliotek sist oppdatert: %s Ingen kilde funnet Ingen installert kilde funnet Ikke installert Akkurat nå Sjekker nedlastinger F-Droid-bygg er ikke offisielt støttet. \nTrykk for å finne ut mer. Fant ingen oppføringer i denne kategorien Åpne tilfeldig oppføring Fortsett å lese-knapp Fjerne dato? Dette vil fjerne den tidligere valgte startdatoen fra %s Dette vil fjerne den tidligere valgte sluttdatoen fra %s Rydd ut nedlastingsindeksen Tving appen til å sjekke nedlastede kapitler på nytt Startet Fullførte oppføringer Oppføringer Brukt %dd %dt %dm %ds Statistikk Totalt Nedlastet Oversikt Tid brukt Globalt oppdaterte Lest Tracket oppføringer Snitt poengsum I/A Lokale Trackere Ikke nå Kategorien er tom Vis antall uleste på oppdateringsikonet Kopiert til utklippstavlen Tilgjengelig, men kilden er ikke installert: %s Hopp over dupliserte kapitler %1$s feil: %2$s *påkrevd Skjul oppføringer som allerede er i biblioteket Kopier til utklippstavle Oppdater kategori Del opp høye bilder Elementer Vend orienteringen av roterte brede sider Roter brede sider slik at de passer Debug info Sett til å oppdatere hver Hoppet over fordi ingen utgivelse var forventet i dag Sett intervall Egendefinert oppdateringsintervall Neste forventede oppdatering Sveip til høyre handling Intervaller Anslå hver Slett nedlastede Forutsi neste utgivelsestidspunkt Dobbelttrykk for å zoome Sveip til venstre handling Vil du fjerne sporing for %s? Fjern fra %s også OK Dette vil fjerne sporingen lokalt. Har resultater Synkroniserer biblioteket Biblioteksynkronisering fullført Trykk her for å få hjelp med Cloudflare Nedlastingsindeksen er ugyldiggjort Kunne ikke opprette en backup-fil Sporerinnlogging Lås opp %s Flytt serien til bunnen Ingen internettforbindelse HTTP %d, sjekk nettsiden i WebView Kunne ikke nå %s Oppdaterer bibliotek… (%s) Kildeinnstillinger Programinnstillinger Relative tidsstempler \"%1$s\" istedenfor \"%2$s\" Lagringsplass Opprett Aldri Reduserer etterbilde på e-ink skjermer Brukt for automatiske sikkerhetskopier, nedlastede kapitler og lokal kilde. Bruk Gjenopprett standardinnstillinger Flere valg Siste automatisk sikkerhetskopi: %s Valgt Ingen skanningsoversettere funnet Ikke valgt Skanningsoversetter Blink ved sidebytte Lagringsbruk Naviger opp Sporer poengsum Data og lagring Ingen fil valgt Ekskluder skanningsoversettere Velg en mappe Introduksjonsguide Ny til %s? Vi anbefaler å sjekke ut startveiledningen. Kom i gang En mappe må velges Velkommen! Reinstallerer du %s? Hopp over Neste La oss sette opp noen ting først. Du kan alltid endre disse i innstillingene senere også. Ingen lagringsplassering angitt Velg en mappe der %1$s vil lagre kapittelnedlastinger, sikkerhetskopier og mer. \n \nEn dedikert mappe anbefales. \n \nValgt mappe: %2$s Nye kapitler forventes om omtrent %1$s, sjekker omtrent hver %2$s. Tillat varslinger Tillat å installere apper Tilgjengelig: %1$s / Totalt: %2$s Egendefinert oppdateringsfrekvens: Pakkebrønn URL Fullstendig feil: Denne pakkebrønnen finnes allerede! Unngå avbrudd i langvarige oppdateringer av biblioteket, nedlastinger og gjenoppretting av sikkerhetskopier. Smart oppdatering Batteribruk i bakgrunnen For å installere kildeutvidelser. Ugyldig pakkebrønn URL Legg til ekstra pakkebrønner i %s. URL-en må ende med \"index.min.json\". Få varsler for oppdateringer i biblioteket og mer. Tillatelse er nødvendig for å installere utvidelser. Trykk her for å tillate. Ønsker du å slette pakkebrønnen \"%s\"? Slett pakkebrønn Legg til pakkebrønn Inkluder sensitive innstillinger (f.eks., innloggingstoken for sporer) Du har ingen pakkebrønner satt opp. Tillat Utvidelsepakkebrønner Oppdaterer du fra en eldre versjon og er usikker på hva du skal velge? Sjekk lagringsguiden for mer informasjon. Lagringsguiden Nord Snart Fjern tilliten til ukjente utvidelser Åpne pakkebrønnen Kommende Legg til likevel Erstatt ================================================ FILE: i18n/src/commonMain/moko-resources/ne/plurals.xml ================================================ हिजो %1$d दिन अघि %1$s मिनेट पछि %1$s मिनेट पछि %d वर्ग %d वर्गहरू %2$s त्रुटिको साथ %1$s मा सम्पन्न भयो %2$s त्रुटिहरूसँग %1$s मा सम्पन्न भयो %1$d नयाँ अध्याय %1$d नयाँ अध्यायहरू एक्सटेन्शन अपडेट उपलब्ध छ %d एक्सटेन्शन अपडेटहरू उपलब्ध छन् अध्याय %1$s र 1 थप अध्याय %1$s र %2$d थप %d इन्ट्रीको लागि %d इन्ट्रीहरूको लागि %1$s बाँकी %1$s बाँकी %1$s अध्याय %1$s अध्यायहरू %d अध्याय छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ %d अध्यायहरू छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ %d ट्र्याकर %d ट्र्याकरहरू अर्को नपढिएको अध्याय अर्को %d नपढिएका अध्यायहरू अर्को अध्याय अर्को %d अध्यायहरू %1$s अध्याय छुटेको छ %1$s अध्यायहरू छुटेका छन् १ दिन %d दिन %d रेपो %d रेपोहरु भोलि %1$d दिनमा १ पाना %1$s पाना %1$d प्रविष्टि सार्ने हो? %1$d प्रविष्टिहरू सार्ने हो? %1$d प्रविष्टि प्रतिलिपि गर्ने हो? %1$d प्रविष्टिहरू प्रतिलिपि गर्ने हो? एउटा प्रविष्टि छलेको थियो %1$d वटा प्रविष्टिहरू छलेका थिए ================================================ FILE: i18n/src/commonMain/moko-resources/ne/strings.xml ================================================ अन अफ थीम बारेमा उन्नत सेटिंग्स ट्र्याकिङ डाउनलोड्स रिडर पुस्तकालय सामान्य एप उपलब्ध छैन लोड हुँदैछ … रिफ्रेस गर्नुहोस् अगाडि पछाडि रिस्टोर गर्नुहोस् लग खोल्नुहोस् अन्डु गर्नुहोस् रिसेट गर्नुहोस् सेभ गर्नुहोस् साझा गर्नुहोस् स्थापना गर्नुहोस् तल सार्नुहोस् शीर्षमा सार्नुहोस् घट्दो क्रममा बढ्दो क्रममा सबैभन्दा पुरानो सबैभन्दा नयाँ अध्याय संख्या द्वारा अपलोड मिति द्वारा सबै रद्द गर्नुहोस् रद्द गर्नुहोस् अनपिन पिन असक्षम गर्नुहोस् वस्तुहरूको संख्या देखाउनुहोस् वर्ग ट्याबहरू देखाउनुहोस् डाउनलोड गरिएका अध्यायहरू आरामदायक ग्रिड सूची कम्प्याक्ट ग्रिड प्रदर्शन स्थानान्तरण ब्राउजरमा खाेल्नुहाेस् जारी राख्नुहोस् सुरु गर्नुहोस् हटाउनुहोस् पुनःप्रयास गर्नुहोस् अर्को अध्याय अघिल्लो अध्याय रोक्नुहोस् अध्यायहरू हेर्नुहोस् आवरण सम्पादन गर्नुहोस् वर्गहरू सेट गर्नुहोस् वर्गहरू को नाम बदल्नुहोस् वर्गहरू सम्पादन गर्नुहोस् वर्ग थप्नुहोस् थप्नुहोस् सम्पादन गर्नुहोस् सबैलाई असक्षम गर्नुहोस् सबैलाई सक्षम गर्नुहोस् पुस्तकालय अपडेट गर्नुहोस् हटाउनुहोस् अध्यायमा पुस्तकचिनो हटाउनुहोस् अध्यायमा पुस्तकचिनो लगाउनुहोस् डाउनलोड अघिल्लोलाई पढिएको चिन्ह लगाउनुहोस् नपढिएको चिन्ह लगाउनुहोस् पढिसकेको चिन्ह लगाउनुहोस् सबै चयन गर्नुहोस् ग्लोबल खोज सेटिंग्समा खोज्नुहोस् खोज्नुहोस् अन्तिम पढिएको कुल अध्यायहरू वर्णमाला अनुसार फिल्टर हटाउनुहोस् नपढिएको ट्र्याक गरिएको पुस्तकचिनो लगाइएको फिल्टर मेनू सेटिंग्स इतिहास ट्र्याकिङ अध्याय पुस्तकालयका इन्ट्रीहरू वर्गहरू तपाईंसँग कुनै वर्गहरू छैन। वर्ग बनाएर पुस्तकालय व्यवस्थित गर्न प्लस बटन थिच्नुहोस्। तपाईंको पुस्तकालय खाली छ हालै केहि पढेको छैन हालैका कुनै अपडेट छैन डाउनलोड सूची कुनै डाउनलोड्स छैन मद्दत एक्सटेन्शनको जानकारी एक्सटेन्शन स्थानान्तरण ब्याकअप र रिस्टोर स्रोतहरू इतिहास अपडेट्स पुस्तकालय सेटिंग्स अरू नाम Cloudflare लाई बाइपास गर्न असफल भयो प्रदर्शन मोड उल्टो चयन गर्नुहोस् राखिएको मिती अध्याय ल्याएको मिति नवीनतम अध्याय पुस्तकालय अपडेट गर्दा नयाँ आवरण र विवरणहरूको लागि जाँच गर्नुहोस् मेटाडेटा स्वतः रिफ्रेस गर्नुहोस् \"समाप्त\" स्थिति भएको इन्ट्रीहरू छोड्नुहोस् प्रतिबन्धहरू: %s चार्ज हुँदा स्वचालित अपडेट्स यन्त्र प्रतिबन्धहरू साप्ताहिक प्रत्येक २ दिन दैनिक प्रत्येक १२ घण्टा प्रत्येक ६ घण्टा अफ स्वचालित अपडेट्स ग्लोबल अपडेट ल्याण्डस्केप प्रति रो वस्तुहरू प्रदर्शन आज स्रोत र एक्सटेन्शन सूची मा देखाउनुहोस् NSFW (18+) स्रोतहरू सूचना को सामग्री लुकाउनुहोस् एपहरू स्विच गर्दा \"स्क्रिन सुरक्षित गर्नुहोस्\" ले एप सामग्रीहरू लुकाउँछ र स्क्रिनसटहरू रोक्छ स्क्रिन सुरक्षित गर्नुहोस् कहिल्यै हैन सधैं निष्क्रिय रहेमा लक होस् अनलक गर्न आवश्यक छ सुरक्षा र गोपनीयता सूचनाहरू व्यवस्थापन गर्नुहोस् मिति ढाँचा शुद्ध कालो डार्क मोड योत्सुबा यिन र यांग टील र फिरोजा टाको स्ट्रबेरी दाइक्वरी मिडनाइट डस्क हरियो स्याउ गतिशील एपको थीम सिस्टम पालना गर्नुहोस् रूप अहिले डाउनलोड गर्न सुरु गर्नुहोस् विवरणहरू हेर्न ट्याप गर्नुहोस् क्रमबद्ध यी श्रृङ्खलाका सबै रद्द गर्नुहोस् लोकल स्रोत WebView मा खोल्नुहोस् परिवर्तन पुष्टि गर्न प्रमाणित गर्नुहोस् पूर्वनिर्धारित ट्याब्लेट UI यन्त्रको सेटिंग्स खोल्न सकिएन पढिएको इतिहास रोक्छ गुप्त मोड डाउनलोड गरिएको मात्र कुनै पनि बगहरू ठीक गर्न मद्दत गर्दछ। कुनै संवेदनशील डेटा पठाइने छैन Crash रिपोर्ट पठाउनुहोस् v%1$s मा अपडेट गरियो अपडेटका लागि जाँच गर्नुहोस् छवि लोड गर्न सकिएन अध्यायहरू डाउनलोड गर्न सकिएन। तपाईं डाउनलोड सूचीमा फेरि प्रयास गर्न सक्नुहुन्छ अनइन्स्टल गर्नुहोस् अन्तिम पढिएको अध्याय भन्दा २ अध्याय अघि पोर्ट्रेट रङ फिल्टर मिश्रण मोड सधैं सोध्नुहोस् सबै कुनै पनि हैन विचाराधीन अपडेट्स अपडेट सबै अपडेट गर्नुहोस् अप्रचलित स्थापना गर्नुहोस् विचाराधीन स्थापना गरियो विश्वास यो एक्सटेन्शन अब उपलब्ध छैन। यसले राम्ररी काम नगर्न सक्छ र एपमा समस्या ल्याउन सक्छ। यसलाई अनइन्स्टल गर्न सिफारिस गरिन्छ। यस एक्सटेन्शनको स्रोतहरूमा NSFW (१८+) सामग्री समावेश हुन सक्छ एक्सटेन्शन स्थापना गर्दै… Shizuku चलिरहेको छैन Shizuku लाई एक्सटेन्शन इंस्टलरको रूपमा प्रयोग गर्न Shizuku स्थापना गर्नुहोस् र सुरु गर्नुहोस्। नेभिगेसन लेआउट ओभरले देखाउनुहोस् चौडा पृष्ठहरू विभाजित गर्नुहोस् विभाजित पृष्ठ प्लेसमेन्ट उल्टाउनुहोस् कटआउट क्षेत्रमा सामग्री देखाउनुहोस् पृष्ठ ट्रान्जिसन एनिमेट गर्नुहोस् एनिमेसनको गति डबल ट्याप गर्नुहोस् रिडर खोल्दा छोटकरीमा हालको मोड देखाउनुहोस् अन कस्टम चमक पढिएको चिन्ह लगाइएका अध्यायहरू छोड्नुहोस् नेभिगेसन भोल्युम कीहरू ठाडो दुबै कार्यहरू लामो ट्यापमा कार्यहरू देखाउनुहोस् ब्याकग्राउण्ड रङ खैरो कालो स्वत L आकारको डाउनलोड गर्दै स्थापना गर्दै अविश्वसनीय १८+ ओभरले फिल्टर गरिएका अध्यायहरू छोड्नुहोस् भोल्युम कीहरू उल्टाउनुहोस् ट्याप क्षेत्रहरू उल्टाउनुहोस् कुनै पनि हैन तेर्सो विरासत कस्टम रङ फिल्टर गुणन स्क्रिन डज / चम्किलो जलाउनु / अँध्यारो गर्नु फरक फोल्डरमा पृष्ठहरू सेभ गर्नुहोस् स्क्रिन अन राख्नुहोस् इन्ट्रीहरूको शीर्षक अनुसार फोल्डरहरू सिर्जना गर्दछ कुल इन्ट्रीहरू सावधान भाषा यसले अनौपचारिक वा सम्भावित रूपमा गलत रूपमा फ्ल्याग गरिएका एक्सटेन्शनहरूलाई एप भित्र NSFW (१८+) सामग्री आउन बाट रोक्दैन। पूर्वनिर्धारित वर्ग क्रमबद्धका लागि प्रति-वर्ग सेटिंग्स समावेश गर्नुहोस्: %s \"बहिष्कृत\" वर्गहरूमा रहेका इन्ट्री \"समावेश गरिएका\" वर्गहरूमा भए पनि अपडेट हुने छैनन्। एप जानकारी अविश्वसनीय एक्सटेन्शन समावेश नगर्नुहोस्: %s इंस्टलर खराब एक्सटेन्शनहरूले कुनै पनि भण्डारण लगइन प्रमाणहरू पढ्न वा मनमानी कोड कार्यान्वयन गर्न सक्छ। \n \nयस एक्सटेन्शनमा विश्वास गरेर तपाईंले यी जोखिमहरू स्वीकार गर्नुहुन्छ। पूर्ण स्क्रिन रिडर खोलिएको बेला छोटकरीमा देखाउनुहोस् यदि विभाजित चौडा पृष्ठहरूको प्लेसमेन्ट पढ्ने दिशासँग मेल खाँदैन पढ्ने मोड देखाउनुहोस् पृष्ठ नम्बर देखाउनुहोस् सीमाना क्रप गर्नुहोस् अफ ग्रे-स्केल उल्टो सेतो पूर्वनिर्धारित पढ्ने मोड Wi-Fi मा मात्र प्रत्येक ३ दिन कुना ठाडो लामो स्ट्रिप खाली ठाउँ भएको लामो स्ट्रिप पहिलेको किन्डल जस्तै दायाँ देखि बायाँ दायाँ र बायाँ अर्को बायाँ बायाँ देखि दायाँ दायाँ ब्राउज ब्याकअप सिर्जना गर्दै बीचमा सामान्य कुनै एनिमेसन छैन छिटो पूर्वनिर्धारित रोटेशन रोटेशन फ्री ल्याण्डस्केप लक गरिएको ल्याण्डस्केप रातो हरियो पढ्ने मोड स्क्रोलमा मेनु लुकाउनका लागि संवेदनशीलता अन्तिम पढिएको अध्याय भन्दा पहिले १ अध्याय स्वत: डाउनलोड गर्नुहोस् ट्र्याकिङ गाइड पढिसकेपछि प्रगति अपडेट गर्नुहोस् पुस्तकचिनो लगाइएका अध्यायहरू हटाउन अनुमति दिनुहोस् अन्तिम पढिएको अध्याय विशिष्ट स्रोतहरूको लागि परिष्कृत सुविधाहरू प्रदान गर्दछ। तपाईंको पुस्तकालयमा थप्दा इन्ट्री स्वचालित रूपमा ट्र्याक गरिन्छ। ट्र्याक रिस्टोर सम्पन्न भयो कुकीहरू खाली गर्नुहोस् तपाई के ब्याकअप गर्न चाहनुहुन्छ? ब्याकअप असफल भयो HTTPS (DoH) माथि DNS प्रभाव पार्न एप फेरि सुरु गर्न आवश्यक छ आवरण अपडेट गर्न असफल भयो यो गर्नु अघि कृपया आफ्नो पुस्तकालयमा यस इन्ट्रीलाई राख्नुहोस् डाउनलोडर %1$02d मिनेट, %2$02d सेकेन्ड ब्याकअप पहिले नै प्रगतिमा छ नयाँ संस्करण उपलब्ध छ! पोर्ट्रेट फिट उचाइ फिट चौडाइ ट्र्याकर अवैध ब्याकअप फाइल: ब्याकअप सिर्जना गरियो तपाईंले कुनै पनि छुटेको एक्सटेन्शनहरू स्थापना गर्न र तिनीहरूलाई प्रयोग गर्न पछि ट्र्याकिङ सेवाहरूमा लगइन गर्न आवश्यक हुनेछ। रिस्टोर पहिले नै प्रगतिमा छ नेटवर्किङ ब्याकअप रिस्टोर असफल भयो तपाईंले ब्याकअपको प्रतिलिपिहरू अन्य ठाउँहरूमा पनि राख्नु पर्छ। ब्याकअपहरूमा कुनै पनि भण्डारण गरिएका पासवर्डहरू सहित संवेदनशील डेटा समावेश हुन सक्छ; साझा गर्दा होसियार । नयाँ अध्यायहरू फेला पर्यो सबैभन्दा उच्च असक्षम परिष्कृत ट्र्याकरहरू रिस्टोर रद्द गरियो त्रुटि तन्काउनुहोस् स्मार्ट फिट स्वचालित लक गरिएको पोर्ट्रेट अल्फा अध्याय ट्रान्जिसन सधैँ देखाउनुहोस् निलो पढ्दै साइड प्याडिङ कम उच्च सबैभन्दा कम अध्यायहरू हटाउनुहोस् आफै पढिएको रूपमा चिन्ह लगाइएपछि पढिसकेपछि स्वचालित रूपमा हटाउनुहोस् CBZ अभिलेख को रूपमा सेभ गर्नुहोस् अन्तिम पढिएको अध्याय भन्दा ३ अध्याय अघि नयाँ अध्यायहरू डाउनलोड गर्नुहोस् अध्यायहरू %1$s कुनै Wi-Fi जडान उपलब्ध छैन डाउनलोड्स रोकियो कुनै नेटवर्क जडान उपलब्ध छैन बाह्य ट्र्याकर सेवाहरूमा अध्याय प्रगति अपडेट गर्न एकतर्फी सिंक। तिनीहरूको ट्र्याकिङ बटनबाट व्यक्तिगत इन्ट्रीहरूको लागि ट्र्याकिङ सेट अप गर्नुहोस्। ट्र्याकरहरूमा लगइन छैनन्: छुटेको स्रोतहरू: अध्याय cache खाली गर्नुहोस् बहिष्कृत वर्गहरू अन्तिम पढिएको अध्याय भन्दा ४ अध्याय अघि बहिष्कृत गरिएका वर्गको इन्ट्री समावेश गरिएका वर्गमा भए पनि डाउनलोड गरिने छैन। ब्याकअप सिर्जना गर्नुहोस् हालको पुस्तकालय रिस्टोर गर्न प्रयोग गर्न सकिन्छ कुकीहरू खाली गरियो डेटा खाली गर्दा त्रुटि भयो स्थिति डाउनलोड गर्दै… अपडेट स्थापना गर्न ट्याप गर्नुहोस् अप्रत्याशित त्रुटिका कारण अध्याय डाउनलोड गर्न सकिएन अध्याय %1$s मूल आकार जूम सुरु स्थिति एप खोलेमा अध्याय cache खाली गर्नुहोस् राम्रो संगतताको लागि कृपया WebView एप अपडेट गर्नुहोस् नपढेको अध्याय(हरू) सँग ट्याप क्षेत्रहरू पृष्ठांकित स्केल को प्रकार फिट स्क्रिन बायाँ यदि MIUI अप्टिमाइजेसन असक्षम छ भने ब्याकअप/रिस्टोरले राम्ररी काम नगर्न सक्छ। ब्याकअप रिस्टोर गर्दै एक्सटेन्शनहरूको सूची प्राप्त गर्न असफल भयो दायाँ ब्याकअप रिस्टोर गर्नुहोस् ब्याकअप फाइलबाट पुस्तकालय रिस्टोर गर्नुहोस् ब्याकअपमा कुनै पनि पुस्तकालयका इन्ट्री समावेश छैन। स्वचालित ब्याकअप फ्रिक्वेन्सी प्रयोग गरिएको: %1$s Cache खाली गरियो। %1$d फाइलहरू हटाएका छन् अध्याय %1$s र %2$d अरू डाउनलोड त्रुटि एक्सटेन्शन अपडेट्स विकासकर्ताहरूसँग साझेदारी गर्नको लागि फाइलमा error logs सेभ गर्दछ ब्याकग्राउण्ड गतिविधि नयाँ के छ डेटाबेसमा %1$d गैर-पुस्तकालय इन्ट्रीहरू छन् ब्याट्री अप्टिमाइजेसन पहिले नै असक्षम छ केही निर्माताहरूसँग अतिरिक्त एप प्रतिबन्धहरू छन् जसले ब्याकग्राउण्ड सेवाहरूलाई मार्छ। यो वेबसाइटमा यसलाई कसरी ठीक गर्ने बारे थप जानकारी छ। इन्ट्रीहरू हटाइयो ब्याकग्राउण्ड पुस्तकालय अपडेट्स र ब्याकअप संग मद्दत गर्छ सिस्टम log मा verbose logs प्रिन्ट गर्नुहोस् (एपको कार्यसम्पादन घटाउँछ) गोपनीयता नीति इमेल ठेगाना थप परिणामहरू छैनन् लोकल स्रोत अन्य पुस्तकालयबाट ट्याबहरू नवीनतम द्वारा अर्डर गर्नुहोस् मिति %1$s मा लगइन गर्नुहोस् पुस्तकालयका आवरणहरू रिफ्रेस गर्नुहोस् गुप्त मोड असक्षम गर्नुहोस् अज्ञात त्रुटि डाउनलोड गरिएका अध्यायहरू अध्याय फेला परेन तपाईंसँग पिन गरिएको स्रोतहरू छैनन् अवैध अध्याय ढाँचा तपाईंको पुस्तकालयमा सबै इन्ट्री फिल्टर गर्नेछ Crash logs साझा गर्नुहोस् ब्याट्री अप्टिमाइजेसन असक्षम पार्नुहोस् अज्ञात कुनै परिणाम फेला परेन पिन गरिएको ग्लोबल रूपमा \"%1$s\" खोज्नुहोस् अज्ञात लेखक डेटाबेस खाली गर्नुहोस् वर्बोज लगिङ युजरनेम लगइन लगइन हुनुहुन्छ %1$s बाट लग-आउट गर्ने हो? लग-आउट तपाई अब लग-आउट हुनुभएको छ वर्ग अपडेट गर्दै पछिल्लो पटक प्रयोग गरिएको ग्लोबल खोज… लोकल स्रोत गाइड जारी छ अज्ञात स्थिति लाइसेन्स प्राप्त पासवर्ड पुस्तकालयमा नभएका इन्ट्रीको इतिहास हटाउनुहोस् सफा गर्न केही छैन संस्करण वेबसाइट अनुवाद गर्न मद्दत गर्नुहोस् खुला स्रोत लाइसेन्सहरू पुस्तकालयबाट हटाउनुहोस् प्रकाशन सम्पन्न रद्द गरेको अन्तरालमा छ पुस्तकालयमा राख्नुहोस् पुस्तकालयमा राखियो पुस्तकालयमा छ समाप्त पुस्तकालयबाट हटाइयो थप थोरै अध्याय %1$s अध्याय संख्या शीर्षक मूल्याङ्कन सुरु गरेको मिति समाप्त गरेको मिति कुनै पृष्ठहरू फेला परेनन् स्रोत भेटिएन इतिहास हटाइयो के तपाईँ निश्चित हुनुहुन्छ? सबै इतिहास हराउनेछ। पृष्ठहरू लोड हुन असफल भयो: %1$s स्रोत स्थापना गरिएको छैन: %1$s रोकिएको डाउनलोड गर्दै (%1$d/%2$d) अध्याय संख्या द्वारा अपलोड मिति द्वारा स्रोत स्थानान्तरण गाइड स्थानान्तरण गर्नको लागि स्रोत चयन गर्नुहोस् आवरण सेभ गर्दा त्रुटि भयो आवरण मात्र ग्रिड आवरण साझा गर्दा त्रुटि भयो के तपाईँले चयन गर्नुभएको अध्यायहरू हटाउन चाहनुहुन्छ? अध्याय सेटिंग्स पूर्वनिर्धारित रूपमा सेट गर्नुहोस् यो छवि आवरण को रूपमा राख्न चाहनुहुन्छ? यो इन्ट्रीको सबै अध्यायहरू रिसेट गर्नुहोस् नपढिएको आवरण सेभ भयो यस श्रृङ्खलाको लागि पृष्ठहरू लोड हुँदै… समावेश गर्न डेटा चयन गर्नुहोस् अध्याय. %1$s - %2$s प्रतिलिपि क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्: \n%1$s क्लिपबोर्डमा प्रतिलिपि गर्न असफल डाउनलोड गरिएका अध्यायहरू हटाउने हो? जो सुरु भएको छैन आवरण अपडेट भयो %1$s: %2$s, पृष्ठ %3$d इतिहास हटाउनुहोस् पुस्तकालयमा राख्ने? अर्को: पढ्ने मोड सकिएको: पुस्तकालय अपडेट गर्दै के तपाइँ निश्चित रूपमा यी सेटिंग्सलाई पूर्वनिर्धारित रूपमा सेभ गर्न चाहनुहुन्छ? मेरो पुस्तकालयका सबै इन्ट्रीहरूमा पनि लागू गर्नुहोस् अध्यायहरू भेटिएन स्थिति फोटो सेभ गरियो इन्ट्री देखाउनुहोस् नपढिएको रोकिएको अर्को अध्याय छैन आवरण त्रुटि स्रोत शीर्षक स्रोत द्वारा फेरी पढ्दै हालको: कुनै मेल फेला परेन कृपया MAL मा फेरि लगइन गर्नुहोस् स्रोत समर्थित छैन सो नाम गरिएको वर्ग पहिले नै अवस्थित छ! वर्गहरू हटाइयो यसले यस अध्यायको पढेको मिति हटाउनेछ। के तपाईँ निश्चित हुनुहुन्छ? प्रकार अर्को अध्याय भेटिएन पहिलेको: छोडिसकेको होल्डमा छ पढ्ने योजना कस्टम फिल्टर आवरणको रूपमा सेट गर्नुहोस् पृष्ठ: %1$d स्थानान्तरण डाउनलोड अघिल्लो अध्याय छैन थोरै जम्मा गर्ने ठाउँ भएको कारणले अध्याय डाउनलोड हुन सकिँदएन सावधान: ठूलो हिस्सामा डाउनलोड गर्नाले स्रोत ढिलो चल्न अनि/वा %s लाई अवरुद्घ गर्न सक्नेछ। थप जान्नको लागि यहाँ थिच्नुहोस्।। ट्र्याकिङ ट्र्याक गर्नुहोस् पढ्दै कुनै फाइल पिकर एप फेला परेन डाउनलोड गर्नुहोस् अध्याय अपडेट्स श्रृङ्खला पूरा भएकोले छोडियो थप जान्नका लागि ट्याप गर्नुहोस् कुनै नयाँ अपडेट उपलब्ध छैन तपाईंसँग अहिलेसम्म कुनै पनि वर्गहरू छैन। पूर्वनिर्धारित अध्याय सेटिंग्स अपडेट गरियो अर्को पृष्ठ प्रगति पूरा एप अपडेट्स त्रुटिहरू कुनै अध्याय नपढेकाले छोडियो ठूला अपडेटले स्रोतहरूलाई हानि पुर्‍याउँछ र यसले ढिलो अपडेट्स निम्त्याउन सक्छ र ब्याट्रीको प्रयोग पनि बढाउँछ। थप जान्न ट्याप गर्नुहोस्। एप काम गर्नका लागि WebView आवश्यक छ श्रृङ्खलालाई शीर्षमा सर्नुहोस् पोर्ट्रेट उल्ट्याउनु नपढिएका अध्यायहरू भएका कारण छोडियो आवरण छवि चयन गर्नुहोस् ब्याकअप फाइल चयन गर्नुहोस् साधारण अघिल्लो पृष्ठ यो एन्ड्रोइड संस्करण अब समर्थित छैन सुरु गर्ने गाइड चौडा छविहरू प्यान गर्नुहोस् फराकिलो छविहरूमा स्वचालित रूपमा जूम गर्नुहोस् %1$d अपडेट(हरू) असफल भयो असक्षम पुस्तकालय अपडेट त्रुटिहरू कसरी समाधान गर्ने भन्ने बारे मद्दतको लागि, %1$s हेर्नुहोस् नपढिएको संख्या बन्द गर्नुहोस् वर्गहरू, ग्लोबल अपडेट, अध्याय स्वाइप पछिल्लो अपडेट जाँच के तपाई \"%s\" वर्ग हटाउन चाहनु हुन्छ? वर्ग हटाउनुहोस् खोज्नुहोस्… सबै हटाउनुहोस् पढ्ने मोड, प्रदर्शन, नेभिगेसन स्वचालित डाउनलोड, अगाडि डाउनलोड गर्ने स्रोतहरू, एक्सटेन्शनहरू, ग्लोबल खोज ल्याभेन्डर एप को भाषा पढ्दा स्वत: डाउनलोड गर्नुहोस् म्यानुअल र स्वचालित ब्याकअप, भण्डारण स्पेस एप लक, सुरक्षित स्क्रिन थुप्रै अपडेट्स आइकनमा नपढिएको गणना देखाउनुहोस् डुप्लिकेट अध्यायहरू छोड्नुहोस् जारी राख्ने बटन तथ्याङ्क सुरु गरिएको लोकल डाउनलोड गरिएको मापन नगरिएको नेटवर्कमा मात्र अगाडि डाउनलोड गर्नुहोस् थीम, मिति र समय ढाँचा हालको अध्याय + अर्को पहिले नै डाउनलोड गरिएमा मात्र काम गर्दछ। समुन्द्री लहर संस्करण भाषा उमेर मूल्याङ्कन अहिले हैन जुनसुकै इन्ट्री खोल्नुहोस् पढिरहेको सूची पुस्तकालय पछिल्लो पटक अपडेट गरिएको: %s %s एक अप्रत्याशित त्रुटिमा पर्यो। समर्थन को लागि हामी तपाईंलाई हाम्रो Discord को #support च्यानलमा crash logs शेगर गर्न सुझाव दिन्छौं। GitHub मा खोल्नुहोस् डाउनलोड गरिएका अध्यायहरू पुन: जाँच गर्न एपलाई फोर्स गर्नुहोस् एकतर्फी प्रगति सिंक, परिष्कृत सिंक Dump crash logs, battery optimizations तस्वीर बचत गर्न त्रुटि भयो भर्खरै सबै रिडर सेटिंग्स रिसेट गरियो प्रयोग गरिएको ग्लोबल अपडेटमा इन्ट्री ट्र्याकर एप पुन: सुरु गर्नुहोस् ट्र्याक गरिएका इन्ट्रीहरू औसत स्कोर तपाईंको भर्खरै अपडेट गरिएको पुस्तकालय इन्ट्रीहरू हेर्नुहोस् उपलब्ध छ तर स्रोत स्थापना गरिएको छैन: %s क्लिपबोर्डमा प्रतिलिपि गरियो यस वर्गमा कुनै इन्ट्रीहरू फेला परेनन् अज्ञात शीर्षक अवैध स्थान: %s भण्डारण अनुमतिहरू प्रदान गरिएको छैन WebView डेटा खाली गर्नुहोस् F-Droid निर्माणहरू आधिकारिक रूपमा समर्थित छैनन्। \nथप जान्न ट्याप गर्नुहोस्। उफ्! पढेको अवधि रिडर सेटिंग्स रिसेट गर्न सकिएन WebView डेटा खाली गरियो समाप्त सूची होल्ड सूची अधूरो सूची कुनै स्थापित स्रोत फेला परेन पृष्ठ %d को फाइल मार्ग फेला पार्न सकेन कस्टम आवरण इच्छा सूची लोकप्रिय रिडर कार्यसम्पादन सुधार गर्दछ प्रति-श्रृङ्खला रिडर सेटिंग्स रिसेट गर्नुहोस् मिति हटाउने हो? यसले %s बाट तपाइँको पहिले चयन गरिएको सुरु मिति हटाउनेछ यसले %s बाट तपाइँको पहिले चयन गरिएको समाप्त मिति हटाउनेछ एउटा अपडेट पहिले नै जारी छ ल, यो के भयो स्थापना गरिएको छैन पढ्ने मोड र सबै श्रृङ्खलाहरूको अभिमुखीकरण रिसेट गर्दछ के तपाईँ निश्चित हुनुहुन्छ? पृष्ठ विभाजन गर्दा %d फेला परेन वर्ग खाली छ आन्तरिक त्रुटि: थप जानकारीको लागि Crash logs जाँच गर्नुहोस् पढिसकेका इन्ट्रीहरू कुल पढेको डाउनलोड्स जाँच गर्दै कुनै वर्णन छैन एप लक सक्षम हुँदा विजेट उपलब्ध छैन ब्याकअप गर्न कुनै पुस्तकालय इन्ट्रीहरू छैनन् %1$s त्रुटि: %2$s अन्तिम पढिएको अध्याय खोल्न असमर्थ भयो कुनै स्रोत फेला परेन अवलोकन N/A श्रृङ्खलालाई अपडेट आवश्यक नपर्ने भएकोले छोडियो *आवश्यक तपाईं आफ्नो पुस्तकालयबाट \"%s\" हटाउन लाग्दै हुनुहुन्छ User agent string खाली हुन सक्दैन पूर्वनिर्धारित user agent string रिसेट गर्नुहोस् %dसे %dमि पहिले नै पुस्तकालयमा रहेका इन्ट्रीहरू लुकाउनुहोस् क्लिपबोर्डमा प्रतिलिपि गर्नुहोस् Reindex डाउनलोड्स पूर्वनिर्धारित user agent string अवैध user agent string %dदि %dघ वर्ग अपडेट गर्नुहोस् अग्लो छविहरू विभाजित गर्नुहोस् ओभरले फिट गर्न चौडा पृष्ठहरू घुमाउनुहोस् घुमाइएका चौडा पृष्ठहरूको अभिमुखीकरण फ्लिप गर्नुहोस् Debug जानकारी दायाँतिर स्वाइप गर्ने अध्याय बायाँतिर स्वाइप गर्ने अध्याय जूम गर्न डबल ट्याप गर्नुहोस् अन्तराल सेट गर्नुहोस् कस्टम गरिएको अपडेट फ्रिक्वेन्सी प्रत्येक अपडेट गर्न सेट गर्नुहोस् छोडियो किनभने आज कुनै रिलीज अपेक्षित थिएन अन्तरालहरू अर्को अपेक्षित अपडेट अपेक्षित रिलीज अवधि बाहिर प्रत्येक अनुमान लगाउनुहोस् %s ट्र्याकिङ हटाउने हो? %s बाट पनि हटाउनुहोस् यसले लोकल रूपमा ट्र्याकिङ हटाउनेछ। ठिक छ डाउनलोड गरिएको हटाउनुहोस् परिणामहरू भएको पुस्तकालय सिंक सम्पन्न भयो पुस्तकालय सिंक गर्दै डाउनलोड इन्डेक्स अवैध भयो Cloudflare सम्बन्धित मद्दतको लागि यहाँ ट्याप गर्नुहोस् ट्र्याकर लगइन ब्याकअप फाइल सिर्जना गर्न असफल भयो इन्टरनेट जडान छैन %s मा पुग्न सकिएन HTTP %d, WebView मा वेबसाइट जाँच गर्नुहोस् अनलक %s श्रृङ्खलालाई तल सार्नुहोस् पुस्तकालय अपडेट गर्दै... (%s) स्रोत सेटिंग्स एप सेटिंग्स सापेक्ष टाइमस्ट्याम्पहरू \"%2$s\" को सट्टा \"%1$s\" कहिले पनि होइन ई-इंक स्क्रिनहरूमा गोस्टिङ घटाउँछ पछिल्लो पटक स्वचालित ब्याकअप गरिएको: %s पृष्ठ बदलिँदा स्क्रिनमा सेतो फ्ल्यास हुन्छ डेटा र भण्डारण फाइल पिकर एपमा फाइल फर्काउन असफल भयो चयन गरिएको चयन नगरिएको ट्र्याकर मूल्याङ्कन स्क्यानलेटर अरु मेनु स्वागत छ! अर्को सुरु छोड एउटा फोल्डर चयन गर्नुपर्छ भण्डारण गाइड सूचना अनुमति प्रदान गर्नुहोस् %s मा नयाँ हुनुहुन्छ? हामी स्टार्टिङ गाइड जाँच गर्न सिफारिस गर्छौं। नोर्ड स्मार्ट अपडेट यो रिपो पहिले नै अवस्थित छ! रिपो हटाउनुहोस् रिपो URL अवैध छ माथि नेभिगेट गर्नुहोस् पूर्वनिर्धारितमा फर्कनुहोस् अनबोर्डिङ गाइड पहिले केहि चीजहरू सेट गरौं। तपाईं पछि पनि सेटिंग्समा गएर यसलाई परिवर्तन गर्न सक्नुहुन्छ। एउटा फोल्डर चयन गर्नुहोस् जहाँ %1$s ले अध्याय डाउनलोड, ब्याकअप, र थप भण्डारण गर्नेछ। \n \nएक समर्पित फोल्डर सिफारिस गरिएको छ। \n \nचयन गरिएको फोल्डर: %2$s फोल्डर चयन गर्नुहोस् एप स्थापना गर्ने अनुमति स्रोत एक्सटेन्शन स्थापना गर्न को लागि। पुस्तकालय अपडेट्स र थपका लागि सूचना प्राप्त गर्नुहोस्। लामो समयदेखि चलिरहेको पुस्तकालय अपडेट्स, डाउनलोड्स, र ब्याकअप रिस्टोरमा अवरोधहरू बेवास्ता गर्नुहोस्। पुरानो संस्करणबाट अपडेट गर्दै र के चयन गर्ने निश्चित छैन? थप जानकारीको लागि भण्डारण गाइड हेर्नुहोस्। ब्याकग्राउण्ड ब्याट्री प्रयोग %s पुन: स्थापना गर्दै हुनुहुन्छ? एक्सटेन्शनहरू स्थापना गर्न अनुमति आवश्यक छ। प्रदान गर्न यहाँ ट्याप गर्नुहोस्। विश्वसनीय अज्ञात एक्सटेन्शनहरू रद्द गर्नुहोस् तपाईंले कुनै पनि रिपो सेट गर्नु भएको छैन। रिपो URL एक्सटेन्शन रिपो रिपो थप्नुहोस् %s मा अतिरिक्त रिपो थप्नुहोस्। URL को अन्त्यमा \"index.min.json\" हुनुपर्छ। अप्लाई के तपाइँ रिपो \"%s\" हटाउन चाहनुहुन्छ? खुला स्रोत रिपो भण्डारण स्थान उपलब्ध: %1$s / कुल: %2$s नयाँ अध्यायहरू लगभग %1$s मा रिलीज हुने भविष्यवाणी गरिएको छ, हरेक %2$s को वरिपरि जाँच गर्दै। छिटै कस्टम अपडेट फ्रिक्वेन्सी: स्क्यानलेटर समावेश नगर्नुहोस् कुनै स्क्यानलेटर फेला परेन भण्डारण प्रयोग कुनै भण्डारण स्थान सेट गरिएको छैन स्वचालित ब्याकअप, अध्याय डाउनलोड, र स्थानीय स्रोतको लागि प्रयोग गरिन्छ। सिर्जना गर्नुहोस् पूर्ण त्रुटि: संवेदनशील सेटिंग्स समावेश गर्नुहोस् (जस्तै, ट्र्याकर लगइन टोकनहरू) जूम आउट असक्षम गर्नुहोस् जे भए पनि थप्नुहोस् कस्टम प्रदर्शन प्रोफाइल रिप्लेस साइन गर्ने की फिंगरप्रिन्ट पहिले नै अवस्थित छ रिपो %1$s सँग %2$s जस्तै साइन गर्ने की फिंगरप्रिन्ट छ। \nयदि यो अपेक्षित छ भने, %2$s प्रतिस्थापन गरिनेछ, अन्यथा आफ्नो रिपो प्रबन्धकलाई सम्पर्क गर्नुहोस्। आगामी आगामी अपडेट्स हेर्नुहोस् आगामी गाइड अर्को महिना अघिल्लो महिना लगातार फोल्डर पहुँच प्राप्त गर्न असफल। एपले अप्रत्याशित रूपमा व्यवहार गर्न सक्छ। फ्ल्यास अवधि सेतो सेतो र कालो सँग फ्ल्यास %1$s ms फ्ल्यास हरेक कालो यो माङ्गा या त समाप्त भयो, वा त्यहाँ कुनै अनुमानित रिलीज मिति छैन। एक्सटेन्शन रिपो JSON ब्याकअप समर्थित छैन ब्याकअप फाइल बिग्रिएको छ लिङ्क प्रतिलिपि गर्नुहोस् के तपाइँ \"%s\" रिपो थप्न चाहनुहुन्छ? पढेका डुप्लिकेट अध्यायहरू डाउनलोड गर्न छोड्नुहोस् ट्र्याकरहरूलाई अध्याय %d मा अपडेट गर्ने हो? ऱ्याण्डम Crash logs पठाउनुहोस् Analytics र Crash logs Crash logs र Analytics पठाउँदा हामीलाई समस्याहरू पहिचान र समाधान गर्न, कार्यसम्पादन सुधार गर्न, र भविष्यका अपडेट्समा तपाईंको आवश्यकताहरूसँग थप सान्दर्भिक बनाउन अनुमति दिनेछ अनुप्रयोग सुविधाहरू सुधार गर्न बेनामी उपयोग डेटा पठाउनुहोस्। सबै पढेको इन्ट्री Analytics लाई अनुमति दिनुहोस् सुरक्षा विकासकर्ताहरूलाई अज्ञात Crash logs पठाउनुहोस्। हटाउनुहोस् एक्सटेन्शन हटाउने हो? के तपाई साँच्चै \"%s\" एक्सटेन्शन हटाउन चाहनुहुन्छ? पढिएको भनी चिन्ह लगाउँदा प्रगति अपडेट गर्नुहोस् ट्र्याकरहरू अध्याय %d मा अपडेट गरियो पूर्वनिर्धारित (%d) यदि पाठकले खाली छवि लोड गर्छ भने क्रमशः threshold घटाउनुहोस्।\nचयन गरिएको: %s Custom hardware bitmap threshold कार्यसम्पादनमा असर गर्छ। Bitmap threshold घटाउँदा खाली छवि समस्याहरू समाधान गर्दैन भने मात्र सक्षम गर्नुहोस् एक्सटेन्शनमा पढिएको इतिहास रोक्नुहोस् अटो लामो स्ट्रिप रिडरको लागि लिगेसी डिकोडर प्रयोग गर्नुहोस् पढिएको अध्यायको डुप्लिकेटलाई पढिएको रूपमा चिन्ह लगाउनुहोस् मोनोक्रोम निजी रूपमा ट्र्याक गर्नुहोस् सार्वजनिक रूपमा ट्र्याक गरिएको निर्यात पुस्तकालय सूची पुस्तकालय निर्यात गरियो लेखक कलाकार निजी रूपमा ट्र्याक गरियो आचरण अध्याय पढे पछि नयाँ अध्याय ल्याएपछि स्रोतसँग मिल्ने गरी पुस्तकालयका माङ्गा शीर्षकहरू अपडेट गर्नुहोस् चेतावनी: यदि माङ्गाको नाम परिवर्तन गरियो भने, यसलाई डाउनलोड सूचीबाट हटाइनेछ (यदि अवस्थित छ भने)। लग इन गर्दै… नोट नोट सम्पादन गर्नुहोस् नपढिएका अध्यायहरू पुस्तकालयमा नभएका इन्ट्रीहरूको \"तपाईंले पढ्नुभएको अध्यायहरू र प्रगति\" हराउनेछ अध्याय पढिएका इन्ट्रीहरू राख्नुहोस् सम्भावित डुप्लिकेटहरू त्यो भाग मन पर्यो जहाँ… Directory सिर्जना गर्न असफल भयो: %s तपाईंको पुस्तकालयमा उस्तै नामका इन्ट्रीहरू छन्।\n\nस्थानान्तरण गर्न वा जे भए पनि थप्नको लागि इन्ट्री चयन गर्नुहोस्। तपाईं डाटाबेसबाट इन्ट्रीहरू हटाउन लाग्दै हुनुहुन्छ डाउनलोड directory सिर्जना गर्न असफल भयो दान कात्पुचिन mangaको विवरणहरूमा तस्वीर देखाउनुहोस नभएको अध्यायहरु लुकौनुहोस टिपेको उपलब्ध सबै तिप्नुहोस कुनै पनि नतिप्नुहोस सक्षम स्रोतहरू तिप्नुहोस पिन गरिएको स्रोतहरू तिप्नुहोस जारी माइग्रेट गर्नुपर्ने डाटा ट्याब बन्द गर्नुहोस् गैर-ASCII फाइल नामहरूलाई अनुमति नदिनुहोस् समवर्ती स्रोत डाउनलोडहरू समवर्ती पृष्ठ डाउनलोडहरू प्रत्येक स्रोतबाट एकैसाथ डाउनलोड गरिने पृष्ठहरूको संख्या स्थानान्तरण पछि हालको इन्ट्रीका डाउनलोडहरू मेटाउनुहोस् थप किवर्डहरू (वैकल्पिक) थप किवर्डहरू थपेर खोज परिणामहरूलाई संकुचित गर्न मद्दत गर्दछ मिल्दो परिणाम नभएको इन्ट्रीहरू लुकाउनुहोस् नयाँ अध्याय नभएका इन्ट्रीहरू लुकाउनुहोस् मिल्दो इन्ट्रीमा थप अध्यायहरू भए मात्र इन्ट्री देखाउनुहोस् उन्नत खोज मोड फराकिलो खोजको लागि शीर्षकलाई किवर्डहरूमा विभाजन गर्दछ स्थानान्तरण स्थानान्तरण (%1$d/%2$d) प्रतिलिपि गर्नुहोस् स्थानान्तरण कुनै विकल्प भेटिएन नवीनतम: %1$s अज्ञात आफै खोज्नुहोस् स्थानान्तरण नगर्नुहोस् अहिले स्थानान्तरण गर्नुहोस् अहिले प्रतिलिपि गर्नुहोस् स्थानान्तरण रोक्न चाहनुहुन्छ? रोक्नुहोस् रद्द गर्नुहोस् प्रतिलिपि गर्नुहोस् कुनै अध्यायहरू फेला परेनन्, यो इन्ट्री स्थानान्तरणका लागि प्रयोग गर्न सकिँदैन ================================================ FILE: i18n/src/commonMain/moko-resources/nl/plurals.xml ================================================ Na %1$s minuut Na %1$s minuten Extensie-update beschikbaar %d extensie-updates beschikbaar Hoofdstukken %1$s en 1 meer Hoofdstukken %1$s en %2$d meer %1$d nieuw hoofdstuk %1$d nieuwe hoofdstukken Voor %d titel Voor %d titels %1$s resterend %1$s resterende Voltooid in %1$s met %2$s foutmelding Voltooid in %1$s met %2$s foutmeldingen %d categorie %d categorieën %1$s hoofdstuk %1$s hoofdstukken %d tracker %d trackers %d hoofdstuk is overgeslagen, de bron mist of het is uitgefilterd %d hoofdstukken zijn overgeslagen, de bron mist ze of ze zijn uitgefilterd Gisteren %1$d dagen geleden Volgend ongelezen hoofdstuk Volgende %d ongelezen hoofdstukken Volgend hoofdstuk Volgende %d hoofdstukken 1 dag %d dagen %1$s hoofdstuk mist %1$s hoofdstukken missen Morgen Over %1$d dagen 1 pagina %1$s pagina\'s %d repo %d repo\'s %1$d item migreren? %1$d items migreren? %1$d item kopiëren? %1$d items kopiëren? Een item werd overgeslagen %1$d items werden overgeslagen ================================================ FILE: i18n/src/commonMain/moko-resources/nl/strings.xml ================================================ Naam Categorieën Bibliotheek Hoofdstukken Tracking Geschiedenis Instellingen Bibliotheek Geschiedenis Back-up en herstel Instellingen Filter Ongelezen Verwijder filter Alfabetisch Laatst gelezen Zoeken Alles selecteren Als gelezen markeren Als ongelezen markeren Markeer vorige als gelezen Downloaden Hoofdstuk toevoegen aan bladwijzers Hoofdstuk verwijderen uit bladwijzers Verwijderen Bewerken Toevoegen Categorie toevoegen Categorieën bewerken Categorie hernoemen Zet categorieën Omslag wijzigen Pauzeren Vorige hoofdstuk Volgende hoofdstuk Downloadwachtrij Bibliotheek bijwerken Opnieuw proberen Verwijderen Hervatten Openen in browser Weergavemodus Weergave Compact raster Lijst Annuleren Sorteren Installeren Delen Opslaan Opnieuw instellen Ongedaan maken Open log Herstellen Laden… Algemeen Lezer Downloads Tracking Geavanceerd Elementen per rij Automatisch bijwerken Uit Iedere 6 uur Iedere 12 uur Dagelijks Iedere 2 dagen Wekelijks Alles Standaard categorie Altijd vragen Volledig scherm Animeer pagina-overgangen Toon paginanummer Randen bijsnijden Aangepaste helderheid Aangepast kleurfilter Volumeknoppen Achtergrondkleur Wit Zwart Standaard leesmodus Links naar rechts Rechts naar links Verticaal Lange strip Uitrekken Breedtevullend Hoogtevullend Oorspronkelijke grootte Intelligent aanpassen Automatisch Links Rechts Midden Standaardoriëntatie Vrij Rood Groen Blauw Alfa Laatst gelezen hoofdstuk Een-na-laatste gelezen hoofdstuk Twee-na-laatste gelezen hoofdstuk Download nieuwe hoofdstukken Trackers Back-up maken Kan worden gebruikt om de huidige bibliotheek te herstellen Back-up herstellen Herstellen van back-up bestand Frequentie van automatische back-ups Back-up gemaakt Herstellen voltooid Wat wil je back-uppen? Back-up aan het herstellen Back-up aan het maken Gebruikt: %1$s Verwijder cookies Cookies verwijdered Versie Log in op %1$s Gebruikersnaam Wachtwoord Log in Onbekende fout Categorie bijwerken Geen verdere resultaten Lokale bron Onbekend Verwijderen uit bibliotheek Hoofdstuk %1$s Aan het downloaden (%1$d/%2$d) Fout Gepauzeerd Brontitel Hoofdstuknummer Op bron Op hoofdstuknummer Downloaden Ongelezen Weet je zeker dat je de geselecteerde hoofdstukken wilt verwijderen? Tracking Voltooid Score Titel Status Er bestaat al een categorie met deze naam! Categorieën verwijderd Stel alle hoofdstukken voor dit item opnieuw in Toevoegen aan bibliotheek? Afbeelding opgeslagen Aangepast filter Instellen als omslagfoto Omslagfoto bijgewerkt Pagina: %1$d Volgend hoofdstuk niet gevonden Deze afbeelding als omslagfoto gebruiken? Nieuwe hoofdstukken gevonden Voeg het item eerst aan je bibliotheek toe voordat je dit doet Selecteer omslagfoto Selecteer back-upbestand Download Geen nieuwe updates beschikbaar Download voltooid Nieuwe versie beschikbaar! Geen downloads Geen recente updates Je bibliotheek is leeg Er zijn nog geen categorieën. Druk op de plus-knop om er een aan te maken. Downloader Fout Geen Wi-Fi-verbinding beschikbaar Geen netwerkverbinding beschikbaar Download gepauzeerd Updates Aantal hoofdstukken App niet beschikbaar Over Staand Liggend Aan het opladen Navigatie Draai volumeknoppen om Schaalmodus Aanpassen aan scherm Zoom startpositie Vergrendeld staand Vergrendeld liggend Nadat ze handmatig gemarkeerd zijn als gelezen Automatisch verwijderen na het lezen Uitgeschakeld Drie-na-laatste gelezen hoofdstuk Vier-na-laatste gelezen hoofdstuk Leeg hoofdstukkencache Cache geleegd. %1$d bestanden zijn verwijderd Fout opgetreden tijdens het wissen Database leegmaken Verwijder geschiedenis voor items die niet in je bibliotheek zijn opgeslagen Rapporteer bugs Helpt bij het oplossen van bugs. Er wordt geen gevoelige data verzonden Niks recent gelezen Kon dit hoofdstuk niet downloaden door een onverwachte fout Toestel beperkingen voor automatisch bijwerken Gelezen series Voortgang bijwerken na lezen Scherm aanhouden Database geleegd Lopend Verwijder gedownloade hoofdstukken? Aan het lezen Opgegeven Gepauzeerd Dit verwijdert de datum waarop het hoofdstuk is gelezen. Weet je het zeker? De afbeelding kon niet worden geladen Kon hoofdstukken niet downloaden. Je kan het opnieuw proberen in het downloadscherm Updaten van omslag mislukt Downloaden… Fout bij het downloaden Met bladwijzer Ingelogd Gelicenseerd Van plan te lezen Globaal zoeken Gedownloade hoofdstukken Anders Globaal zoeken… Nieuwste Bladeren Algemeen Migreren Extensies Informatie over extensie Bijwerken Installeren Aan het afwachten Aan het downloaden Aan het installeren Geïnstalleerd Vertrouwen Niet vertrouwd Verwijderen Niet vertrouwde extensie Kwaadaardige extensies kunnen alle opgeslagen inloggegevens uitlezen of arbitraire code uitvoeren. \n \nDoor deze extensie te vertrouwen accepteer je deze risico\'s. Dubbeltik animatiesnelheid Weergeven bij lang tikken Gepagineerd Geen animatie Normaal Snel Toegevoegd aan bibliotheek Verwijderd uit bibliotheek Gekopieerd naar het klembord: \n%1$s Bron niet geïnstalleerd: %1$s Opnieuw aan het lezen Status Soort Afgerond: Huidige: Volgende: Vorige: Er is geen volgend hoofdstuk Er is geen vorig hoofdstuk Pagina\'s aan het laden… Fout bij het laden van pagina\'s : %1$s Selecteer data om mee te nemen Migreren Kopiëren Openen in WebView Gelezen hoofdstukken overslaan Overlay Vermenigvuldigen Bleken Help Mengmodus kleurfilter Tegenhouden / Lichter Doordrukken / Donkerder Geen resultaten gevonden Selecteer een bron om uit te migreren Terugkeren Vooruit Vernieuwen Bibliotheek Verouderd Deze extensie is niet meer beschikbaar. Mogelijk zal deze niet meer naar behoren functioneren en kan problemen binnen de app veroorzaken. Het wordt aangeraden de extensie te verwijderen. Datumformaat Globaal bijwerken Uitloggen bij %1$s? Uitloggen U bent nu uitgelogd Gepauzeerd Meer Laatste hoofdstuk Hoofdstukken bekijken Alles annuleren Uit Aan Volg systeeminstelling Meldingen beheren Beveiliging en privacy Vereis ontgrendeling Vergrendelen indien niet in gebruik Altijd Nooit Scherm beveiligen Updates in de wachtrij Kon Cloudflare niet omzeilen Gelieve de WebView-app bij te werken voor betere compatibiliteit Hoofdstukupdates Veilig scherm modus verbergt de inhoud van de app bij het wisselen en blokkeert schermafbeeldingen Weergave Verplaats naar beneden Oudste Nieuwste Menu Vastpinnen Bronnen Selectie omkeren Herstellen geannuleerd Herstellen mislukt Er wordt al een back-up hersteld Extensie-updates WebView is vereist voor Mihon Hoofdstukken %1$s Hoofdstuk %1$s en %2$d meer Hoofdstuk %1$s Hfst. %1$s - %2$s Bibliotheek bijwerken Tracking toevoegen Minder Meer In bibliotheek Toevoegen aan bibliotheek Hulp bij lokale bronnen Vastgepind Laatst gebruikt E-mailadres Filtert alle items in de bibliotheek Alleen gedownloade Controleer op updates Open-sourcelicenties Website Batterijoptimalisatie is al uitgeschakeld Helpt bij het bijwerken van bibliotheek en back-ups op de achtergrond Batterijoptimalisatie uitzetten Back-up mislukt Er wordt al een back-up gemaakt %1$02d min, %2$02d sec Lezen Hoofdstukovergangen altijd weergeven Lange strip met gaten Gefilterde hoofdstukken overslaan Inhoud in uitgesneden gebied laten zien Meldingsinhoud verbergen Verplaats naar top Lospinnen Leesmodus Voor deze serie Kon de apparaatinstellingen niet openen Opvulling zijkant Grijs Omslagen van manga in bibliotheek bijwerken Eenzijdige synchronisatie om voortang van hoofdstukken bij te werken bij externe trackerdiensten. Stel tracking in bij individuele items via de \"Tracking\"-knop. Controleer bij het bijwerken van de bibliotheek op nieuwe omslag en details Bron niet gevonden Geen pagina\'s gevonden Op uploaddatum Tabbladen Data Missende bronnen: Back-up bevat geen items. Ongeldig back-upbestand: Laat huidige modus kort zien als lezer geopend wordt Toon leesmodus Metadata automatisch bijwerken Uitzetten Toon categorietabbladen Comfortabel raster Migreren Beginnen Alles uitzetten Alles aanzetten Herstart van de app nodig om van kracht te worden Netwerken Beiden Verticaal Horizontaal Niet omkeren Tikken omkeren Onbekende status Onbekende auteur Kon hoofdstukken niet downloaden omdat er te weinig opslagruimte is Overal zoeken naar \"%1$s\" Bijgewerkt naar v%1$s Wat is er nieuw Leesmodus Thema Datum toegevoegd Je hebt geen vastgepinde bronnen Voltooid Voortgang Fouten Niet-ingelogde trackers: Verwijderen van hoofdstukken met bladwijzers toestaan Hoofdstukken verwijderen Kan NSFW-inhoud (18+) bevatten 18+ Dit voorkomt niet dat onofficiële of mogelijk incorrect gemarkeerde extensies NSFW-inhoud (18+) kunnen laten zien in de app. Geen hoofdstukken gevonden Standaard hoofdstukinstellingen bijgewerkt Instellen als standaard Ook toepassen op alle items in mijn bibliotheek Weet je zeker dat je deze instellingen als standaardinstellingen wilt opslaan? Hoofdstukinstellingen %1$s: %2$s, pagina %3$d Zoekinstellingen Gedownloade hoofdstukken Uit de bibliotheek Pauzeert leesgeschiedenis Incognitomodus Geschiedenis wissen Weet je dit zeker? Alle geschiedenis zal verloren gaan. Geschiedenis verwijderd Volgende pagina Vorige pagina Bronmigratiegids NSFW-bronnen (18+) Geen bestandskiezer-app gevonden Log alstublieft opnieuw in op MAL Weergeven in bronnen- en extensielijst Navigatie-indeling Rand Kindle-achtig L-vormig Einddatum Begindatum Slaat foutmeldingslogboeken op in een bestand om te delen met de ontwikkelaars Crashlogboeken opslaan Aflopend Oplopend Op hoofdstuknummer Op uploaddatum Aantal items tonen Getracked Rechts en links Brede pagina\'s opsplitsen Je zal mogelijk missende extensies opnieuw moeten installeren en opnieuw moeten inloggen bij trackingdiensten om deze weer te gebruiken. Rechts Links Volgende Vorige Als de paginasplitsing in de breedte niet overeenkomt met de leesrichting paginasplitsing omkeren Laat de tikzones zien als de lezer wordt geopend Navigatielayout als overlay laten zien DNS over HTTPS (DoH) Items in uitgezonderde categorieën worden niet gedownload, zelfs niet als ze onder opgenomen categorieën vallen. Automatisch downloaden Uitgezonderd: %s Inbegrepen: %s Items in uitgesloten categorieën worden niet bijgewerkt, zelfs niet als ze onder opgenomen categorieën vallen. Datum opgehaald Geen Klik om details te weergeven Deze Android versie wordt niet meer ondersteund Mislukt om naar het klemboord te kopiëren Incognitomodus uitschakelen Liggend Staand Oriëntatie Automatisch Mappen aanmaken op basis van titel Pagina\'s opslaan in aparte mappen Acties Grijstinten Alles annuleren voor deze serie Geen overeenkomst gevonden Bron wordt niet ondersteund Ongelezen Datum Sorteer op Hoofdstuk niet gevonden Beperkingen: %s Fout bij delen van omslag Fout bij opslaan van omslag Omslag opgeslagen Omslag Ongeldig hoofstukkenformaat Trackinghandleiding Uit Aan Instellingen per categorie voor sorteren en weergeven Lokale bron Er zijn nog geen categorieën. Begin nu met downloaden Sommige fabrikanten hebben extra beperkingen op apps die achtergronddiensten uitschakelen. Informatie over hoe je dit kan oplossen kan je vinden op de deze website. Backup/herstellen werkt waarschijnlijk niet goed als de MIUI Optimalisatie is uitgeschakeld. Puur-zwarte donkere modus Yotsuba Yin & Yang Tako Aardbeien Daiquiri Nachtschemering Groene Appel Appthema Bieden uitgebreidere functionaliteit voor bepaalde bronnen. Het tracken van items gebeurt automatisch wanneer je deze toevoegt aan je bibliotheek. Verbeterde trackers Dynamisch Gids voor beginners Help met vertalen Tablet UI Achtergrond activiteit Volg Uitgesloten categoriën Laagste Laag Hoog Hoogste Sensitiviteit voor het verbergen van het menu tijdens scrollen Omgekeerd Vandaag Blauwgroen & Turkoois Uiterlijk Authenticeer om de wijziging te bevestigen Standaard App-informatie Extensies installeren… Taal Waarschuwing Verouderd Shizuku wordt niet uitgevoerd Installatieprogramma Je zou kopies van back-ups ook in andere plaatsen moeten hebben. Back-ups kunnen gevoelige data zoals opgeslagen wachtwoorden bevatten; let op met delen. Alleen via Wi-Fi Uitgebreide logging Waarschuwing: grote updates beschadigen bronnen en kunnen leiden tot tragere updates en verhoogd batterijgebruik. Tik om meer te leren. Installeer en start Shizuku om deze als extensie-installatieprogramma te gebruiken. Totaal aantal items Houd uitgebreide logs bij in de systeemlogs (verslechterd de werking van de app) App updates Waarschuwing: grote bulk downloads kunnen leiden tot bronnen die trager werken en/of %s blokkeren. Tik om meer te leren. Alles updaten Iedere 3 dagen Voor hulp bij het oplossen van fouten bij het bijwerken van de bibliotheek, zie %1$s Niks om te wissen Privacybeleid %1$d items niet in de bibliotheek in database Opslaan als CBZ archief Hoofdstuk cache leegmaken na het sluiten van de app Heeft ongelezen hoofdstukken Lijst met extensies ophalen mislukt Uitgave voltooid Geannuleerd Gepauzeerd %1$d update(s) mislukt Kom meer te weten Overgeslagen want er zijn geen ongelezen hoofdstukken Overgeslagen want er zijn geen gelezen hoofdstukken Zoom liggende afbeelding Tik om door brede afbeeldingen te scrollen Laat item zien Alleen-cover rooster Omgedraaid portret-modus Breng serie naar boven Geen gelezen hoofdstukken Overgeslagen want de serie is af Verbetert de prestaties van de lezer Volledige lijst Onvoltooide lijst Download vooruit WebView-gegevens gewist WebView-gegevens wissen Pagina %d niet gevonden tijdens het splitsen InternalError: Bekijk de crash logs voor meer informatie Lavendel Laatst gecontroleerd op updates Alles verwijderen Wenst u categorie \"%s\" te verwijderen? Categorie verwijderen Sluiten Vloedgolf Uitgeschakeld Alleen op ongelimiteerd netwerk Automatisch downloaden tijdens het lezen Taal Meerdere Classificatie per leeftijd Versie Taal van de applicatie Geen bibliotheek inzendingen om te backuppen Ongelezen aantal Werkt alleen als het huidige hoofdstuk en het volgende alreeds gedownload zijn. Standaard \'user-agent-string\' Zoek… Opslag bevoegdheden niet verleent Knop om lezen te hervatten weergeven Statistieken Gestart Lokaal Gedownload Niet nu Willekeurige openen Thema, datum- en tijdnotatie Categorieën, globaal bijwerken Leesmodus, weergave, navigatie Automatische downloads, vooraf downloaden Bronnen, extensies, globaal zoeken Handmatige & automatische back-ups, opslagruimte App-vergrendeling, schermbeveiliging Alle leesinstellingen teruggezet naar de standaardwaarden Kon leesinstellingen niet terugzetten naar standaardwaarden Populair Downloads worden gecontroleerd F-Droid versies worden niet officieel ondersteund. \nTik hier voor meer informatie. Dubbele hoofdstukken overslaan Weet je het zeker? Leeslijst Geen beschrijving Zet de instellingen voor de leesmodus en het draaitype terug naar de standaardwaarden voor alle series Ongeldige user agent Onbekende titel Wachtlijst Widget niet beschikbaar wanneer app-vergrendeling aan staat Beschikbaar maar bron niet geïnstalleerd: %s User agent mag niet leeg zijn Leesinstellingen voor alle series terugzetten naar standaardwaarde Hercontrole van gedownloade hoofdstukken forceren Naar klembord gekopieerd Recentelijk bijgewerkte items in de bibliotheek bekijken %1$s-fout: %2$s User agent terugzetten naar standaardwaarde Datum verwijderen? Verlanglijst Aangepaste omslag Ongeldige locatie: %s Crashlogboeken opslaan, batterijoptimalisaties Categorie bijwerken Laatste update bibliotheek: %s Toon aantal ongelezen op updates icon Geen geïnstalleerde bron gevonden Niet geïnstalleerd Verberg manga die al in de bibliotheek staat Er is al een update bezig Kopiëren naar klembord Net nu Fout bij opslaan afbeelding Nou, dit is ongemakkelijk Niet mogelijk om het laatst gelezen hoofdstuk te openen Geen bron gevonden Oops! 1-directie voortgang sync Dit gaat je eerder geselcteerde startdatum %s verwijderen Download verwijderen Overgeslagen omdat deze serie geen updates vereist %s is een onverwachte fout tegengekomen. We raden u aan de crashlogboeken te delen in ons ondersteuningskanaal op Discord. Foutopsporingsinformatie Voltooide titels Buiten verwachte vrijgave periode Interval instellen Aangepast ophaalinterval Volgende verwachte update Splits hoge afbeeldingen Draairichting van geroteerde brede pagina\'s omdraaien Dubbeltik om te zoomen Tracker login Bibliotheek synchroniseren Heeft resultaten Dit zal jouw eerder geselecteerde einddatum weg halen van %s Dit zal de tracking lokaal verwijderen. Haal ook weg van %s Overlay Overzicht Leesduur Schat elke Herstart de applicatie Download Index geïnvalideerd Herindexeer downloads OK Hoofdstuk bij links vegen Intervallen Haal %s tracking weg? Ontgrendel %s Hoofdstuk bij rechts vegen Roteer brede pagina\'s zodat ze passen Kon een backup-bestand niet creëren Bibliotheeksynchronisatie beëindigd Trackers Overgeslagen omdat geen uitgave is verwacht vandaag *vereist Totaal Lees Gevolgde titels Gemiddelde score %du U staat op het punt om \"%s\" te verwijderen uit uw bibliotheek %ds Kon bestandspad van pagina %d niet vinden Titels Open op GitHub Geen titels gevonden in deze categorie Geen internet verbinding Kon niet %s bereiken Gebruikt N.v.t Stel in om te updaten iedere Tik hier voor hulp met Cloudflare %dd Category is leeg %dm HTTP %d, check website in WebView In globale update Nooit Vermindert ghosting bij e-ink schermen Voor het laatst een automatische back-up gemaakt op: %s Breng serie naar beneden Scherm wit flitsen bij het wisselen van pagina\'s Opslaggebruik Bibliotheek bijwerken... (%s) Data en opslag Bestandskiezer gaf geen bestand terug aan de app Bron-instellingen App-instellingen Relatieve tijdstempels \"%1$s\" in plaats van \"%2$s\" Geselecteerd Niet geselecteerd Meer opties Navigeer omhoog Scanlator Toepassen Naar standaard terugkeren Onboarding gids Welkom! Link kopiëren Vertrouwde onbekende extensies intrekken Extensierepo\'s Zwart Willekeurig Laten we eerst enkele dingen instellen. Je kunt deze later altijd wijzigen in de instellingen. Selecteer een map Stuur geanonimiseerde crashlogs naar de ontwikkelaars. Beveiliging Analytics en crashlogs Deze repo bestaat al! Je hebt geen repo\'s ingesteld. Tracker score Overslaan Opslaggids Stuur geanonimiseerde gebruiksgegevens om functies van de app te verbeteren. Crashlogs verzenden Analytics toestaan Weet je zeker dat je de extensie \"%s\" wil verwijderen? %s aan het herinstalleren? Toestaan Nieuw bij %s? Wij raden je aan om de opstartgids te lezen. Wens je de repo \"%s\" te verwijderen? Bronrepo openen Flitsduur Verwijderen Extensie verwijderen? Downloaden van dubbele eerder gelezen hoofdstukken overslaan Repo verwijderen Er moet een map geselecteerd zijn Aan het updaten van een oudere versie en niet zeker wat te selecteren? Raadpleeg de opslaggids voor meer informatie. Vermijd onderbrekingen van langlopende bibliotheekupdates, downloads en back-upherstellen. Om bronextensies te installeren. Ontvang meldingen over bibliotheekupdates en meer. Slimme update Er zijn rechten nodig om extensies te installeren. Tik hier om deze toe te staan. Repo toevoegen Repo URL Voeg aanvullende repo\'s toe aan %s. Dit moet een URL zijn die eindigt op “index.min.json”. Ongeldige repo URL Geen opslaglocatie ingesteld Toch toevoegen Vervangen Wens je de repo \"%s\" toe te voegen? %1$s ms Flits elke Flits met Wit Wit en Zwart Volgende Aangepast weergaveprofiel Uitzoomen uitschakelen Extensierepo\'s Alle gelezen items Nord Deze manga is voltooid of er is geen voorspelde uitkomstdatum. Voortgang bijwerken wanneer gemarkeerd als gelezen Trackers bijgewerkt naar hoofdstuk %d Volgende Maand Aanmaken Toekomstige Updates Beschikbaar: %1$s / Totaal: %2$s Gebruikt voor automatische back-ups, hoofdstukdownloads en als lokale bron. Opslaglocatie Volledige fout: Binnenkort Aangepaste updatefrequentie: Scanlators uitsluiten Geen scanlators gevonden Trackers bijwerken naar hoofdstuk %d? Toekomstige Updates Bekijken Vorige Maand JSON back-up niet ondersteund Back-up bestand is corrupt Nieuwe hoofdstukken zijn geschat om uit te komen in ongeveer %1$s. Word ongeveer elke %2$s gecontroleerd. Pauseer leesgeschiedenis voor extensie Automatisch Na het lezen van een hoofdstuk Gedrag Na het ophalen van een nieuw hoofdstuk Notities Notities bewerken Duplicaat gelezen hoofdstuk als gelezen markeren Ongelezen hoofdstukken Monochroom Doneer Geef afbeeldingen weer in mangabeschrijvingen Verberg ontbrekende hoofdstukindicatoren Verbied niet-ASCII-bestandsnamen Verzekert compatibiliteit met bepaalde opslagmedia die Unicode niet ondersteunen. Wanneer dit is ingeschakeld moet je manueel bron- en mangamappen hernoemen door niet-ASCII-tekens te vervangen met hun UTF-8 hexadecimale representaties in kleine letters. Hoofdstukbestanden moeten niet hernoemd worden. Aangepaste hardware bitmapdrempel Standaard (%d) Als de lezer een lege afbeelding laadt, verlaag incrementeel de drempelwaarde.\nGeselecteerd: %s Gebruik verouderde decoder voor lange striplezer Beïnvloedt prestaties. Schakel dit alleen in als het verlagen van de bitmapdrempel problemen met lege afbeeldingen niet oplost Downloadmap kon niet worden aangemaakt Map kon niet worden aangemaakt: %s Voeg gevoelige intellingen toe (bijv. logintokens voor trackers) Exporteren Bibliotheeklijst Bibliotheek geëxporteerd Je staat op het punt om items uit de database te verwijderen Gelezen hoofdstukken en voortgang van niet-bibliotheekitems zullen verloren gaan Houd items met gelezen hoofdstukken Update mangatitels in bibliotheek om overeen te komen met bron Waarschuwing: als een manga hernoemt wordt zal deze worden verwijderd uit de downloadwachtrij (indien aanwezig). Aan het inloggen… Auteur Tekenaar Mogelijke duplicaten Je hebt items in jouw bibliotheek met een gelijkaardige naam.\n\nSelecteer een item om te migreren of voeg toch toe. Privé getrackt Track privé Track openbaar Vond het deel leuk waar… Geselecteerd Beschikbaar Selecteer alle Selecteer geen Selecteer ingeschakelde bronnen Selecteer vastgepinde bronnen Ga door Data om te migreren Verwijder downloads van huidig item na migratie Aanvullende trefwoorden (optioneel) Helpt bij het verfijnen van zoekresultaten door extra trefwoorden toe te voegen Verberg items zonder een match Verberg items zonder nieuwere hoofdstukken Toon item enkel als de match meer hoofdstukken heeft Deze opties zijn traag en gevaarlijk en kunnen leiden tot restricties van bronnen Geavanceerde zoekmodus Splitst de titel op in trefwoorden voor een breedere zoekopdracht Match op basis van hoofdstuknummer Indien ingeschakeld wordt de match die het verst vooruit is gekozen. Anders word de eerste match op basis van bronprioriteit gekozen. Migratie Migratie (%1$d/%2$d) Kopieer Migreer Geen alternatieven gevonden Recentste: %1$s Onbekend Zoek manueel Niet migreren Migreer nu Kopieer nu Stoppen met migreren? Stop Annuleer Kopieer Migreer Annuleer Annuleer Geen hoofdstukken gevonden. Dit item kan niet worden gebruikt voor migratie ================================================ FILE: i18n/src/commonMain/moko-resources/nn/plurals.xml ================================================ Etter %1$s minutt Etter %1$s minuttar I går %1$d dagar sidan %d kategori %d kategoriar Gjort på %1$s med %2$s feil Gjort på %1$s med %2$s feil ================================================ FILE: i18n/src/commonMain/moko-resources/nn/strings.xml ================================================ Namn Meir Innstillingar Oppdateringar Hjelp Kategoriar Manga Kapittel Sporing Historikk Standard Åtvaring Autentiser for å stadfesta endring Filter Bokmerket Sporet Ulesen Fjern filter Alfabetisk Siste kapittel Dato henta Søk Søkeinnstillingar Vel alt Vel motsett Bokmerk kapittel Fjern bokmerke Slett Oppdater bibliotek Aktiver alle Deaktiver alle Rediger Legg til Legg til kategori Rediger kategoriar Rediger omslag Vis kapittel Pause Neste kapittel Prøv igjen Fjern Start Opne i nettlesar Vis manga Opne i WebView Migrer Visningsmodus Vis Kompakt rutenett Komfortabelt rutenett Lokal manga Språk Vis kategorifaner Vis talet på gjenstandar Avbryt Avbryt alle Avbryt alle for denne serien Sorter Nyaste Eldste Flytt til toppen Flytt til botnen Installer Del Lagra Angra Lukka Opne logg Trykk for å sjå detaljar Tilbake Lastar… Generelt Utsjånad Bibliotek Lesar Avansert Om Tema Av Dynamisk Ingen nedlastingar Ingen nylege oppdateringar Bibliotek Kjelder Innstillingar Meny Sett kategoriar Gi kategori nytt namn Førre kapittel Stigande Søkkande Fram Liste App tema Datoformat Handter varslingar Sikkerheit Alltid Aldri NSFW (18+) kjeder I dag Skjerm Element per rad Automatisk oppdateringar Dagleg Annankvar dag Kvar veke Berre på Wi-Fi Avgrensingar: %s Sjå etter nye omslag og detaljar ved oppdatering av bibliotek Standard kategori Alltid spør Manga i utelatne kategoriar vil ikkje bli oppdatert sjølv om dei òg er i inkluderte kategoriar. Alle Ingen Inkluder: %s Utelat: %s Oppdater Oppdater alle Installer Lastar ned Installerer Installert Tiltru Kvar tredje dag Ikkje-tiltrudd Avinstaller Ikkje-tiltrudd utvidelse Kunne ikkje henta utvidingslista 18+ Installerer utviding… Installatør Shizuku køyrar ikkje Vis sidetal Av Eigendefinert lysstyrke Gråtonar Invertert Eigendefinert fargefilter Skjerm Hopp over filtrerte kapittel Ingen Vassrett Loddrett Begge Handlingar Bakgrunnsfarge Kvit Grå Svart Automatisk L-forma Kindle-ish Kant Høgre og Venstre Førre Neste Venstre Høgre Venstre til høgre Høgre til venstre Loddrett Webtoon Kontinuerleg loddrett Strekk Automatisk Venstre Høgre Liggjande R G B A Høgaste Høg Låg Lågaste Utelatne kategoriar Lagra som CBZ-arkiv Tenester Forbetra tenester Tenester som tilbyr forbetra tenester for spesifikke kjelder. Manga blir spora automatisk når dei blir lagt til i biblioteket ditt. Spor Lag reservekopi Gjenopprett reservekopi Reservekopi oppretta Ugyldig reservekopifil Reservekopi inneheld ingen manga. Gjenopprett bibliotek frå reservekopifil Gjenoppretting fullført %1$02d min, %2$02d sek Kva ønskjer du å ta reservekopi av? Lagar reservekopi Gjenoppretter reservekopi Nettverk DNS over HTTPS (DoH) Data Brukt: %1$s %1$d ikkje-bibliotek manga i databasen Versjon Hjelp med å omsetje Personvernerklæring Sjå etter oppdateringar Oppdatert til v%1$s Inkognitomodus Brukarnamn E-postadresse Passord Ukjend feil Oppdaterer kategori Manga frå biblioteket Faner Lokal kjelde Andre Sist brukt Globalt søk… Søk etter «%1$s» globalt Utforsk Ukjend Ukjend forfattar Ukjend status Kansellert Legg til i bibliotek Pågåande Sporing Kunne ikkje lasta ned kapittel grunna uventa feil Global oppdatering Liggjande Av Kvar sjette time Installer og start Shizuku for å bruka Shizuku som utvidingsinstallatør. Kvar tolvte time Denne utvidinga er ikkje lengre tilgjengeleg. Kan innehalda NSFW (18+) innhald Slett kapittel Manga i utelatne kategoriar vil ikkje bli nedlasta sjølv om dei òg er i inkluderte kategoriar. Reservekopifrekvens Avbroten gjenoppretting Manglande kjelder: Sporingstenester ikkje logga inn i: Nokre produsentar har ytterlegare appavgrensingar som drep bakgrunnstenester. Denne nettstaden har meir info om korleis det kan fiksast. Nettstaden Sorter etter Dato Ferdig publisert Lagt til i biblioteket Fjerna frå bibliotek Kopiert til utklippstavla: \n%1$s Kapittel %1$s Lastar ned (%1$d/%2$d) Sett som standard Kva er nytt Fjern frå bibliotek Meir Legg manga til i bibliotek? Mindre Kunne ikkje kopiera til utklippstavla Kjelde ikkje installert: %1$s I biblioteket Feil Etter kjelde Omslag Last ned ================================================ FILE: i18n/src/commonMain/moko-resources/pl/plurals.xml ================================================ Po %1$s minucie Po %1$s minutach Po %1$s minutach Po %1$s minutach %d kategoria %d kategorie %d kategorii %d kategorii Dostępna aktualizacja rozszerzenia Dostępne %d aktualizacje rozszerzeń Dostępne %d aktualizacji rozszerzeń Dostępne %d aktualizacji rozszerzeń Rozdziały %1$s i jeden więcej Rozdziały %1$s i %2$d Rozdziały %1$s i %2$d Rozdziały %1$s i %2$d %1$d nowy rozdział %1$d nowe rozdziały %1$d nowych rozdziałów %1$d nowych rozdziałów Dla %d wpisu Dla %d wpisów Dla %d wpisów Dla %d wpisów Pozostał %1$s Pozostało %1$s Pozostało %1$s Pozostało %1$s Wykonano w %1$s z %2$s błędem Wykonano w %1$s z %2$s błędami Wykonano w %1$s z %2$s błędami Wykonano w %1$s z %2$s błędami %1$s rozdział %1$s rozdziały %1$s rozdziałów %1$s rozdziałów %d brakujący rozdział %d brakujące rozdziały %d brakujących rozdziałów %d brakujących rozdziałów 1 serwis śledzący %d serwisy śledzące %d serwisów śledzących %d serwisów śledzących Wczoraj %1$d dni temu %1$d dni temu %1$d dni temu Następny nieprzeczytany rozdział Następne %d nieprzeczytane rozdziały Następne %d nieprzeczytanych rozdziałów Następne %d nieprzeczytanych rozdziałów Następny rozdział Następne %d rozdziały Następne %d rozdziałów Następne %d rozdziałów Brakujący %1$s rozdział Brakujące %1$s rozdziały Brakuje %1$s rozdziałów Brakuje %1$s rozdziałów 1 dzień %d dni %d dni %d dni %d repozytorium %d repozytoria %d repozytoriów %d repozytoriów Jutro Za %1$d dni Za %1$d dni Za %1$d dni 1 strona %1$s strony %1$s stron %1$s stron ================================================ FILE: i18n/src/commonMain/moko-resources/pl/strings.xml ================================================ Kategorie Rozdziały Nazwa Historia Ustawienia Kolejka pobierania Historia Ustawienia Filtry Nieprzeczytane Szukaj Zaznacz wszystko Biblioteka Aktualizacje Kopia zapasowa i przywracanie Zakładki Usuń filtr Ostatnio czytane Oznacz jako przeczytane Oznacz jako nieprzeczytane Oznacz poprzednie jako przeczytane Pobierz Dodaj zakładkę Usuń zakładkę Usuń Aktualizuj bibliotekę Edytuj Dodaj Dodaj kategorię Edytuj kategorie Zmień nazwę kategorii Zmień kategorie Edytuj okładkę Ilość rozdziałów Wstrzymaj Poprzedni rozdział Następny rozdział Spróbuj ponownie Usuń Wznów Otwórz w przeglądarce Tryb wyświetlania Widok Kompaktowa siatka Lista Anuluj Sortuj Zainstaluj Udostępnij Zapisz Cofnij Przywróć Ładowanie… Aplikacja niedostępna Ogólne Czytnik Pobieranie Zaawansowane O aplikacji Rozmiar siatki Usuń z biblioteki Rozdział %1$s Błąd Wstrzymane Pobierz Pobierz nieprzeczytane Czy na pewno chcesz usunąć wybrane rozdziały? Czytane Ukończone Porzucone Wstrzymane Planowane Ocena Tytuł Kategoria o takiej nazwie już istnieje! Obraz zapisany Ustaw jako okładkę Okładka zaktualizowana Strona: %1$d Nie znaleziono następnego rozdziału Znaleziono nowe rozdziały Wybierz okładkę Pobierz Brak nowych aktualizacji Pobieranie… Naciśnij, by zaktualizować Błąd pobierania Dostępna nowa wersja! Twoja biblioteka jest pusta Błąd Podczas pobierania rozdziału wystąpił nieoczekiwany błąd Wstrzymano pobieranie Alfabetycznie Śledzenie Reset Usługi śledzenia Wersja Logowanie do %1$s Nazwa użytkownika Hasło Zaloguj się Nieznany błąd Aktualizowanie kategorii Nie znaleziono więcej wyników Otwórz log Tytuł Numer rozdziału Pionowo Poziomo Automatyczne aktualizacje Wyłączone Co 6 godzin Co 12 godzin Co 1 dzień Co 2 dni Co tydzień Wszystko Ograniczenia sprzętowe dla automatycznych aktualizacji Podczas ładowania Ukończone serie Aktualizuj postęp po przeczytaniu rozdziału Domyślna kategoria Zawsze pytaj Pełny ekran Animacje przejścia stron Pokazuj numer strony Przycinaj krawędzie Niestandardowa jasność Nie wyłączaj ekranu Niestandardowy filtr kolorów Przyciski głośności Odwróć przyciski głośności Kolor tła Biały Czarny Od lewej do prawej Od prawej do lewej Pionowy Długi pasek Domyślny styl czytania Dopasuj do ekranu Rozciągnij Dopasuj na szerokość Dopasuj na wysokość Rodzaj powiększenia Oryginalny rozmiar Inteligentne Początkowa pozycja przybliżenia Automatycznie Od lewej Od prawej Od środka Domyślna orientacja ekranu Dowolna Wymuś pionowo Wymuś poziomo R G B A Po ręcznym oznaczeniu jako przeczytane Usuwaj rozdziały automatycznie po przeczytaniu Wyłączone Ostatnio czytany rozdział Przedostatnio czytany rozdział 3 rozdziały do tyłu 4 rozdziały do tyłu 5 rozdziałów do tyłu Pobieraj nowe rozdziały Biblioteka Śledzenie Nawigacja Utwórz kopię zapasową Może być użyta do przywrócenia aktualnej biblioteki Przywróć kopię zapasową Przywraca bibliotekę z pliku kopii zapasowej Częstotliwość tworzenia kopii Co zawrzeć w kopii zapasowej? Przywracanie kopii zapasowej Tworzenie kopii zapasowej Wyczyść cache rozdziałów W użyciu: %1$s Wyczyszczono cache, %1$d plików zostało usunięte Podczas czyszczenia wystąpił błąd Usuń ciasteczka Ciasteczka usunięte Usuń historię wpisów, których nie ma w twojej bibliotece Wyczyść bazę danych Wysyłaj raporty o awariach Pomaga naprawiać błędy. Żadne wrażliwe dane nie będą wysyłane Utworzono kopię zapasową Przywracanie ukończone Pozycje usunięte Zalogowano Źródło lokalne Nieukończone Nieznany Licencjonowane Usunąć pobrane rozdziały? Pobieranie (%1$d/%2$d) Według źródła Według numeru rozdziału Śledzenie Status Usunięto kategorie To usunie datę przeczytania tego rozdziału. Na pewno? Resetuj wszystkie rozdziały dla tego wpisu Dodać do biblioteki? Filtr niestandardowy Nie udało się wczytać obrazka Ustawić ten obrazek jako okładkę? Nie udało się pobrać rozdziałów. Możesz spróbować ponownie w sekcji pobierania Nie udało się zaktualizować okładki Zanim to zrobisz, dodaj ten wpis do biblioteki Wybierz plik kopii zapasowej Brak pobieranych rozdziałów Brak ostatnio zaktualizowanych Nic ostatnio nie czytano Pobieranie Brak połączenia Wi-Fi Brak połączenia z internetem Wyszukiwanie globalne Inne Wyszukiwanie globalne… Przeglądaj Zwykły Najnowsze Pobrane rozdziały Nie masz żadnych kategorii. Dotknij plusa, aby je utworzyć i zorganizować swoją bibliotekę. Rozszerzenia Zainstaluj Oczekujące Pobieranie Instalowanie Zainstalowano Odinstaluj Szybkość animacji podwójnego dotknięcia Bez animacji Normalna Szybka Dodano do biblioteki Usunięto z biblioteki Migracja Skopiowano do schowka: \n %1$s Kopiuj Szczegóły rozszerzenia Aktualizuj Ufaj Niezaufane Niezaufane rozszerzenie To rozszerzenie było podpisane niezaufanym certyfikatem i nie zostało aktywowane. \n \nZłośliwe rozszerzenie może odczytać dane logowania albo uruchomić złośliwy kod. \n \nUfając temu rozszerzeniu akceptujesz to zagrożenie. Zaznacz dane do zawarcia Migruj Widok stron Nie zainstalowano źródła: %1$s Czytane ponownie Status Typ Przeczytany: Obecny: Następny: Poprzedni: Brak następnego rozdziału Nie ma wcześniejszych rozdziałów Ładowanie stron… Nie udało się załadować stron: %1$s Otwórz używając WebView Pomiń rozdziały ozn. jako przeczytane Pokaż akcje po przytrzymaniu Tryb mieszania kolorów Nakładka Pomnożenie Rozjaśnienie Ściemnienie Pomoc Wstecz Ekran Nie znaleziono wyników Wybierz źródło, z którego chcesz migrować Dalej Odśwież Biblioteka Przestarzałe To rozszerzenie nie jest już dostępne i może nie funkcjonować prawidłowo, powodując problemy z aplikacją. Zalecamy odinstalowanie go. Format daty Globalna aktualizacja Wylogować z %1$s? Wyloguj Wylogowano Wstrzymane Zawsze pokazuj przejścia rozdziałów Pionowo z przerwami Pomijaj odfiltrowane rozdziały Wyświetlanie Ukryj zawartość powiadomienia Zablokuj podczas bezczynności Aktualizacje rozdziałów Zaktualizuj aplikację WebView dla lepszej kompatybilności Nie udało się obejść Cloudflare Więcej Ukrywa zawartość ekranu przy przełączaniu między aplikacjami i blokuj zrzuty ekranu Nigdy Zawsze Wymagaj odblokowania Bezpieczeństwo i prywatność Zarządzaj powiadomieniami Systemowy Ciemny Jasny Przenieś na dół Przenieś na górę Najstarsze Najnowsze Anuluj wszystko Odwróć zaznaczenie Ostatni rozdział Menu Źródła Rozdział %1$s Aktualizowanie biblioteki Dla tej serii Mniej Dodaj do biblioteki Adres e-mail Filtruje wszystkie pozycje w twojej bibliotece Tylko pobrane Sprawdź aktualizacje Licencje open source Strona WWW Oszczędzanie baterii jest już wyłączone Pomaga z aktualizacjami biblioteki i backupami w tle Wyłącz oszczędzanie baterii Anulowano przywracanie Kopia zapasowa jest w trakcie przywracania Kopia zapasowa jest już w trakcie tworzenia %1$02d min, %2$02d s Marginesy boczne Szary Dostępne aktualizacje Ukryj ekran Odepnij Przypnij Więcej Rozdz. %1$s - %2$s W bibliotece Przypięte Ostatnio używane Przesyłanie postępu czytania do zewnętrznego serwisu. Ustaw śledzenie guzikiem \"Śledzenie\" w wybranych tytułach. Aktualizacje rozszerzeń WebView jest wymagany do poprawnego działania aplikacji Rozdziały %1$s Rozdział %1$s i %2$d więcej Tryb czytania Źródła lokalne - poradnik Pokazuj zawartość w strefie odcięcia Przeglądaj rozdziały Dodaj śledzenie Niepowodzenie otwarcia ustawień urządzenia Odśwież okładki w bibliotece Przywracanie kopii zapasowej zakończone niepowodzeniem Tworzenie kopii zapasowej zakończone niepowodzeniem Czytane Po dacie dodania Dane Brakujące źródła: Kopia zapasowa nie zawiera żadnych wpisów. Nieprawidłowy plik kopii zapasowej: Sprawdź, czy są nowe okładki i opisy podczas aktualizowania biblioteki Automatycznie odświeżaj metadane Wygodna siatka Migracja Nie znaleziono żadnych stron Karty Pokaż karty kategorii Wyłącz wszystkie Włącz wszystkie Po otwarciu aplikacji pokaż aktualny tryb czytania Tryb czytania Nie znaleziono źródła Wyłącz Start Wymaga ponownego uruchomienia aplikacji Sieć Obydwa Wertykalnie Horyzontalnie Brak Odwróć strefy kliknięcia Nie udało się pobrać rozdziałów z powodu braku miejsca na urządzeniu Nieznany status Nieznany autor Szukaj \"%1$s\" globalnie Zaktualizowano do v%1$s Co nowego Tryb czytania Motyw Po dacie dodania Ustawienia szukania Następna strona Poprzednia strona Błędy Ukończone Postęp Zaktualizowano domyślne ustawienia rozdziałów Instrukcja przenoszenia źródeł %1$s: %2$s, strona %3$d Nie znaleziono rozdziałów Ustaw jako domyślne Dodatkowo zastosuj do wszystkich wpisów w mojej bibliotece Jesteś pewien, że chcesz zapisać te ustawienia jako domyślne? Ustawienia rozdziałów Nie masz podpiętych źródeł Pobrane rozdziały Z biblioteki Wstrzymuje zapisywanie do historii czytania Tryb incognito Wyczyść historię Jesteś pewien? CAŁA historia zostanie usunięta. Historia usunięta Serwisy, do których nie zalogowono: Usuwaj rozdziały dodane do zakładek Usuń rozdziały Źródła z tej wtyczki mogą zawierać treści NSFW (18+) 18+ Nie zapobiega to nieoficjalnym lub potencjalnie niepoprawnie oflagowanym rozszerzeniom przed pokazywaniem zwartości NSFW(18+) w aplikacji. NFSW Materiały 18+ Nie znaleziono aplikacji do przeglądania plików Wymagane ponowne zalogowanie do MAL Pokazuj na liście źródeł i rozszerzeń Data zakończenia Data rozpoczęcia Zapisuje logi błędów do pliku do udostępnienia programistom Udostępnij logi crasha Strefy kliknięcia Przy krawędzi Podobnie jak w czytniku Kindle W kształcie litery \"L\" Malejąco Rosnąco Według numeru rozdziału Po dacie dodania Śledzone Pokaż liczbę elementów Prawa i Lewa Jeśli układ w podziale podwójnych stron nie pasuje do kierunku czytania Odwróć układ w podziale podwójnych stron Podział podwójnych stron DNS przez HTTPS (DoH) Dane z pliku kopii zapasowej zostaną przywrócone. \n \nBędziesz musiał zainstalować brakujące rozszerzenia i zalogować się do usług śledzących, aby móc z nich korzystać. Prawo Lewo Następne Poprzednie Krótko pokazuj, kiedy czytnik zostaje otwarty Pokazuj nakładkę stref kliknięcia Wyklucz: %s Uwzględnij: %s Brak Ta wersja Androida nie jest już wspierana Nie udało się skopiować do schowka Tytuły w wykluczonych kategoriach nie będą aktualizowane, nawet jeśli są również w uwzględnionych kategoriach. Tytuły w wykluczonych kategoriach nie będą pobierane, nawet jeśli są również w uwzględnionych kategoriach. Automatyczne pobieranie Poziomo Pionowo Kliknij aby wyświetlić szczegóły Wyłącz tryb incognito Data pobrania rozdziału Nie znaleziono pasującego wyniku Źródło nie jest wspierane Nieprzeczytane Orientacja ekranu Automatycznie Utwórz foldery względem tytułu Zapisz strony do osobnych folderów Akcje Odcienie szarości Anuluj wszystko dla tego tytułu Data Sortowanie Błędny format rozdziału Nie znaleziono rozdziału Błąd przy udostępnianiu okładki Błąd przy zapisie okładki Okładka zapisana Okładka Przewodnik śledzenia postępu Wyłączone Włączone Ustawienia sortowania dla każdej kategorii Lokalne źródło Nie masz jeszcze żadnych kategorii. Ograniczenia: %s Niektórzy producenci mają dodatkowe ograniczenia, które zabijają usługi działające w tle. Ta strona zawiera więcej informacji na ten temat. Zacznij pobierać teraz Zielone jabłko Dynamiczny Motyw aplikacji Funkcje kopii zapasowej mogą nie działać, jeśli optymalizacja nakładki MIUI jest wyłączona. Yotsuba • Yin i Yang Czysty czarny motyw Truskawkowe daiquiri Czułość ukrywania dolnego paska podczas przewijania Tako Aktywność w tle Śledź Wygląd Autoryzuj, aby potwierdzić zmianę Domyślny Wprowadzenie - poradnik Pomóż tłumaczyć Wymuś UI dla tabletu Wykluczone kategorie Najniższe Niskie Wysokie Najwyższy Odwrócone Informacje o aplikacji Dzisiaj Błękitny & Turkusowy Zmierzch północy Ostrzeżenie: duże aktualizacje biblioteki mogą prowadzić do zwiększonego zużycia baterii oraz spowolnienia działania źródeł. Kliknij, by dowiedzieć się więcej. Zainstaluj i uruchom Shizuku, aby używać go jako instalatora rozszerzeń. Instalator Szczegółowe logi Instalowanie rozszerzenia… Shizuku nie jest aktywne Zapisuje szczegółowe logi w logu systemu (obniża wydajność aplikacji) Radzimy przechowywać kopie również w innych miejscach. Ilość wejść Język Ostrzeżenie Ostrzeżenie: Duże aktualizacje biblioteki mogą prowadzić do zwiększonego zużycia baterii oraz spowolnienia działania źródeł. Co 3 dni Tylko przez Wi-Fi Usługi dostarczania ulepszonych funkcji dla niektórych źródeł. Mangi po dodaniu do biblioteki są automatycznie śledzone. Ulepszone usługi śledzenia Aktualizacje aplikacji Zaktualizuj wszystko Przestarzały Wyczyść cache rozdziałów przy uruchamianiu aplikacji Nie można uzyskać listy rozszerzeń Opublikowane w całości Nie ma nic do wyczyszczynia Anulowane Przerwa wydawnicza Aby uzyskać pomoc z błędami aktualizacji biblioteki, zobacz %1$s Zapisz jako archiwum CBZ Polityka prywatności %1$d wpisów spoza biblioteki w bazie danych Posiada nieprzeczytane rozdziały Brak przeczytanych rozdziałów Automatycznie przybliżaj poziome obrazy Pokaż Przesuń szeroki obraz Siatka z samych okładek Pominięto, ponieważ brak przeczytanych rozdziałów Pominięto, ponieważ seria została ukończona Pominięto, ponieważ istnieją nieprzeczytane rozdziały %1$d aktualizacja (aktualizacje) nie powiodła się Zamknij Przenieś serię na górę Ilość nieprzeczytanych Kliknij, by dowiedzieć się więcej Otwórz na GitHubie Reset wszystkich ustawień czytnika Wersja Nie można otworzyć ostatnio czytanego rozdziału Niezainstalowane Lawenda Język aplikacji Nieaktywny Brak pozycji w bibliotece do utworzenia kopii zapasowej Nie można zresetować ustawień czytnika Błąd podczas zapisywania obrazka Wyczyść dane WebView Dane WebView wyczyszczone Ostatnia aktualizacja Poprawia wydajność czytnika Brak opisu Lista życzeń Lista odłożonych na później Lista niezakończonych Nie znaleziono źródła Nie znaleziono zainstalowanego źródła Cóż, to troszkę niezręczne Język Lista czytanych Niestandardowa okładka Lista zakończonych Tylko na nielimitowanych połączeniach Resetowanie ustawień czytników serii Resetuje tryb czytania i orientację wszystkich serii Strona %d nie została znaleziona podczas podziału Oznaczenie wiekowe Do góry nogami Nie można było znaleźć ścieżki %d strony Domyślny user agent string Zresetuj domyślny user agent string Czy chcesz usunąć kategorię \"%s\"? Usuń kategorię InternalError: sprawdź log błędów po więcej informacji Usuń wszystko Pole user agent nie może być puste Aktualizacja już trwa Tsunami Pobierz z wyprzedzeniem Pobieraj podczas czytania Zobacz ostatnio zaktualizowane wpisy Widżet nie jest dostępny kiedy blokada aplikacji jest włączona Jesteś pewien? Działa tylko, jeśli aktualny i następny rozdział są już pobrane. Wielojęzyczne Popularne Biblioteka ostatnio aktualizowana: %s Zamierzasz usunąć \"%s\" ze swojej biblioteki Statystyki Rozpoczęte Lokalne Pobrane Wymuś ponowne sprawdzenie pobranych rozdziałów przez aplikację %s napotkał nieoczekiwany błąd. Sugerujemy podzielenie się logami crasha, a następnie udostępnienie ich na naszym kanale wsparcia na Discordzie. Tryb czytania, wyświetl, nawigacja Nieprawidłowa lokalizacja: %s Przycisk wznów czytanie Jednokierunkowa synchronizacja postępu, ulepszona synchronizacja Źródła, rozszerzenia, globalne wyszukiwanie Blokada aplikacji, bezpieczny ekran Tło, data & format czasu Zrzuć logi, optymalizacje baterii Nie przyznano uprawnień do przechowywania Manualna & automatyczna kopia Czas odczytu Wpisy W globalnej aktualizacji Śledzenie Nieznany tytuł Przed chwilą Ups! Usunąć datę? To spowoduje usunięcie wcześniej wybranej daty zakończenia z %s Nieprawidłowy ciąg agenta użytkownika Uruchom ponownie aplikację Nie teraz Przegląd Zakończone wpisy Razem Szukaj… Otwórz losową pozycję Kategorie, aktualizacja globalna, przesunięcie rozdziału Odbuduj indeks pobierania Kompilacje F-Droid nie są oficjalnie obsługiwane. \nNaciśnij, aby dowiedzieć się więcej. Przeczytane Automatyczne pobieranie, pobierz wstępnie To spowoduje usunięcie wcześniej wybranej daty rozpoczęcia z %s Pokaż liczbę nieprzeczytanych na ikonie Aktualizacji N/A %dd %d godz. %d minut %d sekund Używane Śledzone pozycje Średnia ocena Pominięto, ponieważ aktualizacja nie jest wymagana Nie znaleziono wpisów w tej kategorii Sprawdzanie pobranych plików Kategoria jest pusta Skopiowano do schowka Pomiń zduplikowane rozdziały Dostępne, ale źródło nie jest zainstalowane: %s Błąd %1$s: %2$s *wymagane Ukryj pozycje znajdujące się już w bibliotece Kopiuj do schowka Aktualizuj kategorię Dziel długie obrazy Nakładka Dopasuj szerokie strony Zmień orientację obróconych obrazów Informacje debugowania Dotknij dwukrotnie, aby powiększyć Przesuń palcem w prawo Przesuń palcem w lewo Ustaw interwał Następna spodziewana aktualizacja Aktualizuj co Synchronizowanie biblioteki Nie można wykonać kopi zapasowej Interwały Usuń też z %s HTTP %d, otwórz w WebView Brak połączenia z internetem Nie można połączyć się z %s Przestań śledzić %s? Usuń pobrane Synchronizacja biblioteki zakończona Indeksy pobrań unieważnione Naciśnij tutaj aby uzyskać pomoc dotyczącą Cloudflare Odblokuj %s Dostosowany interwał aktualizacji OK To usunie śledzenie lokalne. Zatwierdź Przywróć do domyślnych Przenieś serię na dół Nigdy Wybierz folder Następna aktualizacja spodziewana za około %1$s, sprawdzanie co %2$s. Folder musi być wybrany Uprawnienia powiadomień Witaj! Więcej opcji Scanlator Pomiń Następny Zużycie baterii w tle Aktualizowanie biblioteki... (%s) Nieprawidłowa nazwa repozytorium Ustawienia źródła Ustawienia aplikacji Usuń repozytorium Dodaj repozytorium Zaznaczone Przewiń w górę Zaczynajmy Przewodnik po pamięci Zainstaluj uprawnienia aplikacji Do instalacji rozszerzeń. Zezwól Pierwszy raz w %s? Zalecamy zapoznać się z poradnikiem. Ponowna instalacja %s? Repozytoria rozszerzeń Link repozytorium Zużycie pamięci Niestandardowa częstotliwość aktualizacji: Nie znaleziono skanlatorów Nie wybrano pliku Nie zaznaczone Serwisy śledzące Dane i pamięć Szybka konfiguracja Unikaj przerywania długich operacji takich jak pobieranie rozdziałów, aktualizacje bibliotek lub przywracanie kopii zapasowej. Otrzymuj powiadomienia ze swojej biblioteki i więcej. Nord Użyj dat względnych \"%1$s\" zamiast \"%2$s\" Inteligentna aktualizacja Na początek ustawmy kilka rzeczy. Zawsze możesz je później zmienić w ustawieniach. Aktualizujesz ze starszej wersji i nie jesteś pewien co wybrać? Zobacz na przewodnik po pamięci. Przewiduj następną aktualizację Uprawnienia są wymagane aby zainstalować rozszerzenia. Kliknij tutaj aby je przyznać. Wybierz folder gdzie %1$s będzie zapisywał pobrane rozdziały, kopie zapasowe i inne. \n \nZalecany jest dedykowany folder. \n \nWybrany folder:%2$s Unieważnij zaufanie nieznanym rozszerzeniom Nie masz ustawionych repozytoriów. Dodaj repozytoria do %s. Powinien to być link z końcówką \"index.min.json\". To repozytorium jest już dodane! Na pewno chcesz usunąć repozytorium \"%s\"? Repozytorium open source Redukuje ghosting na wyświetlaczach e-ink Brak ustawionej ścieżki pamięci Miejsce przechowywania danych Używane do automatycznych kopii zapasowych, pobierania rozdziałów i lokalnych źródeł. Pełny błąd: Login serwisu śledzącego Utwórz Miganie przy zmianie strony Dołącz wrażliwe ustawienia (np. tokeny serwisu śledzącego) Ostatnia automatyczna kopia zapasowa: %s Ma wyniki Oszacuj co Wolne: %1$s / Ogółem: %2$s Wkrótce Pominięto, ponieważ nie spodziewano się dzisiaj żadnej publikacji Wyklucz skanlatorów Wyłącz oddalenie Dodaj mimo to Zamień Pokaż nadchodzące aktualizacje Następny miesiąc Poprzedni miesiąc Nadchodzący Nie udało się uzyskać dostępu do folderu. Aplikacja może się zachowywać nieprzewidywalnie. %1$s ms Długość migania Miganie na Biały i czarny Czarny Biały Ta manga jest zakończona lub nie ma przewidywanej daty wydania. Migaj co Niestandardowy profil Plik kopii zapasowej jest uszkodzony Wysyłaj zanonimizowane dane użytkowania aplikacji w celu ulepszenia jej funkcjonalności. Skopiuj link Losowo Wyślij dziennik awarii Wyślij zanonimizowny dziennik awarii do deweloperów. Zezwól na analizę danych Bezpieczeństwo i prywatność Aktualizuj postęp po oznaczeniu jako przeczytane Repozytoria rozszerzeń Dane użytkownika i dzienniki awarii Usuń Usunąć Rozszerzenie? Czy na pewno chcesz usunąć rozszerzenie \"%s\"? Czy chciałbyś dodać to repozytorium \"%s\"? Przesyłanie dzienników awarii i danych użytkowania pozwoli nam na zidentyfikowanie i naprawę błędów, poprawę wydajności oraz dopasowanie przyszłych wersji aplikacji do twoich potrzeb Domyślne (%d) Śledzenie zaktualizowane do rozdziału %d Wszystkie przeczytane wpisy Jeżeli czytnik załaduje pusty obraz, stopniowo zmniejszaj zakres graniczny.\nWybrany: %s Zaktualizować śledzenie do rozdziału %d? Identyfikator Klucza Certyfikatu już istnieje Przewodnik nadchodzących aktualizacji Repozytorium %1$s posiada taki sam identyfikator certyfikatu jak %2$s.\nJeżeli było to przewidziane, %2$s zostanie zastąpione, w przeciwnym wypadku skontaktuj się z z osobą utrzymującą repozytorium. Pomiń pobieranie duplikatów przeczytanych już rozdziałów Kopia zapasowa JSON nie jest wspierana Niestandardowy zakres graniczny bitmapy dla urządzenia Wpływa na wydajność. Włącz tylko wtedy, gdy zmniejszenie zakresu granicznego bitmapy nie pomaga przy naprawie nieładujących się obrazów Wstrzymaj historię dla rozszerzenia Notatki Edytuj notatki Zamknij kartę Monochromatyczny Wyświetlaj obrazy w opisach mang Nie udało się utworzyć folderu pobierania Nie udało się utworzyć folderu: %s Eksportuj ================================================ FILE: i18n/src/commonMain/moko-resources/pt/plurals.xml ================================================ Após %1$s minuto Após %1$s minutos Após %1$s minutos Capítulos %1$s e 1 mais Capítulos %1$s e %2$d mais Capítulos %1$s e %2$d mais Para %d entrada Para %d entradas Para %d o acesso %1$d novo capítulo %1$d novos capítulos %1$d novos capítulos Atualização de extensão disponível %d atualizações de extensão disponíveis %d atualizações de extensão disponíveis %1$s restante %1$s restantes %1$s restantes %d categoria %d categorias %d categorias Concluído em %1$s com %2$s erro Concluído em %1$s com %2$s erros Concluído em %1$s com %2$s erros %1$s capítulo %1$s capítulos %1$s capítulos %d rastreador %d rastreadores %d rastreadores Ignorando %d capítulo, ou a fonte está em falta ou foi filtrado Ignorando %d capítulos, ou a fonte está em falta ou foi filtrado Capítulos %d ignorados, ou a fonte está em falta ou foi filtrado Ontem Há %1$d dias Há %1$d dias Próximo capítulo não lido Próximos %d capítulos não lidos Próximos %d capítulos não lidos Próximo capítulo Próximos %d capítulos Próximos %d capítulos Falta %1$s capítulo Faltam %1$s capítulos Faltam %1$s capítulos Um dia %d dias %d dias %d repositório %d repositórios %d repositórios Amanhã Em %1$d dias Em %1$d dias Migrar %1$d entrada? Migrar %1$d entradas? Migrar %1$d entradas? Copiar %1$d entrada? Copiar %1$d entradas? Copiar %1$d entradas? Foi saltada uma entrada Foram saltadas %1$d entradas Foram saltadas %1$d entradas %1$s página %1$s páginas %1$s páginas ================================================ FILE: i18n/src/commonMain/moko-resources/pt/strings.xml ================================================ Nome Definições Fila de Transferências Biblioteca Histórico Atualizações Cópia de segurança e restauro Definições Filtro Não Lido Remover filtro Pesquisar Selecionar tudo Marcar como lido Marcar como não lido Marcar anteriores como lidos Transferir Eliminar Atualizar biblioteca Editar Adicionar categoria Editar categorias Renomear categoria Definir categorias Editar capa Pausar Capítulo anterior Capítulo seguinte Tentar novamente Remover Resumir Abrir no navegador Modo de exibição Cancelar Ordenar Instalar A carregar… Geral Leitor Transferências Avançado Sobre Itens por linha Vertical Horizontal Atualizações automáticas Desligado A cada 6 horas A cada 12 horas Diariamente A cada 2 dias Tudo Restrições do aparelho para atualizações automáticas Ao carregar Com estado \'\'Terminado\'\' Atualizar progresso após a leitura Ecrã inteiro Animar transições de página Mostrar número de página Brilho personalizado Manter o ecrã ligado Navegação Teclas de volume Cor de fundo Branco Preto Modo de leitura padrão Paginado (da esquerda para a direita) Paginado (da direita para a esquerda) Paginação (vertical) Página longa Tipo de escala Ajustar ao ecrã Esticar Ajustar à largura Ajustar à altura Tamanho original Ajuste inteligente Posição de zoom inicial Automático Esquerda Direita Centro Tipo de rotação padrão Livre Vertical bloqueado Horizontal bloqueado Após marcado como lido manualmente Eliminar automaticamente após a leitura Desativado Último capítulo Penúltimo capítulo lido Antepenúltimo capítulo lido Quarto capítulo lido antes do último Quinto capítulo lido antes do último Serviços Limpar a cache dos capítulos Usado: %1$s Cache limpa. %1$d ficheiros foram eliminados Ocorreu um erro ao limpar a cache Limpar cookies Cookies limpos Limpar base de dados Exclui o histórico de itens que não estão salvos nasua biblioteca Eliminar entradas Versão Enviar relatórios de erro Ajuda a corrigir qualquer erro. Não serão enviados dados sensíveis Iniciar sessão em %1$s Nome de utilizador Palavra-passe Iniciar sessão Sessão iniciada Erro desconhecido A atualizar categoria Em curso Desconhecido Licenciado Remover da biblioteca Capítulo %1$s A Transferir (%1$d/%2$d) Erro Título da fonte Número do capítulo Por fonte Por número de capítulo Transferir Não lidos Tem certeza de que deseja eliminar os capítulos selecionados? A ler Completo Abandonado Em espera Planeada a leitura Avaliação Título Estado Capítulos Esta ação irá remover a data de leitura deste capítulo. Continuar? Redefinir todos os capítulos para esta entrada Página: %1$d Capítulo seguinte não encontrado A imagem não pôde ser carregada Não foi possível transferir capítulos. Poderá tentar novamente na secção das transferências Novos capítulos encontrados Por favor adicione à sua biblioteca antes de fazer isto Selecionar imagem de capa Selecionar ficheiro de cópia de segurança Transferir Sem atualizações disponíveis A transferir… Toque para instalar a atualização Erro na transferência Nova versão disponível! Sem transferências Sem atualizações recentes Nada lido recentemente A sua biblioteca está vazia Erro Não foi possível transferir o capítulo devido a um erro inesperado A ligação Wi-Fi está indisponível Categorias Entradas da biblioteca Monitorização Histórico Extensões Informação da extensão Marcado Alfabeticamente Total de capítulos Última leitura Pesquisa geral Marcar capítulo Desmarcar capítulo Adicionar Exibir Grelha compacta Lista Partilhar Guardar Anular Semanalmente Restaurar App não disponível Categoria padrão Perguntar sempre Atualizar Instalar Pendente A transferir A instalar Instalado Desinstalar Extensão não confiável Esta extensão maliciosa pode ler qualquer credenciais de sessão guardadas ou executar código arbitrário. \n \nAo confiar neste extensão, você aceita estes riscos. Cortar bordas Filtro de cor personalizado Inverter teclas de volume Sem animação Normal Rápido Verde Azul Alfa Transferir novos capítulos Criar cópia de segurança Pode ser usado para restaurar a biblioteca atual Restaurar cópia de segurança Restaurar biblioteca a partir de cópia de segurança Frequência de cópia de segurança Restaurando cópia de segurança Criando cópia de segurança Migrar Reiniciar Abrir registo Listas Velocidade de animação de toque duplo Paginação Vermelho Cópia de segurança criada Restauro completo O que pretende fazer cópia de segurança? Capítulos transferidos Confiar Não confiável Mostrar com toque longo Abrir em WebView Ignorar capítulos marcados como lido Sem mais resultados Fonte local Outras Pesquisa global… Mais recente Navegar Adicionado à biblioteca Removido da biblioteca Eliminar capítulos descarregados? Copiado para área de transferência: \n%1$s Fonte não instalada: %1$s Pausado Monitorização Relendo Estado Tipo Já existe uma categoria com este nome! Categorias eliminadas Adicionar à biblioteca? Imagem guardada Filtro personalizado Usar como capa Capa atualizada Usar esta imagem como capa? Concluído: Atual: Próximo: Anterior: Não há próximo capítulo Não há capítulo anterior A carregar páginas… Falha ao carregar páginas: %1$s Selecione dados para incluir Migrar Copiar Falha ao atualizar a capa Não tem nenhuma categoria. Toque no botão (+) para criar uma e organizar a sua biblioteca. Gestor de transferências A ligação à rede está indisponível Transferências em pausa Comum Sobrepor Multiplicação Divisão Super-exposição / Escurecer Modo de mistura do filtro de cores Sub-exposição / Clarear Ajuda Nenhum resultado encontrado Selecione uma fonte da qual migrar Voltar Avançar Recarregar Biblioteca Obsoleto Esta extensão não está mais disponível. Ela pode não funcionar corretamente e pode causar problemas na app. É recomendado desinstalá-la. Formato da data Atualização global Terminar sessão em %1$s? Terminar sessão Sua sessão está agora encerrada Pausado Mais Último capítulo Ver capítulos Cancelar tudo Desligado Ligado Seguir o do sistema Gerir notificações Segurança e privacidade Requerer desbloqueio Bloquear quando inativo Sempre Nunca Ecrã seguro Atualizações pendentes Mostrar conteúdo na área de corte Falha ao contornar o Cloudflare Por favor, atualize a app de WebView para melhor compatibilidade Atualizações de capítulos Ecrã seguro esconde os conteúdos da app durante a troca de apps e impedir capturas de ecrã Visualização Capítulo %1$s e %2$d mais Capítulos %1$s Esconder conteúdo das notificações Desativar otimização de bateria Ajuda com a atualização e cópia de segurança da biblioteca em segundo plano A otimização de bateria já está desativada Endereço de e-mail Mostrar sempre transição entre capítulos Menu Mais novos Mais antigos Mover para o topo Mover para o final Capítulo %1$s Atualizações de extensão Atualizando biblioteca Fixado Preenchimento lateral Lendo Página longa com espaços Ignorar capítulos filtrados Desafixar Afixar Seleção inversa Fontes Sítio Web Restauro cancelado Restauro da cópia de segurança falhou Restauro já em progresso Cópia de segurança falhou Cópia de segurança já em progresso Apenas transferidos WebView é necessária para Mihon Cap. %1$s - %2$s Adicionar à monitorização Menos Mais Na biblioteca Adicionar à biblioteca Guia de fonte local Último usado Verificar por atualizações Licenças de código aberto Filtra todos os itens nasua biblioteca %1$02d min., %2$02d seg. Cinza Modo de leitura Para esta série Não foi possível abrir as definições do aparelho Atualizar capas da biblioteca Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços de monitoramento. Configure o monitoramento para itens individuais a partir dos botões de monitoramento deles. Mostra brevemente o modo atual quando o leitor é aberto Nenhuma página encontrada Por data de envio Abas Dados Fontes em falta: O backup não possui nenhum item da biblioteca. Ficheiro de cópia de segurança inválido: Mostrar modo de leitura Procurar nova capa e detalhes quando a biblioteca atualizar Atualizar automaticamente os metadados Mostrar separadores de categoria Grelha confortável Migrar Desativar todas Ativar todas Iniciar Desativar Ambos Vertical Horizontal Nenhum Inverter zonas toque Fonte não encontrada Estado desconhecido Autor desconhecido Requer reinício da app para ter efeito Rede Atualizado para v%1$s Novidades Não foi possível transferir capítulos devido a falta de espaço de armazenamento Procurar por \"%1$s\" globalmente Modo de leitura Tema Data de adição Você não possui fontes fixadas Completo Progresso Erros Monitorizadores sem sessão iniciada: Permitir a eliminação de capítulos marcados Eliminar capítulos Fontes desta extensão poderão conter conteúdo NSFW (18+) 18+ Isto não impede extensões não oficiais ou incorretamente marcadas de mostrarem conteúdo NSFW (18+) dentro da app. Nenhum capítulo encontrado Definições padrão de capítulo atualizadas Tem certeza de que quer guardar estas definições como padrão? Definições dos capítulos %1$s: %2$s, página %3$d Definir como padrão Também aplicar a todos os itens na minha biblioteca Definições de pesquisa Capítulos descarregados Da biblioteca Pausa histórico de leitura Modo incógnito Eliminar histórico Tem a certeza? Todo o histórico será perdido. Histórico eliminado Conteúdo 18+ (NSFW) Página seguinte Página anterior Guia de migração de fonte Não foi encontrada nenhuma app de seleção de ficheiros Por favor inicie sessão no MAL novamente Mostrar na lista de fontes e extensões Zonas de toque Estilo Kindle Em forma de L Descendente Ascendente Por número do capítulo Por data de envio Monitorizado Borda Data de conclusão Data de início Compartilhar registros de falha Guarda registos de erros num ficheiro para partilhar com os desenvolvedores Mostrar número de itens Direita e Esquerda Dividir as páginas longas Se a posição das páginas longas divididas não se adequar ao modo de leitura Inverter a posição das páginas divididas Pode ter que instalar quaisquer extensões em falta e iniciar a sessão para rastrear os serviços depois de os utilizar. Direita Esquerda Seguinte Anterior Brevemente mostrar quando o leitor é aberto Mostrar sobreposição das zonas de toque Nenhum DNS por HTTPS (DoH) Transferir automaticamente Esta versão do Android não é mais suportada Falha ao copiar para a área de transferência Os itens nas categorias excluídas não serão disponibilizados offline mesmo que eles também estejam nas categorias incluídas. Excluir: %s Incluir: %s Os itens nas categorias excluídas não serão atualizados mesmo que eles também estejam nas categorias incluídas. Toque para ver detalhes Data de procura do capítulo Horizontal Vertical Tipo de rotação Cria as pastas usando os títulos dos itens Guarda páginas em pastas separadas Ações Tons de cinzento Data Ordenar por Formato de capítulo inválido Capítulo não encontrado Automático Desligado Ligado Yin e Yang Tako Daiquiri de Morango Crepúsculo da Meia-Noite Maçã Verde Tema da aplicação Começar a transferir agora Cancelar tudo para esta série Não Lido Erro ao partilhar capa Erro ao guardar capa Capa guardada Capa Desativar o modo incógnito Alguns fabricantes têm restrições adicionais de aplicação que desligam os serviços em segundo plano. Este sítio web tem mais informações sobre como corrigi-lo. Restauros de cópias de segurança podem não funcionar corretamente se a otimização MIUI estiver desativada. Guia de monitorização Configurações por categoria para ordenação e exibição Restrições: %s Modo escuro preto puro Yotsuba Fonte local Ainda não tens nenhuma categoria. Nenhuma correspondência encontrada Fonte não é suportada Serviços que oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados na sua biblioteca. Serviços melhorados Guia de introdução Azul-petróleo e Turquesa Hoje Dinâmico Aviso Autenticar para confirmar a alteração Predefinição Total de entradas Idioma Aparência Só com Wi-Fi A cada 3 dias Atualizar tudo Informações da app Instale e inicie o Shizuku para utilizá-lo como o instalador de extensões. Imprimir registos detalhados no registo de eventos do sistema (reduz o desempenho da app) Monitorizar Guardar como ficheiro CBZ %1$d itens que não estão na biblioteca no banco de dados Nada para limpar Aviso: downloads grandes em massa podem levar as fontes a ficarem lentas e/ou começarem a bloquear o %s. Toque para saber mais. Grandes atualizações prejudicam as fontes e podem levar a atualizações lentas e ainda ao aumento do uso da bateria. Toque para saber mais. Para obter ajuda sobre como corrigir erros de atualização da biblioteca, veja %1$s Limpar a cache de capítulos ao fechar a app Com capítulo(s) não lidos Sensibilidade para ocultar menu ao deslocar Alta Baixa Mais baixa Categorias excluídas Atividade em segundo plano Atualizações da app Invertido Deve manter cópias em outros locais também. Interface de tablet Registo de eventos detalhado Política de privacidade Falha ao obter a lista de extensões Instalando a extensão… Instalador Legado O Shizuku não está em execução Ajude a traduzir Mais alta Em hiato Publicação concluída Cancelado Mostrar entrada Desativado Grelha apenas de capas Fechar Mover séries para o topo Ignorado porque a séria está completa Ignorado porque nenhum capítulo foi lido Ignorado porque existem capítulos não lidos Sem entradas na biblioteca para fazer cópia de segurança Que não começaram a ser lidos Limpar dados do WebView Dados do WebView limpos Vertical invertido Nenhuma fonte instalada encontrada %1$d actualização(ões) falhada(s) Toque para saber mais Imagens panorâmicas Ampliar imagem horizontal Abrir no GitHub Erro ao guardar a imagem Última verificação da atualização Contagem de não lidos Melhora o desempenho do leitor Bem, isto é estranho Não foi possível repor as definições do leitor Todas as definições do leitor reiniciadas Nenhuma fonte encontrada Página %d não encontrada durante a divisão Repor as definições do leitor por série Repõe o modo de leitura e orientação de todas as séries Não foi possível encontrar o caminho do ficheiro da página %d Multi Transferência automática durante leitura Deseja eliminar a categoria \"%s\"? Eliminar categoria InternalError: Verifique registos de falhas para mais informações Cadeia de agente de utilizador não pode estar em branco Tem a certeza? Última atualização da biblioteca: %s Veja os seus itens da biblioteca atualizados recentemente Está prestes a remover \"%s\" da sua biblioteca Funciona apenas se o capítulo atual, mais o próximo, já estiverem transferidos. Maremoto Idioma da aplicação Versão Idioma Sem descrição Lista de Completos Lista de Desejos Lista de Inacabados Uma atualização já está a correr Widget não disponível quando o bloqueio de aplicações está ativo Apenas em redes com tráfego ilimitado Transferência em antecedência Lista dos Em Espera Classificação etária Redefinir cadeia de agente de utilizador predefinido Cadeia de agente de utilizador padrão Não instalado Incapaz de abrir último capítulo lido Capa personalizada Lista dos Em Leitura Remover tudo Lavanda Famoso Ignorado porque a série não requer atualizações Pesquisar… Permissões de armazenamento não concedidas Botão de continuar a ler Tema, data e formato de hora Categorias, atualização global, trocar de capítulo Modo leitura, exibir, navegação Abrir entrada aleatória Estatísticas Começado Local Transferido Título desconhecido Copiado para a área de transferência %dd Agora mesmo Reinicie o aplicativo Ops! %s encontrou um erro inesperado. Sugerimos que você compartilhe os registros de falha em nosso canal de suporte no Discord. Descarga automática, descarga a frente Sincronização de progresso unidirecional, sincronização aprimorada Fontes, extensões, pesquisa global Backups manuais e automáticos A categoria está vazia Isto irá remover a sua data de início selecionada anteriormente no %s %dh Mostrar a contagem no ícone de Atualizações Pular capítulos duplicados Valor de user agent inválido N/A Na atualização global Total Lidos Monitoradores Local inválido: %s Erro em %1$s: %2$s Itens Duração de leitura Bloqueio da app, ecrã seguro Exportar registos de travamento, otimizações de bateria Reindexar descargas Isto irá remover a sua data de término selecionada anteriormente no %s %dm Agora não Itens monitorados Pontuação média Usados %ds A verificar as transferências Remover data? Visão geral Itens completos *obrigatório Disponíveis, mas a fonte não está instalada: %s Força a app a controlar novamente por capítulos disponíveis offline Compilações do F-Droid não são suportadas oficialmente. \nToque para saber mais. Nenhum item encontrado nesta categoria Copiar para a área de transferência Ocultar entradas existentes na biblioteca Atualizar categoria Dividir Imagens altas Sobreposição Girar páginas largas para caber Virar a orientação de páginas largas giradas Capítulo ao deslizar para a esquerda Toque duplo para aproximar Definir intervalo Fora do período esperado de lançamento Informações de depuração Capítulo ao deslizar para a direita intervalos Estimado a cada Frequência da atualização personalizada Próxima atualização esperada Definido para atualizar a cada Pulado, pois nenhum lançamento é esperado para hoje Eliminar transferido Selecionado Não selecionado Mais opções Navegar para cima Desbloquear %s Dados e armazenamento Uso de armazenamento Disponível: %1$s / Total: %2$s Índice de descargas invalidado Não foi possível resolver %s Frequência de atualização personalizada: Remover o monitoramento do %s? Nenhum ficheiro selecionado Toque aqui para obter ajuda com o Cloudflare Deletar repositório Adicionar de qualquer maneira Seja notificado para atualizações da biblioteca e mais. A reinstalar o %s? Datas relativas Permissões são necessárias para instalar extensões. Toque aqui para conceder. Não tem repositórios definidos. Adicionar repositório URL do repositório Perfil de exibição personalizado Sem conexão de internet Substituir A impressão digital da chave de assinatura já existe Flash ao mudar de página Local de armazenamento Criar Configurações da app A sincronizar a biblioteca A atualizar a biblioteca… (%s) HTTP %d, verifique o site na WebView Pontuação do monitorizador Aplicar OK Reverter para predefinição Bem-vindo(a)! Pular Selecionar uma pasta Uma pasta deve ser selecionada A atualizar de uma versão anterior e não tem certeza do que selecionar? Consulte o guia de armazenamento para mais informações. Guia de armazenamento Permissão de instalação de apps Para instalar extensões de fontes. Permissão de notificação Uso de pilha em plano de fundo Evite interrupções para tarefas longas como atualizações da biblioteca, descargas e restauração de backups. Conceder Novo no %s? Recomendamos dar uma olhada no guia de introdução. Nord \"%1$s\" ao invés de \"%2$s\" Adiciona repositórios adicionais ao %s. Deve ser uma URL que termine com \"index.min.json\". URL do repositório inválido Deseja deletar o repositório \"%s\"? Abrir repositório da fonte O repositório %1$s tem a mesma impressão digital da chave de assinatura que %2$s. \nSe isto for esperado, %2$s será substituído, caso contrário, entre em contato com o mantenedor do repositório. Reduz o efeito fantasma em ecrãs de e-ink Erro completo: Configurações das fontes Incluir configurações sensíveis (tokens de login dos monitoradores, por exemplo) Não foi possível criar o ficheiro do backup Há resultados Em breve Nunca Guia de próximos lançamentos Próximo mês Mês anterior Também remover do %s Vamos definir algumas coisas primeiro. Sempre pode fazer alterações nas configurações depois também. Próximo Começar Escolha uma pasta onde o %1$s irá armazenar as descargas de capítulos, backups e mais. \n \nUma pasta dedicada é recomendada. \n \nPasta selecionada: %2$s Apagar scanlators Nenhum scanlator encontrado Mover série para o fim Guia de introdução Atualização inteligente Revogar a confiabilidade de extensões desconhecidas Repositórios de extensões Este repositório já existe! Local de armazenamento não definido Login do monitorador Usado para backups automáticos, descargas de capítulos e na fonte local. Último backup automático feito em: %s Sincronização da biblioteca finalizada Novos capítulos com previsão de serem lançados em torno de %1$s, verificando em torno de cada %2$s. Isto irá remover o monitoramento localmente. Desativar redução de zoom Exibir as próximas atualizações A seguir Todas as entradas lidas Copiar hiperligação Preto Branco Cópia de segurança JSON não suportada Ficheiro de Cópia de Segurança corrompido Repositórios de Extensões Aleatório Enviar dados de utilização anónimos para melhorar funções da aplicação. Se enviar os registos de crache e as analíticas irá permitir-nos identificar e resolver problemas, melhorar o desempenho, e realizar futuras atualizações que sejam mais relevantes para as suas necessidades Estatíscas e Logs de Crash Atualizar progresso quando for marcado como lido Este mangá ou está completo ou ainda não tem uma data de lançamento prevista. Rastreadores atualizados para o capítulo %d Erro ao adquirir o acesso persistente à pasta. A aplicação pode comportar-se inesperadamente. Enviar logs de crash Enviar logs de crash anónimos para os desenvolvedores. Permitir estatísticas Segurança %1$s ms Branco e Preto Remover Remover Extensão? Queres mesmo remover a extensão: \"%s\"? Ignorar a transferência dos capítulos lidos duplicados Atualizar os rastreadores para o capítulo %d? Desejas adicionar o seguinte repositório: \"%s\"? Automático Manter entradas com capítulos lidos Notas Editar notas Artista Autor Equipa de tradução Doar Capítulos não lidos ================================================ FILE: i18n/src/commonMain/moko-resources/pt-rBR/plurals.xml ================================================ Após %1$s minuto Após %1$s minutos Após %1$s minuto %1$d capítulo novo %1$d capítulos novos %1$d capítulos novos Capítulos %1$s e mais 1 Capítulos %1$s e mais %2$d Capítulos %1$s e mais %2$d Para %d item Para %d itens Para %d itens Atualização de extensão disponível %d atualizações de extensão disponíveis %d atualizações de extensão disponíveis %1$s restante %1$s restantes %1$s restantes %d categoria %d categorias %d categorias Concluído em %1$s com %2$s erro Concluído em %1$s com %2$s erros Concluído em %1$s com %2$s erros %1$s capítulo %1$s capítulos %1$s capítulos %d monitorador %d monitoradores %d monitoradores Pulando %d capítulo, ou ele está faltando na fonte, ou ele foi filtrado Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados Ontem %1$d dias atrás %1$d dias atrás Próximo capítulo não lido Próximos %d capítulos não lidos Próximos %d capítulos não lidos Próximo capítulo Próximos %d capítulos Próximos %d capítulos Faltando %1$s capítulo Faltando %1$s capítulos Faltando %1$s capítulos %d dia(s) %d dias %d dias %d repositório(s) %d repositórios %d repositórios Amanhã Em %1$d dias Em breve Migrar %1$d entrada? Migrar %1$d entradas? Copiar %1$d entrada? Copiar %1$d entradas? Uma entrada foi ignorada %1$d entradas foram ignoradas 1 página %1$s páginas ================================================ FILE: i18n/src/commonMain/moko-resources/pt-rBR/strings.xml ================================================ Nome Categorias Itens da biblioteca Capítulos Monitoramento Histórico Configurações Fila de downloads Biblioteca Histórico Atualizações Backup e restauração Configurações Filtrar Favorito Não lido Remover filtros Alfabeticamente Total de capítulos Último lido Pesquisar Selecionar tudo Marcar como lido Marcar como não lido Marcar anteriores como lidos Fazer download Adicionar capítulo aos favoritos Remover capítulo dos favoritos Remover Atualizar biblioteca Editar Adicionar Adicionar categoria Editar categorias Renomear categoria Definir categorias Editar a capa Pausar Capítulo anterior Próximo capítulo Tentar novamente Remover Retomar Abrir no navegador Modo de visualização Visualizar Grade compacta Lista Cancelar Ordenar Instalar Compartilhar Salvar Redefinir Desfazer Abrir registro de eventos Restaurar Carregando… Aplicativo indisponível Geral Leitor Downloads Monitoramento Avançado Sobre Itens por linha Retrato Paisagem Atualizações automáticas Desligado A cada 6 horas A cada 12 horas Diariamente A cada 2 dias Semanalmente Todas Restrições do dispositivo para atualizações automáticas Quando carregando Pular itens com o estado \"Completo\" Atualizar o progresso após a leitura Categoria padrão Sempre perguntar Tela cheia Animar as transições de página Mostrar o número da página Aparar as bordas Brilho personalizado Filtro de cor personalizado Manter a tela ligada Navegação Botões de volume Inverter os botões de volume Cor de fundo Branco Preto Modo de leitura padrão Paginado (esquerda para direita) Paginado (direita para esquerda) Paginado (vertical) Tira longa Tipo de escala Ajustar à tela Estender Ajustar à largura Ajustar à altura Tamanho original Ajuste inteligente Posição inicial do zoom Automática Esquerda Direita Centro Orientação padrão Automática Retrato bloqueado Paisagem bloqueado R G B A Após marcado como lido manualmente Excluir automaticamente após a leitura Desativado Último capítulo lido Penúltimo capítulo lido Antepenúltimo capítulo lido Quarto capítulo lido antes do último Quinto capítulo lido antes do último Fazer download de novos capítulos Monitoradores Criar backup Pode ser usado para restaurar a biblioteca atual Restaurar backup Restaura a biblioteca de um arquivo de backup Frequência de backup automático Backup criado Restauração concluída Do que você deseja fazer backup? Restaurando backup Criando backup Limpar o cache de capítulos Utilizado: %1$s Cache limpo. %1$d arquivos excluídos Ocorreu um erro ao limpar Limpar os cookies Cookies limpos Limpar o banco de dados Exclui o histórico de itens que não estão salvos em sua biblioteca Entradas excluídas Versão Enviar relatórios de erro Ajuda a corrigir eventuais erros. Nenhum dado sensível será enviado Fazer login em %1$s Nome de usuário Senha Fazer login Login realizado Erro desconhecido Atualizando categoria Não há mais resultados Fonte local Em andamento Desconhecido Licenciado Remover da biblioteca Excluir os capítulos disponíveis offline? Capítulo %1$s Fazendo download (%1$d/%2$d) Erro Pausado Título da fonte Número do capítulo Pela fonte Pelo número do capítulo Fazer download Não lidos Você tem certeza que quer excluir os capítulos selecionados? Monitoramento Lendo Concluído Abandonado Em espera Planejo ler Avaliação Título Estado Já existe uma categoria com este nome! Categorias excluídas Isso irá remover a data de leitura deste capítulo. Você tem certeza? Redefinir todos os capítulos deste item Adicionar à biblioteca? Imagem salva Filtro personalizado Usar como capa Capa atualizada Página: %1$d Próximo capítulo não encontrado A imagem não pôde ser carregada Usar esta imagem como capa? Não foi possível fazer o download dos capítulos. Você pode tentar novamente na seção de downloads Novos capítulos encontrados Erro ao atualizar a capa Por favor, adicione o item à sua biblioteca antes de fazer isso Selecionar imagem de capa Selecionar arquivo de backup Fazer download Sem atualizações disponíveis Fazendo download… Toque para instalar a atualização Erro ao fazer download Nova versão disponível! Nenhum download Sem atualizações recentes Nada lido recentemente A sua biblioteca está vazia Gerenciador de downloads Erro Não foi possível realizar o download do capítulo devido a um erro inesperado Conexão Wi-Fi indisponível Conexão à rede indisponível Downloads pausados Pesquisa global Outras Pesquisa global… Recentes Navegar Comum Capítulos disponíveis offline Você ainda não tem nenhuma categoria. Toque no botão Adicionar para criar uma e organizar a sua biblioteca. Migrar Extensões Informações da extensão Atualizar Instalar Pendente Fazendo download Instalando Instalada Confiar Não confiável Desinstalar Extensão não confiável Extensões maliciosas podem ler quaisquer credenciais de login armazenadas ou executar códigos arbitrários. \n \nAo confiar nessa extensão, você estará aceitando estes riscos. Velocidade da animação do toque duplo Sem animação Normal Rápida Adicionado à biblioteca Removido da biblioteca Copiado para a área de transferência: \n%1$s Selecione os dados para incluir Migrar Copiar Fonte não instalada: %1$s Relendo Paginação Estado Tipo Concluído: Atual: Próximo: Anterior: Não há próximo capítulo Não há capítulo anterior Carregando as páginas… Falha ao carregar as páginas: %1$s Mostrar as ações no toque longo Abrir na WebView Pular os capítulos marcados como lidos Divisão Ajuda Modo de aplicação do filtro de cor Sobreposição Multiplicação Clarear Escurecer Voltar Avançar Recarregar Biblioteca Obsoleto Esta extensão não está mais disponível. Ela pode não funcionar corretamente e pode causar problemas no aplicativo. É recomendado desinstalá-la. Nenhum resultado encontrado Selecione uma fonte da qual migrar Formato de data Atualização global Desconectar de %1$s? Desconectar Você foi desconectado Pausado Mais Último capítulo Visualizar os capítulos Cancelar todos Claro Escuro Sistema Gerenciar notificações Segurança e privacidade Exigir desbloqueio Bloquear quando ocioso Sempre Nunca Tela segura Atualizações pendentes Mostrar conteúdo na área de recorte da tela Falha ao contornar o Cloudflare Por favor, atualize o aplicativo de WebView para uma melhor compatibilidade Atualizações de capítulos A tela segura oculta os conteúdos do aplicativo durante a troca de aplicativos e impede capturas de tela Visualização Capítulo %1$s Capítulo %1$s e mais %2$d Capítulos %1$s Ocultar conteúdo da notificação Desativar a otimização de bateria Ajuda com as atualizações e os backups da biblioteca em segundo plano A otimização de bateria já está desativada Endereço de email Sempre mostrar a transição entre capítulos Menu Mais novos Mais antigos Mover para o começo Mover para o final Atualizações de extensões Atualizando a biblioteca Leitura Pular os capítulos filtrados Fontes Inverter a seleção Tira longa com lacunas Margem lateral Fixado Desafixar Fixar Adicionar monitoramento Adicionar à biblioteca Na biblioteca Menos Mais A WebView é necessária para o funcionamento do app Licenças de código aberto Site Somente disponíveis offline Falha no backup O backup já está em andamento A restauração já está em andamento Cap. %1$s - %2$s Restauração cancelada Falha ao restaurar o backup Última utilizada Procurar por atualizações Guia sobre a fonte local %1$02d min e %2$02d seg Filtra todos os itens em sua biblioteca Cinza Modo de leitura Para esta série Não foi possível abrir as configurações do dispositivo Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços monitoradores externos. Configure o monitoramento para itens individuais a partir de seus botões de monitoramento. Atualizar as capas da biblioteca Pela data de envio Dados Fontes faltando: O backup não possui nenhum item da biblioteca. Arquivo de backup inválido: Verifica por novas capas e detalhes durante a atualização da biblioteca Atualizar os metadados automaticamente Migrar Grade confortável Mostrar as abas de categoria Abas Nenhuma página encontrada Desativar todas Ativar todas Mostra de forma resumida o modo atual quando o leitor for aberto Mostrar o modo de leitura Iniciar Fonte não encontrada Desativar Requer o reinício do aplicativo para ter efeito Rede Nenhum Ambos Vertical Horizontal Inverter as zonas de toque Estado desconhecido Autor desconhecido Atualizado para v%1$s O que há de novo Não foi possível fazer o download dos capítulos devido ao pouco espaço de armazenamento Data de inclusão Pesquisar por \"%1$s\" globalmente Modo de leitura Tema Você não tem fontes fixadas Andamento Concluído Erros Monitoradores sem login realizado: Permitir a exclusão de capítulos favoritos Excluir capítulos As fontes desta extensão podem ter conteúdo NSFW (+18) +18 Isso não impede que extensões não oficiais ou potencialmente sinalizadas de maneira incorreta apresentem conteúdo NSFW (+18) no aplicativo. Nenhum capítulo encontrado Configurações padrões de capítulo atualizadas Definir como padrão Também aplicar a todos os itens na minha biblioteca Você tem certeza que quer salvar como padrão essas configurações? Configurações de capítulo %1$s: %2$s, página %3$d Pesquisar nas configurações Da biblioteca Capítulos disponíveis offline Pausa o histórico de leitura Modo anônimo Limpar o histórico Você tem certeza? Todo o histórico será perdido. Histórico excluído Próxima página Página anterior Guia sobre a migração de fonte Fontes NSFW (+18) Mostrar na lista de fontes e extensões Nenhum aplicativo de seleção de arquivos encontrado Por favor, faça login no MAL novamente Borda Kindle Em forma de L Zonas de toque Data de término Data de início Salva os registros de erro em um arquivo para o compartilhamento com os desenvolvedores Compartilhar os registros de travamentos Decrescente Crescente Pelo número do capítulo Pela data de envio Monitorado Mostrar o número de itens Direita e Esquerda Dividir as páginas longas Se a posição das páginas longas divididas não se adequar ao modo de leitura Inverter a posição das páginas divididas Você precisará instalar quaisquer extensões que estejam faltando e depois realizar o login nos serviços de monitoramento para utilizá-los. Mostra rapidamente quando o leitor for aberto Mostrar a sobreposição das zonas de toque Direita Esquerda Próxima Anterior DNS sobre HTTPS (DoH) Nenhuma Excluir: %s Incluir: %s Data de busca do capítulo Os itens nas categorias excluídas não serão atualizados mesmo que eles também estejam nas categorias incluídas. Os itens nas categorias excluídas não serão disponibilizados offline mesmo que eles também estejam nas categorias incluídas. Download automático Toque para ver os detalhes Esta versão do Android não é mais suportada Erro ao copiar para a área de transferência Paisagem Retrato Cria as pastas usando os títulos dos itens Salvar as páginas em pastas separadas Ações Orientação Nível de cinza Desabilitar o modo anônimo Auto Cancelar todos para esta série Nenhum resultado encontrado Fonte não suportada Não lido Data Ordenar por Formato de capítulo inválido Capítulo não encontrado Restrições: %s Fonte local Desligado Ligado Erro ao compartilhar a capa Erro ao salvar a capa Capa salva Capa Configurações por categoria para ordenação Guia sobre o monitoramento Você não tem categorias ainda. Começar o download agora Algumas fabricantes possuem restrições adicionais de aplicativos que encerram os serviços em segundo plano. Este site possui mais informações sobre como corrigir este problema. O backup e restauração podem não funcionar corretamente se a Otimização da MIUI estiver desabilitada. Modo noturno com preto absoluto Yotsuba Yin & Yang Tako Daiquiri de Morango Aurora-da-noite Maçã-verde Tema do aplicativo Oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados em sua biblioteca. Monitoradores aprimorados Dinâmico Atividade em segundo plano Mais baixa Baixa Alta Mais alta Sensibilidade para ocultar o menu na rolagem Invertido Hoje Azul-petróleo & Turquesa Autentique-se para confirmar a mudança Padrão Aparência Monitorar Guia de introdução Interface de tablet Categorias ignoradas Ajudar a traduzir Informações O Shizuku não está em execução Legado Instalador Instalando a extensão… Instale e inicie o Shizuku para utilizá-lo como o instalador de extensões. Total de itens Imprime registros detalhados no registro de eventos do sistema (reduz o desempenho do aplicativo) Registro de eventos detalhado Idioma Atualizações com muitos itens prejudicam as fontes e podem deixar as atualizações lentas e aumentar o uso da bateria. Toque para saber mais. Aviso Você deve manter cópias em outros locais também. Backups podem ter informações sensíveis incluindo senhas salvas; tenha cuidado se compartilhar. Somente no Wi-Fi A cada 3 dias Aviso: grandes downloads em massa podem levar as fontes a ficarem lentas e/ou começarem a bloquear o %s. Toque para saber mais. Atualizar tudo Atualizações do aplicativo Limpar o cache de capítulos ao abrir o aplicativo %1$d itens que não estão na biblioteca no banco de dados Nada a ser limpo Erro ao obter as extensões disponíveis Política de privacidade Pular itens com capítulos não lidos Para obter ajuda sobre como corrigir erros de atualização da biblioteca, veja %1$s Salvar como arquivo CBZ Publicação finalizada Cancelado Em hiato Mostrar o item Navegar imagens longas Dar zoom automaticamente em imagens largas Grade somente com capas Pular itens que não tiveram a leitura iniciada Pulado porque a série está finalizada Pulado porque há capítulos não lidos Pulado porque nenhum capítulo foi lido %1$d atualização(ões) falhou(aram) Toque para saber mais Retrato invertido Mover série para o começo Desativado Erro ao salvar a imagem Nenhuma entrada na biblioteca para fazer backup Abrir no GitHub Limpar os dados da WebView Dados da WebView limpos Fechar Nenhuma fonte instalada foi encontrada Nenhuma fonte encontrada Contagem de não lidos Ultima checagem de atualização Melhora o desempenho do leitor Página %d não encontrada durante a divisão Não foi possível encontrar o caminho do arquivo da página %d Redefine o modo de leitura e orientação de todas as séries Todas as configurações do leitor foram redefinidas Não foi possível redefinir as configurações do leitor Redefinir as configurações do leitor em cada série Bem, isso é esquisito Versão Idioma Classificação Lista de Leitura Lista de Desejos Lista de Completos Lista de Pausados Lista de Inacabados Somente em redes não limitadas Não foi possível abrir o último capítulo lido Capa personalizada Não instalado Idioma do aplicativo Lavanda Sem descrição Deletar categoria Você deseja deletar a categoria \"%s\"? Erro interno: Verifique os registros de travamento para mais informações User Agent padrão Redefinir o User Agent padrão Remover tudo Veja seus itens da biblioteca atualizados recentemente Widget não disponível quando o bloqueio do aplicativo está habilitado Uma atualização já está em andamento O valor do User-Agent não pode ficar em branco Onda Tidal Fazer download a frente Download automático durante a leitura Funciona somente se o capítulo atual e próximo já estão disponíveis offline. Você tem certeza? Múltiplos Última atualização da biblioteca: %s Você está prestes a remover \"%s\" de sua biblioteca Popular Permissões de armazenamento não concedidas Pulado porque a série não requer atualizações Pesquisar… Tema, formato de data e hora Categorias, atualização global, ações do capítulo Modo de leitura, exibição, navegação Download automático, download a frente Sincronização de progresso unidirecional, sincronização aprimorada Fontes, extensões, pesquisa global Backups manuais e automáticos, espaço de armazenamento Bloqueio do aplicativo, tela segura Exportar registros de travamento, otimizações de bateria Ooops! Reiniciar o aplicativo %s teve um erro inesperado. Nós sugerimos que você compartilhe os registros de travamento em nosso canal de suporte no Discord. Título desconhecido Local inválido: %s Valor de user agent inválido Agora Verificando os downloads Abrir um item aleatório Nenhum item encontrado nesta categoria Compilações do F-Droid não são suportadas oficialmente. \nToque para saber mais. Botão de continuar a leitura Remover data? Isto irá remover sua data de início selecionada anteriormente no %s Isto irá remover sua data de término selecionada anteriormente no %s Invalidar o índice de downloads Força o aplicativo a checar novamente por capítulos disponíveis offline Local Disponíveis offline Visão geral Itens completos Duração de leitura Itens Na atualização global Monitoradores Usados %dd %dh %dm Lidos Itens monitorados Estatísticas Iniciados Total Avaliação média N/A %ds Agora não A categoria está vazia Mostrar a contagem no ícone de Atualizações Copiado para a área de transferência Disponíveis, mas a fonte não está instalada: %s Pular capítulos duplicados Erro em %1$s: %2$s *obrigatório Ocultar títulos que já estão na biblioteca Copiar para a área de transferência Atualizar categoria Dividir imagens compridas Sobreposição Rotacionar páginas largas para caber Inverter a orientação das páginas largas rotacionadas Informações de depuração Capitulo ao deslizar para a direita Ação de deslizar para a esquerda Toque duplo para dar zoom Próxima atualização esperada Prever a data do próximo lançamento Definir intervalo Personalizar a frequência de atualizações Pulado porque nenhum lançamento era esperado hoje Intervalos Definido para atualizar todo Estimar todo OK Remover o monitoramento do %s? Isso irá remover o monitoramento localmente. Também remover do %s Deletar os disponíveis offline Há resultados Sincronizando a biblioteca Sincronização da biblioteca finalizada Toque aqui para obter ajuda com o Cloudflare Índice de downloads invalidado Login do monitorador Não foi possível criar o arquivo do backup HTTP %d, verifique o site na WebView Sem conexão de internet Não foi possível resolver %s Desbloquear o %s Mover série para o final Datas relativas \"%1$s\" ao invés de \"%2$s\" Configurações do aplicativo Atualizando a biblioteca… (%s) Configurações das fontes Nenhum arquivo selecionado Dados e armazenamento Reduz o efeito fantasma em telas e-ink Flash ao mudar de página Avaliação no monitorador Nunca Último backup automático feito em: %s Uso de armazenamento Aplicar Reverter para o padrão Nenhum scanlator encontrado Scanner Excluir scanlators Criar Selecionado Não selecionado Local de armazenamento Usado para backups automáticos, downloads de capítulos e na fonte local. Mais opções Navegar para cima Selecionar uma pasta Guia de introdução Novo no %s? Recomendamos dar uma olhada no guia de introdução. Começar Bem-vindo(a)! Reinstalando o %s? Pular Próximo Vamos definir algumas coisas primeiro. Você sempre pode fazer alterações nas configurações depois também. Local de armazenamento não definido Escolha uma pasta onde o %1$s irá armazenar os downloads de capítulos, backups e mais. \n \nUma pasta dedicada é recomendada. \n \nPasta selecionada: %2$s Uma pasta deve ser selecionada Permissão de notificação Permissão de instalação de aplicativos Evite interrupções para tarefas longas como atualizações da biblioteca, downloads e restauração de backups. Uso de bateria em plano de fundo Para instalar extensões de fontes. Seja notificado para atualizações da biblioteca e mais. Conceder Disponível: %1$s / Total: %2$s Permissões são necessárias para instalar extensões. Toque aqui para conceder. Incluir configurações sensíveis (tokens de login dos monitoradores, por exemplo) Novos capítulos com previsão de serem lançados em torno de %1$s, verificando em torno de cada %2$s. Frequência de atualização personalizada: Erro completo: Este repositório já existe! Atualização inteligente URL do repositório inválido Adiciona repositórios adicionais ao %s. Deve ser uma URL que termine com \"index.min.json\". Você deseja deletar o repositório \"%s\"? Deletar repositório Adicionar repositório Você não tem repositórios definidos. Repositórios de extensões URL do repositório Guia de armazenamento Atualizando de uma versão anterior e não tem certeza do que selecionar? Consulte o guia de armazenamento para mais informações. Em breve Nord Revogar a confiabilidade de extensões desconhecidas Abrir repositório da fonte Desativar redução de zoom Adicionar de qualquer maneira Substituir Próximo A impressão digital da chave de assinatura já existe O repositório %1$s tem a mesma impressão digital da chave de assinatura que %2$s. \nSe isso for esperado, %2$s será substituído, caso contrário, entre em contato com o mantenedor do repositório. Perfil de exibição personalizado Exibir as próximas atualizações Guia de próximos lançamentos Próximo mês Mês anterior Preto Branco Branco e Preto Você deseja adicionar o repositório \"%s\"? Copiar link Repositório de extensões Esse mangá foi completado, ou não tem uma data de lançamento prevista. Duração do flash %1$s ms Flash a cada Flash com Pule o download de capítulos duplicados já lidos Atualizar rastreadores para o capítulo %d? Falha ao adquirir acesso a uma pasta persistente. O aplicativo pode se comportar de maneira inesperada. Backup JSON não suportado O arquivo de backup está corrompido Automático Envie lgos de falhas anônimas para os desenvolvedores. Enviar dados de uso anônimos para melhorar os recursos do aplicativo. Análises e registros de falhas Aleatório Enviar logs de falhas Segurança Permitir análise Padrão (%d) Afeta o desempenho. Habilite somente se a redução do limite de bitmap não corrigir problemas de imagem em branco Remover Depois de ler um capítulo Use o decodificador legado para leitor de tira longa Remover extensão? O envio de logs de falhas e análises nos permitirá identificar e corrigir problemas, melhorar o desempenho e tornar as atualizações futuras mais relevantes para suas necessidades Comportamento Marcar capítulo lido duplicado como lido Atualizar progresso quando marcado como lido Você realmente deseja remover a extensão \"%s\"? Exportar Limite de bitmap de hardware personalizado Pausar histórico de leitura para extensão Rastreadores atualizados para o capítulo %d Rastreado de forma privada Rastrear privadamente Rastrear publicamente Capítulos não lidos Monocromático Depois de buscar um novo capítulo Se o leitor carregar uma imagem em branco, reduza o limite incrementalmente.\nSelecionado: %s Todas as entradas lidas Lista da biblioteca Biblioteca Exportada Autor Artista Cancelar Migrar Nenhum capítulo encontrado, esta entrada não pode ser usada para migração Cancelar Copiar Cancelar Parar Parar migração? Copiar agora Migrar agora Cancelar migração Pesquisar manualmente Desconhecido Mais recente: %1$s Nenhuma alternativa encontrada Migrar Copiar Migração (%1$d/%2$d) Migração Se ativado, escolhe a correspondência mais avançada. Caso contrário, seleciona a primeira correspondência pela prioridade da fonte. Correspondência baseada no número do capítulo Divide o título em palavras-chave para uma busca mais ampla Modo de busca avançada Essas opções são lentas e perigosas, e podem causar restrições nas fontes Mostrar a entrada somente se a correspondência tiver capítulos adicionais Ocultar entradas sem capítulos mais recentes Ocultar entradas sem correspondência Ajuda a refinar os resultados da busca adicionando palavras-chave adicionais Palavras-chave adicionais (opcional) Excluir downloads da entrada atual após a migração Dados para migrar Contiunar Selecionar fontes fixadas Selecionar fontes habilitadas Selecionar nenhum Selecionar todos Disponível Selecionado Gostou da parte onde… Você tem entradas na sua biblioteca com nomes semelhantes.\n\nSelecione uma entrada para migrar ou adicionar mesmo assim. Possíveis duplicatas Fazendo login… Aviso: se um mangá for renomeado, ele será removido da fila de downloads (se estiver presente). Atualizar os títulos dos mangás da biblioteca para corresponder à fonte Manter mangás com capítulos lidos Os capítulos lidos e o progresso de entradas fora da biblioteca serão perdidos Você está prestes a remover entradas do banco de dados Falha ao criar diretório: %s Falha ao criar diretório de download Ocultar indicadores de capítulos ausentes Editar anotações Anotações Catppuccin Doar Fechar aba Renderizar imagens em descrições de mangá ================================================ FILE: i18n/src/commonMain/moko-resources/ro/plurals.xml ================================================ După %1$s minut După %1$s minute După %1$s de minute %1$d capitol nou %1$d capitole noi %1$d capitole noi Capitolele %1$s și încă unul Capitolele %1$s și încă %2$d în plus Capitolele %1$s și încă %2$d mai multe Pentru %d intrare Pentru %d intrări Pentru %d intrări Actualizare de extensie disponibilă %d actualizări de extensii sunt disponibile %d actualizări de extensii sunt disponibile %1$s rămasă %1$s rămase %1$s rămase %d categorie %d categorii %d de categorii Gata în %1$s cu eroarea %2$s Gata în %1$s cu %2$s erori Gata în %1$s cu %2$s erori %1$s capitol %1$s capitole %1$s de capitole %d serviciu de urmărire %d servicii de urmărire %d de servicii de urmărire Omiterea %d capitol, fie că sursa lipsește, fie că a fost filtrată Omiterea a %d capitole, fie că sursa nu le are, fie că au fost filtrate Omiterea a %d capitole, fie că sursa nu le are, fie că au fost filtrate Ieri Acum %1$d zile Acum %1$d de zile Următorul capitol necitit Următoarele %d capitole necitite Următoarele %d de capitole necitite Următorul capitol Următoarele %d capitole Următoarele %d capitole Lipsește %1$s capitol Lipsesc %1$s capitole Lipsesc %1$s capitole O zi %d zile %d zile %d repozitoriu %d repozitorii %d de repozitorii Mâine În %1$d zile În %1$d de zile O pagină %1$s pagini %1$s de pagini Migrați %1$d intrare? Migrați %1$d intrări? Migrați %1$d de intrări? Copiați %1$d intrare? Copiați %1$d intrări? Copiați %1$d de intrări? O intrare a fost omisă %1$d intrări au fost omise %1$d de intrări au fost omise ================================================ FILE: i18n/src/commonMain/moko-resources/ro/strings.xml ================================================ Nume Categorii Intrări în bibliotecă Capitole Urmărind Istoric Setări Coadă de descărcări Bibliotecă Istoric Actualizări Backup și restaurare Migrează Extensii Informații extensie Setări Filtru Marcate Necitite Șterge filtru Alfabetic Total capitole Citite recent Caută Caută global Selectează tot Marchează ca citit Marchează ca necitit Marchează capitolele precedente ca citite Descarcă Marchează Capitolul Demarcați capitolul Șterge Actualizează biblioteca Modifică Adaugă Adaugă categorie Modifică categoriile Redenumește categoria Setați categoriile Modifică coperta Pauză Capitolul anterior Capitolul următor Reîncearcă Șterge Continuă Deschide în browser Modul de afișare Afișare Grilă compactă Listă Anulează Sortează Instalează Distribuie Salvează Resetează Anulează Deschide jurnal Restaurează Se încarcă… Aplicația nu este accesibilă Generale Cititor Descărcări Urmărite Avansat Despre Elemente pe rând Portret Actualizări automate Oprit La fiecare 6 ore La fiecare 12 ore Zilnic La fiecare 2 zile Săptămânal Toate Actualizează automat restricțiile dispozitivului La încărcare Cu statutul \"Completată\" Actualizarea progresului după citire Categorie implicită Întreabă mereu Actualizează Instalează În așteptare Se descarcă În curs de instalare Instalată Ai încredere Nesigură Dezinstalează Extensie nesigură Extensiile rău intenționate pot citi orice credențiale de autentificare stocate sau pot executa cod arbitrar. \n \nAcordând încredere acestei extensii, acceptați aceste riscuri. Ecran complet Animați tranzițiile de pagini Capitole descărcate Peisaj Viteza de animație pentru apăsare dublă Arată numărul paginii Taie marginile Luminozitate personalizată Filtru color personalizat Păstrează ecranul pornit Navigare Butoane de volum Inversează butoanele de volum Culoare de fundal Alb Negru Mod de citire implicit De la stânga la dreapta De la dreapta la stânga Paginat (vertical) Benzi desenate web Setări pagini Tip de scalare Potrivește ecran Întinde Potrivește pe lățime Potrivește pe înălțime Mărimea originală Potrivire inteligentă Poziție inițială de mărire Automat Stânga Dreapta Centru Fără animație Normal Rapid Tipul de rotație implicit Liberă Portret blocat Peisaj blocat Roșu Verde Albastru Alfa După ce a fost marcat manual ca citit După citire ștergeți automat Deactivat Ultimul capitol citit Penultimul capitol citit Al treilea până la ultimul capitol citit Al patrulea până la ultimul capitol citit Al cincilea până la ultimul capitol citit Descarcă capitole noi Servicii de urmărire Crează copie de rezervă Poate fii folosit pentru a restaura biblioteca curentă Restaurează un backup Restaurează biblioteca din fișierul de backup Frecvența de creare a backupurilor automate Backup creat Restaurare completă Doriți să creați o copie de rezervă? Restaurând copia de rezervă Creând copia de rezervă Curățare capitole depozitate Folosit: %1$s Depozit curățat. %1$d fișiere au fost șterse A apărut o eroare în timpul ștergerii Curăță cookies Cookies curățate Curățați baza de date Ștergeți istoricul pentru intrările care nu sunt salvate în bibliotecă Înregistrări șterse Versiune Trimite rapoarte pt. eșuări Ajută la rezolvarea bug-urilor. Informațiile sensibile nu vor fi trimise Conectați-vă la %1$s Nume de utilizator Parolă Autentificare Autentificat Eroare necunoscută Categorie in curs de actualizare Nu mai sunt rezultate Sursă locală Altele Căutare globală… Cel mai recent Caută În desfășurare Necunoscut Licențiat Elimină din bibliotecă Adăugat la bibliotecă Eliminat din bibliotecă Ștergeți capitolele descărcate? Copiat în clipboard: \n%1$s Sursa nu este instalată:%1$s Capitolul %1$s Se descarcă (%1$d/%2$d) Eroare Întrerupt Titlul sursei Numărul capitolului După sursă După numărul capitolului Descarcă Necitit Sigur doriți să ștergeți capitolele selectate? Urmărite Citind Completată Abandonată În așteptare Planificat pentru citit Recitind Scor Titlu Status Status Tip O categorie cu acest nume deja există! Categoriile au fost șterse Acest lucru va șterge data citirii acestui capitol. Ești sigur? Resetați toate capitolele pentru această intrare Adăugați la bibliotecă? Imagine salvată Filtru personalizat Stabilește ca și copertă Copertă actualizată Pagina: %1$d Capitolul următor nu a fost găsit Imaginea nu a putut să se încarce Folosiți această imagine ca și copertă? Terminat: Actual: Următorul: Precedent: Nu există capitolul următor Nu există capitolul precedent Paginile se încarcă… Încărcarea paginilor a eșuat: %1$s Selectați ce date să fie incluse Migrează Copiază Nu s-au putut descărca capitole. Puteți încerca din nou în secțiunea descărcări Capitole noi găsite Actualizarea copertei a eșuat Vă rugăm să adăugați intrarea în biblioteca dumneavoastră înainte de a face acest lucru Selectează imagine de copertă Selectează fișierul de rezervă Descarcă Nu sunt exista actualizări noi Se descarcă… Apăsați pentru a instala actualizarea Eroare la descărcare Versiune nouă disponibilă! Fără descărcări Nu există actualizări recente Nimic citit recent Biblioteca este goală Nu aveți categorii. Apăsați butonul plus pentru a crea una pentru a vă organiza biblioteca. Client de descărcare Eroare Nu s-a putut descărca capitolul din cauza unei erori neașteptate Nu este disponibilă nicio conexiune Wi Fi Nici o conexiune la internet valabilă Descărcare întreruptă General Deschide în WebView Mod filtru de culoare Acoperire Înmulțește Ecran Luminează Întunecă Treci peste capitolele marcate ca Citit Afișare la atingerea lungă Ajutor Nici un rezultat găsit Selectați o sursă din care să migrați Înapoi Înainte Actualizați Biblioteca Învechit Această extensie nu mai este disponibilă. Este posibil să nu funcționeze corect și poate cauza probleme cu aplicația. Se recomandă dezinstalarea acesteia. Formatul datei Actualizare globală Deconectează-te de la %1$s? Deconectează-te Acum ești deconectat Întrerupt Mai multe Vezi capitolele Anulează tot Oprită Pornită Tema sistemului Gestionați notificările Securitate și confidențialitate Necesită deblocare Cel mai recent capitol Blocați când este inactiv Întotdeauna Niciodată Securizează ecran Actualizări în așteptare Afișare conținut în zona decupată A eșuat evitarea Cloudflare Actualizați aplicația WebView pentru o compatibilitate mai bună Actualizări de capitole Ecranul securizat ascunde conținutul aplicațiilor la schimbarea aplicațiilor și blochează capturile de ecran Afișare Capitolul %1$s Capitolul %1$s și %2$d în plus Capitolele %1$s Ascunde conținutul notificării Dezactivați optimizarea bateriei Ajută la actualizările și copiile de rezervă ale bibliotecii în fundal Optimizarea bateriei este deja dezactivată Adresa de e-mail Arată întotdeauna tranziția capitolului Meniu Cele mai recente Cele mai vechi Mută pe prima poziție Mută pe ultima poziție Actualizări de extensie Se actualizează biblioteca Citind Săriți peste capitolele filtrate Surse Selectează invers Vertical continuu Fixate Căptușeală laterală Anulați fixarea Fixează Urmărește În bibliotecă Adaugă în bibliotecă WebView este necesar pentru Mihon Ch. %1$s - %2$s Mai puțin Mai mult Licențele open source Pagină web Restaurarea copiei de rezervă a eșuat Crearea copiei de rezervă a eșuat Doar descărcate Restaurare anulată Restaurarea este deja în curs de desfășurare Crearea copiei de rezervă este deja în curs de desfășurare Ghid sursă locală Data ultimei utilizări Verifică pentru actualizări %1$02d minute, %2$02d secunde Filtrează toate intrările din bibliotecă Mod de citire Pentru această serie Gri Imposibil de deschis setările dispozitivului Sincronizare unidirecțională pentru actualizarea progresului capitolului în cadrul serviciilor de urmărire. Configurați urmărirea pentru intrările individuale din butonul de urmărire al acestora. Reîmprospătarea coperților bibliotecii După data încărcării Surse lipsă: Copia de rezervă nu conține nicio intrare în bibliotecă. Verifica dacă exista copertă și detalii noi când biblioteca este actualizată Actualizează metadata-ul automat Grilă confortabilă Migrează Date Fișier de rezervă invalid: Nu s-au găsit pagini Tab-uri Afișează filele categoriei Dezactivați toate Activează toate Afișați scurt modul curent când este deschis cititorul Arată modul de citire Reţea Nu s-a găsit sursa Necesită repornirea aplicației pentru a avea efect Dezactivați Start Ambele Vertical Orizontal Nici unul Inversați zonele de atingere Stare necunoscută Autor necunoscut Actualizat la v%1$s Ce este nou Nu s-au putut descărca capitole din cauza spațiului de stocare redus Căutați „%1$s” la nivel global Mod citire Temă Data adăugării Erori Terminat Progresul Serviciile de urmărire nu sunt conectate la: Permite ștergerea capitolelor marcate Ștergeți capitole Sursele din această extensie pot avea conținut NSFW (18+) Peste 18 Acest lucru nu împiedică extensiile neoficiale sau potențial semnalizate incorect să iasă la suprafață cu conținut 18+ în cadrul aplicației. Nu aveți surse fixate Nu a fost găsit niciun capitol S-au actualizat setările implicite ale capitolului %1$s: %2$s, pagina %3$d Setați ca implicit Se aplică, de asemenea, tuturor intrărilor din biblioteca mea Sigur doriți să salvați aceste setări ca implicite? Setările capitolului Capitole descărcate Din bibliotecă Setări de căutare Întrerupe citirea istoricului Modul incognito Sterge istoricul Esti sigur? Toată istoria va fi pierdută. Istoricul a fost șters Pagina următoare Pagina anterioară Ghid de migrare a sursei Conținut NSFW (18+) Afișați în listele de surse și extensii Nicio aplicație de ales fișiere nu a fost găsite Te rugăm să te loghezi la MAL din nou Inversează plasamentul paginilor duble despărțite Împărțire pagini duble Afișați pe scurt când cititorul este deschis Afișați suprapunerea zonelor de atingere Descendent Ascendent După numărul capitolului După data postării Excludeți: %s Includeți: %s Înscrierile din categoriile excluse nu vor fi actualizate, chiar dacă acestea se află și în categoriile incluse. Atingeți pentru a vedea detaliile Afișare număr de elemente Nici unul DNS prin HTTPS (DoH) Data de terminare Data începerii Aruncați jurnalele de erori fatale Salvează jurnalele de erori într-un fișier pentru partajarea cu dezvoltatorii Zone de atingere Margine Similar unui Kindle În formă de L Data obținerii capitolului Urmărit Este posibil să fie necesar să instalați extensiile lipsă și să vă conectați ulterior la serviciile de urmărire pentru a le utiliza. Nu vor fi descărcate înscrierile din categoriile excluse, chiar dacă acestea se află și în categoriile incluse. Descărcare automată Dreapta Stânga Următorul Anterior Dreapta și stânga Dacă amplasarea divizării duble a paginii nu corespunde cu direcția de citire Această versiune Android nu mai este suportată Nu s-a reușit copierea în clipboard Eroare la distribuirea copertei Eroare la salvarea copertei Copertă salvată Capitolul nu a fost găsit Necitit Începe acum descărcarea Nu aveți încă nicio categorie. Dinamic Implicit Amurg de Miazănoapte Actualizări de aplicație Teal și turcoaz Sursă locală Aspect Tematică Aplicație Măr Verde Anulează totul pentru această serie Limbă Autentifică-te pentru a confirma schimbările Avertizare Daiquiri de căpșuni Tako Yin și Yang Yoțuba Editare finalizată Anulat În hiatus Ignorata deoarece seria este completa Ignorat din cauza lipsei de capitolel citite Format de capitol invalid Atenție : actualizarile mari în masă vor face sursele mai incete și/sau vor bloca %s. Apăsați pentru mai multe informatii. Ghidul de inceput %1$d actualizari esuate Ignorata deoarece sunt capitole necitite Nu există intrări în bibliotecă pentru a face backupuri Ștergeți categoria Inversate Servicii de urmărire îmbunătățite Datele WebView au fost șterse Unii producători au restricții suplimentare privind aplicațiile care opresc serviciile de fundal. Acest site web conține mai multe informații despre cum să le rezolvați. Nimic de curățat Ajută la traducere Sursa nu este acceptată Numai în rețea necontorizată Dată Sensibilitatea pentru ascunderea meniului la defilare Afișează intrarea Instalați și porniți Shizuku pentru a utiliza Shizuku ca instalator de extensii. %1$d înregistrări în baza de datecare nu aparțin bibliotecii Pagina %d nu a fost găsită în timpul divizării Doriți să ștergeți categoria \"%s\"? InternalError: Verificați jurnalele de accident pentru informații suplimentare Lavandă Mod întunecat negru pur Servicii care oferă caracteristici îmbunătățite pentru anumite surse. Înregistrările sunt urmărite automat atunci când sunt adăugate la biblioteca dumneavoastră. Ar trebui să păstrați copii ale backupurilor și în alte locuri. Îmbunătățește performanța cititorului Închide Azi Listă de citit Lista de dorințe Lista completă Acoperire tip grilaj Mutați seria pe prima poziție Care nu au fost începute Shizuku nu rulează Limba aplicației Restricții: %s Cel mai înalt Înalt Scăzut Ștergeți datele WebView Lista în așteptare Cu capitol(e) necitit(e) Cel mai scăzut Lista neterminată Număr de necitite Este posibil să nu funcționeze corect backup/restaurare dacă MIUI Optimization este dezactivată. La fiecare 3 zile Doar prin Wi Fi Oprit Informații despre aplicație Copertă personalizată Copertă O actualizare rulează deja Categorii excluse Setări per categorie pentru sortare și afișare Tip de rotație Portret Politica de confidențialitate Descărcă automat în timp ce citiți Versiune Limbă Salvează ca arhivă CBZ Ultima verificare a actualizării Șterge memoria cache a capitolului la închiderea aplicației Ordonează după Nu se poate deschide ultimul capitol citit Nu s-a putut obține lista de extensii Se instalează extensia… Program de instalare Creează dosare în funcție de titlul intrărilor Automat Pornit Ești sigur? Eroare la salvarea imaginii Actualizează tot Deactivat Șterge tot Acțiuni Salvează pagini în dosare separate Fără descriere Dezactivează modul incognito Funcționează numai dacă capitolul curent + următorul sunt deja descărcate. Pentru ajutor în cum se repară erori de actualizări de bibliotecă, vezi %1$s Alb-negru Peisaj Apasă pentru a afla mai multe Măriți imaginea în format peisaj Resetați setările de cititor per serie Interfață de tabletă Urmăriți Resetați modul de citire si orientare pentru toate seriile Descarcă înainte Multiple Actualizări mari dăunează surselor și pot duce la actualizări mai lente și creșterea nivelului de utilizare a bateriei. Apasă pentru a afla mai multe. Activități în fundal Deschide pe GitHub Nu este instalat Total intrări Caută… Tsunami Vârsta minimă Versiune veche Ghid de urmărire Format portret întors Permisiunile de stocare nu au fost acceptate Toate setările de citire au fost resetate Populare Nimic asemănător nu a fost găsit Sunteți pe cale să eliminați \"%s\" din biblioteca dvs Nici o sursă instalată nu a fost găsită Vizualizați intrările recent actualizate din bibliotecă Nu am putut reseta setările de citire Nici o sursă găsită Ignorat deoarece seria nu necesită actualizări Ultima actualizare a bibliotecii: %s Ei bine, nu ar trebui sa vezi asta Nu am putut găsi calea paginii %d Titlu necunoscut Locație invalidă: %s Tipărirea rapoartelor verbale către jurnalul de sistem (reduce performanța aplicației) Șir de caractere invalid pentru agentul de utilizator Restabilirea șirului implicit de agent al utilizatorului Chiar acum Consemnare verbală %s a întâmpinat o eroare neașteptată. Vă sugerăm să faceți o captură de ecran a acestui mesaj, să descărcați registrele de erori și apoi să le partajați prin intermediul canalului nostru de asistență pe Discord. Widgetul nu este disponibil atunci când este activată blocarea aplicației Tema, formatul datei și al orei Categorii, actualizări globale Modul de citire, afișare, navigare Descărcare automată, descărcare anticipată Sincronizare unică a progresului, sincronizare optimizată Surse, extensii, căutare globală Copii de rezervă manuale și automate Blocarea aplicației, securizarea ecranului Golirea registrelor de eroare, optimizări ale bateriei Șirul implicit de agent al utilizatorului Șirul agentului de utilizator nu poate fi gol Ups! Reporniți aplicația Panoramare a imaginii la scară largă la atingere Afișați butonul de continuare a cititului Nu s-au găsit intrări în această categorie Acest lucru va elimina data de finalizare selectată anterior din %s Reindexați descărcările Descărcări de indexare Eliminați data? Acest lucru va elimina data de început selectată anterior din %s Versiunile F-Droid nu sunt acceptate oficial. \nApăsați pentru a afla mai multe. Deschideți aleatoriu Obligați aplicația să refacă verificarea capitolelor descărcate Afiseaza numarul de notificari necitite pe pictorgrama Actualizari Statistici Local Început Descărcat Prezentare generală %ds Nu acum Intrari complete Durata cutirii Intrari In actualizare globala Total Citit Servicii de urmărire Scorul mediu Utilizat N/A %dd %dh %dm Categorie goala Treci peste capitolele duplicae Disponibil, dar sursa nu este instalata: %s %1$s eroare: %2$s *necesar Copiat in clipboard Deblochează %s Șterge descărcările Setează intervalul Scanlator Date și stocare Următoarea actualizare așteptată Frecvență de actualizare personalizată Locație de stocare Atinge aici pentru ajutor cu Cloudflare Creați Niciodată Reduceți imaginile fantomă pe ecranele e-ink Copiați în clipboard Rotiți paginile late pentru a se potrivi Folosit pentru copii de rezervă automate, capitole descărcate, și surse locale. Aplică Informații de depanare Sincronizare bibliotecă Copia de rezervă nu a putut fi creată Intervale Reveniți la implicit Actualizați categoria Mai multe opțiuni Sincronizare bibliotecă completă Ultima copie de rezervă creata la: %s Răsturnați orientarea paginilor late rotite Selectat Nici un scanlator nu a fost găsit Nu a fost selectat Mutați seria pe ultima poziție Glisare către dreapta a unui capitol Fără conexiune la internet Utilizarea spațiului de stocare Actualizare bibliotecă… (%s) Indexul de descărcări a fost invalidat Navighează în sus Scorul serviciului de urmărire Sărit peste deoarece nici o lansare nu era așteptată astăzi Nici o filă selectată Eliminați monitorizarea %s? Setări surse Setări aplicație Glisare către stânga a unui capitol De asemenea elimină din %s Împărțiți imaginile înalte Au fost găsite rezultate Această acțiune va elimina local monitorizarea. În afara perioadei de lansare estimată Ok Atingeți de două ori pentru a mări Autentificare serviciu de urmărire Ascundeți înregistrările care se află deja în bibliotecă Marcaje de timp relative HTTP %d, verificați site-ul in modul WebView \"%1$s\" în loc de \"%2$s\" Nu a putut fi accesat %s Înregistrări monitorizate Exclude scanlator Ghid de îmbarcare Bine ați venit! Următorul Omite Selectează un folder Un folder trebuie selectat Actualizați de la o versiune mai veche și nu sunteți sigur ce să selectați? Pentru mai multe informații, consultați ghidul de stocare. Ghid de stocare Permisiunea de a instala aplicații Pentru a instala extensii sursă. Utilizarea bateriei în fundal Evitați întreruperile actualizărilor bibliotecii, descărcărilor, și restaurărilor de lungă durată. Acordă Reinstalare %s? Actualizare inteligentă Repozitoriu extensii Nu aveți nici un repozitoriu configurat. Adăugați repozitoriu Adăugați repozitorii adiționale pentru %s. Acestea ar trebuii să fie URL-uri care se încheie cu \"index.min.json\". Doriți să ștergeți repozitoriul \"%s\"? Repozitoriu open source Nici o locație pentru stocare nu a fost setată Eroarea completă: Includeți setări sensibile (ex. token-ul serviciilor de urmărire al logări) Disponibil: %1$s / Total: %2$s Estimează la fiecare Configurează actualizări la fiecare Se preconizează că vor fi lansate noi capitole în aproximativ %1$s, verifică la fiecare %2$s. În curând Frecvența personalizată de actualizare: Să configurăm câteva lucruri mai întâi. Le puteți schimba oricând în setări și mai târziu. Începe Selectează un folder unde %1$s va păstra capitolele descărcate, copiile de rezervă, și altele. \n \nSe recomanda folosirea unui folder dedicat. \n \nFolder-ul selectat: %2$s Permisiune de notificare Primiți notificări pentru actualizările bibliotecii și altele. Nou pe %s? Vă recomandăm să consultați ghidul introductiv. Sunt necesare permisiuni pentru instalarea de extensii. Atingeți aici pentru a permite. Revocați încrederea extensiilor necunoscute URL repozitoriu Acest repozitoriu există deja! Șterge repozitoriu URL repozitoriu invalid Viitoare Nord Repozitoriul %1$s are acceeași amprenta digitală a cheii de semnare ca și %2$s \nÎn cazul în care asta este la ce vă așteptați, %2$s va fi înlocuit, altfel contatati întreținătorul repozitoriului. Profil de afișare personalizat Adăugați oricum Înlocuiți Amprenta digitală a cheii de semnare există deja Dezactivați funcția de zoom-out Vizualizați actualizările viitoare Ghidul viitor Luna următoare Luna anterioară Repo-uri extensii Această manga este fie finalizată, fie nu există preconizare pentru data lansării. Negru Luminează cu Alb Alb și Negru Luminează la fiecare Copiați link-ul A eșuat obținerea accesului persistent la folder. Aplicația se poate comporta în mod neașteptat. Durată luminare Luminează la schimbarea paginii Strat acoperitor Doriți să adăugați repo-ul „%s”? %1$s ms Omiteți descărcarea duplicatelor pentru capitolele deja citite Copie de rezervă JSON nu este admisibilă Copie de rezervă este coruptă Actualizați serviciile de urmărire la capitolul %d? Toate înregistrările citite Aleatoriu Trimiteți date de utilizare anonimizate pentru a îmbunătăți funcțiile aplicației. Securitate Jurnale de analiză și de erori Actualizare progres atunci când este marcat ca citit Servicii de urmărire actualizate la capitolul %d Trimiteți anonim jurnalele de blocare către dezvoltatorilor. Permiteți analizele Trimiteți jurnalele de eroare Trimiterea jurnalelor de erori și a analizelor ne va permite să identificăm și să rezolvăm problemele, să îmbunătățim performanța și să facem actualizările viitoare mai relevante pentru nevoile dumneavoastră Eliminați Eliminați extensia? Chiar doriți să eliminați extensia „%s”? Implicit (%d) Prag bitmap hardware personalizat Dacă cititorul încarcă o imagine goală, reduceți treptat pragul.\nSelectat: %s Afectează performanța. Activați numai dacă reducerea pragului bitmap nu rezolvă problemele legate de imaginile goale Automatic Întrerupeți istoricul de lectură pentru extensie Donează Capitole necitite Notițe Editează notițe Catppuccino Monocromatic Afișați imagini în descrierile benzilor desenate Comportament Marcați capitolele duplicate ca citite După citirea unui capoitol După aducerea noilor capitole Ascunde indicatoarele pentru capitolele absente Utilizați decodurul vechi pentru tipul bandă lungă Directorul pentru descărcări nu a putut fi creat Directorul: %s nu a putut fi creat Exportă Listă biblioteci Bibliotecă exportată Ești pe cale să elimini intrări din baza de date Capitolele citite și progresul intrărilor care nu sunt în bibliotecă vor fi pierdute Păstrați intrările cu capitole citite Actualizați titlurile benzilor desenate din bibliotecă pentru a le potrivi cu sursa Atenție: dacă o bandă desenată este redenumită, aceasta va fi eliminată din coada de descărcare (dacă este prezenă). Conectare… Autor Artist Posibile duplicate Aveți intrări cu un nume similar în bibliotecă.\n\nSelectați o intrare pentru migrare sau adăugați oricum. Urmărit în mod privat Urmăriți în mod privat Urmăriți în mod public Mi-a plăcut partea în care… Selectat Disponibil Selectați tot Selectați niciunul Selectați sursele active Selectați sursele fixate Continuați Date de migrat Ștergeți descărcările intrării curente după migrare Cuvinte cheie suplimentare (opțional) Ajutați la restrângerea rezultatelor căutării prin adăugarea de cuvinte cheie suplimentare Ascundeți intrările fără potrivire Ascundeți intrările fără capitole mai noi Afișați intrarea doar dacă are capitole suplimentare Aceste opțiuni sunt lente și periculoase și pot duce la restricții din partea surselor Mod de căutare avansată Împarte titlul în cuvinte cheie pentru o căutare mai amplă Potrivire în funcție de numărul capitolului Dacă este activată, alege potrivirea cea mai înaintată. În caz contrar, alege prima potrivire după prioritatea sursei. Migrare Migrare (%1$d/%2$d) Copiați Migarți Nu a fost găsită nici o alternativă Cel mai recent: %1$s Necunoscut Căutare manuală Nu migrați Migrați acum Copiați acum Opriți migrarea? Opriți Anulați Copiați Migrați Anulați Anulați Nu s-au găsit capitole, această intrare nu poate fi utilizată pentru migrare Nu permiteți nume de fișiere non-ASCII Asigurți compatibilitatea cu anumite medii de stocare care nu suportă Unicode. Când această opțiune este activată, va trebui să redenumiți manual directoarele sursă și cele de manga, înlocuind caracterele non-ASCII cu reprezentările lor hexadecimale UTF-8 cu litere mici. Fișierele capitolelor nu trebuie redenumite. ================================================ FILE: i18n/src/commonMain/moko-resources/ru/plurals.xml ================================================ После %1$s минуты После %1$s минут После %1$s минут После %1$s минут Главы %1$s и ещё одна Главы %1$s и ещё %2$d Главы %1$s и ещё %2$d Главы %1$s и ещё %2$d %1$d новая глава %1$d новые главы %1$d новых глав %1$d новых глав Для %d серии Для %d серий Для %d серий Для %d серий Доступно обновление для %d расширения Доступны обновления для %d расширений Доступны обновления для %d расширений Доступны обновления для %d расширений Осталась %1$s глава Осталось %1$s главы Осталось %1$s глав Осталось %1$s глав %d категория %d категории %d категорий %d категорий Выполнено за %1$s с %2$s ошибкой Выполнено за %1$s с %2$s ошибками Выполнено за %1$s с %2$s ошибками Выполнено за %1$s с %2$s ошибками %1$s глава %1$s главы %1$s глав %1$s глав %d сервис отслеживания %d сервиса отслеживания %d сервисов отслеживания %d сервисов отслеживания Отсутствует %d глава в источнике или была отфильтрована Отсутствуют %d главы в источнике или были отфильтрованы Отсутствуют %d глав в источнике или были отфильтрованы Отсутствуют %d глав в источнике или были отфильтрованы Вчера %1$d дня назад %1$d дней назад %1$d дней назад Следующая непрочитанная глава Следующие %d непрочитанные главы Следующие %d непрочитанных глав Следующие %d непрочитанных глав Следующая глава Следующие %d главы Следующие %d глав Следующие %d глав Отсутствует %1$s глава Отсутствуют %1$s главы Отсутствуют %1$s глав Отсутствуют %1$s глав 1 день %d дня %d дней %d дней %d репозиторий %d репозитория %d репозиториев %d репозиториев Завтра В течении %1$d дней В течении %1$d дней В течении %1$d дней 1 страница %1$s страницы %1$s страниц %1$s страниц Перенести %1$d серию? Перенести %1$d серии? Перенести %1$d серий? Перенести %1$d серий? Серия была пропущена %1$d серии было прощено %1$d серий было прощено %1$d серий было прощено Копировать %1$d серию? Копировать %1$d серии? Копировать %1$d серий? Копировать %1$d серий? ================================================ FILE: i18n/src/commonMain/moko-resources/ru/strings.xml ================================================ Добавить Добавить категорию Добавить закладку Отмена Удалить Отображение Компактная сетка Список Режим отображения Загрузить Изменить Изменить категории Изменить обложку Фильтрация В закладках Удалить фильтр Не прочитано Установить Пометить как «Прочитано» Пометить как «Не прочитано» Пометить предыдущее как «Прочитано» Добавить в категории Следующая глава Открыть в браузере Пауза Предыдущая глава Удалить Удалить закладку Переименовать категорию Сбросить Продолжить Повторить Сохранить Искать Выбрать всё Настройки Поделиться Сортировка Алфавит Последнее прочитанное Обновить библиотеку Все Чёрный Возникла ошибка при очистке Кэш очищен, %1$d файлов удалено Загружается (%1$d/%2$d) Ошибка Страница: %1$d Главы Когда заряжается Серии удалены Альфа Красный Зелёный Синий Завершено Вы уверены, что хотите удалить выбранные главы? Использовать это изображение как обложку? Cookies очищены Обложка обновлена Пользовательский фильтр Не удалось загрузить изображение Это действие удалит дату прочтения этой главы. Вы уверены? Сбросить все главы для этой серии Отключено Глава %1$s Загрузчик Нет соединения с сетью Нет соединения Wi-Fi Ошибка Невозможно скачать главу из-за непредвиденной ошибки Невозможно скачать главы. Можете попробовать ещё раз в очереди загрузок Непрочитанные главы Брошено Категория с таким названием уже существует! Пятая от прочитанной главы Выбрать файл резервной копии Выбрать обложку Четвёртая от прочитанной главы Ваша библиотека пуста Нет загрузок Нет новых обновлений Ничего не прочитано в последнее время Резервная копия Очередь загрузки Библиотека История Обновления Настройки Альбомная Последняя прочитанная глава Постранично (Слева направо) Лицензировано Загрузка… Вход Успешный вход Войти в %1$s Загрузить Отслеживание Название Следующая глава не найдена Не удалось обновить обложку Пожалуйста, добавьте серию в библиотеку перед тем, как делать это Найдены новые главы Отложено Выпускается Пароль Картинка сохранена Планирую прочесть Портретная Помогает исправлять все возможные ошибки. Данные пользователя не передаются Обновлять прогресс после прочтения Информация Дополнительно Загрузки Основные Читалка Отслеживание Очистить кэш глав Очистить cookies Очистить базу данных Удалить историю для серий, которые не находятся в библиотеке Пользовательская яркость Пользовательский светофильтр Загружать новые главы Отправлять отчёты об сбоях Анимированные переходы страниц Полноэкранный режим Масштабирование Не выключать экран Размер сетки Автоматические обновления Ограничения обновлений для устройства Клавиши громкости Навигация Цвет фона Удалять помеченое вручную как «Прочитано» Удалять после прочтения Ориентация по умолчанию Номер страницы Пропускать завершённые серии Режим чтения Стартовая позиция увеличения Читаю Удалить из библиотеки Постранично (Справа налево) Заблокированная альбомная Заблокированная портретная Системная По высоте Уместить в экран По ширине Исходный размер Умное Растянуть Оценка Предпоследняя прочитанная глава Сервисы отслеживания Установить как обложку Номер главы Название источника Добавить в библиотеку? Номер главы Источник Статус Третья от прочитанной главы Название Неизвестно Неизвестная ошибка Каждые 12 часов Ежедневно Каждые 2 дня Каждые 6 часов Загрузить Нет обновлений Нажмите для установки обновления Ошибка загрузки Загрузка… Доступно обновление! Выключено Обновление категории Использовано: %1$s Имя пользователя Версия Постранично (Вертикально) Длинные страницы Белый Автоматически По центру Слева Справа Восстановить Отменить Что добавить в резервную копию? Резервная копия создана Категории Пауза Создание резервной копии Основная категория Спрашивать Удалить загруженные главы? Загрузки приостановлены История Источник на устройстве Серии библиотеки Больше нет результатов Частота автоматических резервных копий Создать резервную копию Можно использовать для восстановления текущей библиотеки Обрезать поля Восстановить из резервной копии Восстановить библиотеку из резервной копии Восстановление завершено Восстановление из резервной копии Категории удалены Отслеживание Еженедельно Количество глав Открыть журнал Приложение недоступно Клавиши громкости наоборот Искать глобально Загруженные главы Другое Искать глобально… Последние Поисковик Общий Нет категорий в библиотеке. Нажмите кнопку «Добавить» чтобы создать категорию для организации вашей библиотеки. Перенос Расширения Информация о расширении Обновить Установить Ожидается Загружается Устанавливается Установлено Ненадёжное Удалить Ненадёжное расширение Вредоносные расширения могут считывать любые хранящиеся учётные данные для входа или выполнять произвольный код. \n \nДоверяя этому расширению, вы принимаете эти риски. Скорость анимации при двойном нажатии Без анимации Нормальная Быстрая Добавлено в библиотеку Удалено из библиотеки Скопировано в буфер обмена: \n%1$s Какие данные перенести Перенести Копировать Надёжное Постранично Источник не установлен: %1$s Перечитываю Статус Тип Закончена: Текущая: Следующая: Предыдущая: Следующей главы нет Предыдущей главы нет Идёт загрузка страниц… Не удалось загрузить страницы: %1$s Показать действия при долгом нажатии Открыть в WebView Пропускать прочитанные главы Режим светофильтра Наложение Умножение Экран Осветление Затемнение Помощь Нет результатов Выберите источник переноса Назад Вперед Обновить Библиотека Устаревшее Это расширение больше недоступно. Оно может работать неправильно, а также вызвать проблемы с приложением. Рекомендуется его удалить. Формат даты Глобальное обновление Выйти из %1$s? Выйти Вы успешно вышли На паузе Больше Последняя глава Просмотреть главы Отменить всё Светлая Тёмная Система Управление уведомлениями Безопасность и конфиденциальность Блокировка биометрией Блокировать при бездействии Всегда Никогда Защита экрана приложения Доступны обновления Показывать содержимое в вырезанной области Не удалось обойти Cloudflare Пожалуйста, обновите WebView для лучшей совместимости Обновления глав Глава %1$s и ещё %2$d Главы %1$s Глава %1$s Отображение Обновление библиотеки Оптимизация батареи уже выключена Помогает с обновлением библиотеки и резервной копией в фоне Отключить оптимизацию батареи Адрес электронной почты Переход между главами Скрыть содержимое уведомлений Защита экрана скрывает содержимое при переключении между приложениями, а также блокирует создание скриншотов Старейший Новейший В начало В конец Обновления расширений Меню Источники Чтение Пропускать отфильтрованные главы Выбрать наоборот Длинные страницы с зазорами Боковой отступ Закреплено Открепить Закрепить Добавить отслеживание Только загруженные главы Для работы приложения необходимо WebView Меньше Больше Добавлено Добавить Лицензии open-source Сайт Гл. %1$s - %2$s Руководство по источнику на устройстве Последний использованный источник Включает фильтр «Загружено» для всей библиотеки Проверить обновления Восстановление отменено Ошибка восстановления из резервной копии Восстановление уже выполняется Не удалось создать резервную копию Резервная копия уже выполняется %1$02d мин, %2$02d сек Режим чтения Для этой серии Серый Не удалось открыть настройки устройства Обновить обложки серий Односторонняя синхронизация для обновления прогресса в сторонних сервисах отслеживания. Настройте отслеживание при помощи кнопки «Отслеживание». Дата добавления Данные Отсутствующие источники: Резервная копия не содержит серий. Неверный файл резервной копии: При обновлении библиотеки проверять наличие новой обложки и сведений Обновлять метаданные Удобная сетка Перенести Вкладки Показать вкладки категорий Страницы не найдены Включить всё Отключить всё Ненадолго показать режим чтения при открытии читалки Показать режим чтения Начать Источник не найден Отключить Для вступления в силу требуется перезапуск приложения Сеть Обе оси Вертикально Горизонтально Нет Зоны касания наоборот Неизвестный статус Неизвестный автор Обновлено до %1$s Что нового Не удалось загрузить главы из-за малого объема хранилища Искать \"%1$s\" глобально Режим чтения Тема Последнее добавление серии У вас нет закреплённых источников Завершено Прогресс Ошибки Сервисы отслеживания в которые не выполнен вход: Удалять главы с закладками Удаление глав Источики из этого расширения могут содержать контент NSFW (18+) 18+ Это не предотвращает появление внутри приложения контента NSFW (18+) из неофициальных или потенциально неправильно помеченных расширений. Нет глав Настройки главы по умолчанию были обновлены Установить по умолчанию Также применить ко всем сериям в моей библиотеке Вы уверены, что хотите сохранить эти настройки по умолчанию? Настройки главы %1$s: %2$s, страница %3$d Искать настройки Загруженные главы Из библиотеки Приостанавливает историю чтения Режим инкогнито Очистить историю Вы уверены? Вся история будет удалена. История удалена Следующая страница Предыдущая страница Руководство по переносу источников Источники NSFW (18+) Показывать в списке источников и расширений Приложение для выбора файлов не найдено Пожалуйста, авторизуйтесь в MyAnimeList снова Зоны касания По краям Kindle-подобная L-образная Дата окончания Дата начала Сохраняет журнал сбоев в файл для отправки разработчикам Поделиться журналом сбоев По убыванию По возрастанию Номер главы Дата загрузки Отслеживается Показывать количество серий Справа и слева Разделение широких страниц Разделение широких страниц наоборот Если разделение широких страниц не соответствует направлению чтения Вам будет нужно установить все недостающие расширения и после этого авторизоваться в сервисах отслеживания для их использования. Слева Справа Следующая Предыдущая Ненадолго показать при начале чтения Наложение зон касания DNS по HTTPS (DoH) Нет Исключать: %s Включать: %s Последнее получение главы Серии в исключённых категориях не будут загружаться, даже если находятся во включённых категориях. Серии в исключённых категориях не будут обновляться, даже если находятся во включённых категориях. Автозагрузка Нажать, чтобы увидеть подробности Эта версия Android больше не поддерживается Не удалось скопировать в буфер обмена Альбомная Портретная Создавать папки в соответствии с названием серии Сохранять страницы в отдельные папки Действия Ориентация Чёрно-белый фильтр Выключить режим инкогнито Автоматически Отменить всё для этой серии Совпадений не найдено Источник не поддерживается Не прочитано Дата Сортировать по Недопустимый формат глав Глава не найдена Ограничения: %s Источник на устройстве Выключено Включено Ошибка отправки обложки Ошибка сохранения обложки Обложка сохранена Обложка Каждая категория имеет собственные настройки сортировки Руководство по отслеживанию Ваша библиотека не имеет категорий. Начать загрузку сейчас Зелёное Яблоко Тема приложения Тёмный режим с чистым чёрным Ёцуба Инь и Янь Тако Клубничный Дайкири Полуночные Сумерки У некоторых производителей есть дополнительные ограничения для приложений, которые убивают фоновые службы. На этом сайте есть более подробная информация о том, как это исправить. Резервная копия/Восстановление может не работать должным образом, если отключена «Оптимизация MIUI». Предоставляет расширенные возможности для определённых источников. Серии будут автоматически отслеживаться при добавлении в библиотеку. Расширенные сервисы отслеживания Динамическая Фоновая активность Самая низкая Низкая Высокая Самая высокая Чувствительность скрытия меню при прокрутке Цвета наоборот Сегодня Бирюзовая Выполните аутентификацию, чтобы подтвердить изменение По умолчанию Отображение Руководство по началу работы с приложением Отслеживать Планшетный интерфейс Исключённые категории Помочь с переводом О приложении Установите и запустите Shizuku, чтобы использовать его как установщик расширений. Shizuku не работает По умолчанию Установщик Установка расширения… Всего серий Подробное ведение журнала Записывать подробный журнал в системный журнал (Снижает производительность приложения) Язык Предупреждение Большое количество обновлений может привести к замедлению работы источников и увеличению расхода батареи. Нажмите для подробностей. Настоятельно рекомендуется хранить резервные копии в других местах или сервисах. Резервные копии могут содержать конфиденциальную информацию, как, например, пароли. Будьте осторожны при их отправке. Только по Wi-Fi Каждые 3 дня Предупреждение: Большое количество загрузок может привести к замедлению работы источников и/или блокировке %s. Нажмите для подробностей. Обновить все Обновления приложения Очищать кэш глав при запуске приложения %1$d не библиотечных серий в базе данных Нечего очищать Не удалось получить доступные расширения Политика конфиденциальности Пропускать серии с непрочитанными главами Для помощи в исправлении ошибок библиотеки, нажмите %1$s Сохранить как архив CBZ Отменено Перерыв Публикация завершена Показать серию Сетка без названия Панорамирование широких изображений Автоматически увеличивать широкие изображения Пропускать не начатые серии Пропущено, т.к серия завершена Пропущено, т.к есть непрочитанные главы Пропущено, т.к серия не начата Нажать для подробностей %1$d обновление(ий) не удалось Портретная наоборот Переместить серию в начало Отключено Не удалось сохранить изображение Нет элементов в библиотеке для резервирования Открыть в GitHub Данные WebView очищены Очистить данные WebView Закрыть Не найдено установленных источников Не найдено источников Последняя проверка обновления Оставшиеся главы Страница %d не найдена, при разделении Улучшает производительность читалки Путь к файлам страницы %d не найден Сбросить настройки читалки для каждой серии Сбрасывает режим чтения и ориентацию для всех серий Все настройки читалки сброшены Не удалось сбросить настройки читалки Упс, ошибочка вышла Возрастное ограничение Версия Язык Прочитано Отложено Читаю Хочу прочесть Не закончено Только в безлимитной сети Не удаётся открыть последнюю прочитанную главу Пользовательская обложка Не установлено Язык приложения Лаванда Без описания InternalError: Проверьте журнал сбоев для дополнительной информации Хотите ли вы удалить категорию \"%s\"? Удалить категорию User agent по умолчанию Сбросить user agent по умолчанию Удалить всё Виджет недоступен при включённой блокировке биометрией Посмотреть недавно обновлённые серии в библиотеке Обновление уже запущено User agent не может быть пустым Приливная Волна Загрузить наперёд При чтении Работает только если текущая + следующая главы уже загружены. Вы уверены? Многоязыковое Вы собираетесь удалить \"%s\" из вашей библиотеки Последнее обновление библиотеки: %s Популярное Не предоставлены разрешения на хранение Пропущено, т.к серия не нуждается в обновлении Искать… Перезапустить приложение Тема, формат даты и времени Категории, глобальное обновление, перелистывание глав Режим чтения, отображение, навигация Автоматическая загрузка, загрузка наперёд Односторонняя синхронизация прогресса, расширенная синхронизация Источники, расширения, глобальный поиск Ручные и автоматические резервные копий, хранилище Блокировка приложения, защита экрана Выгрузка журнала сбоев, оптимизация батареи Ой, ошибочка вышла! %s столкнулось с непредвиденной ошибкой. Мы рекомендуем поделиться журналом сбоев в нашем Discord-сервере в ветке поддержки. Неизвестное название Недопустимое расположение: %s Недопустимый параметр user agent Только что Проверка загрузок В этой категории нет серий Открыть случайную серию Сборки F-Droid официально не поддерживаются. \nНажмите, чтобы узнать больше. Кнопка «Продолжить чтение» Это удалит ранее выбранную дату окончания из %s Удалить дату? Это удалит ранее выбранную дату начала из %s Переиндексировать загрузки Принуждает приложение перепроверить загруженные главы Начато Продолжительность чтения Обзор Отслеживание Н/Д %dд %dс Использовано Загружено Всего Статистика Завершённые серии Серии Прочитано Отслеживаемые серии %dч Средняя оценка %dм В глобальном обновлении На устройстве Не сейчас Категория пуста Количество непрочитанных глав на иконке «Обновления» Скопировано в буфер обмена Доступно, но источник не установлен: %s Пропускать повторяющиеся главы %1$s ошибка: %2$s *необходимо Скрывать серии, уже находящиеся в библиотеке Копировать в буфер обмена Обновить категорию Разделять длинные изображения Наложение Развернуть широкие страницы под размер экрана Отразить ориентацию развёрнутых широких страниц Отладочная информация Глава при смахивании вправо Глава при смахивании влево Двойное нажатие для увеличения Настраиваемая частота обновления Интервалы Оценивать каждые Задать интервал Следующее ожидамое обновление Предсказать время выхода новых глав Задать обновления каждые Пропущено, т.к сегодня не ожидается выпуска Удалить отслеживание %s? Это удалит отслеживание в приложении. Также удалить из %s ОК Удалить загруженное Имеет результаты Синхронизация библиотеки завершена Синхронизация библиотеки Нажмите здесь, чтобы получить помощь с Cloudflare Пересоздаётся индекс загрузок Не удалось создать файл резервной копии Вход в сервис отслеживания HTTP %d, проверьте сайт в WebView Нет подключения к интернету Не удалось достичь %s Разблокировать %s Переместить серию в конец Относительные временные метки \"%1$s\" вместо \"%2$s\" Настройки приложения Настройки источников Обновление библиотеки... (%s) Файл не выбран Данные и хранение Никогда Уменьшает артефакты у экранов e-ink Последнее автоматическое резервное копирование: %s Мигать при смене страницы Использование хранилища Оценка сервиса отслеживания Создать Применить Сбросить настройки Переводчики не найдены Переводчик Исключить переводчиков Выбрано Не выбрано Другие опции Перейти вверх Путь хранилища Используется для автоматических резевных копии, загрузок глав и источнике на устройстве. Выбрать папку Руководство для начинающих Новичок в %s? Мы настоятельно рекомендуем ознакомиться с нашим руководством. Начать Необходимо выбрать папку Добро пожаловать! Переустанавливаете %s? Пропустить Следующее Давайте настроем парочку вещей. Вы всегда можете их поменять позже в настройках. Не указан путь хранилища Выберите папку где %1$s будет хранить загруженные главы, резервные копии и другое. \n \nРекомендуется использовать выделенную папку. \n \nВыбранная папка: %2$s Разрешения для уведомлений Разрешения для установки приложений Позволит избежать прерывания длительных обновлений библиотеки, загрузок и восстановлений резервных копий. Использование батареи в фоне Позволит устанавливать расширения источников. Получать уведомления об обновлениях библиотеки и т.д. Предоставить Доступно: %1$s / Всего: %2$s Нужны разрешения для установки расширений. Нажмите сюда, чтобы их предоставить. Включать конфиденциальные настройки (например, токены для входа в службы отслеживания) Полная ошибка: Выход новых глав ожидается примерно через %1$s, следующая проверка будет через %2$s. Настраиваемая частота обновления: Этот репозиторий уже существует! Умное обновление Недопустимый URL-адрес репозитория Добавить дополнительные репозиторий в %s. Это должны быть URL-адреса которые заканчиваться на \"index.min.json\". Хотите ли вы удалить репозиторий \"%s\"? Удалить репозиторий Добавить репозиторий У вас нет репозиториев. Репозитории расширений URL-адрес репозитория Руководство по хранению Обновляетесь со старой версии и не знаете, что выбрать? Обратите внимание на руководство по хранению для большей информации. Скоро Север Убрать доверие к ненадёжным расширениям Открыть репозиторий источника Отключить уменьшение масштаба Добавить в любом случае Пользовательский профиль отображения Заменить Репозиторий %1$s имеет тот же подписанный ключ отпечатка, что и %2$s. \nЕсли это так и задумано, %2$s будет заменён, в противном случае, свяжитесь с сопровождающим вашего репозитория. Подписанный ключ отпечатка уже существует Предыдущий месяц Просмотр предстоящих обновлений Предстоящее Предстоящее руководство Следующий месяц Не удалось получить постоянный доступ к папке. Приложение может работать некорректно. Продолжительность вспышки %1$s мс Вспышка с Чёрная Белая Белая и чёрная Вспышка каждую Эта серия либо завершена, либо дата ее выхода неизвестна. Файл резервной копии поврежден Резервное копирование в формате JSON не поддерживается Репозитории расширений Копировать ссылку Пропустить скачивание повторяющихся прочитанных глав Хотите ли вы добавить репозиторий \"%s\"? Обновить сервисы отслеживания для главы %d? Разрешить аналитику Аналитика и Журнал сбоев Отправить журнал сбоев Отправить анонимно журнал сбоев разработчикам. Отправляя журнал сбоев и аналитику, вы позволите нам обнаружить и исправить ошибки, улучшить производительность и сделать будущие обновления более актуальными для ваших потребностей Отправить анонимно данные об использовании для улучшения функций приложения. Безопасность Случайно Удалить Удалить расширение? Вы действительно хотите удалить расширение \"%s\"? Все прочитанные серии Сервисы отслеживания обновлены для главы %d Обновлять прогресс, когда отмечено как «Прочитано» Если читалка загружает пустое изображение, постепенно уменьшайте пороговую обработку.\nВыбрано: %s Пользовательская аппаратная пороговая обработка растрового изображения По умолчанию (%d) Влияет на производительность. Включите этот параметр, если пороговая обработка растрового изображения не помогает с ошибками, связанными с пустыми изображениями Приостановить историю чтения для расширений Авто Монохром Отслеживается приватно Отслеживать приватно Отслеживать публично Использовать старый декодер для читалки с длинными страницами Экспортировать Художник Библиотека экспортирована Автор Список библиотеки Отмечать дублированную прочитанную главу как \"Прочитано\" Непрочитанные главы Поведение После прочтения главы После получения новой главы Понравилась часть, где… Заметки Изменить заметки Возможные дупликаты В вашей библиотеке есть серии с похожим названием.\n\nВыберите серию, чтобы её перенести, или же добавить как дупликат. Оставлять серии с прочитанными главами Прочитанные главы и прогресс не библиотечных серий будет потерян Вы собираетесь удалить записи из базы данных Ошибка при создании папки: %s Ошибка при создании папки для загрузок Вход… Обновлять названия серий в библиотеке для соответствия в источнике Внимание: Если серия была переименована, она будет удалена из очереди загрузок (если присутствует). Выбрано Доступно Выбрать всё Выбрать включенные источники Выбрать закреплённые источники Продолжить Ничего не выбирать Котопуссин Эти настройки медленные и опасные а также могут привести к ограничениям источников Какие данные перенести Удалить загрузки текущей серии после переноса Помогает сузить результаты поиска добавляя ключевые слова Показывать серии только, если соответствие имеет дополнительные главы Дополнительные ключевые слова (опционально) Скрывать серии без совпадений Скрывать серии без новых глав Расширенный глубокий поиск Разделяет название на ключевые слова для более обширного поиска Соответствие основанное на количестве глав Если включено, выбирает соответствие находящиеся дальше всех. В противном случает, выбирает первое соответствие по приоритету источника. Перенос Перенос (%1$d/%2$d) Копировать Перенести Не найдено других вариантов Последняя: %1$s Неизвестно Не переносить Остановить перенос? Остановить Отменить Копировать Перенести Отменить Не найдено глав, эта серия не может быть использована для переноса Копировать сейчас Искать вручную Перенести сейчас Отменить Скрывать индикаторы отсутствующих глав Отрисововать изображения в описаниях серий Спонсорство Не позволять наименования файлов в виде non-ASCII Обеспечивает совместимость с некоторыми носителями информации, которые не поддерживают Unicode. Когда этот функция включена, вам нужно будет вручную переименовать папки серий и источников, заменив non-ASCII символы на шестнадцатеричные UTF-8 в нижнем регистре. Файлы глав можно не переименовать. Параллельные загрузки с источников Закрыть вкладку Параллельные загрузки страниц Число одновременных загрузок страниц с источника Фильтровать исключенных переводчиков Вычисление… В закладках ================================================ FILE: i18n/src/commonMain/moko-resources/sa/plurals.xml ================================================ %1$s निमिषात् परम् %1$s निमिषेषु परम् ह्यः %1$d दिनानि पूर्वम् %d वर्गः %d वर्गाः %1$s मध्ये सम्पन्नम्, %2$s दोषः अस्ति %1$s मध्ये सम्पन्नम्, %2$s दोषाः सन्ति %1$s अध्यायः %1$s अध्यायाः %d अन्वेषकः %d अन्वेषकाः %1$s शेषः अस्ति %1$s शेषः अस्ति विस्तार-संशोधनम् उपलब्धम् %d विस्तार-संशोधनानि उपलब्धानि %1$d नव अध्यायः %1$d नव अध्यायाः %d प्रविष्ट्यर्थम् %d प्रविष्ट्यर्थम् अध्यायाः %1$s तथा 1 अधिकः अध्यायाः %1$s तथा %2$d अधिकाः Skipping %d अध्यायः, स्रोतः तस्य अभावः वा तस्य निष्कासनं अस्ति Skipping %d अध्यायाः, स्रोतः तेषां अभावः वा तेषां निष्कासनं अस्ति श्वः %1$d दिनेषु अगला अपठितः अध्यायः अगले %d अपठिताः अध्यायाः अगला अध्यायः अगले %d अध्यायाः %d रिपोज़िटरी %d रिपोज़िटरिस् 1 पृष्ठम् %1$s पृष्ठानि 1 दिनम् %d दिनानि %1$s अध्यायः नास्ति %1$s अध्यायाः न सन्ति ================================================ FILE: i18n/src/commonMain/moko-resources/sa/strings.xml ================================================ नवीकरणानि नाम इतोऽपि समायोजनानि अवारोपणश्रेणिः चरित्रम् स्थानान्तरगमनम् विस्ताराः विस्तारस्य विवरणम् साहाय्यम् ग्रन्थालय-प्रविष्ट्यः वर्गाः अध्यायाः अनुप्रज्ञानम् चरित्रम् मूलानि प्राथमिकम् ग्रन्थालयः प्रतिलेखनं प्रतिसंस्कारं च पूर्वसूचना परिवर्तनं दृढीकर्तुं प्रमाणीकरोतु सूचिः शोधकम् पुटचिह्नं कृतानि शोधकं निष्करोतु वर्णक्रमानुसारिणि समस्ताः माङ्गाः नूतनः अध्यायः योजितदिनाङ्कः अन्वेषणम् सर्वानि चिनोतु पठितमिति अङ्कयतु अपठितमिति अङ्कयतु अवतारयतु अध्यायम् अङ्कयतु ग्रन्थालयं नवीकरोतु सर्वाणि सशक्तं करोतु सम्पादयतु योजयतु वर्गं योजयतु वर्गस्य नाम परिणमतु वर्गानि स्थापयतु आवरणं सम्पादयतु विरामयतु पूर्वः अध्यायः पुनः यतताम् निष्कासयतु नाशयतु आरभताम् अनुवर्तताम् वेब्-व्यू-अनुप्रयोगे उद्घाटयतु स्थानान्तरगमनं कुरु समायोजनानि अनुप्रज्ञातानि अपठितानि समस्ताः अध्यायाः अन्तिमपठितम् समाहृतदिनाङ्कः अन्वेषणसमायोजनानि सार्वत्रिकम् अन्वेषणम् विलोमे चिनोतु वर्गानि सम्पादयतु पूर्वतमं पठितमिति अङ्कयतु अध्यायाः दर्शयतु अध्यायपुटचिह्नं निष्करोतु सर्वाणि अशक्तं करोतु अग्रिमः अध्यायः जालसञ्चारके उद्घाटयतु अवारोपितानि न सन्ति प्रदर्शनम् सुसम्बद्धा ग्रिड्-शैली सूची अवारोपिताः अध्यायाः स्थानीयाः माङ्गाः वर्गीयाः पीठिकाः दर्शयतु अशक्तं करोतु उपरि उद्वर्णयतु उद्वर्णं निष्करोतु लुम्पतु सर्वाणि लुम्पतु विन्यासः अध्यायस्य क्रमसङ्ख्यया नविष्ठम् सद्यः किमपि न पठितम् तव ग्रन्थालयः रिक्तम् अस्ति सद्यः नवीकरणानि न सन्ति तव वर्गाः एव न सन्ति। नूतनं निर्माणं कृत्वा व्यवस्थापयितुम् अधिकचिह्नं नोदयतु॥ प्रदर्शनस्य अवस्था सुसुखा ग्रिड्-शैली भाषा वस्तूनां सङ्ख्यां दर्शयतु अस्य धारावाहिकस्य कृते सर्वाणि लुम्पतु उपारोपणदिनाङ्केन ज्येष्ठतमम् आरोहयतु अवारोहयतु अग्रस्थानं चालयतु प्रतिष्ठापयतु अधःस्थानं चालयतु प्रसारयतु रक्षतु पुनःस्थापयतु अपाकरोतु विवरणानि द्रष्टुं स्पृशतु समाददातु नवीकरोतु अवारोपणम् अधुना आरभताम् आरोपयति… अनुप्रयोगः न उपलभ्यः रूपम् ग्रन्थालयः अवारोपितानि अनुप्रज्ञानम् स्वसमाचारः दृश्यशैली संविधाम् अनुसरतु अशक्तं कुरु गतिशीलम् हरितसेवम् निशीथसन्ध्या तृणबदर-मदिरा टील्-शैली यिन् याङ्ग् च सम्पूर्णकृष्णवर्णीया असितदशा वृत्तम् उद्घाटयतु प्रतिगच्छतु अग्रे गच्छतु सामान्यः प्रदर्शकम् विस्तृतम् सशक्तं कुरु अनुप्रयोगस्य दृश्यशैली टाकोशैली योट्सूबः आवेदनानि निर्वहतु संरक्षणम् उद्घाटनम् आवश्यकम् सदा न कदापि पटलम् अभिरक्षतु आवेदनवस्तु वृणोतु तिथिसंरूपम् कार्याभावे अपिदधातु अभिरक्षणपटलम् अनुप्रयोगाणां परिवर्तने अनुप्रयोगवस्तु वृणोति पटलप्रतिकृतीनां च सृष्टिं निवारयति॥ प्रौढानां कृते एव (१८+) वस्तुमूलानि मूलानां विस्ताराणां च सूचीषु दर्शयतु अद्य प्रतिपङ्क्तौ वस्तूनि अनुप्रस्थम् प्रदर्शनम् चित्राकृतिः स्वयङ्कृतनवीकरणानि न कदापि प्रतिषष्ठघण्टा प्रतिदिनम् प्रतिदिनद्वयम् प्रतिदिनत्रयम् पारणसमये निर्बन्धाः - %s सार्वत्रिकनवीकरणम् प्रतिद्वादशघण्टा प्रतिसप्ताहिकम् स्वयङ्कृतनवीकरणनाम् उपकरणनिर्बन्धाः केवलं वै-फ़ै माध्यमेन अपठितान् अध्यायान् गृह्णाति समापितधारावाहिकाः ग्रन्थालयनवीकरणे सति नूतनमुखचित्राय विवरणाय च मार्गतु प्राथमिकवर्गः सदा पृच्छतु न किमपि सर्वाणि वर्जयतु - %s संयोजयतु - %s करणीयनवीकरणानि सन्ति लुप्तम् अवतारयति प्रतिष्ठापयति प्रतिष्ठापितम् अविश्वस्तम् अनुप्रयोगविवरणम् १८+ प्रौढानां कृते एव (१८+) वस्तु अन्तः स्यात् विस्तारं प्रतिष्ठापयति … क्रमगतम् पूर्णपटलम् प्रदत्तांशं स्वयञ्चालितं नवीकरोतु प्रतिवर्गं विन्यासस्य प्रदर्शनस्य च कृते समायोजनानि अविश्वस्तविस्तारः विस्तारसूच्याः प्राप्तिः अनुत्तीर्णा माङ्गाः याः वर्जितवर्गेषु सन्ति ताः अन्तर्भूतवर्गेषु सन्ति चेदपि तासां नवीकरणं न भविष्यति। अयं विस्तारः इतःपरं न उपलभ्यः। विश्वासः सर्वाणि नवीकरोतु नवीकरोतु प्रतिस्थायतु अपूर्णम् निष्कासयतु शिज़ुकुः न चलति प्रतिष्ठापनसहायकम् शिजुकुं विस्तारप्रतिष्ठापनसहायकम् इव उपयोगं कर्तुं शिजुकुं प्रतिष्ठापयित्वा आरभताम्। मार्गणविन्यासस्य उपरिस्तरं दर्शयतु द्विपुटविभाजनस्य स्थापनं व्यत्यासं कुरु द्विपुटविभाजनम् खण्डितक्षेत्रे वस्तु दर्शयतु एतत् अनधिकारैः उत वस्तुतः अशुद्धचिह्नितैः विस्तारेभ्यः ॰प्रौढानां कृते एव (१८+)॰ इति चिह्नितवस्तूनाम् अनुप्रयोगे दर्शनं न निवारयति। प्रदर्शकस्य उद्घाटने नोदनमण्डलानि दर्शयतु पुटसङ्क्रमान् जीवयतु द्विवारनोदनं सञ्जीवनवेगः यदि द्विपुटविभजनस्य स्थापना पठनदिशा समः न भवति पुटसङ्ख्यां दर्शयतु पठनदशां दर्शयतु प्रदर्शकस्य उद्घाटने वर्तमानदशां सङ्क्षेपं दर्शयतु सीमाः कर्तयतु सशक्तं कुरु अशक्तं कुरु धूसरवर्णीयम् विलोमेन स्वकृतं वर्णशोधकम् स्वकृता प्रचुरप्रकाशता वर्णशोधकस्य मिश्रदशा उपरिस्तरः गुणयतु पटलम् धूम्री करोतु पटलम् उत्तेजितं स्थापयतु सम्मृष्टान् अध्यायान् लङ्घयतु मार्गणम् ध्वनिस्तरकीले ध्वनिस्तरकीले विलोमं कुरु किमपि न अनुप्रस्थम् ऊर्ध्वम् कार्याणि दीर्घस्पर्शने दर्शयतु पुटानि भिन्नसञ्चयेषु रक्षतु पृष्ठभूमिवर्णः श्वेतः धूसरः कृष्णः स्वयङ्कृतम् एल-आकारम् किञ्डल्-इव सीमा दक्षिणतः वामनतः च अग्रिमम् पूर्वतनम् वामतः दक्षिणतः दक्षिणेतरात् दक्षिणतः वामेतरात् वामतः ऊर्ध्वम् वेब्-टून् मार्गणविन्यासः प्राथमिकपठनदशा सततम् ऊर्ध्वम् विलोमं स्पर्शनम् पठितम् इति चिह्नितान् अध्यायान् लङ्घयतु प्रकाशयति द्वयम् माङ्गाशीर्षकम् अनुसृत्य सञ्चयान् स्रक्ष्यति पृष्ठीकृतम् विस्तारणम् विस्तृतिं समुचितं कुरु पटलं समुचितं कुरु मूलः आकारः चतुरसमुचितम् आरम्भस्थानं सर्पकं कुरु स्वयङ्कृतम् वामतः दक्षिणतः मध्यः सञ्जीवनं नास्ति साधारणम् शीघ्रम् प्राथमिकभ्रमणप्रकारः भ्रमणप्रकारः मुक्तम् लम्बदर्शम् अनुप्रस्थम् नियतलम्बदर्शम् नियतानुप्रस्थम् आर् जी बि सदा अध्यायसङ्क्रमं दर्शयतु पठनदशा पठनम् पक्षस्य पाडिङ्गः मापनप्रकारः ऊर्ध्वत्वं समुचितं कुरु उच्चम् अधस्तनम् उच्चतमम् पुटचिह्नकृतानाम् अध्यायानां नाशयितुम् अनुमन्यताम् वर्जितवर्गाः अशक्तं कृतम् अन्तिमपठितः अध्यायः अन्तिमपठितात् अध्यायात् पूर्वम् अन्तिमपठितात् अध्यायात् द्वितीयपूर्वम् सेवाः पठितमिति स्वीयचिह्नितात् परम् पठनात् परं स्वयञ्चालितं नाशयतु CBZ-लेखागारम् इव अमुकनाम्ना रक्षतु पठनात् परं प्रगतिं नवीकरोतु अधमम् अध्यायान् नाशयतु अन्तिमपठितात् अध्यायात् तृतीयपूर्वम् अन्तिमपठितात् अध्यायात् चतुर्थपूर्वम् स्वचालितम् अवारोपणम् नूतनान् अध्यायान् अवतारयतु अनुप्रज्ञानमार्गदर्शनम् विवृद्धसेवाः अनुप्रजानातु प्रतिलेखनं निर्मातु एतत् उपयुज्य वर्तमानग्रन्थालयं समादातुं शक्यते प्रतिलेखनं समाददातु प्रतिलेखनस्य आवर्तनता प्रतिलेखनं पूर्वमेव प्रगतौ अस्ति %1$02d निमेषाः %2$02d क्षणाः च प्रतिलेखनस्य समादानम् अनुत्तीर्णम् प्रतिलेखनम् अनुत्तीर्णम् प्रतिसंस्कारः पूर्वमेव प्रगत्याम् अस्ति प्रतिलेखनं समाददाति प्रतिसंस्कारः अलोप्यत प्रतिसंस्कारं समापितम् यदि MIUI वृद्धिकरणम् अशक्तं कृतं तर्हि प्रतिलेखनम्/प्रतिसंस्कारः क्रियां युक्तं न कुर्यात्। स्वयङ्कृतप्रतिलेखनानि अतीव निर्दिशितानि। त्वया अन्यस्थानेषु अपि प्रतिकृतीनां स्थापनम् उचितं भविष्यति॥ प्रतिलेखनसञ्चिकायाः ग्रन्थालयं समाददातु प्रतिलेखनं निर्मितम् अनाप्ता प्रतिलेखनसञ्चिका प्रतिलेखने काऽपि माङ्गा नास्ति। मूलानि विहीनानि - ट्राकर्तन्त्रांशाः न अन्तर्गताः - त्वं कानि प्रतिलेखितुम् इच्छसि प्रतिलेखनं निर्माति जालम् अग्रिमस्थकृतानि नविष्ठम् गवेषयतु जालस्थानम् संस्करणम् अलोप्यत अधिकम् न्यूनम् दोषः विरमितम् अपठितम् मुखचित्रम् त्यक्तम् पुनःपठति प्राप्ताङ्कः शीर्षकम् स्थितिः स्थितिः प्रकारः विरमितम् उपयोक्तृनाम सारयति सति सूच्याः गुप्तीकरणाय सूक्ष्मचैतन्यम् यद्यपि अन्तर्भूतवर्गेषु स्थिताः सन्ति तथापि वर्जितवर्गेषु स्थिताः माङ्गाः अवारोपिताः न भविष्यन्ति। अनुप्रज्ञानसेवासु अध्यायप्रगतिं नवीकर्तुं एकमार्गसमाकलनम्। तदीयात् अनुप्रज्ञानगण्डात् व्यक्तिगतेभ्यः माङ्गानिवेशेभ्यः अनुप्रज्ञानं स्थापयतु॥ दत्तांशः प्लवनखण्डाः अन्यम् तिथिः चलत् अज्ञातम् अधिकारि अवतारयतु अनुप्रज्ञानम् गुप्तपदम् अन्तर्गच्छतु समाप्तम् - वर्तमानम् - अग्रिमम् - पूर्वम् - अपठितम् पठति समापितम् स्थानान्तरगमनम् प्रतिलेखं करोतु अवतारयतु अवारोपयामि… स्थानीयमूलमार्गदर्शनम् सार्वत्रिकान्वेषणम्… अध्यायः न लभ्यः भग्नम् ग्रन्थालये योजयतु ग्रन्थालये योजितम् अध्यायः %1$s अवारोपयति (%1$d/%2$d) मूलेन अवारोपणं समाप्तम् दोषः पूर्वपुटः अग्रिमपुटः दत्तनिधिं मार्जयतु दत्तनिधिः मार्जितः पृष्ठभूमिकार्यक्रमम् विद्युत्कोषवृद्धिकरणम् अशक्तं करोतु नूतनं किम् टाबलेट् यू॰ऐ अनुवादसाहाय्यं करोतु ग्रन्थालयात् निष्करोतु प्रकाशनं समाप्तम् ग्रन्थालयात् निष्कृतम् ग्रन्थालये मूलशीर्षकम् अध्यायसङ्ख्या मुखचित्रं रक्षितम् विरामे आरम्भकतिथिः समाप्ततिथिः पुटान् आरोपयतु… ग्रन्थालयं नवीकरोति चरित्रं मार्जयतु अवारोपणं विरमितम् दोषाः अवारोपितानि एव प्रगतिः अवारोपणसाधनम् सामान्यम् प्रच्छन्ननामदशा ज्ञापकानि मार्जयतु ज्ञापकानि मार्जितानि उपयुक्तम् - %1$s निवेशाः नाशिताः नवीकरणेभ्यः मार्गतु सं%1$s प्रति नवीकृतम् ईपत्रसङ्केतः अन्तर्गतम् बहिर्गच्छतु अज्ञातदोषः वर्गं नवीकरोमि अवारोपिताः अध्यायाः स्थानीयमूलम् गतोपयुक्तम् क्रमेण अज्ञातलेखकः अज्ञातस्थितिः अध्यायसमायोजनानि प्रच्छन्ननामदशां अशक्तं करोतु ग्रन्थालयात् माङ्गा न इतोऽपि फलितानि फलितानि न लभ्यानि अध्यायसंरूपम् अनाप्तम् अनुप्रज्ञानं योजयतु वर्गाः नाशिताः चित्रं रक्षितम् स्वकृतशोधकम् मुखचित्रं नवीकृतम् पुटः - %1$d पठनदशा चरित्रं नाशितम् अध्यायः %1$s अध्यायाः %1$s अवारोपणदोषः पूर्णम् अध्यायनवीकरणानि अनुप्रयोगनवीकरणानि विस्तारनवीकरणानि HTTPS उपरि DNS (DoH) प्रारम्भिकमार्गदर्शनम् साधनसमायोजनानि उद्घाटयितुं न अशक्नोम् अतिविस्तीर्णेतिवृत्तलेखनम् पठितुं इच्छामि पुटाः न लभ्याः मूलं न लभ्यम् नूतनसंस्करणम् उपलभ्यम् माङ्गां दर्शयतु नूतनाध्यायाः लभ्याः केवलं मुखचित्रेण इष्टिकाविन्यासः अध्यायस्य काष्वस्तु मार्जयतु गुप्ततानीतिः अपावृतप्रभावकानि अनुज्ञापत्राणि ध्वंसावेदनानि प्रेषयतु अवारोपिताध्यायान् नाशयानि किम् प्राथमिकमिव स्थापयतु काः अपि अध्यायाः न लभ्याः मुखचित्रम् इव स्थापयतु अस्यै धारावाहिकायै मुखचित्रम् चिनोतु प्रतिलेखनसञ्चिकां चिनोतु पुटान्तरे प्लवतु अनुप्रस्थचित्रं सर्पकं करोतु ग्रन्थालयमाङ्गामुखचित्राणि नवीकरोतु ध्वंसेतिवृत्तानि पातयतु उपारोपिततिथ्या मुखचित्ररक्षणे दोषः मुखचित्रप्रसारणे दोषः अध्यायसङ्ख्यया पठनचरित्रं विरमिष्यति समः न लभ्यः मूलस्य सङ्क्रमणमार्गदर्शनम् \"%1$s\" कृते सार्वत्रिकेण अवेक्षताम् %1$s प्रति अन्तर्गच्छतु %1$s इतः बहिर्गच्छानि किम् मूलं न प्रतिष्ठापितम् - %1$s माङ्गां ग्रन्थालये योजयानि किम् मुखचित्रनवीकरणम् अनुत्तीर्णम् अग्रिमाध्यायः न लभ्यः अध्यायः %1$s – %2$s अग्रिमाध्यायः नास्ति पूर्वाध्यायः नास्ति %1$s: %2$s पुटः च %3$d पठिताः अध्यायाः न सन्ति नूतननवीकरणानि न उपलभ्यानि अध्यायस्य प्राथमिकसमायोजनानि नवीकृतानि मूलं न भरितम् संयोजयितुं दत्तांशान् चिनोतु प्रभावयितुम् अनुप्रयोगस्य पुनःप्रारम्भः आवश्यकः चित्रस्य आरोहणं न अशक्नोत् विद्युत्कोषवृद्धिकरणं पूर्वमेव अशक्तं कृतम् अंशफलकान्ते प्रतिलेखनम् अनुत्तीर्णम् पुटानाम् आरोहणम् अनुत्तीर्णम् - %1$s वै-फ़ै सम्पर्कः न उपलभ्यः जालसम्पर्कः न उपलभ्यः प्रतिलेखः अंशफलकान्ते कृतः - \n%1$s अध्यायः %1$s च इतोऽपि %2$d च सञ्चिकाग्राही अनुप्रयोगः न लभ्यः धारावाहिकः पूर्णः अतः लङ्घितः दत्तनिधौ %1$d ग्रन्थालयपराः माङ्गाः सन्ति इदानीं त्वं बहिर्गतम् अग्रिमस्थकृतमूलानि तव न सन्ति कृपया MAL-अन्ते पुनः अन्तर्गच्छतु टाचीयोमेः कृते वेब्-व्यू-तन्त्रांशः अपेक्षितः क्लौड्-फ़्लेर्व्यवस्थायाः अतिक्रमणम् अनुत्तीर्णम् साधनसङ्ग्रहे आवश्यकरिक्तस्थानं न अस्ति इति कारणात् अध्यायानाम् अवारोपणं न शक्नुयात् संविधावृत्तलेखं प्रति अतिविस्तीर्णवृत्तलेखान् मुद्रयतु (अनुप्रयोगप्रवृत्तिम् अल्पयति) यादृच्छिकदोषकारणात् अध्यायस्य अवारोपणम् न शक्नुयात् अपि मम ग्रन्थालये सर्वाभ्यः माङ्गाभ्यः आचरतु त्वं निश्चितं किम् ? चरित्रं सर्वं लुप्तं भविष्यति। एतत् आण्ड्रायिड्-संस्करणम् अधुना न भरितम् इतोऽपि उत्तमतरसङ्गतिं प्रप्तुं कृपया वेब्-व्यू-अनुप्रयोगं नवीकरोतु तव ग्रन्थालये सर्वाः माङ्गाः शोधनीकरोति तव ग्रन्थालये न रक्षितानां माङ्गानां चरित्रं नाशय त्वं निश्चितरूपेण सङ्गृहीतान् अध्यायान् नाशयितुम् इच्छसि किम् ? पूर्वसूचना -- महद्भाराणि अवारोपणानि कुर्यात् मूलानि मन्दानि। अपि च %s निवारयेत्॥ व्युत्पादकेभ्यः प्रसारयितुं दोषदत्तम् एकस्यां सञ्चिकायां रक्षति इमानि समायोजनानि प्राथमिकानि इव रक्षितुं त्वं निश्चितं किम् स्खलितानां परिहरणे साहाय्यं करिष्यति। संवेदनशीलदत्तांशाः न प्रेषिष्यते॥ पृष्ठभूमौ ग्रन्थालयस्य नवीकरणेषु प्रतिलेखनेषु च साहाय्यं करोति अस्य अध्यायस्य पठिततिथिम् एतत् निष्करोति। त्वं निश्चितं किम् काष्वस्तु मार्जयति सति एकः दोषः भूतः अनुप्रयोगपिधाने अध्यायस्य काष्वस्तु मार्जयतु काष्वस्तु मार्जितम्। %1$d-सञ्चिकाः नाशिताः भूताः अनेन नाम्ना पूर्वमेव एकः वर्गः अस्ति इदं चित्रं मुखचित्रम् इव उपयोजनीयं किम् एतत् करणात् पूर्वं कृपया तव ग्रन्थालयाय माङ्गाः योजयतु ग्रन्थालयनवीकरणदोषान् परिहर्तुं साहाय्यार्थं %1$s पश्य तव वर्गाः एव न सन्ति। अस्यै माङ्गायै सर्वान् अध्यायान् पुनःस्थापयति अपठिताध्यायाः सन्ति अतः लङ्घितम् काः अपि अध्यायाः न पठिताः अतः लङ्घितम् अध्यायानाम् अवारोपणं न अशक्नोत्। त्वया अवारोपितानि नाम्नः विभागे पुनः यतितुं शक्यते यस्मात् स्थानान्तरगमनं करणीयं तत् चिनोतु पूर्वसूचना -- मूलेभ्यः महद्नवीकरणानि हानिकारकाणि भवन्ति तस्मात् नवीकरणानि मन्दानि भवेयुः अपि च विद्युत्कोषोपयोगः अधिकं भवेत् %1$d नवीकरणानि अनुत्तीर्णानि अधिकं जानातु धारावाहिकम् अग्रस्थानं चालयतु विपरीतं लम्बदर्शनम् स्थानीयम् साङ्ख्यिकी आरब्धम् अवधिं स्थापयतु अवारोपितं नाशयतु अवारोपितम् ================================================ FILE: i18n/src/commonMain/moko-resources/sah/plurals.xml ================================================ %d бөлөхтөр %1$s мүнүүтэ кэннэ Туолла %1$sҕа %2$s сыаһалаах %1$s хаалла %1$s түһүмэх %d трэкэр Манна %d түһүмэх суох ================================================ FILE: i18n/src/commonMain/moko-resources/sah/strings.xml ================================================ Киллэр Уларыт Барытын араар Барытын холбоо Бэбэлэтиэкэ саҥардыы Сотон кэбис Түһүмэх кыбытыытын ылан кэбис Түһүмэх кыбытыыта Хачайдаа Ааспыты аахтым диэн бэлиэтээ Аахпатым диэн бэлиэтээ Аахтым диэн бэлиэтээ Төттөрөтүн тал Барытын тал Толору көрдөөһүн Көрдөөһүн Киирбит кэмэ Бүтэһик түһүмэх Бүтэһигинэн ааҕыллыбыт Түһүмэх ахсаанынан Алпаабыт бэрээдэгинэн Биилтирэни ылыы Ааҕыллыбатах Кыбытыы Биилтирэ Талба Түстэл История Кэтээһин Түһүмэхтэр Маанга Бөлөхтөр Эйиэхэ бөлөхтөр суохтар. Эбэр бэлиэни батта, бэбэлэтиэкэҕэ саҥа бөлөҕү оҥорорго. Эн бэбэлэтиэкэн кураанах. Бэбэлэтиэкэҕэ айымньыыларыы көрдөөһүнтэн эп. Бүтэһик кэмҥэ тугу да аахпатын Саҥардыылар суохтар Хачаайдааһын суох Көмө Кэҥэтии туһунан Кэҥэтии Көһүү Хаппаас куопуйа Төрүттэр Остуоруйа Саҥардыылар Бэбэлэтиэкэ Хачаайдааһын уочарата Түстэл Эбии Аат Наар ыйыт Куолутунан бөлөх Саҥа тас уонна кыра чаастар баалларын, бэрэбиэркэлээ Метаданнайдары автоматическайдык саҥарт Бүтэ илик маанганы эрэ, саҥарт Иитиллэр Саҥардыы хааччахтааһына Нэдиэлэ аайы Икки күн аайы Күн аайы Уон икки чаас аайы Алта чаас аайы Илиинэн Саҥардыы түргэнэ Улахан саҥардыы Сытыары Туруору Маллары кэккэ туруор Көрдөр Биллэрии иһин кистээ Атын эбиликкэ көһөргөр, скриншоту сабаргар, эбилик иһин кистээ Көмүскэл экрана Хаһан да Наар Күүтү эрэһиимигэр сап Арыйыыны ирдээ Көмүскэл Биллэриилэри салай Даататын формаата Холбоммут Араарыллыбыт Системнайы тутуһуҥ Тиэмэ Эбии туһунан Эбии Кэтээһин Хачайдаммыттар Ааҕааччы Бэбэлэтиэкэ Сүрүн Эбилик кыаллыбат Холбонуу… Чэбдигирт Инники Төптөрү Чөлүгэр түһэр Программа сурунаалын арый Уларыт Ыраастаа Хааллар Тарҕат Туруор Бүтүүгэ көһөр Саҕаланыыга көһөр Олох урукку Сабыс-саҥа Сааһылаа Барытын уларыт Уларытыы Уһул Иҥиннэр Араар Бөлөхтөр кыбытыктарын көрдөр Бэлиэлэри хачайдаа Табыгастаах илим Испииһэк Биир кэлим илим Көрдөр Көрүнүн уларыт Көһүү WebViewга арый Көрдөөһүнҥэ арый Салҕаа Саҕалаа Суох гын Хатылаа Аныгыскы түһүмэх Ааспыттанны түһүмэх Тохтобул Түһүмэхтэри көр Таһын уларытыы Бөлө(ххө/хтөргө) киллэр Бөлөх аатын уларыт Бөлөхтөрү уларыт Бөлөҕү киллэр Ойоҕостон тэйии Ааҕы Ааҕы эрэһиимэ Көһөр түһүмэҕи куруук көрдөр А Халлаан күөх От күөх Кыһыл Сытыары Туруору Босхо Эргичийии Түргэнник Көннөрү Хамсааһына суох Киин Уҥа Хаҥас Автоматическай Улаатыннары маҥнайгы туруга Өйдөөх Маҥнайгы кээмэй Үрдүгүнэн Туоратынан Ууннар Экранынан Тарҕаныыта Сирэйдэринэн Тохтообоххо туруору Webtoon Туруору Хаҥас диэки Уҥа диэки Куолутунан ааҕар эрэһиим Хара Бороҥ Маҥан Кэнники өҥ Уһун баттааһыҥҥа - кэпсэтии Тыас талкыйдарын миэстэлэрин уларыт Тыас талкыйдара Хамсыы Биилтирэммит түһүмэхтэри көтүт Ааҕыллыбыт түһүмэхтэри көтүт Экран холбонон турдун Хараҥатыы Сырдатыы Экран Төгүллээһин Сабыы Ааҕаччы холбонон турдаҕына, билиҥҥи эрэһиими кылгастык көрдөр Ааҕыы эрэһиимин көрдөр Өҥ биилтирэни олордор эрэһиим Туттааччы өҥ биилтирэ Туттааччы сырдыга Быһыллы кыраныыссата Сирэй нүөмэрин көрдөр Иккитэ баттыырга хамсааһын түргэнэ Хамсааһыннах, сирэй арыйыыта Быһыллыбыт хонууга баары көрдөр Толору экран Бу кэҥэтии кыаллыбат буолла. Бу кэҥэтии эрэлэ суох туоһу суругунан бэлиэтэммит уонна холбоммотох. \n \nКуһаҕан кэҥэтии ханнык баҕар, киирэргэ наадалах даннайдары, устуон сөп уонна бэйэтэ киириэн сөп. \n \nБу туоһу сурукка эрэнэр буоллаххына, бэйэҕин кутталга угаҕын. Эрэлэ суох кэҥэтии Сотон кэбис Эрэлэ суох Эрэллээх Турда ТуруорааҺын Хачайдааһын Кэтэһэбит Туруор Эргэрбит Саҥардыы Саҥардыылары кэтэһэбит Барыта Кукины ырааста Ситим Төнүҥнэри тохтоото Хаппаас куопуйа төнүҥнэриитэ туолбата Хаппаас куопуйаны төнүҥнэри туола турар Төнүҥнэрии туола турар Хаппаас куопуйа оҥоһуллубата Хаппаас куопуйа оҥоһуута Тугу куопуйалаары гынннын? Хаппаас куопуйа оҥоруута туола турар %1$02d мүнүүтэ %2$02d сөкүүндэ Төнүҥнэри бүттэ Трэкэрдар киирбэтилэр: Суох төрүттэр: Хаппаас куопуйа маангата суох. Хаппаас куопуйа алдьаммыт билэтэ Хаппаас куопуйа оҥоһуллунна Хаппаас куопуйа оҥоһуутун түргэнэ Бэбэлэтиэкэни хаппаас куопуйа билэтиттэн төнүҥнэрии Хаппаас куопуйаны куолутунан туруоруу Билиҥни бибилиотеканы төнүннэрэргэ туттуохха сөп Хаппаас куопуйаны оҥоруу Биир өттүттэн мэнэйдэһии, кэтээһин өҥөлөргө баар түһүмэхтэр туруктарын саҥардыыга. Маанга туспа суругун уонна талкыйын кэтээһинин түстэлгэ уларыт. Өҥөлөр Түһүмэх туругун ааҕы кэннэ саҥарт Саҥа түһүмэхтэри хачайдаа Бүтэһик түһүмэхтэн бэһис Бүтэһик түһүмэхтэн төрдүс Бүтэһик түһүмэхтэн үһүс Бүтэһик түһүмэх иннинээҕи Бүтэһигинэн ааҕыллыбыт түһүмэх Араарыллыбыт Ааҕы кэннэ Ааҕыллыбыт диэн суруллубутун кэннэ Уларыйыы киирэрин гына эбилиги хос холбоо Кээс сотторуутугар сыыһааһын буолла Кээс ыраастанна. %1$d билэ сотторуллубут этэ Туттуллубут: %1$s Түһүмэх кээһин ыраастааһын Билим Куки ыраастанна Эн бэбэлэтиэкэҕэр суох маанга остуоруйатын сотторуу Билим олоҕо ыраастааһына Батарея тупсарыытын араарыы Бэбэлэтиэкэҕэ баар маанга таһын чэбдигирии Дааннайдар сотуллубуттар Бэбэлэтиэкэ уонна хаппаас куопуйатыгар кэннинээҕи саҥардыытыгар көмөлөһөр Устройства түстэлэ сатаан арыллыбата Батарея тупсуруута араарыллынна Хаппаас куопуйа билэтин талыы Туох саҥа баарый Биэрсия Үөп сир Аһаҕас төрүттээх лицензиялар v%1$s дылы саҥарданна Саҥардыы баар буолуутун бэрэбиэркэлээһин Толору көрдөөһүн… Иҥиннэриллибит Бүтэһигинэн туттуллубут Атыттар Локальнай төрүт Түмүк суох Эбии түмүк суох Кыбытыктар Бөлөх саҥардыыта Биллибэт сыыһыы Эн таҕыстын Тахсыы %1$s\'тан тахсаҕын? Киирдин Киири Аһарык Эл.пуoчта аадырыһа Туттааччы аата %1$s\'га киири Бэбэлэтиэкэҕэ баар маанганы барытын биилтирдээһин Хачайдаммыт эрэ Ханнык баҕар сыаһалары көннөрөргө көмөлөһөр. Бэйэ дааннайдар ылыллыбаттар Охтуу туһунан отчуоту ыытыы Хачайдаммыт түһүмэхтэри сотторобут? Кырата Эбии Бэбэлэтиэкэттэн ылылынна Бэбэлэтиэкэҕэ киирдэ Бэбэлэтиэкэттэн ыл Бэбэлэтиэкэҕэ Бэбэлэтиэкэҕэ киллэрии Лицензиялаах Биллибэт турук Биллибэт Салҕанар Биллибэт суруйааччы Эһиэхэ иҥиннэллибит төрүттэр суохтар Төрүт локальнай салалтата Көрдөөһүн Тиһэх \"%1$s\" толору көрдөө Кыбытыылах түһүмэхтэри соттор Түһүмэхтэри соттор Кэтээһин Талыллыбыт түһүмэхтэри сотторорго эрэллээххин дуу? Ааҕыллыбата Хачайдаа Хачайдааһын кэминэн Түһүмэх нүөмэринэн Төрүттэринэн Түһүмэх нүөмэрэ Төрүт аата Тохтотулунна Сыыһааһын Хачайдааһын (%1$d/%2$d) Түһүмэх %1$s Маанганы Бэбэлэтиэкэҕэ киллэрэбит дуу? Төрүт туруоруллубатах: %1$s Хоспоххо куопуйаланна: \n %1$s 18+ контент баар буолуон сөп 18+ Ити официальнайа суох эбэтэр сыыһа бэлиэтэммит 18+ контенны эбиликкж киирэрин тохтоппот. Туттааччы биилтирэ Хартыыҥка оннунан хаалла Бу маанга бары түһүмэхтэрин түһэрии Бу дьайыы түһүмэх ааҕыллыбыт кэмин сотторуо. Эрэллээххин дуо? Бөлөхтөр соттороллубуттар Оннук ааттах бөлөх уруккуттан баар! Көрүҥ Турук Турук Айымньы аата Сыанабыл Саҥаттаан ааҕабын Ааҕаары гынабын Тохтотулунна Тохтообут Быраҕыллыбыт Бүппүт Ааҕабын эбии кэтээһини киллэрии Бу сиэриэҕэ Бу ойууну тас курдук туттаҕын дуо? Ойуу кыайан хачайдаммата Аныгыскы түһүмэх булуллубата Сирэй: %1$d Тас саҥардыллыбыт Тас курдук туруор %1$s-%2$s Түһ. Бэбэлэтиэкэ саҥардыыта Төрүт булуллубата Сирэйдэр булуллубатылар Сирэйдэр хачайдааһыннара сатаммата: %1$s Сирэйдэр хачайдана тураллар… Иннинээҕи түһүмэх суох Аныгыскы түһүмэх суох Иннинээҕи: Аныгыскы: Билиҥҥи: Бүппүт: Ааҕы эрэһиимэ %1$s: %2$s, сирэй %3$d Түһүмэхтэр суохтар Куолутунан Мин бэбэлэтиэкэбэр баар маангаларга туттуҥ Бу түстэл куолутунан хааларын баҕараҕын дуо? Түһүмэх түстэлэ Хачайдаммыт түһүмэхтэр Бэбэлэтиэкэттэн маанга Ааҕы остуоруйатын тохтотор Кистэлэҥ эрэһиимэ Остуоруйаны сотторуу Эрэллээххин дуо? Остуоруйа барыта сотторуллуоҕа. Остуоруйа сотторулунна Көрдөөһүн түстэлэ Киллэрэр дааннайдары талыы Аныгыскы сирэй Иннинээҕи сирэй Билэни талар эбилик булуллубата Төрүттэр көһөрүүтүн туһунан салалта Бука диэн MALга эмиэ киир Нэбигээссийэ бэлиэтэ Кытыы Kindle курдук L курдук Төрүттэр испииһэктэригэр көрдөрүү NSFW (18+) төрүттэр Киллэримэ: %s Киллэр: %s Суох Сотуллубут категориялар маангалара саҥардыллыа суоҕа, холбоммут категорияларга баарын үрдүнэн. Сыһааһыннары көрдөр Кыччыытынан Улаатыытынан Түһүмэх нүөмэринэн Хаһан хачайдаммытынан Мал төһө элбэҕин көрдөр Кэлэр күнэ Суолун көрө сылдьабыт ================================================ FILE: i18n/src/commonMain/moko-resources/sc/plurals.xml ================================================ A pustis de %1$s minutu A pustis de %1$s minutos %1$d capìtulu nou %1$d capìtulos noos Capìtulos %1$s e 1 àteru Capìtulos %1$s e àteros %2$d Pro %d elementu Pro %d elementos B\'at un\'agiornamentu disponìbile pro un\'estensione B\'ant agiornamentos disponìbiles pro %d estensiones Nd\'abarrat %1$s Nd\'abarrant %1$s %d categoria %d categorias Fatu in %1$s cun %2$s errore Fatu in %1$s cun %2$s errores %1$s capìtulu %1$s capìtulos %d arrastadore %d arrastadores Brinchende %d capìtulu, sa fonte non lu tenet o est istadu bogadu cun unu filtru Brinchende %d capìtulos, sa fonte non los tenet o sunt istados bogados cun unu filtru Eris %1$d dies a oe Su capìtulu non lèghidu imbeniente Sos %d capìtulos non lèghidos imbenientes Su capìtulu imbeniente Sos %d capìtulos imbenientes Mancat %1$s capìtulu Mancant %1$s capìtulos 1 die %d dies Cras In %1$d dies %d depòsitu %d depòsitos 1 pàgina %1$s pàginas ================================================ FILE: i18n/src/commonMain/moko-resources/sc/strings.xml ================================================ Nùmene Categorias Elementos de sa biblioteca Capìtulos Arrastamentu Cronologia Impostatziones Fila de sos iscarrigamentos Biblioteca Cronologia Agiornamentos Còpia de seguresa e riprìstinu Tràmuda Estensiones Informatziones de s\'estensione Impostatziones Filtru Sinnados Non lèghidos Boga su filtru Alfabeticamente Capìtulos totales Ùrtimos lèghidos Chirca Chirca globale Ischerta totu Sinna comente lèghidu Sinna comente non lèghidu Sinna sos antepostos comente lèghidos Iscàrriga Annanghe su capìtulu a sos sinnalibros Boga su capìtulu dae sos sinnalibros Iscantzella Agiorna sa biblioteca Modìfica Annanghe Annanghe una categoria Modìfica sas categorias Cambia su nùmene de sa categoria Imposta sas categorias Muda sa cobertedda Pone in pàusa Capìtulu antepostu Capìtulu imbeniente Torra a proare Boga Sighi Aberi in s\'esploradore (browser) Modalidade de visualizatzione Visualizatzione Grìllia cumpata Lista Capìtulos iscarrigados Annulla Òrdina Installa Cumpartzi Sarva Torra a impostare Iscontza Aberi su registru Riprìstina Carrighende… Aplicatzione non disponìbile Generales Leghidore Iscarrigamentos Arrastamentu Avantzadas Informatziones Elementos pro riga Verticale Orizontale Agiornamentos automàticos Istudadu Cada 6 oras Cada 12 oras Cada die Cada 2 dies Cada chida Totus Restritziones de su dispositivu a s\'agiornamentu automàticu Durante sa càrriga Cun s\'istadu \"acabbada\" Agiorna su progressu a pustis de sa leghidura Categoria predefinida Pedi semper Agiorna Installa Isetende Iscarrighende Installende Installadas Mi fido Non mi fido Disinstalla Estensione non afidàbile Un\'estensione mala diat pòdere lèghere totu sas informatziones de atzessu sarvadas o fàghere esecutare còdighe arbitràriu. \n \nPonende fide in custa estensione atzetas custos arriscos. Ischermu intreu Ànima sas transitziones de sas pàginas Lestresa de s\'animatzione de su tocu dòpiu Ammustra su nùmeru de sa pàgina Sega sos oros Luminosidade personalizada Filtru de colore personalizadu Mantene s\'ischermu allutu Navigatzione Teclas de su volume Fùrria sas teclas de su volume Ammustra sas atziones cun su tocu longu Colore de isfundu Arbu/biancu Nieddu Modalidade de leghidura predefinida Pro pàgina (dae manca a destra) Pro pàgina (dae destra a manca) Pro pàgina (verticale) Verticale longu Impaginadu Casta de iscala Adata a s\'ischermu Prena s\'ischermu Adata a sa largària Adata a s\'artària Mannària originale Adatamentu intelligente Positzione incumintzu ismanniamentu Automàtica A manca A destra In su tzentru Peruna animatzione Normale Lestra Rotatzione predefinida Lìbera Blocadu in verticale Blocadu in orizontale Ruju Birde Biaitu Alfa A pustis de l\'àere marcadu manualmente comente lèghidu Iscantzella in automàticu a pustis de sa leghidura Disabilitadu Leghe s\'ùrtimu capìtulu Penùrtimu capìtulu lèghidu Tertzùrtimu capìtulu lèghidu Cuartùrtimu capìtulu lèghidu Cuintùrtimu capìtulu lèghidu Iscàrriga sos capìtulos noos Arrastadores Crea una còpia de seguresa Podet èssere impreada pro ripristinare sa biblioteca atuale Riprìstina una còpia de seguresa Riprìstina sa biblioteca dae una còpia de seguresa Frecuèntzia de sarvatàgiu de sas còpias de seguresa Còpia de seguresa creada Riprìstinu acabadu De ite cheres fàghere una còpia de seguresa? Ripristinende sa còpia de seguresa Creende sa còpia de seguresa Isbòida sa memòria temporànea de sos capìtulos Impreados: %1$s Memòria temporànea isbodiada. %1$d documentos sunt istados iscantzellados Errore durante s\'isboidamentu Iscantzella sos cookies Cookies iscantzellados Isbòida sa base de datos Iscantzella sa cronologia pro sos elementos chi non sunt sarvados in sa biblioteca tua Boghes iscantzelladas Versione Imbia raportos a pitzu de sos arrestos anòmalos Agiudat a acontzare cale si siat faddina. Perunu datu sensìbile at a èssere imbiadu Intra in %1$s Nùmene impreadore Crae de intrada Intra Ses intradu Errore disconnotu Agiornende sa categoria Non bi sunt àteros risultados Fonte locale Àteru Chirca globale… Ùrtimos Esplora In cursu Disconnotu Cuntzessu in litzèntzia Boga dae sa biblioteca Annantu a sa biblioteca Bogadu dae sa biblioteca Iscantzellare sos capìtulos iscarrigados? Copiadu in punta de billete: \n%1$s Fonte no installada: %1$s Capìtulu %1$s Iscarrighende (%1$d/%2$d) Errore In pàusa Tìtulu de sa fonte Nùmeru de capìtulu Pro fonte Pro nùmeru de capìtulu Iscàrriga Non lèghidos Ses seguru de chèrrere iscantzellare sos capìtulos ischertados? Arrastamentu Leghende Acabadu Abbandonadu In pàusa De lèghere Leghende torra Votu Tìtulu Istadu Istadu Casta Esistit giai una categoria cun custu nùmene! Categorias iscantzelladas Custu at a bogare sa data de leghidura de custu capìtulu. Seguru ses? Reseta totu sos capìtulos pro custu elementu Annànghere a sa biblioteca? Immàgine sarvada Filtru personalizadu Imposta comente cobertedda Cobertedda agiornada Pàgina: %1$d Capìtulu imbeniente no agatadu No est istadu possìbile carrigare s\'immàgine Cheres impostare custa immàgine comente cobertedda? Acabadu: Atuale: Imbeniente: Antepostu: Non b\'at unu capìtulu imbeniente Non b\'at unu capìtulu antepostu Carrighende pàginas… Carrigamentu de pàginas fallidu: %1$s Ischerta sos datos de incluire Tràmuda Còpia Iscarrigamentu de sos capìtulos fallidu. Podes torrare a proare in sa setzione de sos iscarrigamentos Capìtulos noos agatados Agiornamentu de sa cobertedda fallidu Pro praghere annanghe s\'elementu a sa biblioteca tua in antis de fàghere custu Ischerta s\'immàgine de cobertedda Ischerta sa còpia de seguresa Iscàrriga Non bi sunt agiornamentos disponìbiles noos Iscarrighende… Toca pro installare s\'agiornamentu Errore de iscarrigamentu Versione noa a disponimentu! Perunu iscarrigamentu Perunu agiornamentu reghente Nudda de lèghidu dae pagu Sa biblioteca tua est bòida Non tenes categorias. Incarca su butone de su \"prus\" pro nde creare una pro organizare sa biblioteca tua. Iscarrigadore Errore Iscarrigamentu de su capìtulu fallidu pro more de un\'errore imprevistu Peruna connessione Wi-Fi disponìbile Peruna connessione de retza disponìbile Iscarrigamentos in pàusa Comunu Aberi in WebView Brinca sos capìtulos marcados comente lèghidos Modalidade de fusione de su filtru colore Istratu superiore Multìplica Ischermu Istransi / Acrari Brùsia / Iscuri Agiudu Perunu resultadu agadadu Seletziona una fonte dae ue tramudare In segus In antis Annoa Biblioteca Obsoleta Custa estensione no est prus a disponimentu. Diat pòdere non funtzionare prus comente si tocat e causare problemas cun s\'aplicatzione. Ti cussigiamus de la disinstallare. Formadu de sa data Agiornamentu globale Essire dae %1$s? Essi Ses essidu In pàusa Àteru Ùrtimu capìtulu Pòmpia sos capìtulos Annulla totu Istudadu Allutu Sighi su sistema Amministra sas notìficas Seguresa e riservadesa Tocat a l\'isblocare Bloca cando no est ativu Semper Mai Ischermu seguru Agiornamentos in suspesu Ammustra sos cuntenutos in s\'àrea de retàlliu Isfrancamentu de Cloudflare fallidu Agiorna s\'aplicatzione de WebView pro otènnere una cumpatibilidade prus manna Agiornamentos de sos capìtulos S\'ischermu seguru cuat sos cuntenutos de s\'aplicatzione cando mudas de aplicatzione e blocat sas ischermadas Visualizatzione Capìtulu %1$s Capìtulu %1$s e àteros %2$d Capìtulos %1$s Cua su cuntenutu de sas notìficas Disabìlita s\'otimizatzione de sa bateria Agiudat cun sos agiornamentos de sa biblioteca e sas còpias de seguresa S\'otimizatzione de sa bateria est giai disabilitada Indiritzu de posta eletrònica Ammustra semper sa transitzione de capìtulu Menù Prus noos Prus betzos Manda a pitzus Manda a fundu Agiornamentos de sas estensiones Agiornende sa biblioteca Leghende Brinca sos capìtulos filtrados Fontes Distantziamentu laterale Verticale longu cun interrutziones Fùrria s\'ischertada Apicadu Boga Apica Annanghe arrastamentu In sa biblioteca Annanghe a sa biblioteca De mancu De prus Pro chi s\'aplicatzione funtzionet b\'at bisòngiu de WebView Litzèntzias a còdighe abertu Situ web Iscarrigados ebbia Cap. %1$s - %2$s Ùrtima impreada Chirca agiornamentos Riprìstinu annulladu Riprìstinu de sa còpia de seguresa fallidu Su riprìstinu est giai in cursu Còpia de seguresa fallida Sa còpia de seguresa est giai in cursu %1$02d min e %2$02d seg Ghia a sas fontes locales Filtrat totu sos elementos in sa biblioteca tua Pro custa sèrie Murru Modalidade de leghidura Abertura de sas impostatziones de sistema fallida Sincronizatzione a una diretzione ebbia pro agiornare su progressu in sos capìtulos in servìtzios de arrastamentu esternos. Imposta s\'arrastamentu pro sos elementos dae su butone de arrastamentu issoro. Annoa sas coberteddas de sa biblioteca Pro data de carrigamentu Datos Fontes chi mancant: Sa còpia de seguresa non tenet perunu elementu. Documentu de sa còpia de seguresa non vàlidu: Verìfica si b\'est una cobertedda noa o bi sunt detàllios noos cando agiornas sa biblioteca Annoa automaticamente sos metadatos Tràmuda Grìllia discansosa Peruna pàgina agatada Ischedas Ammustra sas ischedas de sas categorias Disabìlita totu Abìlita totu Ammustrat pro pagu tempus sa manera atuale cando su leghidore benit abertu Ammustra sa manera de leghidura Incumintza Fonte no agatada Disabìlita Tenet bisòngiu chi torres a allùghere s\'aplicatzione pro tènnere efetu Retza Ambos Verticale Orizontale Perunu Fùrria sas zonas de tocu Istadu disconnotu Autore disconnotu Agiornadu a v%1$s Ite b\'at de nou Iscarrigamentu de sos capìtulos fallidu pro neghe de su pagu ispàtziu lìberu in su discu Chirca \"%1$s\" globalmente Modalidade de leghidura Tema Data de annanghidura Non tenes fontes apicadas Acabada Progressu Errores Arrastadores a sos cales no as fatu atzessu: Permite s\'iscantzelladura de sos capìtulos cun sinnalibros Iscantzella capìtulos Sas fontes de custa estensione diant pòdere cuntènnere cuntenutos NSFW (18+) 18+ Custu no impedit a estensiones no ufitziales o potentzialmente non curretas de ammustrare cuntenutos NSFW (18+) in s\'aplicatzione. Perunu capìtulu agatadu Impostatziones predefinidas de sos capìtulos agiornadas Imposta comente predefinidu Àplica fintzas a totu sos elementos in sa biblioteca mea Ses seguru de chèrrere sarvare custas informatziones comente predefinidas? Impostatziones de sos capìtulos %1$s: %2$s, pàgina %3$d Impostatziones de chirca Capìtulos iscarrigados Dae sa biblioteca Ponet in pàusa sa registratzione de sa cronologia de leghidura Modalidade anònima Isbòida sa cronologia Seguru ses? As a pèrdere totu sa cronologia. Cronologia iscantzellada Pàgina imbeniente Pàgina anteposta Ghia a sa tràmuda de sas fontes Cuntenutu NSFW (18+) Ammustra in sa lista de sas fontes e de sas estensiones Peruna aplicatzione pro ischertare documentos agatada Pro praghere torra a intrare in MAL Oru Zonas de tocu A tipu Kindle A forma de L Data de fine Data de incumintzu Sarva sos registros de sos errores in unu documentu pro lu cumpartzire cun sos isvilupadores Cumpartzi sos registros de sos arrestos anòmalos In achirrada Creschente Pro nùmeru de capìtulu Pro data de carrigamentu Arrastadu Ammustra su nùmeru de elementos Destra e manca Partzi sas pàginas largas Si sa positzione de sas pàginas largas partzidas non currispondet a sa diretzione de leghidura Fùrria su positzionamentu de sas pàginas partzidas A pustis dias pòdere dèpere installare sas estensiones chi mancant e atzèdere a sos servìtzios de arrastamentu pro los pòdere impreare. Destra Manca Imbeniente Antepostu Ammustra pro pagu cando aberis su leghidore Ammustra sa subrapositzione de sas zonas de tocu DNS pro mèdiu de HTTPS (DoH) Esclude: %s Include: %s Perunu Data de recùperu de su capìtulu Sos elementos in sas categorias esclùdidas non s\'ant a iscarrigare nemmancu si sunt fintzas in categorias inclùdidas. Iscarrigamentu automàticu Sos elementos in sas categorias esclùdidas non s\'ant a agiornare nemmancu si sunt fintzas in categorias inclùdidas. Toca pro bìdere sos detàllios Còpia in punta de billete fallida Custa versione de Android no est prus suportada Orizontale Verticale Rotatzione Creat cartellas in base a su tìtulu de sos elementos Sarva sas pàginas in cartellas separadas Atziones Iscala de murros Disabìlita sa modalidade anònima Automàticu Annulla totu pro custa sèrie Peruna currispondèntzia agatada Fonte non suportada Non lèghidos Data Òrdina pro Formadu de su capìtulu non vàlidu Capìtulu no agatadu Istudadu Allutu Restritziones: %s Fontes locales B\'at àpidu un\'errore cumpartende sa cobertedda B\'at àpidu un\'errore sarvende sa cobertedda Cobertedda sarvada Cobertedda Ghia pro s\'arrastamentu Impostatziones de ordinamentu pro categoria Non tenes galu peruna categoria. Incumintza a iscarrigare como Tako Sa còpia de seguresa e su riprìstinu diant pòdere non funtzionare comente si tocat si s\'otimizatzione MIUI est disabilitada. Frunit funtzionalidades avantzadas pro fontes ispetzìficas. Sos elementos benint arrastados in manera automàtica cando los annanghes a sa biblioteca tua. Arrastadores avantzados Modalidade iscura niedda pura Yotsuba Yin e Yang Daiquiri a sa Fràgola Intrinada de mesanote Mela birde Dinàmicu Tema de s\'aplicatzione Unos cantos produtores tenent restritziones de s\'aplicatzione chi istudant sos servìtzios in s\'isfundu. Custu situ web tenet informatziones in prus in subra de comente acontzare su problema. Bassa meda Bassa Arta meda Arta Sensibilidade pro cuare su menù cun s\'iscurrimentu Atividade in s\'isfundu Furriada Oe Birde abba e turchesu Autèntica·ti pro cunfirmare sa modìfica Predefinida Aparèntzia Arrasta Ghia pro incumintzare Modalidade pro tauleddas Agiuda a bortare Categorias esclùdidas Informatziones de s\'aplicatzione Installa e avia Shizuku pro l\'impreare comente installadore de estensiones. Shizuku no est in esecutzione In disusu Installadore Installende s\'estensione… Elementos totales Registru a sa minuda Imprenta registros fatos a sa minuda in su registru de sistema (abbassat su rendimentu de s\'aplicatzione) Dae cara Limba Dias dèpere tènnere còpias de seguresa fintzas in àteros logos. Sos agiornamentos mannos diant pòdere fàghere dannu a sas fontes e causare agiornamentos prus lentos e fintzas un\'impreu de sa bateria prus mannu. Toca pro nde ischire de prus. Cada 3 dies Petzi cun su Wi-Fi Dae cara: sos iscarrigamentos de massa mannos diant pòdere rallentare sas fontes e/o blocare %s. Toca pro nde ischire de prus. Agiorna totu Agiornamentos de s\'aplicatzione %1$d elementos chi non sunt in sa biblioteca in sa base de datos Recùperu de sa lista de sas estensiones fallidu Isbòida sa memòria temporànea de sos capìtulos cando aberis s\'aplicatzione Nudda de isboidare Polìtica de riservadesa Sarva comente archìviu CBZ Pro tènnere un\'agiudu pro acontzare sos errores de agiornamentu de sa biblioteca pòmpia·ti %1$s Cun capìtulos non lèghidos Publicatzione acabada In pàusa Annullada Ammustra s\'elementu Ismànnia in automàticu sas immàgines largas Grìllia cun coberteddas ebbia No incumintzadas Iscurre sas pàginas largas Brincadu ca sa sèrie est acabada Brincadu ca bi sunt capìtulos non lèghidos Brincadu ca non bi sunt capìtulos lèghidos Toca pro àteras informatziones %1$d agiornamentu(os) fallidu(os) Verticale a s\'imbesse Move sa sèrie cara a pitzos Disabilitadu Errore in su sarvamentu de s\'immàgine Aberi in GitHub Perunu elementu in biblioteca de pònnere in sa còpia de seguresa Isbòida sos datos de WebView Datos de WebView isboidados Serra Ùrtimu agiornamentu Contu de non lèghidos Peruna fonte agatada Peruna fonte installada agatada Megiorat su rendimentu de su leghidore Pàgina %d no agatada partzende Oja, custu est impitzosu Petzi in retzes chene datos Reseta sas impostatziones de su leghidore pro cada sèrie Resetat sa modalidade de leghidura e s\'orientamentu de totu sas sèries Totu sas impostatziones de su leghidore resetadas No at fatu a resetare sas impostatziones de su leghidore Classificatzione pro edade Limba Versione No at fatu a agatare s\'àndala de su documentu de sa pàgina %d Lista de leghidura Lista de disìgios Lista de acabados Lista de postos in pàusa Lista de no acabados No at fatu a abèrrere s\'ùrtimu capìtulu lèghidu Cobertedda personalizada No installada Limba de s\'aplicatzione Peruna descritzione Archemissa Boles iscantzellare sa categoria \"%s\"? Errore internu: verìfica sos registros de sas serradas improvisas pro àteras informatziones Iscantzella sa categoria Istringa de agente de utente predefinida Reseta s\'istringa de agente de utente predefinida Boga totu Su widget no est a disponimentu cando su blocu de s\'aplicatzione est abilitadu Pòmpia sos elementos de biblioteca tuos agiornados dae pagu B\'est giai un\'agiornamentu in cursu Maremotu S\'istringa de s\'agente de s\'utente non podet èssere bòida Iscàrriga sos imbenientes Iscàrriga in automàticu durante sa letura Funtzionat petzi si su capìtulu atuale e s\'imbeniente sunt giai iscarrigados. Seguru ses? As a bogare \"%s\" dae sa biblioteca tua Mùltiplas Ùrtimu agiornamentu de sa biblioteca: %s Populare Permissu de archiviatzione non cuntzessu Brincadu ca sa sèrie non tenet bisòngiu de agiornamentos Chirca… %s at tentu un\'errore non prevìdidu. Ti cussigiamus de cumpartzire sos registros de sas serraduras anòmalas in su canale de suportu nostru de Discord. Torra a allùghere s\'aplicatzione Tema, data e formadu de s\'ora Categorias, agiornamentos globales, iscurrimentu de capìtulos Modalidade de leghidura, aspetu, navigatzione Iscarrigamentu automàticu, iscarrigamentu antitzipadu Sincronizatzione uni-diretzionale de avantzamentu, sincronizatzione megiorada Fontes, estensiones, chirca globale Còpias de seguresa manuales e globales Blocu de s\'aplicatzione, ischermu seguru Registros de serraduras anòmalas, otimizatziones de sa bateria Oops! Positzione non vàlida: %s Tìtulu disconnotu Istringa de agente de utente non vàlida Como como Verifichende sos iscarrigamentos Aberi un\'elementu a casu Perunu elementu atzapadu in custa categoria Sas versiones de F-Droid non sunt prus suportadas in manera ufitziale. \nToca pro nde ischire de prus. Butone pro sighire a lèghere Bogare sa data? Torra a inditzizare sos iscarrigamentos Custu at a bogare sa data de incumintzu seletzionada in antis dae %s Custu at a bogare sa data de fine seletzionada in antis dae %s Iscarrigados In locale Fortzat s\'aplicatzione a torrare a verificare sos capìtulos iscarrigados In s\'agiornamentu globale Totale Lèghidos Elementos arrastados Votu mèdiu In impreu %dm %ds Istatìsticas Incumintzados Panoràmica Elementos cumpletados Elementos N/A %do Tempus de leghidura Arrastadores %dd Como nono Sa categoria est bòida Ammustra su nùmeru de non lèghidos in s\'icona de agiornamentu Copiadu in punta de billete Brinca sos capìtulos duplicados A disponimentu ma sa fonte no est installada: %s Errore %1$s: %2$s *netzessàriu Cua sos elementos giai in sa biblioteca Còpia in punta de billete Agiorna sa categoria Partzi sas immàgines artas Istratu superiore Gira sas pàginas largas pro las adatare Fùrria s\'orientamentu de sas pàginas largas giradas Tocu dòpiu pro ismanniare Capìtulu iscurrende a destra Capìtulu iscurrende a manca Informatziones de depuratzione de còdighe Càrcula cada Intervallu de recùperu personalizadu Agiornamentu imbente prevìdidu Foras de su perìodu de publicatzione prevìdidu Intervallos Imposta s\'agiornamentu pro cada Brincadu ca non bi fiat peruna publicatzione prevìdida oe Imposta s\'intervallu AB Bogare s\'arrastadore de %s? Custu at a bogare s\'arrastamentu locale. Boga fintzas dae %s Iscantzella sos iscarrigados Toca inoghe pro agiudu cun Cloudflare Isbloca %s Sincronizende sa biblioteca Non at s\'est pòdidu creare un\'archìviu de còpia de seguresa Sincronizatzione de sa biblioteca acabada Moe sa sèrie a fundu Peruna connessione a ìnternet Ìnditze de sos iscarrigamentos invalidadu Tenet resurtados Atzessu a s\'arrastadore Marcas temporales relativas HTTP %d, verìfica su situ in WebView \"%1$s\" in càmbiu de \"%2$s\" Non s\'est pòdidu atzèdere a %s Positzione de archiviatzione Crea Mai Mìnimat s\'efetu pantasma in ischermos cun tinta eletrònica Impreadu pro sas còpias de seguresa automàticas, sos iscarrigamentos de sos capìtulos e s\'orìgine locale. Àplica Riprìstina a sos valores predefinidos Prus optziones Ùrtima còpia de seguresa automàtica: %s Seletzionadu Perunu iscandutore agatadu Non seletzionadu Iscandutore (iscansidore+tradutore) Lampìgia in biancu in su càmbiu de pàgina Impreu de sa memòria Agiornende sa biblioteca… (%s) Nàviga cara a subra Votu de s\'arrastadore Datos e archiviatzione Perunu archìviu seletzionadu Impostatziones de sas fontes Impostatziones de s\'aplicatzione Esclude sos iscandutores (iscansidores+tradutores) Custu manga est acabbadu o non b\'at una data de publicatzione previdida. Non s\'est pòdidu otènnere s\'atzessu permanente a sa cartella. S\'aplicatzione si diat pòdere cumportare in manera no isetada. B\'at bisòngiu de sos permissos pro installare estensiones. Toca inoghe pro los frunire. Non tenes galu depòsitos impostados. Custu depòsitu esistit giai! Iscantzella su depòsitu Boles iscantzellare su depòsitu \"%s\"? Depòsitu a còdighe abertu Perunu logu de archiviatzione isseberadu Durada de su flash %1$s ms Flash cada Flash cun Nieddu Biancu Biancu e nieddu Errore intreu: Ghia a sas atualizatziones imbenientes Ghia de introdutzione Bene bènnidu! Imbeniente Incumintzemus Brinca Seletziona una cartella in ue %1$s at a archiviare sos capìtulos iscarrigados, sas còpias de seguresa e àteru. \n \nSi cussìgiat una cartella dedicada. \n \nCartella seletzionada: %2$s Ses agiornende dae una versione betza e non ses seguru de ite seletzionare? Abbista·ti sa ghia a s\'archiviatzione pro àteras informatziones. Ghia a s\'archiviatzione Èvita interrutziones a agiornamentos longos de sa biblioteca, iscarrigamentos, e riprìstinos de còpias de seguresa. Fruni Nou in %s? Ti cussigiamus de t\'abbistare sa ghia de introdutzione. Nord Agiornamentu inteligente Annanghe unu depòsitu URL de su depòsitu Annanghe depòsitos additzionales a %s. Custu diat dèpere èssere un\'URL chi acabbat cun \"index.min.json\". Include impostatziones sensìbiles ( a es. getones de intrada a sos arrastadores) Luego Annanghe su matessi Istuda sa ridutzione de ismanniada In antis de totus tocat a cunfigurare una paja de cosas. L\'as a pòdere semper modificare a pustis dae sas impostatziones. Seletziona una cartella Depes seletzionare una cartella Permissos pro installare s\'aplicatzione Pro installare estensiones de fontes. Permissu pro sas notìficas Retzi notìficas pro agiornamentos de sa biblioteca e àteru. Impreu de sa bateria in s\'isfundu URL de su depòsitu non vàlidu Si pensat chi sos capìtulos los pùblichent pagu prus o mancu cada%1$s, cun verìficas cada %2$s. Frecuèntzia de agiornamentu personalizada: Su mese chi intrat Su mese coladu Ses torrende a installare %s? Rèvoca sas estensiones disconnotas afidàbiles Depòsitos de estensiones A disponimentu: %1$s / Totale: %2$s Remplasa S\'imprenta digitale de sa crae de firma esistit giai Su depòsitu %1$s tenet sa matessi imprenta digitale de sa crae de firma de %2$s. \nSi custu est su chi t\'isetas, %2$s s\'at a sostituire, si nono cuntata su mantenidore de su depòsitu tuo. Profilu de visualizatzione predefinidu Abbista·ti sos agiornamentos imbenientes Imbeniente Totu sos elementos lèghidos Còpia su ligàmene A casu Imbia registros de arrestos anòmalos Permite sas istatìsticas de impreu Istatìsticas de impreu e registros de sos arrestos anòmalos Còpia de seguresa JSON non suportada Imbia datos de impreu anonimizados pro megiorare sas funtzionalidades de s\'aplicatzione. Boles a beru bogare s\'estensione \"%s\"? Seguresa S\'imbiu de sos registros de sos arrestos anòmalos e de sas istatìsticas de impreu non ant a permìtere de identificare e acontzare problemas, megiorare su rendimentu, e fàghere in manera chi sas atualizatziones imbenientes siant prus rilevantes pro sos bisòngios tuos Bogare s\'estensione? Imbia registros de arrestos anòmalos anonimizados a sos isvilupadores. Boga Boles annànghere su depòsitu \"%s\"? Su documentu de sa còpia de seguresa est corrùmpidu Depòsitos de estensiones Brinca s\'iscarrigamentu de capìtulos lèghidos duplicados Atualizare sos arrastadores a su capìtulu %d? Agiorna su progressu cando est marcadu comente lèghidu Arrastadores atualizados a su capìtulu %d Predefinidu (%d) Si su leghidore càrrigat un\'immàgine bianca, mìnima de pagu a pagu su lìmite.\nSeletzionadu: %s Mannària màssima pro sa decodìfica hardware (bitmap) de sas immàgines Influentzat su rendimentu. Abilita·lu petzi si sa minimada de sa mannària màssima pro sa decodìfica hardware (bitmap) de sas immàgines non risolvet sos problemas de sas immàgines bòidas Pone in pàusa sa cronologia de letura pro s\'estensione Automàticu Lista de sa biblioteca Imprea su codificadore betzu pro su leghidore de immàgines longas Esporta Monocromo Capìtulos non lèghidos A pustis de àere lèghidu unu capìtulu Marca sos capìtulos lèghidos duplicados comente lèghidos Arrastadu in manera privada Arrasta in manera privada Autore Artista Biblioteca esportada Arrasta in manera pùblica Cumportamentu A pustis de su recùperu de unu capìtulu Modìfica notas Notas M\'est agradadu cando… Annoa sos tìtulos de sos manga in sa biblioteca pro chi currispondant cun sa fonte Dae cara: si unu manga mudat de nùmene, s\'at a bogare dae sa lista de iscarrigamentu (si b\'est). Intrende… Duplicados possìbiles Tenes elementos in s biblioteca tua cun nùmenes chi s\'assimìgiant.\n\nSeletziona un\'elementu pro lu tramudare o annànghere su matessi. Creatzione de sa cartella de iscarrigamentu fallida Non faghet a creare sa cartella: %s Ses pro bogare elementos dae sa base de datos Mantene sos elementos cun capìtulos lèghidos Sos capìtulos lèghidos e su progressu de sos elementos chi non sunt in sa biblioteca s\'ant a pèrdere Non seletziones nudda Seletziona fontes apicadas Gatuputzinu Seletzionadu A disponimentu Seletziona totu Seletziona fontes abilitadas Sighi ================================================ FILE: i18n/src/commonMain/moko-resources/sdh/plurals.xml ================================================ پاش 1 خولەک پاش %1$s خولەک دوێنێ %1$d ڕۆژ پێش ئێستا ================================================ FILE: i18n/src/commonMain/moko-resources/sdh/strings.xml ================================================ بنەڕەتی ئاگاداری ناو زیاتر سازکارییەکان لیستی داونلۆد تۆماری ڕابردوو دڵنیابوونەوە تا گۆڕانکاری بکرێت ئاماژەکردنی پێشوو وەک خوێندراو نیشانکردنی چاپتەر نوێکردنەوەی کۆکراوەکان گشتی چالاک بکە گشتی ناچالاک بکە زیادکردن زیادکردنی کاتیگۆری دەستکاریکردنی کاتیگۆری ناونانەوەی کاتیگۆری کۆکراوەکان نوێکارییەکان یەدەگ کردن و گەڕانەوە بۆ باری سەرەکی گواستنەوە زیادکراوەکان تۆماری ڕابردوو مانگا چاپتەرەکان بەدواداچوون کاتیگۆرییەکان سازکارییەکان لیست نیشانکراو بەدواداچوو بە شێوازی ئەلف و بێ کۆی مانگاکان کۆی چاپتەرەکان کۆتا خوێندراوە هەڵبژاردنی هەمووی هەڵبژاردنی پێچەوانە وەک خوێندراوێک ئاماژەی پێبکە هیچ داونلۆدێک نییە فلتەر نەخوێندراو سڕینەوەی فلتەر نوێترین چاپتەر بەرواری دەرچوون گەڕانی گشتگیر بەرواری بەردەست بوون گەڕان داونلۆد هیچ کاتیگۆرییەکت نییە. دەست بنێ بە دوگمەی زیادە تا کاتیگۆرییەک بۆ ڕێکخستنی تۆماری ڕابردووت درووست بکەیت. سڕینەوە هێج نوێکارییەک نییە لەم دواییانەدا سەرچاوەکان هیچ مانگایەکت لەم دواییانە نەخوێندووەتەوە زانیاری زیادکراو یارمەتی تۆماری ڕابردووەکەت بەتاڵە گەڕان لە ناو سازکارییەکان وەک نەخوێندراوێک ئاماژەی پێبکە نیشان نەکردنی چاپتەر دەستکاری کردن دەربارە ڕاگرتنی کاتی لابردن دەست پێکردن بەردەوام بوون کردنەوە لە وێبگەڕدا WebView کردنەوە لە گواستنەوە باری پیشاندان لابردنی جێگیری هەڵوەشاندنەوە هەڵوەشاندنەوەی هەموو هەڵوەشاندنەوەی هەموو بۆ ئەم زنجیرەیە ڕیزکردن گواستنەوە بۆ خوارەوە دامەزراندن هاوبەشیکردن خەزێنە کردن دووبارە سازکردنەوە پەشیمان بوونەوە کردنەوەی تۆمار گەڕاندنەوە گەڕانەوە بەرەو پێشەوە فرێشکردنەوە ئێستا دەست بکە بە داونلۆد کردن وردەکاری هەموو ئیرۆرەکان ببینە بە پلە نزم بوونەوە دیاریکردنی کاتیگۆرییەکان گۆڕینی وێنەی بەرگەکە بینینی چاپتەرەکان چاپتەری پێشوو چاپتەری داهاتوو دووبارەکردنەوە پیشاندان لیست مانگای ناوخۆیی زمان پیشاندانی خشتەبەندی کاتیگۆرییەکان بە پێی ژمارەی چاپتەر گواستنەوە بۆ سەرەوە چاپتەری داونلۆد کراو پیشاندانی ژمارەی ئایتمەکان ناچالاککردن جێگیرکردن دۆخی بارکردن… بە پێی بەرواری بەردەست بوون نوێترین کۆنترین بە پلە بەرزبوونەوە بەرنامەکە بەردەست نییە گشتی شێوە کۆکراوەکان خوێنەرەوە داونلۆدەکان بەدواداچوون سازکارییە ئاڵۆزەکان شێوازی لاپەڕەکان شێوازی گەڕان ڕاکێشراو قەبارەی بنەڕەتی گونجاندنی زیرەک دەستپێکی شوێنی زوومکردن چەپ ڕاست ناوەڕاست بێ ئەنیمەیشن سرووشتی خێرا باری ئاسۆیی باری ستوونی قوفڵکراو B دۆخی خوێندنەوە سازکاری خوێندنەوە کراوەتە ناو کۆکراوەکان خۆڵەمێشی جۆری خولانەوە تۆڕی پەستێنراو تۆڕی ئاسوودە ڕووکار وەک ڕووکاری سیستەم کوژاوە داگیرساو ڕووکاری پڕۆگرام داینامیک سەوز مۆر سوور تاکۆ پیرۆزەیی ین و یانگ یۆتسوبا دۆخی ڕەشی پوخت ڕێکخستنی بەروار بەڕێوەبردنی ئاگانامەکان سازکاری پارێزراوی پێویست بە کردنەوە دەکات قوفڵکردن لە کاتی ناچالاکیدا هەمیشە هەرگیز شاشە پارێزراو کردن شاردنەوەی ناوەرۆکی ئاگانامە سکرین شۆت بلۆکردن و شاردنەوەی ناوەڕۆک، لە کاتی گۆڕین و دەرچوون لە بەرنامە سەرچاوەی سەروو (18) ساڵ پیشاندان لە لیستی سەرچاوە و زیادکراوەکان ئەمڕۆ شێوازی پیشاندان نەرمە لێدانی پێچەوانە هیچ ستوونی هەردووکیان کردارەکان خەزێنە کردنی لاپەڕەکان لە فۆڵدەری جیاوزدا سپی خۆڵەمێشی پلە پلە پێچەوانەکراو ڕەنگی فیلتەری تایبەتی فلتەری تێکەڵبوونی ڕەنگەکان داپۆشراو شێوازی دوو ‌هێندە داونلۆدی ئۆتۆماتیکی داونلۆدکردنی چاپتەری نوێ بەدواداچوون زیاد بکە کردنە ناو کۆکراوەکان تکایە مانگا بۆ کۆکراوەکان زیاد بکە پێش کردنی ئەمە زیادکردنی مانگا بۆ کۆکراوەکان؟ داونلۆدکردن تەنها داونلۆدکراوەکان ئەمە ڕێگری ناکات لە دەرکەوتنی بابەتی سەروو 18 ی نا فەرمی لە بەرنامەکە. ئۆتۆماتیک شێوە L پێشتر ستوونی بەردەوام تەواوی شاشە دوگمەی دەنگی پێچەوانە پیشاندان لە کاتی دەست لەسەر دانانی ماوە درێژ ئاسۆیی ڕەش دەوروبەری لاپەڕە گونجاو بە شاشە ئازاد درووستکردنی فۆڵدەر بە پێی تایتڵی مانگا ڕەنگی باکگراوند سووچ ڕاست و چەپ دواتر ڕاست ڕاست بۆ چەپ ستوونی دۆخی خوێندنەوەی بنەڕەتی شێوازی ئەمەزۆن کیندڵ چەپ چەپ بۆ ڕاست گونجاو بە پانی شاشە گونجاو بە درێژی شاشە شێوازی وێبتوون جۆری خولانەوەی بنەڕەتی ئۆتۆماتیک باری ئاسۆیی قوفڵکراو بۆشایی تەنیستەکان باری ستوونی R G A هەمیشە تێپەڕینی چاپتەر پیشان بدە کوژاوە پێکراو نیشاندانی مانگا کۆتانوێکردنەوەی مانگا ژمارەی نەخوێندراوە ڕەشکردنەوەی بەش لادانی هەمووشتێك گەڕان… \?ڕەشبکەیتەوە \"%s\"ئایا ئەتەوێ کە بەشی ================================================ FILE: i18n/src/commonMain/moko-resources/sk/plurals.xml ================================================ Pre %d titul Pre %d tituly Pre %d titulov Dostupná aktualizácia rozšírenia %d dostupných aktualizácii rozšírenia %d dostupné aktualizácie rozšírenia %1$d nová kapitola %1$d nové kapitoly %1$d nových kapitol Po %1$s minute Po %1$s minútach Po %1$s minútach Včera Pred %1$d dňami Pred %1$d dňami %d sledovač %d sledovače %d sledovačov Ďalšia neprečítaná kapitola Ďalšie %d neprečítané kapitoly Ďalších %d neprečítaných kapitol %1$s zostáva %1$s zostávajúce %1$s zostávajúcich Kapitoly %1$s a 1 ďalšia Kapitoly %1$s a %2$d ďalšie Kapitoly %1$s a %2$d ďalších %1$s kapitola %1$s kapitoly %1$s kapitol Preskočenie %d kapitoly, buď zdroj chýba, alebo bol odfiltrovaný Preskočenie %d kapitol, buď zdroj chýba, alebo bol odfiltrovaný Zložky %d kapitoly, buď zdroj chýba, alebo boli filtrované Dokončené za %1$s s %2$s chybou Dokončené za %1$s s %2$s chybami Dokončené za %1$s s %2$s chybami %d kategória %d kategórie %d kegórií Zajtra O %1$d dni O %1$d dní O %1$d dní 1 deň %d dni %d dní %d dní 1 strana %1$s strany %1$s strán %1$s strán ================================================ FILE: i18n/src/commonMain/moko-resources/sk/strings.xml ================================================ Názov Kategórie Záznamy v knižnici Kapitoly Sledovanie História Nastavenia Sťahujúce sa Knižnica Nedávno čítané Updaty Záloha a obnova Migrácia Rozšírenia Info o rozšíreniach Pomoc Nastavenia Filter Uložené Neprečítané Zrušiť filter Abecedne Všetky kapitoly Naposledy čítané Hľadať Hľadať všade Vybrať všetko Označiť ako prečítané Označiť ako neprečítané Označiť predošlé ako prečítané Stiahnuť Záložka kapitoly Odstrániť záložku kapitoly Vymazať Aktualizovať knižnicu Upraviť Pridať Pridať kategóriu Upraviť kategórie Premenovať kategóriu Určiť kategórie Upraviť obal Pauza Predošlá kapitola Nasledujúca kapitola Skúsiť znovu Odstrániť Pokračovať Otvoriť v browseri Otvoriť vo WebView Režim zobrazenia Zobraziť Kompaktná mriežka List Stiahnuté kapitoly Zrušiť Triediť Nainštalovať Zdieľať Uložiť Reset Krok späť Otvoriť log Obnoviť Načítava sa… Aplikácia nedostupná Všeobecné Prehliadač Sťahovanie Sledovanie Rozšírené O Aplikácii Položky na riadok Na výšku Na šírku Automatické aktualizácie Vyp. Každých 6 hodín Každých 12 hodín Raz za deň Každé 2 dni Každý týždeň Všetko Automatické aktualizácie obmedzení zariadenia Pri nabíjaní So stavom \"Dokončené\" Aktualizácia priebehu po prečítaní Predvolená kategória Vždy sa opýtať aktualizovať Nainštalovať Čakajúce Sťahujem Inštalujem Nainštalovaný Dôverovať Odobrať dôveru Odinštalovať Nedôveryhodné rozšírenie Toto rozšírenie bolo podpísané nedôveryhodným certifikátom a nebolo aktivované. \n \nŠkodlivé rozšírenie môže čítať všetky prihlasovacie údaje uložené v Mihon alebo spúšťať ľubovoľný kód. \n \nDôverovaním tohto certifikátu akceptujete tieto riziká. Na celú obrazovku Animácia prechodov strán Rýchlosť animácie pre dvojité ťuknutie Zobraziť číslo strany Orezať okraje Vlastný jas Vlastný farebný filter Farebný filter: režim splynutia Prekrytie Znásobiť Obrazovka Dodge / Zosvetliť Spáliť / Stmaviť Nechať obrazovku zapnutú Preskočiť kapitoly označené ako prečítané Navigácia Tlačidlá hlasitosti Invertovať tlačidlá hlasitosti Zobrazenie pri dlhom podržaní Farba pozadia Biela Čierna Predvolený režim čítania Zľava doprava Sprava doľava Vertikálne Ako Webtoon - Zhora dole a strany sa spájajú do jednej dlhej Stránkovanie Mód škálovania Prispôsobiť obrazovke natiahnuť Prispôsobiť šírke Prispôsobiť výške Pôvodná veľkosť Inteligentne prispôsobiť Začiatočná poloha priblíženia Automatická Vľavo Vpravo Stred Žiadna animácia Normálne Rýchlo Predvolený typ rotácie Voľná Zamknuté na výšku Zamknuté na šírku R G B A Po manuálnom označení ako prečítané Po prečítaní automaticky odstrániť Zakázané Naposledy čítaná kapitola Predposledná prečítaná kapitola Predpred posledná kapitola Štvrtá predposledná prečítaná kapitola Piata posledná prečítaná kapitola Stiahnuť nové kapitoly Sledovače Vytvoriť zálohu Možno použiť na obnovenie aktuálnej knižnice Obnoviť zálohu Obnoviť knižnicu zo záložného súboru Frekvencia zálohovania Záloha bola vytvorená Obnovenie dokončené Čo chcete zálohovať? Obnovuje sa záloha Vytvára sa záloha Vymazať vyrovnávaciu pamäť kapitol Použité: %1$s Cache sa vyčistila. %1$d súborov bolo odstráneno Počas vymazania sa vyskytla chyba Vymazať cookies Súbory cookie boli vymazané Vymazať databázu Odstránenie histórie mangy, ktorá nie je uložená vo vašej knižnici Späť Vpred Obnoviť Knižnica Zastaraný Toto rozšírenie už nie je k dispozícii. Záznamy boli odstránené Verzia Odosielať správy o zlyhaní Pomáha opraviť akékoľvek chyby. Nebudú odoslané žiadne citlivé údaje Prihláste sa do %1$s Užívateľské meno Heslo Prihlásenie Prihlásený Neznáma chyba Aktualizuje sa kategória Žiadne ďalšie výsledky Lokálny zdroj Ostatné Globálne vyhľadávanie… Najnovší Prehľadávať Pokračujúci Neznámy Licencovaný Odstrániť z knižnice Pridané do knižnice Odstránené z knižnice Odstrániť stiahnuté kapitoly? Skopírované do schránky: \n%1$s Zdroj nie je nainštalovaný: %1$s Kapitola %1$s Sťahovanie (%1$d/%2$d) Chyba Pozastavené Názov zdroja Číslo kapitoly Podľa zdroja Podľa čísla kapitoly Stiahnuť Neprečítané Naozaj chcete odstrániť vybrané kapitoly? Sledovanie Čítanie Dokončený Upustený Pozastavený Plánované čítanie Znovu čítanie Skóre Názov Stav Stav Typ Kategória s týmto názvom už existuje! Kategórie boli odstránené Týmto sa odstráni dátum prečítania tejto kapitoly. Si si istý? Resetovať všetky kapitoly mangy Pridať mangu do knižnice? Obrázok bol uložený Vlastný filter Nastaviť ako obal Obal bol aktualizovaný Strana: %1$d Ďalšia kapitola nebola nájdená Obrázok sa nepodarilo načítať Chcete použiť tento obrázok ako obal? Dokončená: Aktuálna: Ďalšia: Predchádzajúcí: Žiadna ďalšia kapitola Žiadna predchádzajúca kapitola Načítání stránok… Chyba pri načítání stránok: %1$s Vyberte data, ktoré chcete zahrnúť Migrovať Kopírovať Nepodarilo sa stiahnuť kapitoly. Môžete to skúsiť znova v sekcii na stiahnutie Boli nájdené nové kapitoly Chyba pri aktualizácii obalu Predtým, ako to urobíte, pridajte do svojej knižnice mangu Vyberte obrázok obalu Vyberte záložný súbor Stiahnuť Žiadné nové aktualizácie Prebiehá stahovanie… Klepnutím nainštalujte Chyba sťahovania Dostupná nová aktualizácia! Žiadne sťahovanie Žiadne nedávne aktualizácie Nič nedávno čítané Vaša knižnica je prázdna Nemáte žiadne kategórie. Ťuknutím na tlačidlo plus si ju vytvorte a usporiadajte knižnicu. Preberanie Chyba Kapitolu sa nepodarilo stiahnuť z dôvodu neočakávanej chyby WiFi pripojenie nie je dostupné Sieťové pripojenie nie je dostupné Sťahovanie bolo pozastavené Bežný Neboli nájdené žiadne výsledky Vyberte zdroj zo ktorého chcete migrovat Najnovšia kapitola Zobraziť kapitoly Zrušiť všetky Menu Najnovšie Najstaršie Presunúť navrch Prosím aktualizujte si aplikáciu WebView pre lepšiu kompatibilitu Nepodarilo sa obísť službu Cloudflare Pozastavené Neprečítané Skryť obsah upozornení Zakázať všetko Povoliť všetko Vyberte inverzne Hľadať v nastaveniach Dátum pridaný Dátum načítania kapitoly Prihlásiť sa pre potvrdenie zmien Predvolené Zdroje Viac Kapitoly %1$s Kapitola %1$s a %2$d ďalšie Kapitola %1$s Zabezpečená obrazovka Ťuknutím zobrazíte podrobnosti Podľa systému Tako Zobraziť záznam Yin a Yang Vzhľad Migrovať Komfortná mriežka Zobraziť karty kategórií Zobraziť počet položiek Podľa dátumu nahratia Začať Mriežka len s obalmi Lokálny zdroj Jazyk Pripnúť Zrušiť všetko pre túto sériu Podľa čísla kapitoly Začať sťahovať teraz Skryť obsah aplikácie pri prepínaní aplikácie a blokovať tvorbu snímkov obrazovky Vzostupne Zostupne Presunúť na spodok Zakázať Odopnúť Upozornenie Sledované Téma Vyp. Zap. Téma aplikácie Dynamické Zelené jablko Jotsuba Polnočný súmrak Čisto čierny tmavý režim Jahodové Daiquiri Modrozelená a tyrkysová Formát dátumu Spravovať oznámenia Bezpečnosť Vyžaduje odomknutie Uzamknúť pri nečinnosti Vždy Nikdy Zobraziť v zoznamoch zdrojov a rozšírení NSFW (18+) zdroje Dnes Iba na Wi-Fi Obmedzenia: %s S neprečítanými kapitolami Ktoré sa ešte nezačali Toto nastavenie avšak nebráni tomu, aby sa v aplikácii objavil neoficiálny alebo potenciálne nesprávne označený obsah NSFW (18+). Globálna aktualizácia Automatický obnoviť metadata Pri aktualizácii knižnice skontrolujte nový obal a podrobnosti Zobraziť Každé 3 dni Aktualizácia už prebieha Žiadne záznami v knižnici k zálohovaniu Vyžaduje reštart aplikácie, aby sa zmeny prejavili Dáta Odhlásiť sa Podľa dátumu nahratia Predchádzajúca strana Zobraziť prekrytie oblastí dotyku Ďalší Obnovenie zálohy zlyhalo Obnovenie bolo zrušené Karty Reťazec User-Agent nemôže byť prázdny Obnovenie nastavení čítačky pre jednotlivé série História bola odstránená Ste si istý? Celá história sa stratí. Naozaj chcete tieto nastavenia uložiť ako predvolené? Pridať do knižnice Krátko zobrazí aktuálny režim pri otvorení čítačky Odtiene šedej Najvyššie Zálohovanie už prebieha Obnoviť obaly knižnice Odhlásiť sa z %1$s? Kompletný zoznam Nenašla sa žiadna aplikácia na výber súborov Kompletný Prílivová vlna Odstrániť kapitoly Uložiť ako archív CBZ Zlepšuje výkon čítačky Príručka k sledovačom Vylepšené sledovače Sieť Vymazanie vyrovnávacej pamäte kapitoly pri zatvorení aplikácie Čo je nové Pomôžte s prekladom Licencia Open Source Chyba pri zdieľaní obalu Zdroj sa nenašiel No, toto je trápne WebView je potrebné pre Mihon Populárne Zoznam čítania Dátum ukončenia Posledná aktualizácia knižnice: %s Pozrite si svoju nedávno aktualizovanú mangu Citlivosť pre skrytie ponuky pri posúvaní Nenašli sa žiadne stránky Vždy zobraziť prechod medzi kapitolami Nízke Údaje zo záložného súboru sa obnovia. \n \nBudete musieť nainštalovať všetky chýbajúce rozšírenia a potom sa prihlásiť do sledovacích služieb, aby ste ich mohli používať. Nepodarilo sa obnoviť nastavenia čítačky Používateľské rozhranie tabletu Manga z knižnice Zrušené Zoznam pozastavených položiek Stiahnuť dopredu Automatické sťahovanie počas čítania Funguje iba na položkách v knižnici a ak je aktuálna kapitola a nasledujúca kapitola už stiahnutá. Neznámy stav Prestávka Pridať sledovanie Nedokončený zoznam Zatiaľ nemáte žiadne kategórie. Vekové hodnotenie Dátum Obe Predchádzajúci Vysoké Zálohovanie/obnovenie nemusí fungovať správne, ak je vypnutá optimalizácia MIUI. Zakázať optimalizáciu batérie Teraz ste odhlásení Príručka pre lokálne zdroje Neznámy autor Nepodarilo sa skopírovať do schránky Nepodarilo sa nájsť cestu k súboru stránky %d Chyby Vyp. Nepodarilo sa stiahnuť kapitoly z dôvodu nedostatku úložného priestoru Celkový počet Pôvodný Automatický Žiadne Odstrániť kategóriu Žiadne Zahrnúť: %s Vytvára priečinky podľa názvu mangy Okraj Vpravo a vľavo Vľavo Obrátený portrét Povoliť odstraňovanie kapitol so záložkami Aktualizácie rozšírení Jazyk aplikácie Jazyk Inštalátor Shizuku nebeží Nainštalujte a spustite Shizuku, aby ste mohli používať Shizuku ako inštalátor rozšírení. Krátko ukázať, keď je čítačka otvorená Prevrátiť rozdelenie na dve strany Vpravo Nepretržité vertikálne Dotykové zóny Priblížiť obrázok na šírku Čítanie Pre túto sériu Bočné odsadenie Automatické sťahovanie Nenašiel sa žiadny zdroj Priebeh Vymazať históriu Chyba pri ukladaní obalu Nastaviť ako predvolené Jednosmerná synchronizácia postupu v mange na externé sledovacie služby (sledovače). Nastavte sledovanie pre jednotlivé položky mangy z ich tlačidla sledovania. Režim čítania Aktualizácie kapitol V databáze je manga %1$d, ktorá sa nenachádza v knižnici Aktualizácia knižnice Dátum začatia Obnovenie režimu čítania a orientácie pre všetky série Podrobné logovanie Skontrolovať aktualizácie Kap. %1$s - %2$s Strana %d sa pri rozdeľovaní nenašla Publikovanie ukončené Nemáte žiadne pripnuté zdroje Táto verzia systému Android už nie je podporovaná Počet neprečítaných Podobné Kindl-u Najnižšie Nastavenia triedenia a zobrazenia pre jednotlivé kategórie Chýbajúce zdroje: Výpis podrobných logov do systémových logov (znižuje výkon aplikácie) Iba v nemeranej sieti Aktualizovať všetko Nepodarilo sa získať zoznam rozšírení Inštaluje sa rozšírenie… Invertovať oblasti dotyku Uloženie stránok do samostatných priečinkov Šedivá Na šírku Obnovenie už prebieha Uložiť logy o chybách do súboru na zdieľanie s vývojármi Obal Obal uložený Prajete si vymazať kategóriu %s? Vertikálne Sledovače, do ktorých nie ste prihlásení: DNS cez HTTPS (DoH) Neplatný záložný súbor %1$02d min., %2$02d s Viacjazyčné Nenašli sa žiadne kapitoly Informácie o aplikácii Verzia Zobraziť obsah v oblasti výrezu Horizontálne Zakázané Vylúčené kategórie Aktualizované na v%1$s Iba stiahnuté Zoznam prianí Chystáte sa odstrániť \"%s\" zo svojej knižnice Filtruje všetku mangu vo vašej knižnici Zdroj nie je podporovaný Nenainštalované %1$s: %2$s, strana %3$d Typ rotácie Zatvoriť Záznamy vo vylúčených kategóriách nebudú aktualizované, aj keď sú tiež v zahrnutých kategóriách. Čakajúce aktualizácie Ďalšia strana Otvoriť na GitHub-e Príručka pre začiatočníkov Zakázať režim inkognito Menej Služby, ktoré poskytujú rozšírené funkcie pre konkrétne zdroje. Mangy sú automaticky sledované po pridaní do vašej knižnice. Rozdelenie na dve strany Posledná aktualizácia Odstrániť všetko InternalError: Skontrolujte záznmy pre ďalšie informácie 18+ Zdroje z tohto rozšírenia môžu obsahovať obsah pre dospleých (18+) Ak umiestnenie rozdelenia na dve strany nezodpovedá smeru čítania Zobraziť režim čítania Záloha neobsahuje žiadnu mangu. V tvare písmena L Dôrazne sa odporúča automatické zálohovanie. Kópie by ste si mali uchovávať aj na iných miestach. Výpis logu o zlyhaní Obnoviť predvolený reťazec User-Agent Globálne vyhľadať \"%1$s\" Bez popisu Nastavenia kapitoly Taktiež nastaviť pre všetky mangy v mojej knižnici Nenašiel sa žiadny nainštalovaný zdroj Prejsť na posúvanie Nie je možné otvoriť poslednú prečítanú kapitolu Klepnutím sa dozviete viac Stiahnuté kapitoly Príručka k migrácií zdrojov Všetky nastavenia čítačky sa obnovia Aktivita na pozadí Pomáha s aktualizáciami a zálohovaním knižnice na pozadí Optimalizácia batérie je už vypnutá Nepodarilo sa otvoriť nastavenia zariadenia Niektorí výrobcovia majú ďalšie obmedzenia aplikácií, ktoré vypínajú služby na pozadí. Na tejto webovej stránke nájdete viac informácií o tom, ako to opraviť. Režim čítania Chyba pri ukladaní obrázka Aktualizácie aplikácie Widget nie je k dispozícii, keď je povolený zámok aplikácie Zoradiť podľa Neplatný formát kapitoly Vylúčiť: %s Naposledy použité Pripnuté Kapitola sa nenašla Zap. Aktualizované predvolené nastavenia kapitol Inverzný Levanduľa Mangy vo vylúčených kategóriách nebudú stiahnuté, aj keď sú tiež v zahrnutých kategóriách. Čistenie databázy Vymazanie údajov WebView Údaje WebView boli vymazané Viac Upozornenie: Veľké hromadné sťahovanie môže viesť k spomaleniu zdrojov a/alebo blokovaniu %s. Klepnutím sa dozviete viac. Veľké aktualizácie poškodzujú zdroje a môžu viesť k pomalším aktualizáciám a tiež k zvýšeniu spotreby batérie. Klepnutím sa dozviete viac. Zlyhané aktualizácie: %1$d Zálohovanie zlyhalo Sledovať Webová stránka Akcie Vlastný obal Presunúť sériu na začiatok Zásady ochrany osobných údajov Ste si istí? Na výšku Predvolený reťazec pre User-Agent Prihláste sa znova do MAL Nenašla sa žiadna zhoda Režim inkognito Pozastaví históriu čítania Emailová adresa Preskočiť filtrované kapitoly V knižnici Pomoc s opravou chýb aktualizácie knižnice nájdete v %1$s Preskočené, pretože séria je dokončená Preskočené, pretože obsahuje neprečítané kapitoly Preskočené, pretože neboli prečítané žiadne kapitoly Lokálna Stiahnuté Štatistiky Začaté Hľadať… Otvoriť náhodný záznam Skopírovať link Použiť Predpokladať čas následujúceho vydania Náhodné Aktualizovať kategóriu Kopírovať do schránky OK Presunúť sériu na spodok Ďalej Preskočiť Povolenie na inštalovanie ľubovoľných aplikácii Bezpečnosť Začíname Odstrániť rozšírenie? Naozaj chcete odstrániť \"%s\" rozšírenie? %1$s ms Nie je nastavené miesto uloženia Priečinok musí byť vybraný Vyberte priečinok Vybrané Nevybrané Viac možností Vymazať stiahnuté Prekladateľ Dáta a úložisko Odomknúť %s Nastaviť interval Ďalšia očakávaná aktualizácia Vitajte! Nadchádzajúce Nahradiť Navigovať hore Prispieť finančne Auto Vlastná frekvencia aktualizácie Skóre na sledovači Neprečítané kapitoly Pokračovať v čítaní tlačidlo Poznámky Upraviť poznámky Vrátiť na predvolené Zatvoriť kartu Nie teraz Ajtak pridať Vypočítavam… Príručka na úvod Poďme najprv nastaviť nejaké veci. Vždy ich môžete neskôr zmeniť. Vyberte priečinok, kde %1$s bude ukladať stiahnuté kapitoly, zálohy a ďalšie.\n\nOdporúčame použiť samostatný priečinok špecificky pre túto aplikáciu.\n\nVybraný priečinok: %2$s Aktualizujete zo staršej verzie, a nie ste si istí, čo vybrať? Viac informácií nájdete v príručke úložiska. Príručka úložiska Na inštaláciu rozšírení zdrojov. Povolenie posielania notifikácii Notifikácie o aktualizáciach v knižnici a podobne. Využitie batérie v pozadí Vyhnite sa prerušeniam aktualizácie knižnice, sťahovania a obnovy záloh. Poslať záznamy v prípade zlyhania aplikácie Poslať anonymizované záznamy v prípade zlyhania aplikácie vývojárom. Povoliť analytické dáta Posielať anonymizované dáta o používaní aplikácie vývojárom pre zlepšenie zážitku. Povoliť Prvý krát používate %s? Odporúčame prečítať si príručku pre začiatočníkov. Inštalujete %s znovu? Téma, dátum a formát času Príručka pre nadchádzajúce Prihlásenie do sledovača Zahrnúť citlivé nastavenia (napr. prihlasovacie údaje do sledovačov) Aktualizovať postup na sledovačoch po kapitolu %d? Sledovače aktualizované na kapitolu %d Sledovače Kategórie, globálna aktualizácia, prechádzanie kapitolami Režim čítania, displej, navigácia Automatické sťahovanie, sťahovanie dopredu Jednosmerná synchronizácia postupu, vylepšená synchronizácia Zdroje, rozšírenia, globálne vyhľadávanie Manuálne & automatické zálohy, miesto v úložisku Zamknutie aplikácie, bezpečná obrazovka Uložiť záznamy o zlyhaní aplikácie, optimalizácie batérie Monochromatická Relatívne časové značky \"%1$s\" namiesto \"%2$s\" Zobraziť obrázky v popisoch mangy Analytické dáta a záznamy v prípade zlyhania Posielaním záznamov v prípade zlyhania aplikácie a analytických údajov nám umožníte identifikovať a opraviť chyby, zlepšiť rýchlost aplikácie a urobiť aplikáciu viac relevantnejšiu pre vaše potreby Inteligentné aktualizácie Zobraziť počet neprečítaných na ikone Aktualizácii Správanie Kapitola po potiahnutí prstom doprava Kapitola po potiahnutí prstom doľava Označiť duplikátne kapitoly ako prečítané Po prečítaní kapitoly Po získaní novej kapitoly Schovať chýbajúce indikátory kapitol Zakázať názvy súborov, ktoré nie sú v kódovaní ASCII Zaručí kompatibilitu s niektorými úložiskami, ktoré nepodporujú kódovanie Unicode. Keď je táto možnosť zvolená, budete musieť manuálne premenovať priečinky zdrojov a mangy tak, že nahradíte znaky, ktoré nie sú podporované v kódovaní ASCII, ich malými hexadecimálnymi reprezentáciami. Súbory kapitol netreba premenovávať. Odstrániť Na inštaláciu rozšírení sú potrebné povolenia. Ťuknite sem, aby ste ich udelili. Odstrániť status \"dôveryhodné\" z neznámych rozšírení Repozitáre rozšírení Nemáte nastavené žiadne repozitáre. Pridať repozitár URL Repozitára Pridať ďalšie repozitáre do %s. Hodnota by mala byť URL, ktorá končí \"index.min.json\". Tento repozitár už existuje! Odstrániť repozitár Neplatná URL repozitára Naozaj chcete odstrániť repozitár \"%s\"? Chcete pridať repozitár \"%s\"? Open-source repozitár Otlačok podpisového kľúča už existuje Repozitár %1$s má rovnaký otlačok podpisového kľúča ako %2$s.\nAk je toto očakávané, %2$s bude nahradený, inak kontaktuje manažéra repozitára. Otočiť široké strany, aby sa zmestili Preklopiť orientáciu otočených širokých strán Dvojťuk pre priblíženie Prebliknúť pri zmene strany Znižuje ghosting na e-ink displejoch Trvanie prebliknutia Prebliknúť každých Prebliknúť s Čiernou Bielou Čiernou aj Bielou Vlastný prah pre hardvérové bitmapy Predvolený (%d) Ak čítacie rozhranie načítava prázdne obrázky, postupne znížte prah.\nVybrané: %s Použiť starší dekodér pre čítacie rozhranie \"dlhé pásy\" ================================================ FILE: i18n/src/commonMain/moko-resources/sq/plurals.xml ================================================ Pas %1$s minutë Pas %1$s minutash Dje %1$d ditë më parë %d kategori %d kategoritë Kapitulli tjetër i palexuar %d kapitujt e ardhshëm të palexuar %1$s e mbetur %1$s kanë mbetur Përfunduar në %1$s me %2$s gabim Përfunduar në %1$s me %2$s gabime Ofrohet përditësim i shtesës Ofrohen %d përditësime shtesë Po kalon %d kapitull, ose i mungon burimi ose është filtruar Po kalon %d kapituj, ose i mungon burimi ose është filtruar %1$d kapitull i ri %1$d kapituj të rinj Kapitujt %1$s dhe 1 më shumë Kapitujt %1$s dhe %2$d të tjerë Për %d hyrje Për %d hyrjet %d gjurmues %d gjurmuesit %1$s kapitull %1$s kapituj Kapitulli i rradhës %d kapituj të rradhës ================================================ FILE: i18n/src/commonMain/moko-resources/sq/strings.xml ================================================ Emri Më tepër Cilësimet Radha e shkarkimeve Libraria Përditësimet S\'ka shkarkime Historia Burimet Ruaj dhe rikthe Shpërngulu Shtesa Informacione shtesë Ndihmë S\'ka përditësime të reja Çaktivizo Anulo Anulo të gjitha Anulo të gjitha për këtë seri Zhbëj Hap regjistrin Rivendos Përpara Rifresko Aplikacioni i padisponueshem Shkarkim automatik, shkarko përpara Errët Molle jeshile Livando Yin & Yang Yotsuba Valët e Baticës E zezë e pastër modaliteti i errët Menaxho njoftimet Gjuha e aplikacionit Siguria dhe privatësia Kërkohet shkyçja Kyç kur është i papunë Gjithmonë Kurrë Fshih përmbajtjen e njoftimit Ekran i sigurt Burimet NSFW (18+) Shfaq në listat e burimeve dhe shtesave Sot Shfaqja Përmasat e grafikut Përditësim global Joaktiv Çdo 12 orë Ditore Javore Vetëm në Wi-Fi Vetëm në rrjet pa matje Gjatë karikimit Me kapituj të palexuar Kontrolloni për kopertinë dhe detaje të reja kur përditësoni bibliotekën Kategoria e parazgjedhur Elementet në kategoritë e përjashtuara nuk do të përditësohen edhe nëse janë gjithashtu në kategoritë e përfshira. Të gjitha Asnje Përfshi: %s Përjashtoni: %s Shumë Përditëso I vjetëruar Përparim Nuk mund të gjendej shtegu i skedarit të faqes %d Asgjë e lexuar kohët e fundit Gabim Nuk ofrohet lidhje Wi-Fi Biblioteka juaj është bosh Udhëzues për fillimin Nuk u gjet asnjë element në këtë kategori Nuk ke kategori. Prekni butonin plus për të krijuar një për organizimin e bibliotekës tuaj. WebView kërkohet për Mihon Dështoi të anashkalojë Cloudflare Nuk ke ende asnjë kategori. Shkarkimet u ndërprenë Nuk ka lidhje rrjeti të disponueshme Kapitulli nuk mund të shkarkohej për shkak të një gabimi të papritur Gabimet E plotësuar I përbashkët Faqja tjetër Faqja e meparshme Përditësimet shtesë Përditësimet e aplikacioneve Përditësimet e kapitullit Shkarkimet e indeksimit Faqja %d nuk u gjet gjatë ndarjes Shkarkues Përditësoni aplikacionin WebView për përputhshmëri më të mirë E paracaktuar I gjurmuar Cilësimet E palexuar Hiq filtrin Sipas alfabetit Totali i kapitujve Paralajmërim Totali i elementeve Leximi i fundit Vërtetohuni për të konfirmuar ndryshimin Menuja Filter Sipas numrit të kapitullit Kapitujt e shkarkuar Burimi lokal Rrjetë e rehatshme Shfaq skedat e kategorive Lista Rrjetë vetëm me mbulesë Gjuha Shfaq butonin për të vazhduar leximin Trego numrin e artikujve Gozhdo Më të rejat Hiqe Po ngarkohet… Sipas datës së ngarkimit Rendit Më e vjetrat Në ngjitje Lëvizni në krye Duke zbritur Instaloni Mbylle Zhvendosni serinë në krye Lëvizni në fund Ruaj Rivendos Shpërndaje Prekni për të parë detajet Mbrapa Fillo shkarkimin tani Gabim i brendshëm: Kontrolloni regjistrat e përplasjeve për informacione të mëtejshme Kyçja e aplikacionit, ekran i sigurt Blu në Jeshile të përgjithshme Paraqitja Kategoritë, përditësimi global Biblioteka Lexues Shkarkimet Gjurmimi Burimet, zgjerimet, kërkimi global Rezervime manuale & automatike E avancuar Formati i temës, datës dhe orës Modaliteti i leximit, ekrani, navigimi Sinkronizimi i përparimit në një drejtim, sinkronizimi i përmirësuar Rreth Hidh regjistrat e përplasjeve, optimizimet e baterisë Tema Ndiq Sistemin Ndrçim Daiquiri luleshtrydhe Tema e aplikacionit Dinamik Tako Formati i datës Peizazhi Ekrani i sigurt fsheh përmbajtjen e aplikacionit kur ndërron aplikacionet dhe bllokon screenshots Kjo nuk parandalon shtesat jozyrtare ose potencialisht të shënuara gabimisht që të shfaqin përmbajtjen NSFW (18+) brenda aplikacionit. Portret Kufizimet: %s Përditësimet automatike Çdo 6 orë Çdo 3 ditë Përditësimet automatike të kufizimet e pajisjes Me statusin \"Përfunduar\" Kjo nuk ka filluar Çdo 2 ditë Rifresko automatikisht të dhënat meta Gjithmonë pyesni Instaloni Cilësimet sipas kategorisë për renditjen dhe shfaqjen Përditëso të gjitha Përditësimet në pritje Aktiv Fikur Kategoritë Elementet e bibliotekës Kapituj Gjurmimi Historia Kontrolli i përditësimit të fundit Numër i palexuar Kapitulli i fundit Data e marrjes së kapitullit Data e shtimit Kërko Kërko… Cilësimet e kërkimit Kërkimi global Selekto të gjitha Zgjidhni anasjelltas Shëno si të palexuar Shëno si të lexuar Shëno të mëparshmen si të lexuar Shkarko Shëno kapitullin Zhshëno kapitullin Fshije Përditëso bibliotekën Aktivizo të gjitha Çaktivzo të gjitha Redakto Shtoni Hap hyrje të rastësishme Shto kategori Redakto kategoritë Riemërto kategorinë Vendosni kategori Dëshironi të fshini kategorinë \"%s\"? Fshi kategorinë Redakto kopertinën Shiko kapitujt Ndalo Kapitulli i mëparshëm Kapitulli tjetër Provo sërish Hiq Hiqni gjithçka Fillo Rifillo Shfaq hyrjen Hapni në WebView Hapni në shfletues Migroni Ekrani Modaliteti i ekranit Rrjetë kompakte Shiko përditësimin e fundit të elementeve të bibliotekes tuaj Ju jeni gati të hiqni \"%s\" nga biblioteka juaj Miniaplikacioni nuk ofrohet kur kyçja e aplikacionit është aktivizuar Në pritje duke instaluar E pabesueshme Informacioni i aplikacionit Shtesë pabesueshme Marrja e listës së shtesave dështoi Versioni Vlerësimi i moshës 18+ Burimet nga kjo shtesë mund të përmbajnë përmbajtje NSFW (18+) Po instalon shtesën… Instalues Ekran i plotë Shfaq mbivendosjen e zonave të prekjes Trego shkurtimisht kur hapet lexuesi Ndani faqet e gjera Inverto vendosjen e faqeve të ndara Nëse vendosja e faqeve të ndara gjerësisht nuk përputhet me drejtimin e leximit Shfaq përmbajtjen në zonën e prerjes Prekni dy herë shpejtësia e animacionit Shfaq numrin e faqes Shfaq modalitetin e leximit Shkëlqimi i personalizuar Shkallëgri I përmbysur Filtër me ngjyra të personalizuara Mbivendosje Mbaje ekranin të ndezur Djeg / Errëson Kapërceni kapitujt e filtruar Navigimi Inverto tastet e volumit Inverto zonat e trokitjes Asnje Vertikale Veprimet Shfaq në trokitje të gjatë Kufijtë e prerjeve Shumohen Ekrani Kapërceni kapitujt e shënuar si të lexuar Shmang/ Driten Filtri me ngjyra modaliteti i përzierjes Horizontale te dyja Instaluar Besim Po shkarkohet Çinstaloni Trashëgimia Kjo shtesë u nënshkrua me një certifikatë të pabesueshme dhe nuk u aktivizua. \n \n Një shtesë me qëllim të keq mund të lexojë çdo kredencial identifikimi të ruajtur në Mihon ose të ekzekutojë kod arbitrar. \n \n Duke i besuar kësaj certifikate ju i pranoni këto rreziqe. Kjo shtesë nuk është më e disponueshme. Mund të mos funksionojë siç duhet dhe mund të shkaktojë probleme me aplikacionin. Rekomandohet ta çinstaloni. Gjuha Çelsat e volumit Shizuku nuk po kandidon Instaloni dhe filloni Shizuku për të përdorur Shizuku si instalues shtesë. Animoni tranzicionet e faqeve Trego shkurtimisht modalitetin aktual kur hapet lexuesi Ruani faqet në dosje të veçanta Ngjyra e sfondit E bardhë Gri Automatik E djathta dhe e majta I paaftë e mëparshme Nga e djathta në të majtë Vertikale e vazhdueshme Faqe Prekni zonat Lloji i shkallës Shtrirje Lartësia e përshtatshme Gjerësia e përshtatshme Madhësia origjinale Përshtatje e zgjuar Paneli i gjerë i imazheve kur prekni Automatik Majtas Djathtas Qendra Asnjë animacion Normale Shpejt Lloji i rrotullimit I lire Portret Peizazh i mbyllur G Modaliteti i leximit Më e larta E ulët Fshi kapitujt Kategoritë e përjashtuara Vendndodhja e pavlefshme: %s Kapitulli i fundit i lexuar Kapitulli i katërt deri tek i fundit i lexuar Shkarkim-automatik Shkarkoni kapitujt e rinj Shkarkoni përpara Shkarkim automatik gjatë leximit Ruaje si arkiv CBZ Udhëzues gjurmimi Gjurmues të përmirësuara Nuk ka kapitull tjetër Krijon dosje sipas titullit të elementeve E zezë Modaliteti i parazgjedhur i leximit Në formë L Skaji Tjetra Majtas Djathtas Nga e majta në të djathtë Vertikale Ekran i përshtatshëm Zmadhoni imazhin e peizazhit Pozicioni fillestar i zmadhimit Lloji i parazgjedhur i rrotullimit Portret i kundërt Portret i mbyllur B A Trego gjithmonë kalimin e kapitullit Mbushje anësore Peizazh R Duke lexuar Ndjeshmëria për fshehjen e menysë në lëvizje E lartë Më e ulëta Pasi është shënuar manualisht si e lexuar Pas leximit fshi automatikisht Lejo fshirjen e kapitujve të shënuar Kapitulli i dytë deri tek i fundit i lexuar Kapitulli i tretë deri tek i fundit i lexuar Kapitulli i pestë deri tek i fundit i lexuar Elementet në kategoritë e përjashtuara nuk do të shkarkohen edhe nëse janë gjithashtu në kategoritë e përfshira. Punon vetëm në hyrjet në bibliotekë dhe nëse kapitulli aktual plus kapitulli tjetër janë shkarkuar tashmë Gjurmuesët Përmirëson performancën e lexuesit Përditëso progresin pas leximit Sinkronizimi i njëanshëm për të përditësuar përparimin e kapitullit në shërbimet e gjurmimit. Konfiguro gjurmimin për elementet individuale nga butoni i tyre i gjurmimit. Faqeshënuar Webtoon I çaktivizuar Kindle-ish Ofron tipare të përmirësuara për burime specifike. Elementet gjurmohen automatikisht kur shtohen në bibliotekën tuaj. Pista Frekuenca rezervë I pa identifikuar ne gjurmuesit: %1$02d min, %2$02d sek Rezervimi/rivendosja mund të mos funksionojë siç duhet nëse Optimizimi MIUI është i çaktivizuar. Rivendos vargun e parazgjedhur të agjentit të përdoruesit Ndodhi një gabim gjatë pastrimit Politika e privatësisë i regjistruar Kapitulli nuk u gjet Format i pavlefshëm i kapitullit Status i panjohur I licencuar U hoq nga biblioteka Të fshihen kapitujt e shkarkuar? Kopjimi në kujtesën e fragmenteve dështoi Burimi nuk është i instaluar: %1$s Sipas datës së ngarkimit Shkarko Të palexuara Gjurmimi Lista e papërfunduar Në listën e pritjes Lloji Një kategori me këtë emër ekziston tashmë! Nuk u gjet asnjë përputhje Rivendos të gjithë kapitujt për këtë hyrje Vendos si kopertinë Mënyra e leximit Tjetra: Pastro historinë %1$d përditësim(e) dështoi U anashkalua sepse seria ka përfunduar Zgjidhni imazhin e kopertinës Hapni në GitHub Shkarko Prekni për të instaluar përditësimin Nuk ka kapitull të mëparshëm Asgjë për të pastruar Çaktivizo modalitetin e fshehtë Dil Nuk u gjet asnjë rezultat Titulli i panjohur Shto gjurmimin Zgjidhni të dhënat për të përfshirë Kapitujt nuk mund të shkarkoheshin. Mund të provoni përsëri në seksionin e shkarkimeve Përditësimet e mëdha dëmtojnë burimet dhe mund të çojnë në përditësime më të ngadalta dhe gjithashtu rritje të përdorimit të baterisë. Trokit për të mësuar më shumë. Elementet u fshinë Çaktivizo optimizimin e baterisë Adresa e emailit Hyni në %1$s Fjalëkalimi Hyrje Emri i përdoruesit Të fundit Më shumë Cilësimet e kapitullit Ups! Gabim shkarkimi Anuloni indeksin e shkarkimeve Pastro memorjen e kapitullit në mbylljen e aplikacionit Pastro bazën e të dhënave Nuk ke burime të gozhduara Urdhër nga Data Në vazhdim E panjohur Autor i panjohur Anuluar Në pauzë Botim i përfunduar Shtuar në bibliotekë Më pak Pa përshkrim Numri i kapitullit Statusi Burimi nuk mbështetet Ju lutemi identifikohuni përsëri në MAL %1$s: %2$s, faqe %3$d Faqe: %1$d Kapitulli tjetër nuk u gjet Imazhi nuk mund të ngarkohej Të përdoret ky imazh si kopertinë? Përfunduar: Aktuale: E mëparshme: I paafte për të hapur kapitullin e lexuar së fundi A je i sigurt? E gjithë historia do të humbasë. Epo, kjo është e sikletshme Nuk është instaluar Kopjo Kapitulli %1$s dhe %2$d më shumë Kapitujt %1$s Kapitulli %1$s Për ndihmë se si të rregulloni gabimet e përditësimit të bibliotekës, shihni %1$s Krijo kopje rezervë Mund të përdoret për të rivendosur bibliotekën aktuale Rivendos kopjen rezervë U krijua një kopje rezervë Burimet që mungojnë: Rivendosja përfundoi Rezervimi është tashmë në proces Çfarë dëshironi të bëni rezervë? Duke krijuar rezervë Rezervimi dështoi Lejet e ruajtjes nuk janë dhënë Nuk ka element në bibliotekë për të rezervuar Rivendosja është tashmë në proces Rivendosja e rezervës Rivendosja e rezervimit dështoi Rivendosja u anulua Ju duhet të mbani kopje rezervë edhe në vende të tjera. Rrjeti Pastro cookie-t DNS mbi HTTPS (DoH) Vargu i agjentit të përdoruesit nuk mund të jetë bosh Varg i pavlefshëm i agjentit të përdoruesit Kërkon rinisjen e aplikacionit për të hyrë në fuqi Cookie-t u pastruan Të dhënat Përdorur: %1$s Memoria e fshehtë u pastrua. %1$d skedarë janë fshirë %1$d element jashtë bibliotekës në bazën e të dhënave Pastro të dhënat e WebView Rifresko kopertinat e bibliotekës Rivendos cilësimet e lexuesit për seri Rivendos modalitetin e leximit dhe orientimin e të gjitha serive Cilësimet e lexuesit nuk mund të rivendoseshin Hidh regjistrat e aksidenteve Aktiviteti në sfond Ndihmon me përditësimet dhe kopjet rezervë të bibliotekës në sfond Ruan regjistrat e gabimeve në një skedar për t\'i ndarë me zhvilluesit Optimizimi i baterisë është tashmë i çaktivizuar Cilësimet e pajisjes nuk mund të hapeshin Kontrolloni për përditësime Përditësuar në v%1$s Dërgoni raporte përplasjesh Ndihmon në rregullimin e çdo defekti. Nuk do të dërgohen të dhëna sensitive Ndërtimet e F-Droid nuk mbështeten zyrtarisht. \nTrokit për të mësuar më shumë. Vetëm të shkarkuarat Modaliteti i fshehtë Ndalon leximin e historisë Filtro të gjitha elementet në bibliotekën tuaj Dil nga %1$s? Tani keni dalë nga llogaria Gabim i panjohur Kategoria po përditësohet Nga biblioteka Kapitujt e shkarkuar Skedat Nuk ka më rezultate Burimi lokal Tjetër Fiksuar Kërkimi global… Kërkoni për \"%1$s\" globalisht Popullor Shfletoni Udhëzues burimi lokal Shto në bibliotekë Në bibliotekë Kopjuar në kujtesën e fragmenteve: \n %1$s Të shtohet në bibliotekë? Kapitulli %1$s Po shkarkohet (%1$d/%2$d) Gabim Ndaloi Titulli i burimit Sipas burimit Sipas numrit të kapitullit Të palexuara Kopertine e personalizuar Kopertina Kopertina u ruajt Gabim në ndarjen e kopertinës Jeni i sigurt që dëshironi të fshini kapitujt e zgjedhur? Aplikoni gjithashtu për të gjitha elementet në bibliotekën time Vendose si parësore Nuk u gjet asnjë kapitull A je i sigurt? Leximi E përfunduar Ne pritje Në pauzë Planifikoni të lexoni Rileximi Hodhi Lista e leximit Lista e dëshirave Lista e plotë Rezultati Titulli Data e fillimit Status Data e mbarimit Hiqni datën? Kjo do të heqë datën e përfundimit të zgjedhur më parë nga %s Kategoritë u fshinë Fotografia u ruajt Gabim gjatë ruajtjes së fotografisë Filtri i personalizuar Kopertina u përditësua Për këtë seri Po ngarkon faqet… Ngarkimi i faqeve dështoi: %1$s Nuk u gjet asnjë faqe Burimi nuk u gjet Një përditësim po funksionon tashmë Biblioteka po përditësohet Biblioteka e përditësuar së fundi: %s Vetëm tani Ch. %1$s - %2$s Historia u fshi Nuk u gjet asnjë burim Nuk u gjet asnjë burim i instaluar Udhëzuesi i migrimit të burimit Zgjidhni një burim për të migruar Migroni %s hasi në një gabim të papritur. Ne ju sugjerojmë që të fotografoni këtë mesazh, të hidhni regjistrat e aksidenteve dhe më pas ta shpërndani në kanalin tonë të mbështetjes në Discord. Rinisni aplikacionin Kapitujt nuk mund të shkarkoheshin për shkak të hapësirës së ulët të ruajtjes Paralajmërim: shkarkimet e mëdha me shumicë mund të çojnë në ngadalësimin e burimeve dhe/ose bllokimin e %s. Trokit për të mësuar më shumë. U gjetën kapituj të rinj Trokit për të mësuar më shumë Përditësimi i kopertinës dështoi U anashkalua sepse ka kapituj të palexuar U anashkalua sepse nuk lexohet asnjë kapitull U anashkalua sepse seritë nuk kërkojnë përditësime Zgjidhni skedarin rezervë Nuk disponohen përditësime të reja Po shkarkohet… Versioni i ri në dispozicion! Cilësimet e kapitullit të parazgjedhur të përditësuara Perëndim Mesnate Rivendosni bibliotekën nga skedari rezervë Të dhënat nga skedari rezervë do të rikthehen. \n \n Do t\'ju duhet të instaloni çdo shtesë që mungon dhe më pas të identifikoheni në shërbimet e gjurmimit për t\'i përdorur ato. Skedar rezervë i pavlefshëm Rezervimi nuk përmban asnjë element në bibliotekë. Varg i parazgjedhur i agjentit të përdoruesit Pastro memorien e kapitullit Fshi historikun për elementet që nuk janë ruajtur në bibliotekën tënde Të dhënat e WebView u pastruan Të gjitha cilësimet e lexuesit rivendosen Përdorur për herë të fundit Hiqe nga biblioteka Gabim gjatë ruajtjes së kopertinës Ju lutemi shtoni hyrjen në bibliotekën tuaj përpara se ta bëni këtë Jeni i sigurt që dëshironi t\'i ruani këto cilësime si parazgjedhje? Kjo do të heqë datën e leximit të këtij kapitulli. A je i sigurt? Kjo do të heqë datën e fillimit të zgjedhur më parë nga %s Ky version Android nuk mbështetet më Faqja e internetit Version Cfare ka te re Ndihmoni në përkthimin Licencat me burim të hapur Disa prodhues kanë kufizime shtesë të aplikacioneve që shkatërrojnë shërbimet e sfondit. Kjo faqe interneti ka më shumë informacion se si ta rregulloni atë. Prerje me fjalë Ndërfaqja e përdoruesve të tabletit Printoni regjistrat me fjalë në regjistrin e sistemit (ul performancën e aplikacionit) Nuk u gjet asnjë aplikacion për përzgjedhjen e skedarëve Trego numrin e të pa lezuarave ne ikonën e Përditësimeve Pasqyrë e Përgjithshme %ds Statistikë Filluar Lokale Shkarkuar Detyro applikacionin te rikontrolloj kapitujtë e shkarkuar Total Pikët mesatare I përdorur Lexo N/A %dd Gjurmuesit Elementet e gjurmuara Jo tani Elementet të përfunduara Koha e të lezuarit Elementet Ne përditësimin global %do %dm Kategorija është bosh Në dispozicion, por burimi nuk është i instaluar: %s Kapërceni kapitujt e kopjuar Fshih elementet tashmë në bibliotekë Kopjo në kujtesën e fragmenteve Përditëso kategorinë %1$s gabim: %2$s *kërkohet U kopjua në clipboard Pika e magazinimit Fshi shkarkimet Piket e gjurmimit Hiq %s gjurmimin? Hiqe gjithashtu nga %s Kjo do te heq gjurmimn lokal. Gjurmuesi i identifikimit Koha relative \"%1$s\" në vend të \"%2$s\" ================================================ FILE: i18n/src/commonMain/moko-resources/sr/plurals.xml ================================================ Након %1$s минут Након %1$s минута Након %1$s минута %1$d ново поглавље %1$d нова поглавља %1$d нових поглавља За %d наслов За %d наслова За %d наслова Доступно је %d ново ажурирање додатака Доступна су %d нова ажурирања додатака Доступно је %d нових ажурирања додатака %d категорија %d категорије %d категорија Пре %1$d дан Пре %1$d дана Пре %1$d дана Прескаче се %d поглавље, или не постоји у извору или је филтером издвојено Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено Завршено у %1$s са %2$s грешком Завршено у %1$s са %2$s грешке Завршено у %1$s са %2$s грешака %d пратилац %d пратиоца %d пратилаца %1$s поглавље %1$s поглавља %1$s поглавља Поглавља %1$s и још једно Поглавља %1$s и још %2$d Поглавља %1$s и још %2$d %1$s преостао %1$s преостала %1$s преосталих Следеће непрочитано поглавље Следећа %d непрочитана поглавља Следећих %d непрочитаних поглавља Следеће поглавље Следећа %d поглавља Следећих %d поглавља Недостаје %1$s поглавље Недостају %1$s поглавља Недостаје %1$s поглавља 1 дан %d дана %d дана %d репозиторија %d репозиторија %d репозиторија За %1$d дан За %1$d дана За %1$d дана ================================================ FILE: i18n/src/commonMain/moko-resources/sr/strings.xml ================================================ Име Категорије Наслови колекције Поглавља Праћење Историја Подешавања Редослед преузимања Колекција Историја Ново Резервна копија и враћање Миграција Додаци Информације о додатку Складиштење и подаци Подешавања Филтер Забележено Непрочитано Уклони филтер Алфабетно Укупно поглавља Последње читано Претражи Претражи глобално Изабери све Означи као прочитано Означи као непрочитано Означи претходно као прочитано Преузми Забележи поглавље Уклони белешку поглавља Обриши Ажурирај колекцију Уреди Додај Додај категорију Уреди категорије Преименуј категорију Изабери категорије Промени омот Паузирај Претходно поглавље Наредно поглавље Покушај поново Уклони Настави Отвори у претраживачу Режим приказа Екран Збијена мрежа Листа Преузета поглавља Откажи Сортирај Инсталирај Подели Сачувај Ресетуј Врати назад Отвори записник Врати Учитавање… Апликација није доступна Опште Читач Преузимања Праћење Напредно O апликацији Величина мреже Усправно Хоризонтално Аутоматска ажурирања Искључено Шесточасовно Дванаесточасовно Дневно Свака 2 дана Недељно Све Ограничења уређаја за аутоматска ажурирања Пуњење Прескочи уносе са статусом \"Завршено\" Ажурирај пратиоца након читања Подразумевана категорија Увек питај Ажурирај Инсталирај На чекању Преузима се Инсталира се Инсталирано Веруј Неповерљиво Обриши Неповерљив додатак Овај додатак је потписан са непоузданим сертификатом и није активиран. \n \nЗлонамерни додатак може прочитати све податке за пријаву или извршити произвољни код. \n \nВерујући овом сертификату прихватате ове ризике. Цео екран Анимације при промени странице Брзина анимације двоклика Прикажи број странице Исеци крајеве Подесиво осветљење Подесиви филтер боја Остави укључен екран Навигација Дугмићима за звук Обрни дугмиће за звук Боја позадине Бела Црна Подразумевани начин читања Страница (слева надесно) Страница (сдесна налево) Страница (вертикално) Дуги стрип Странично Тип скалирања Попуни екран Развуци Попуни ширину Попуни висину Оригинална величина Паметно прилагођавање Почетни положај зумирања Аутоматски Лево Десно Средина Без анимације Нормална Брзa Подразумевана оријентација Слободно Усправно закључано Положено закључано R G B A Када су означена као прочитана Аутоматски обриши након читања Онемогућено Последње прочитано поглавље Претпоследње прочитано поглавље Претпретпоследње прочитано поглавље Четири пре прочитаног поглавља Пет пре прочитаног поглавља Преузми нова поглавља Сервиси праћења Направи резервну копију Може се користити за враћање на тренутно стање колекције Врати се на резервну копију Врати се на колекцију из резервне копије Учесталост прављења резервних копија Направљена је резервна копија Враћање је завршено Шта све желите да буде у резервној копији? Враћа се на резервну копију Прави се резервна копија Испразни кеш меморију поглавља Искоришћено: %1$s Кеш је испражњен. Уклоњених фајлова: %1$d Дошло је до грешке приликом брисања Избриши колачиће Колачићи су избрисани Избриши базу података Обриши историју за наслове који нису сачувани у твојој колекцији Уноси избрисани Верзија Пошаљи извештаје грешака Помози у поправљању кварова. Ниједан осетљив податак неће бити послат Пријави се у %1$s Корисничко име Лозинка Пријави се Пријављени сте Непозната грешка Ажурирање категорије Нема више резултата Локални извор Остало Глобално претраживање… Најновије Претражи У току Непознато Лиценсирано Обриши из колекције Додано у колекцији Уклоњено из колекције Обриши преузета поглавља? Копирано: \n%1$s Извор није инсталиран: %1$s Поглавље %1$s Преузима се (%1$d/%2$d) Грешка Паузирано Наслов извора Број поглавља Прикажи радње при дугом додиру Према извору Према броју поглавља Преузми Непрочитано Да ли сте сигурни да желите да обришете следећа поглавља? Отвори у WebView Прескочи поглавља означена као прочитана Помножи Екран Помоћ Нема пронађених резултата Назад Напред Освежи Колекција Овај додатак није више доступан. Можда неће исправно функционисати и може изазвати проблеме са апликацијом. Препоручује се деинсталирање. Формат датума Глобално ажурирање Излогуј се из %1$s? Излогуј се Сада сте излоговани Више Последње поглавље Погледај поглавља Откажи све Светла Тамна По систему Управљај обавештењима Безбедност и приватност Закључај приликом мировања Увек Никада Безбедносни екран Ажурирања на чекању Прикажи Сакриј обавештења Искључи оптимизацију коришћења батерије Оптимизација потрошње батерије је већ искључена Имејл адреса Ваша колекција је празна Ништа није недавно читано Нема недавних ажурирања Нема преузимања Извори Застарело Сакриј приказ апликације приликом пребацивања између апликација и онемогући снимке екрана Захтевај закључавање Премести на дно Премести на врх Најстарије Најновије Откачи Закачи Изабери обрнуто Мени Само преузето Немате категорија. Додирните дугме плус да бисте направили нову категорију за организовање колекције. Поглавља %1$s Поглавље %1$s и још %2$d Поглавље %1$s Пронађена су нова поглавља Неуспешно преузимање поглавља. Покушајте поново у секцији за преузимања Копирај Мигрирај Одаберите извор са којег ћете мигрирати Изаберите податке које желите да укључите Погл. %1$s - %2$s Ажурирање колекције Учитавање страница није успело: %1$s Учитавање страница… Нема претходног поглавља Нема следећег поглавља Претходно: Следеће: Тренутно: Завршено: Користи ову слику као омот? Није могуће учитати слику Следеће поглавље није пронађено Страница: %1$d Подесиви филтер Слика је сачувана Ресетуј сва поглавља овог наслова Ово ће уклонити датум читања овог поглавља. Да ли сте сигурни да то желите? Категорије обрисане Категорија са овим именом већ постоји! Врста Статус Статус Наслов Оцена Поновно читање У плану Паузирано На паузи Напуштено Завршено Читање Додај праћење Праћење Додати у колекцију? Мање Више У колекцији Додати у колекцију Водич за локалне изворе Закачено Последње коришћено Филтрира све наслове у колекцији Провери ажурирања Вебсајт Враћање је отказано Враћање на резервну копију није успело Враћање је већ у току Прављење резервне копије није успело Прављење резервне копије је већ у току %1$02d мин, %2$02d сек Растојање од ивице Читање Увек прикажи транзицију поглавља Дуги стрип са размацима Прескочи филтрирана поглавља Прикажи садржај у исечку Постави као омот Помаже при ажурирању колекције и резервних копија Грешка Преузимања Ажурирајте WebView за бољу компатибилност WebView је потребан како би апликација функционисала Неуспешно заобилажење Cloudflare-а Доступно је ново ажурирање! Грешка током преузимања Додирните за инсталирање ажурирања Преузимање… Нема нових ажурирања Преузми Изаберите датотеку резервне копије Изаберите слику за омот Морате прво додати наслов у колекцију Ажурирање омота није успјело Тема Онемогући Прикажи наслове категорија Шира мрежа Мигрирај Почни Онемогући све Омогући све Подешавања претраге Датум додавања Прикажи начин читања Може садржати садржај за одрасле (18+) 18+ Провери да ли постоје нови омоти при ажурирању колекције Аутоматски освежи метаподатке Ово не спречава незваничне или потенцијално погрешно означене додатке да прикажу садржај за одрасле (18+) унутар апликације. Запраћено Упозорење Оверите да бисте потврдили промене Укупно наслова Датум преузимања Локални извор По датуму постављања Језик По броју поглавља Тема апликације Зелена јабука Јоцуба Растуће Подразумевано Покрени преузимање одмах Прикажи број ставки Откажи све за овај наслов Опадајуће Прикажи детаље Изглед Динамично Поноћни сумрак Даикири јагода Тако Плавозелена и тиркизна Јин и јанг Потпуно црна тема NSFW - извори за одрасле (18+) Покажи у листи за изворе и додатке Начин читања Инсталер Аутоматско преузимање Прати Резервна копија/враћање можда неће радити исправно ако није омогућена MIUI оптимизација. Чувајте резервне копије и на другим местима. DNS преко HTTPS-а (DoH) Изглед за таблет Захтева поновно покретање апликације Чува евиденцију грешака у датотеку за дељење са програмерима Активност у позадини Режим мешања филтера боја Сива Прет. Неки произвођачи имају додатна ограничења за апликације која гасе сервисе које су у позадини. Овај сајт садржи више информација о могућим решењима. Као Kindle Ивица Десно и лево Десно След. Детаљно извештавање Зауставља праћење историје читања Картице Непознат статус Поређај по Побољшани сервиси за праћење Неисправна датотека резервне копије Недостају извори: Резервна копија не садржи ниједан наслов. Пратиоци у које нисте пријављени: Мрежа Подаци из датотеке резервне копије ће бити враћени. \n \nМораћете да инсталирате све додатке које недостају и да се после тога пријавите на пратиоце да бисте их користили. Сервиси који пружају побољшане услуге за одређене изворе. Наслов се аутоматски прати када га додате у колекцију. Помозите у превођењу Дели извештаје о паду Исписуј детаљне извештаје у системски дневник (смањује перформансе апликације) Није могуће отворити подешавања уређаја Освежи омоте у колекцији Шта је ново Деактивирај инкогнито мод Из колекције Преузета поглавља Претражи „%1$s” глобално Немате закачених извора Поглавље није пронађено Неважећи формат поглавља Неуспешно копирање Према датуму поставке Грешка при чувању омота Омот Омот сачуван Грешка при дељењу омота Постави као подразумевано Да ли сте сигурни да желите да сачувате ова подешавања као подразумевана? Такође примени на све наслове у мојој колекцији Није пронађено ни једно поглавље Датум почетка Морате поново да се пријавите на MAL Извор није подржан Непрочитано Напредак Завршено Ажурирања поглавља Неуспешно преузимање поглавља због недовољне меморије Почетни водич Ова Android верзија више није подржана Ажурирана су подразумевана подешаваља поглавља Није могуће преузети поглавље због неочекиване грешке Нема доступне Wi-Fi везе Опште Нема доступне интернет везе Преузимања су заустављена Ажурирања додатака Претходна страница Следећа страница Потамни (Burn) Првобитни метод Инсталирајте и покрените Shizuku да би користили Shizuku као инсталер додатака. Посветли (Dodge) Водич за праћење Осетљивост за сакривање менија при померању Прикажи начин навигације Датум завршетка Аутоматски Лиценце отвореног кода Ажурирано на v%1$s Ништа није пронађено Раздели широке странице Ништа Датум Начин навигације Непознат аутор Није пронађен програм за бирање датотека Грешке Подешавања поглавља Данас Лево Још немате категорија. Информације о апликацији Свака 3 дана Само преко Wi-Fi-а Ограничења: %s Поставке за сортирање одвојено за сваку категорију Наслови у искљученим категоријама се неће ажурирати иако су такође у укљученим категоријама. Укључи: %s Искључи: %s Инсталирање додатка… Shizuku није укључен Прикажи зоне додира када се читач отвори Обрни положај подељене странице Ако се положај подељених широких страница не подудара са смером читања На тренутак прикажи тренутни начин читања када се читач отвори Укључено Искључено Црно-бело Инвертовано Прекривање Обрни додире Ништа Хоризонтално Вертикално Оба Радње Сачувај странице у засебне фолдере Прави датотеке по имену наслова У облику слова L Оријентација Усправно Положено Највиша Висока Ниска Најнижа Избриши поглавља Дозволи брисање забележених поглавља Искључене категорије Наслови у искљученим категоријама неће се преузимати иако су такође у укљученим категоријама. Једносмерна синхронизација за ажурирање броја прочитаних поглавља у пратиоцима. За појединачно праћење наслова додирни дугме за њихово праћење. Подаци Инкогнито мод Омот је ажуриран %1$s: %2$s, страница %3$d За овај наслов Режим читања Нема страница Извор није пронађен Избриши историју Историја је избрисана Да ли сте сигурни? Цела историја ће бити изгубљена. Водич за миграцију извора Упозорење: велики број преузимања може довести до успоравања извора и/или блокирања %s-а. Додирни да сазнаш више. Велика ажурирања штете изворима и могу довести до споријег ажурирања и повећања потрошње батерије. Кликни да сазнаш више. Ажурирај све Ажурирања апликације Број наслова у бази података које нису у колекцији: %1$d Преузимање листе додатака није успело Испразни кеш меморију поглавља током покретања апликације Нема ништа за чишћење Прескочи уносе са непрочитаним поглављима Политика приватности Отказано На паузи Прескочи уносе који нису започети Прикажи наслов Помакни наслов на врх %1$d ажурирање није успело Додирните да сазнате више За помоћ о томе како да поправите грешке у ажурирању колекције, погледајте %1$s Прескочено јер ниједно поглавље није прочитано Мрежа насловница Померај широке слике Аутоматски зумирај слике у пејзажном облику Сачувај као CBZ архиву Обрнути портрет Издавање завршено Прескочено јер је наслов завршен Прескочено јер има непрочитаних поглавља Onesposobljen Нема уноса у колекцији за прављење резервних копија Отвори на GitHub-у Грешка при чувању слике Затвори Обриши податке WebView-a Подаци WebView-a су обрисани Категорије, глобално ажурирање, листање поглавља Режим читања, дисплеј, навигација Аутоматско преузимање, преузимање унапред Једносмерна синхронизација напретка, побољшана синхронизација Извори, додаци, глобална претрага Ручне и аутоматске резервне копије Преузми аутоматски током читања Копирано Сва подешавања читача су ресетована Присили апликацију да поново провери преузета поглавља Није инсталирано %s је наишао на неочекивану грешку. Предлажемо да поделите запис о прекиду програма на нашем каналу за подршку на Discord-у. Виџет није доступан када је омогућено закључавање апликације Прокажи број непрочитаних на икони ажурирања Листа жеља Доступно, али извор није преузет: %s F-Droid верзије нису званично подржане. \nДодирните да сазнате више. Уклони датум? Овим уклањате претходно изабран почетни датум од %s Овим уклањате претходно изабран завршени датум од %s Последње ажурирање колекције било је: %s Управо сада Ажурирање је већ у току Завршена листа Наслови на чекању Незавршени наслови Статистике Започето Локално Преузето Лаванда Језик апликације Верзија Неважећа локација: %s Непознат наслов Преглед Листа за читање Да ли сте сигурни? Трајање читања У глобалним ажурирањима Наслови Укупно Просечна оцена Прочитано Коришћено %d д %dч N/A %dмин %dс Нема описа Дугме за наставак читања InternalError: Провери записнике о прекиду програма за даље информације Прескочи дупликатска поглавља Више језика Језик Ресетуј режим читања и оријентацију свих серија Популарно Завршени наслови Побољшава перформансе читача Само на мрежи без ограничења Дозвола за меморијски простор није одобрена Неважећи низ корисничког агента Није могуће ресетовати подешавања читача Управо ћете уклонити \"%s\" из своје колекције Погледај твоје недавно ажуриране наслове у колекцији Поништи индекс преузимања Број непрочитаних Последња провера ажурирања Обриши категорију Желиш ли обрисати категорију \"%s\"? Уклони све Упс! Поново покрени апликацију Није могуће отворити последње прочитано поглавље Претражи… Преузми унапред Е па, ово је незгодно Није могуће пронаћи пут датотеке странице %d Прескочено јер наслов не захтева ажурирање Страница %d није пронађена током раздвајања Провера преузимања Не сада Формат теме, датума и времена Закључавање апликације, сигуран екран Записници гашења апликације, оптимизације батерије Отвори насумични наслов Ради само ако је тренутно и следеће поглавље већ преузето. Нема наслова у овој категорији Категорија је празна Низ корисничког агента не може бити празан Ресетуј подразумевани низ корисничког агента Праћени наслови Пратиоци Рангирање по узрасту Персонализовани омот Ресетуј подешавања читача по наслову Извор није пронађен Није пронађен инсталирани извор Цунами Подразумеван низ корисничког агента %1$s грешка: %2$s *неопходно Ажурирај категорију Сакри уносе који се већ налазе у колекцији Прекривање Растави високе слике Превуци удесно Превуци улево Додирни двапут за зумирање Копирај Окрени положај широких страница Прилагоди широке странице ротирањем Информације за отклањање грешака Није могуће створити датотеку резервне копије Има резултата Прескочено јер данас није очекивано издање Предвиди очекивано време изласка Постави интервал Интервали Такође уклони из %s Запис праћења Процени сваки Додирни овде за помоћ са Cloudflare-ом Индекс преузимања поништен Обриши преузет садржај Прилагођен интервал преузимања У реду Синхронизовање колекције завршено Постави да ажурира сваки Уклони праћење %s? Ово ће уклонити локално праћење. Следеће очекивано ажурирање Синхронизовање колекције Откључај %s Нема везе са интернетом HTTP %d, погледај веб сајт у WebView %s је недоступан Релативне временске ознаке „%1$s” уместо „%2$s” Паметно ажурирање Забљесни приликом листања Смањује артефакте на е-инк екранима Репозиторије додатака Место складиштења Користи се за аутоматске резервне копије, преузимаље поглавља и локални извор. Опозови поверење непознатим екстензијама Оцена на пратиоцу Аматерски преводилац Ниједан аматерски преводилац није пронађен Не укључуј аматерске преводиоце Предвиђа се да ће нова поглавља изаћи за %1$s, проверава се сваких %2$s. Ускоро Доступно: %1$s / Укупно: %2$s Немате додатих репозиторија. Додај репозиторију Избриши репозиторију URL репозиторије Додај додатне репозиторије у %s. Треба да буде URL који се завршава са „index.min.json”. Неисправан URL репозиторије Да ли желиш да избришеш репозиторију „%s”? Укључи и осетљива подешавања (нпр. токени за пријаву у пратиоце) Изабери путању Започни Мораш да изабереш једну путању Дозвола за обавештења Дозвола за инсталацију апликација Пресокочи Следеће За инсталирање додатака. За примање обавештења о ажурурању библиотеке и др. Одобри Добро дошли! Водич за прво покретање Користш %s први пут? Препоручујемо да погледаш водич за покретање Поново инсталираш %s? Избегни прекиде при дуготрајном ажурирању колекције, преузимању и обнављању резервне копије Коришћење батерије у позадини Хајде да обавимо нека подешавања. Ако желиш можеш их касније променити у подешавањима. Није постављена локација за складиштење Одабери путању у коју ће %1$s чувати преузимања поглавља, резервне копије и друго. \n \nПрепоручујемо коришћење засебне путање \n \nОдабрана путања: %2$s Норд Ажурураш са старије верзије и не знаш шта да изабереш? Потражи информације у водичу складиштења. Водич складиштења За инсталацију додатака потребне су дозволе. Додирни овде за одобрење Грешка: Ова репозиторија већ постоји Прилагођена учесталост ажурирања: Отвори репозиторију Није одабрано Одабрано Више опција Навигација према горе Премести серију на крај Подешавања апликације Подешавања извора Последња аутоматска резервна копија:%s Никада Ажурирање библиотеке... (%s) Онемогући умањивање Створи Коришћење складишта Ни једна датотека није одабрана Примени Врати на подразумевано Dodati svejedno Predstojeći Zameniti Otisak prsta za otključavanje već postoji ================================================ FILE: i18n/src/commonMain/moko-resources/sv/plurals.xml ================================================ Efter %1$s minut Efter %1$s minuter %1$d nytt kapitel %1$d nya kapitel Kapitel %1$s och 1 till Kapitlen %1$s och %2$d till För %d post För %d poster Tilläggsuppdatering tillgänglig %d tilläggsuppdateringar tillgängliga %1$s återstående %1$s återstående %d kategori %d kategorier Klar på %1$s med %2$s fel Klar på %1$s med %2$s fel %1$s kapitel %1$s kapitel %d spårare %d spårare Hoppar över %d kapitel, antingen saknar källan det eller så har det filtrerats bort Hoppar över %d kapitel, antingen saknar källan dem eller så har de filtrerats bort Igår För %1$d dagar sedan Nästa olästa kapitel Nästa %d olästa kapitel Saknar %1$s kapitel Saknar %1$s kapitel 1 dag %d dagar Nästa kapitel Nästa %d kapitel %d förråd %d förråd Imorgon Om %1$d dagar 1 sida %1$s sidor ================================================ FILE: i18n/src/commonMain/moko-resources/sv/strings.xml ================================================ Namn Kategorier Biblioteksposter Kapitel Spårning Historik Inställningar Nedladdningskö Bibliotek Historik Uppdateringar Säkerhetskopiera och återställ Migrera Tillägg Tilläggsinformation Inställningar Filter Bokmärkt Oläst Ta bort filtret Alfabetiskt Totalt kapitel Senast läst Sök Global sökning Välj alla Markera som läst Markera som oläst Markera tidigare som läst Ladda ner Kapitel bokmärke Radera kapitel bokmärke Radera Uppdatera biblioteket Redigera Lägg till Lägg till kategori Redigera kategorier Byt namn på kategori Välj kategorier Redigera omslaget Paus Föregående kapitel Nästa kapitel Försök igen Ta bort Återuppta Öppna i webbläsaren Visningsläge Visa Kompakt rutnät Lista Nedladdade kapitel Avbryt Sortera Installera Dela Spara Återställ Ånga Öppna logg Återställ Laddar… Applikationen är inte tillgänglig Allmänt Läsare Nedladdningar Spårning Avancerat Om appen Objekt per rad Porträtt Landskap Automatiska uppdateringar Av Var 6:e timme Var 12:e timme Dagligen Varannan dag Varje vecka Alla Automatiska uppdateringar av enhetsbegränsningar Vid laddning Hoppa över artiklar med status \"Avslutat\" Uppdatera förlopp efter läsning Standardkategori Fråga alltid Uppdatera Installera Väntade Laddar ner Installerar Installerad Förtroende Opålitlig Avinstallera Opålitlig extension Ett skadligt tillägg kan läsa lagrade inloggningsuppgifter eller köra arbiträr kod. \n \nGenom att lita på detta tillägg accepterar du dessa risker. Fullskärm Animera sidbyten Animationshastighet för dubbelklick Visa sidnummer Beskär kanter Anpassad ljusstyrka Anpassad färgfilter Håll skärmen på Navigering Volymknapparna Invertera volymknapparna Bakgrundsfärg Vit Svart Standardläsläge Sidor (vänster till höger) Sidor (höger till vänster) Sidformat (vertikalt) Lång remsa Sidläsare Bildanpassning Passa skärmen Sträck ut Passa bredd Passa höjd Originalstorlek Smart passning Startposition på Zoom Automatisk Vänster Höger Mitten Ingen animering Normal Snabb Standard rotation Upplåst Låst porträtt Låst liggande Röd Grön Blå Transparens Efter manuellt markerad som läst Ta bort automatiskt efter läsning Inaktiverad Senaste lästa kapitel Näst sist lästa kapitel Tredje till sist lästa kapitlet Fjärde till sista lästa kapitlet Femte till sist lästa kapitlet Ladda ner nya kapitel Spårare Skapa säkerhetskopia Kan användas för att återställa biblioteket Återställ säkerhetskopia Återställ biblioteket från en säkerhetskopia Automatisk säkerhetskopieringsfrekvens Säkerhetskopia skapad Återställning slutförd Vad vill du säkerhetskopiera? Återställer säkerhetskopia Skapar säkerhetskopia Rensa kapitelcache Används: %1$s Cache rensad, %1$d filer togs bort Fel inträffade vid rensning Radera cookies Cookies rensade Rensa databas Ta bort historik för inlägg som inte finns i ditt bibliotek Inlägg raderade Version Skicka kraschrapporter Hjälper till att fixa eventuella buggar. Inga känsliga uppgifter skickas Logga in för %1$s Användarnamn Lösenord Logga in Inloggad Okänt fel Uppdaterar kategori Inga mer resultat Lokal källa Andra Global sökning… Senaste Bläddra Pågående Okänd Licensierad Ta bort från biblioteket Lades till i biblioteket Togs bort från biblioteket Ta bort nedladdade kapitel? Kopierat till urklipp: \n%1$s Källa inte installerad: %1$s Kapitel %1$s Laddar ner (%1$d/%2$d) Fel Pausad Källtitel Kapitelnummer Efter källa Efter kapitelnummer Ladda ner Olästa Är du säker på att du vill radera valda kapitel? Spårning Läser Färdig Slutat läsa Pausad Planerar att läsa Läser om Betyg Titel Status Status Typ En kategori med detta namn finns redan! Kategorier raderade Detta kommer att ta bort läs datumet för detta kapitel. Är du säker? Återställ alla kapitel för denna post Lägg till i biblioteket? Bild sparad Anpassat filter Ställ in som omslag Omslag uppdaterad Sida: %1$d Nästa kapitel kunde inte hittas Bilden kunde inte laddas Sätt bild som omslag? Färdig: Nuvarande: Nästa: Föregående: Det finns inget mer kapitel Det finns inget tidigare kapitel Laddar sidor… Misslyckades att ladda sidor: %1$s Välj data som ska inkluderas Migrera Kopiera Kunde inte ladda ned kapitlen. Du kan försöka igen i nedladdningssektionen Nya kapitel hittades Misslyckades att uppdatera omslag Vänligen lägg till post i ditt bibliotek innan du gör detta Välj omslagsbild Välj säkerhetskopia Ladda ner Inga nya uppdateringar tillgängliga Laddar ner… Tryck för att installera uppdateringen Nedladdningsfel Ny version tillgänglig! Inga nedladdningar Inga nya uppdateringar Inget nyligen läst Ditt bibliotek är tomt Du har inga kategorier. Tryck på plusknappen för att skapa en för att organisera ditt bibliotek. Nedladdare Fel Kunde inte ladda ned kapitel på grund av ett oförväntat fel Ingen WiFi-anslutning tillgänglig Ingen nätverksanslutning tillgänglig Nedladdningar pausade Vanlig Öppna i WebView Hoppa över lästa kapitel Visa åtgärder vid lång tryckning Färgfilterblandningsläge Överlägg Multiplicera Skärm Ljusna Mörkna Hjälp Inga resultat funna Välj en källa att migrera ifrån Bakåt Framåt Uppdatera Bibliotek Obsolet Detta tillägg är inte längre tillgängligt. Det kanske inte fungerar korrekt och kan orsaka problem med appen. Vi rekommenderar att du avinstallerar det. Datumformat Global uppdatering Logga ut från %1$s? Logga ut Du är nu utloggad Pausad Mer Senaste kapitel Visa kapitel Avbryt alla Ljus Mörk System Hantera aviseringar Säkerhet och integritet Kräver upplåsning Lås vid inaktivitet Alltid Aldrig Säker skärm Uppdateringar väntar Visa innehåll i utskärningsområdet Det gick inte att kringgå Cloudflare Uppdatera WebView-appen för bättre kompatibilitet Kapiteluppdateringar Säker skärm döljer appinnehållet när du byter app och blockerar skärmdumpar Skärmvisning Kapitel %1$s Kapitel %1$s och %2$d till Kapitlen %1$s Dölj notisinnehåll Inaktivera batterioptimering Hjälper till med uppdateringar och säkerhetskopior i bakgrunden Batterioptimering är redan inaktiverat E-postadress Visa alltid kapitelövergång Meny Nyaste Äldsta Flytta till toppen Flytta till botten Tilläggsuppdateringar Uppdaterar biblioteket Läser Hoppa över filtrerade kapitel Källor Lägg till spårning I biblioteket Lägg till i biblioteket Nålad Sidofyllning Lång remsa med mellanrum Lossa Nåla Välj omvänd Mindre Mer WebView krävs för att appen ska fungera Kapitel %1$s - %2$s Lokal källa guide Senast använd Sök efter uppdateringar Open source-licenser Hemsida Avbruten återställning Återställning av säkerhetskopiering misslyckades Återställningen pågår redan Säkerhetskopiering misslyckades Säkerhetskopiering pågår redan %1$02d minuter, %2$02d sekunder Endast nedladdat Filtrerar alla poster i ditt bibliotek Läsläge För denna serie Grå Det gick inte att öppna enhetsinställningarna Uppdatera bibliotekets omslag Envägssynkronisering för att uppdatera kapitlets framsteg i externa spårningstjänster. Ställ in spårning för enskilda poster från deras spårningsknapp. Efter uppladdningsdatum Data Saknade källor: Säkerhetskopian innehåller inga biblioteksposter. Ogiltig säkerhetskopiafil: Sök efter nytt omslag och detaljer när du uppdaterar biblioteket Uppdatera metadata automatiskt Migrera Inaktivera alla Hittade inga sidor Flikar Visa nuvarande läge när läsaren öppnas Visa läsläge Visa kategoriflikar Komfortabelt rutnät Aktivera alla Start Både Vertikal Horisontell Ingen Invertera tryckzoner Källan hittades inte Okänd status Okänd författare Kräver omstart av appen för att börja gälla Nätverk Inaktivera Det gick inte att ladda ner kapitelt på grund av lågt lagringsutrymme Sök efter \"%1$s\" globalt Uppdaterad till v%1$s Vad är nytt Läsläge Tema Datum tillagd Färdig Förlopp Du har inga fästa källor Tillåt att radera bokmärkta kapitel Ta bort kapitel Källor från detta tillägg kan innehålla NSFW(18+) innehåll 18+ Spårare som inte har loggats in: Detta förhindrar inte inofficiella eller potentiellt felaktigt flaggade tillägg från att visa NSFW(18+) innehåll i appen. Fel Uppdaterade standardinställningar för kapitel Vill du spara de här inställningarna som standard? %1$s: %2$s, sida %3$d Inga kapitel hittades Ange som standard Gäller även alla inlägg i biblioteket Kapitelinställningar Nedladdade kapitel Från biblioteket Pausar läshistoriken Inkognitoläge Rensa historik Är du säker? All historik kommer att försvinna. Historiken har tagits bort Sök inställningar Nästa sida Föregående sida Migreringsguide för källor NSFW (18+) källor Visa i källor och tilläggslistor Ingen filväljare-app hittades Vänligen logga in på MAL igen Sparar felloggar till en fil för delning med utvecklarna Dela kraschloggar Fallande Efter kapitelnummer Efter uppladdningsdatum Stigande Slutdatum Start datum Tryckzoner Kant Kindle-lik L-formad Spåras Höger och Vänster Visa antal objekt Delning av breda sidor Du måste installera eventuella tillägg som saknas och logga in på spårningstjänster efteråt för att kunna använda dem. Höger Vänster Nästa Föregående Om placeringen av delning av breda sidor inte matchar läsriktningen Invertera placering av delad sida Visa kort när läsaren öppnas Visa överlägg för tryckzoner DNS över HTTPS (DoH) Exkludera: %s Inkludera: %s Ingen Datum för hämtning av kapitel Inlägg i uteslutna kategorier laddas inte ner även om de också ingår i inkluderade kategorier. Ladda ned automatiskt Inlägg i uteslutna kategorier uppdateras inte även om de också ingår i inkluderade kategorier. Tryck för att se detaljer Denna Android-version stöds inte längre Kunde inte kopiera till urklipp Liggande Porträtt Rotation Skapar mappar enligt posternas titel Spara sidor i separata mappar Åtgärder Gråskala Automatisk Inaktivera inkognitoläge Avbryt alla för denna serie Ingen matchning hittad Källan stöds inte Oläst Datum Sortera efter Ogiltigt kapitelformat Kapitlet hittades inte Begränsningar: %s Lokal källa Av Fel vid delning av omslag Det gick inte att spara omslaget Omslaget har sparats Omslag Spårningsguide Inställningar per kategori för sortering Du har inga kategorier ännu. Börja ladda ner nu Säkerhetskopiering/återställning kanske inte fungerar korrekt om MIUI-optimering är inaktiverat. Ger förbättrade funktioner för specifika källor. Poster spåras automatiskt när de läggs till i ditt bibliotek. Förbättrade spårare Rent svart mörkt läge Yotsuba Yin och yang Tako Jordgubbsdaiquiri Midnattskymning Grönt äpple Dynamisk App-tema Vissa tillverkare har ytterligare appbegränsningar som dödar bakgrundstjänster. Denna webbplats har mer information om hur du åtgärdar det. Bakgrundsaktivitet Lägsta Låg Hög Högsta Känslighet för att dölja menyn vid rullning Omvänd Idag Teal och turkos Utseende Autentisera för att bekräfta ändringen Standard Komma igång guide Spår Tablettgränssnitt Hjälp till med översättning Uteslutna kategorier Appinformation Shizuku körs inte Äldre Installatör Installerar tillägg… Totalt antal inlägg Installera och starta Shizuku för att använda Shizuku som tilläggsinstallationsprogram. Skriv ut utförliga loggar till systemloggen (minskar appprestanda) Du bör även spara kopior av säkerhetskopior på andra platser. Säkerhetskopior kan innehålla känsliga uppgifter, t.ex. lagrade lösenord; var försiktig om du delar dem. Omfattande loggning Varning Språk Bara över Wi-Fi Stora uppdateringar skadar källor och kan leda till långsammare uppdateringar samt en ökad batterianvändning. Tryck för att få veta mer. Varning: stora massnerladdningar kan leda till att källor blir långsamma och/eller blockerar %s. Tryck för att få veta mer. Var 3:e dag Uppdatera alla Appuppdateringar Rensa kapitelcache när appen startas %1$d icke-biblioteksposter i databasen Inget att rensa För hjälp med att åtgärda fel i biblioteksuppdateringar, se %1$s Avbruten På uppehåll Publiceringen avslutad Spara som CBZ-arkiv Integritetspolicy Hoppa över artiklar med olästa kapitel Kunde inte hämta tillgängliga tillägg Visa inlägg Endast omslags-rutnät Hoppa över artiklar som ej är påbörjade Panorera breda sidor Automatiskt zoomning i stora bilder Hoppade över eftersom serien är klar Hoppade över eftersom det finns olästa kapitel Hoppade över eftersom inga kapitel läses Tryck på för att få veta mer %1$d uppdatering(ar) misslyckades Omvänt porträtt Flytta serien till toppen Inaktiverad Fel vid lagring av bild Inga biblioteksposter att säkerhetskopiera Öppna på GitHub Rensa data från WebView WebView-data rensas Stäng Ingen installerad källa hittades Senaste uppdateringskontroll Antal olästa Förbättrar läsarens prestanda Sida %d hittades inte under delning Ingen källa hittad Kunde inte återställa läsarinställningarna Återställ läsinställningarna per serie Återställer läsläge och orientering för alla serier Kunde inte hitta filsökvägen för sida %d Återställning av läsarens inställningar Endast på nät utan mätning Läslista Väntelista Oavslutad lista Det här är pinsamt Önskelista Klart lista Åldersklassificering Version Språk Det går inte att öppna det senast lästa kapitlet Inte installerad Anpassat omslag Lavendel Ingen beskrivning Appspråk Vill du radera kategorin \"%s\"? Interntfel: Kontrollera kraschloggar för ytterligare information Ta bort kategori Standardsträng för användaragent Återställ standardsträngen för användaragent Ta bort allt Se dina nyligen uppdaterade biblioteket inlägg Widget är inte tillgänglig när applåset är aktiverat En uppdatering pågår redan Flerspråkig Strängen för användaragent kan inte vara tom Är du säker? Biblioteket uppdaterades senast: %s Populära Du är på väg att ta bort \"%s\" från ditt bibliotek Ladda ner i förväg Tidvattenvåg Fungerar endast om det aktuella kapitlet + nästa redan har laddats ner. Automatisk nedladdning under läsning Kategorier, global uppdatering, kapitel svepning Läsläge, skärmvisning, navigering Ogiltig sträng för användaragent Okänd titel Just nu Sök… Automatisk nedladdning, ladda ned i förväg Envägs synkronisering av framfart, förbättrad synkronisering Manuell och automatisk säkerhetskopiering, lagringsutrymme Ogiltig plats: %s Lagrings rättigheter inte tillagda Hoppat över för att serien inte behöver uppdateras %s stötte på ett oväntat fel. Vi föreslår att du delar med dig av kraschloggen i vår supportkanal på Discord. Tema, datum och tids format Källor, tillägg, global sökning Starta om applikationen Hoppsan! Dumpa krasch logg, batterioptimering Applikations lås, säkerhetsskärm Statistik Påbörjade Lokala Nedladdade Tillgänglig men källan är ej installerad: %s Visa antal olästa på ikonen för Uppdateringar Hoppa över duplicerade kapitel Fortsätt läsa knapp Inte nu Öppna en slumpmässig manga Omindexera nedladdningar Tvinga appen att läsa in nedladdade kapitel på nytt F-Droid-versioner stöds inte officiellt. \nTryck för att få veta mer. Dela höga bilder Uppdatera kategori Kopiera till urklipp Dölja poster som redan finns i biblioteket Kontrollerar nedladdningar Överlägg Rotera breda sidor så att de passar Vänd orientering av roterade breda sidor *krävs Inga inlägg hittades i denna kategori Genomsnittlig poäng %dm %ds Använd N/A Ta bort datum? Inlägg I global uppdatering Totalt Läst Uppskatta varje Ange intervall Anpassat uppdateringsintervall Nästa förväntade uppdatering Hoppades över eftersom ingen publicering förväntades idag Spårade inlägg %dd %1$s fel: %2$s Dubbeltryck för att zooma Detta kommer att ta bort ditt tidigare valda startdatum från %s Ta bort %s spårning? Detta kommer att ta bort spårningen lokalt. Detta kommer att ta bort ditt tidigare valda slutdatum från %s Ta även bort från %s Kategorin är tom %dt Synkronisering av bibliotek Felsökningsinformation Kopierad till urklipp Ställ in för att uppdatera varje Har resultat Avslutade inlägg Bibliotekssynkronisering slutförd Index för nedladdningar ogiltigt Översikt Radera nedladdat Svep till höger åtgärd Svep till vänster åtgärd Lästid Spårare Klicka här för hjälp med Cloudflare OK Förutspå nästa releaseperiod Intervaller Kunde inte skapa en backup-fil Spårar-inloggning Ingen internet anslutning HTTP %d, kolla på webbsida i WebView Kunde inte nå %s Lås upp %s Flytta serien till botten Uppdaterar biblioteket... (%s) Inställningar för källa Appinställningar Relativa tidsstämplar \"%1$s\" istället för \"%2$s\" Skapa Aldrig Minimerar spöktext på e-papperskärmar Tillämpa Återgå till standard Senaste automatiska säkerhetskopieringen: %s Inga scanlatorer hittades Översättare Blinka vid sidbyte Lagringsanvändning Spårares betyg Data och lagring Ingen fil vald Exkludera scanlatorer Lagringsplats Används för automatisk säkerhetskopiering, kapitelnedladdningar och lokal källa. Mer alternativ Vald Inte vald Navigera upp Välj en mapp Introduktionsguide Ny till %s? Vi rekommenderar att du tar en titt på komma igång guiden. Kom igång En mapp måste väljas Välkommen! Ominstalleras %s? Hoppa över Nästa Låt oss ställa in några saker först. Du kan alltid ändra dessa i inställningarna senare. Ingen lagringsplats inställd Välj en mapp där %1$s lagrar kapitelnedladdningar, säkerhetskopior och mer. \n \nEn dedikerad mapp rekommenderas. \n \nVald mapp: %2$s Aviseringsbehörigheter Installera app behörigheter Undvik avbrott i långvariga biblioteksuppdateringar, nedladdningar och säkerhetskopieringsåterställningar. Bakgrundsbatterianvändning För att installera källtillägg. Få aviseringar om biblioteksuppdateringar och mer. Bevilja Tillgängligt: %1$s / Totalt: %2$s Behörigheter krävs för att installera tillägg. Tryck här för att bevilja. Inkludera känsliga inställningar (t.ex. spårningsinloggningstokens) Nya kapitel förväntas att släppas varje \"%1$s\", kontrollerar varje \"%2$s\". Fullständigt fel: Osäker på vad du ska välja då du uppdaterar från en äldre version? Se lagerhanteringsguiden för mer information. Smart uppdatering Lagerhanteringsguide Nord Vill du ta bort förråd \"%s\"? Återkalla tillförlitliga okända tillägg Tilläggsförråd Du har inga förråd inställda. Lägg till förråd Förråd URL Lägg till ytterliga förråd till %s. Detta ska vara en URL som slutar med \"index.min.json\". Detta förråd existerar redan! Ta bort förråd Ogiltig förråds URL Öppenkällkods förråd Snart Anpassad uppdateringsfrekvens: Inaktivera utzoomning Lägg till ändå Ersätt Anpassad skärmprofil Kommande Föregående månad Nästa månad Signeringsnyckel-fingeravtryck finns redan Förrådet %1$s har samma Signering av nyckelfingeravtryck som %2$s. \nOm detta förväntas kommer %2$s att ersättas, annars kontakta den förråds-ansvarige. Visa kommande uppdateringar Kommande guide Misslyckades med att skaffa beständig mappåtkomst. Appen kan bete sig oväntat. Denna manga är antingen avslutad, eller så finns inget förutsebart publiceringsdatum. Blink varaktighet %1$s ms Blinka var Blinka med Svart Vitt Svart och vitt Säkerhetskopierings fil är korrupt JSON säkerhetskopering stöds inte Tilläggsförråd Kopiera länk Slumpmässigt Skicka kraschloggar Skicka anonymiserade kraschloggar till utvecklarna. Skicka anonymiserade användningsdata för att förbättra appens funktioner. Säkerhet Vill du verkligen lägga till förrådet \"%s\"? Om läsaren laddar en tom bild, minska stegvis tröskelvärdet.\nVal: %s Påverkar prestandan. Aktivera endast om minskning av bitmapströskeln inte fixar problem gällande tomma bilder Uppdatera läsförlopp vid markering som läst Ta bort Ta bort tillägg? Vill du verkligen ta bort tillägget \"%s\"? Standard (%d) Tillåt insamling av användningsdata Användningsdata och kraschloggar Alla färdiglästa artiklar Pausa tilläggets läshistorik Spårare har uppdaterats till kapitel %d Att skicka kraschloggar och användningsdata tillåter oss att identifiera och korrigera fel, förbättra prestanda samt göra framtida uppdateringar mer relevanta till dina behov Uppdatera spårare till kapitel %d? Anpassad hårdvarubitmapströskel Spåra offentligt Monokrom Exportera Bibliotek Exporterat Bibliotekslista Författare Tecknare Spåras privat Spåra privat ================================================ FILE: i18n/src/commonMain/moko-resources/ta/strings.xml ================================================ ஆன் அணை ச்கேன்லேட்டர் மேலும் அமைப்புகள் வரிசையைப் பதிவிறக்கவும் நூலகம் புதுப்பிப்புகள் இயல்புநிலை எச்சரிக்கை தொடங்கியது பதிவிறக்கம் %s திறக்கவும் மாற்றத்தை உறுதிப்படுத்த ஏற்பு அமைப்புகள் பட்டியல் வடிப்பி இடைவெளி அமைக்கவும் புக்மார்க்கு செய்யப்பட்டது கண்காணிக்கப்பட்டது படிக்காதது தேர்ந்தெடுக்கப்பட்டது தேர்ந்தெடுக்கப்படவில்லை மேலும் விருப்பங்கள் மேலே செல்லவும் பெயர் வகைகள் நூலக உள்ளீடுகள் பாடங்கள் கண்காணிப்பு பதிவிறக்கம் செய்யப்பட்டதை நீக்கு வரலாறு வரவிருக்கும் வரலாறு மூலங்கள் காப்புப்பிரதி மற்றும் மீட்டமை தரவு மற்றும் சேமிப்பு புள்ளிவிவரங்கள் குடியேறவும் நீட்டிப்புகள் நீட்டிப்பு செய்தி உதவி உள்ளக வடிகட்டியை அகற்று அகரவரிசை மொத்த உள்ளீடுகள் மொத்த அத்தியாயங்கள் கடைசியாக படித்தார் கடைசி புதுப்பிப்பு சோதனை படிக்காத எண்ணிக்கை அடுத்து எதிர்பார்க்கப்படும் புதுப்பிப்பு அண்மைக் கால அத்தியாயம் சீரற்ற தேடல் தேடுங்கள்… அமைப்புகளைத் தேடுங்கள் குடியேறவும் காட்சி முறை காட்சி கச்சிதமான கட்டம் வசதியான கட்டம் பட்டியல் கவர்-மட்டும் கட்டம் பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்கள் உள்ளக மூல மொழி மேம்பட்ட புக்மார்க்கு செய்யப்பட்ட அத்தியாயங்களை நீக்க அனுமதிக்கவும் விலக்கப்பட்ட பிரிவுகள் சேமிப்பக இருப்பிடம் இல்லை தவறான இடம்: %s முடக்கப்பட்டது கடைசியாக படித்த அத்தியாயம் இரண்டாவது முதல் கடைசியாக படிக்க அத்தியாயம் மூன்றாவது முதல் கடைசியாக படிக்க அத்தியாயம் நீட்டிப்பு களஞ்சியங்கள் உணர்திறன் அமைப்புகளைச் சேர்க்கவும் (எ.கா., டிராக்கர் உள்நுழைவு டோக்கன்கள்) உள்ளீடுகள் அனைத்தும் காப்புப்பிரதியை உருவாக்குதல் காப்புப்பிரதி தோல்வியடைந்தது நீங்கள் காப்புப்பிரதிகளின் நகல்களை மற்ற இடங்களிலும் வைத்திருக்க வேண்டும். சேமிக்கப்பட்ட கடவுச்சொற்கள் உட்பட முக்கியமான தரவு காப்புப்பிரதிகளில் இருக்கலாம்; பகிர்வு செய்தால் கவனமாக இருங்கள். கடைசியாக தானாக காப்புப் பிரதி எடுக்கப்பட்டது: %s தகவல்கள் சேமிப்பக பயன்பாடு தெளிவான அத்தியாயம் கேச் பிழைத்திருத்த செய்தி வலைத்தளம் பதிப்பு புதியது என்ன மொழிபெயர்க்க உதவுங்கள் திறந்த மூல உரிமங்கள் உலக தேடல்… உலகளவில் \"%1$s\" ஐத் தேடுங்கள் அண்மைக் கால மக்கள் உலாவு நூலகத்திலிருந்து அகற்றப்பட்டது மேலும் குறைவாக பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்களை நீக்கவா? கடைசியாக புதுப்பிக்கப்பட்டது: %s இப்போது ஒருபோதும் வரவிருக்கும் புதுப்பிப்புகளைக் காண்க வரவிருக்கும் வழிகாட்டி அடுத்த மாதம் முந்தைய மாதம் Ch. %1$s - %2$s வரலாற்றை அழிக்கவும் பயன்பாட்டு பூட்டு இயக்கப்பட்டால் விட்செட் கிடைக்கவில்லை உங்கள் நூலகத்திலிருந்து \"%s\" ஐ அகற்ற உள்ளீர்கள் Http %d, வெப்வியூவில் வலைத்தளத்தைப் பாருங்கள் இணைய இணைப்பு இல்லை %s ஐ அடைய முடியவில்லை உள்ளீடுகளின் தலைப்புக்கு ஏற்ப கோப்புறைகளை உருவாக்குகிறது தனிப்பயனாக்கப்பட்ட புதுப்பிப்பு அதிர்வெண் அத்தியாயம் பெறும் தேதி தேதி சேர்க்கப்பட்டது டிராக்கர் மதிப்பெண் உலக தேடல் அனைத்தையும் தெரிவுசெய் தலைகீழ் தேர்ந்தெடுக்கவும் படித்தபடி குறி படிக்காத எனக் குறிக்கவும் முந்தையதைப் படித்ததாகக் குறிக்கவும் பதிவிறக்கம் புக்மார்க்கு அத்தியாயம் Unbookmark அத்தியாயம் வகைகளை அமைக்கவும் \"%s\" என்ற வகையை நீக்க விரும்புகிறீர்களா? வகையை நீக்கு நீக்கு நூலகத்தைப் புதுப்பிக்கவும் அனைத்தையும் இயக்கு அனைத்தையும் முடக்கு தொகு கூட்டு புதுப்பிப்பு வகை சீரற்ற நுழைவைத் திறக்கவும் வகையைச் சேர்க்கவும் வகைகளைத் திருத்து வகை மறுபெயரிடுதல் கவர் திருத்து அத்தியாயங்களைக் காண்க இடைநிறுத்தம் முந்தைய அத்தியாயம் தொடங்கு மீண்டும் தொடங்குங்கள் உலாவியில் திற நுழைவு காட்டு இடைநிலைப்பலகைக்கு நகலெடுக்கவும் அடுத்த அத்தியாயம் மீண்டும் முயற்சிக்கவும் அகற்று எல்லாவற்றையும் அகற்றவும் இணைப்பை நகலெடுக்கவும் வெப்வியூவில் திறக்கவும் வகை தாவல்களைக் காட்டு படிப்பு பொத்தானைத் தொடரவும் முடக்கு முள் மூள்நீக்கு இடு ரத்துசெய் சரி பொருட்களின் எண்ணிக்கையைக் காட்டு அனைத்தையும் ரத்துசெய் இந்த தொடருக்கு அனைத்தையும் ரத்துசெய் வரிசைப்படுத்து பதிவேற்றுவதன் மூலம் அத்தியாய எண் மூலம் புதியது பழமையானது ஏறுதல் இறங்கு மேலே செல்லுங்கள் தொடரை மேலே நகர்த்தவும் கீழே செல்லுங்கள் தொடரை கீழே நகர்த்தவும் நிறுவவும் பங்கு சேமி மீட்டமை இயல்புநிலைக்கு திரும்பவும் செயல்தவிர் மூடு பதிவு திற விவரங்களைக் காண தட்டவும் மீட்டமை பின் முன்னோக்கி புதுப்பிப்பு இப்போது பதிவிறக்கத் தொடங்குங்கள் இப்போது இல்லை எப்படியும் சேர்க்கவும் ஏற்றுகிறது… இன்டர்னெர்ர்: மேலும் தகவலுக்கு செயலிழப்பு பதிவுகளை சரிபார்க்கவும் பயன்பாடு கிடைக்கவில்லை ஆன் போர்டிங் வழிகாட்டி வரவேற்கிறோம்! முதலில் சில விசயங்களை அமைப்போம். நீங்கள் எப்போதும் அமைப்புகளில் இவற்றை மாற்றலாம். அடுத்தது தொடங்கவும் தவிர் %1$s அத்தியாய பதிவிறக்கங்கள், காப்புப்பிரதிகள் மற்றும் பலவற்றை சேமிக்கும் ஒரு கோப்புறையைத் தேர்ந்தெடுக்கவும்.\n\n ஒரு பிரத்யேக கோப்புறை பரிந்துரைக்கப்படுகிறது.\n\n தேர்ந்தெடுக்கப்பட்ட கோப்புறை: %2$s ஒரு கோப்புறையைத் தேர்ந்தெடுக்கவும் ஒரு கோப்புறை தேர்ந்தெடுக்கப்பட வேண்டும் பழைய பதிப்பிலிருந்து புதுப்பித்தல் மற்றும் எதைத் தேர்ந்தெடுப்பது என்று தெரியவில்லையா? மேலும் தகவலுக்கு சேமிப்பக வழிகாட்டியைப் பார்க்கவும். அறிவிப்பு இசைவு நூலக புதுப்பிப்புகள் மற்றும் பலவற்றிற்கு அறிவிக்கப்படுங்கள். பின்னணி பேட்டரி பயன்பாடு நீண்டகால நூலக புதுப்பிப்புகள், பதிவிறக்கம் மற்றும் காப்புப்பிரதி மீட்டமைப்புக்கு குறுக்கீடுகளைத் தவிர்க்கவும். செயலிழப்பு பதிவுகளை அனுப்பவும் டெவலப்பர்களுக்கு அநாமதேய செயலிழப்பு பதிவுகளை அனுப்பவும். பகுப்பாய்வுகளை அனுமதிக்கவும் பயன்பாட்டு அம்சங்களை மேம்படுத்த அநாமதேய பயன்பாட்டு தரவை அனுப்பவும். சேமிப்பக வழிகாட்டி பயன்பாடுகளின் அனுமதியை நிறுவவும் மூல நீட்டிப்புகளை நிறுவ. மானியம் கருப்பொருள், தேதி மற்றும் நேர வடிவம் வகைகள், உலகளாவிய புதுப்பிப்பு, அத்தியாயம் ச்வைப் படித்தல் பயன்முறை, காட்சி, வழிசெலுத்தல் தானியங்கி பதிவிறக்க, முன்னால் பதிவிறக்குங்கள் ஒரு வழி முன்னேற்ற ஒத்திசைவு, மேம்பட்ட ஒத்திசைவு ஆதாரங்கள், நீட்டிப்புகள், உலகளாவிய தேடல் கையேடு மற்றும் தானியங்கி காப்புப்பிரதிகள், சேமிப்பு இடம் பயன்பாட்டு பூட்டு, பாதுகாப்பான திரை செயலிழப்பு பதிவுகள், பேட்டரி மேம்படுத்தல்கள் கருப்பொருள் பயன்பாட்டு கருப்பொருள் மண்டலம் ஒளி இருண்ட %s க்கு புதியதா? தொடங்கும் வழிகாட்டியைப் பார்க்க பரிந்துரைக்கிறோம். %s ஐ மீண்டும் நிறுவுகிறீர்களா? பொது தோற்றம் நூலகம் வாசகர் பதிவிறக்கங்கள் கண்காணிப்பு பற்றி என டீல் & டர்க்கைச் யின் & யாங் நான்கு இலைகள் அலைகடல் அலை தூய கருப்பு இருண்ட பயன்முறை உறவினர் நேர முத்திரைகள் மாறும் பச்சை ஆப்பிள் \"%2$s\" க்கு பதிலாக \"%1$s\" சுகந்தி நள்ளிரவு அந்தி nord ச்ட்ராபெரி டாய்கிரி தேதி வடிவம் அறிவிப்புகளை நிர்வகிக்கவும் பயன்பாட்டு மொழி பாதுகாப்பு மற்றும் தனியுரிமை பாதுகாப்பான திரை பயன்பாடுகளை மாற்றும்போது பயன்பாட்டு உள்ளடக்கத்தை பாதுகாப்பான திரை மறைக்கவும், திரை சாட்களைத் தடுக்கவும் செயலிழப்பு பதிவுகள் மற்றும் பகுப்பாய்வுகளை அனுப்புவது சிக்கல்களைக் கண்டறிந்து சரிசெய்யவும், செயல்திறனை மேம்படுத்தவும், எதிர்கால புதுப்பிப்புகளை உங்கள் தேவைகளுக்கு மிகவும் பொருத்தமானதாக மாற்றவும் அனுமதிக்கும் NSFW (18+) ஆதாரங்கள் ஆதாரங்கள் மற்றும் நீட்டிப்பு பட்டியல்களில் காண்பி இது பயன்பாட்டிற்குள் NSFW (18+) உள்ளடக்கத்தை வெளிவருவதிலிருந்து அதிகாரப்பூர்வமற்ற அல்லது தவறான கொடிய நீட்டிப்புகளைத் தடுக்காது. இன்று காட்சி ஒரு வரிசையில் உருப்படிகள் உருவப்படம் நிலப்பரப்பு உலகளாவிய புதுப்பிப்பு தானியங்கி புதுப்பிப்புகள் அணை ஒவ்வொரு 6 மணி நேரமும் ஒவ்வொரு 12 மணி நேரமும் நாள்தோறும் ஒவ்வொரு 2 நாட்களுக்கும் ஒவ்வொரு 3 நாட்களுக்கும் வாராந்திர பாதுகாப்பு பகுப்பாய்வு மற்றும் செயலிழப்பு பதிவுகள் திறத்தல் தேவை சும்மா இருக்கும்போது பூட்டு எப்போதும் ஒருபோதும் அறிவிப்பு உள்ளடக்கத்தை மறைக்கவும் தானியங்கி புதுப்பிப்புகள் சாதன கட்டுப்பாடுகள் வைஃபை மட்டுமே அளவிடப்படாத நெட்வொர்க்கில் மட்டுமே கட்டணம் வசூலிக்கும்போது கட்டுப்பாடுகள்: %s அறிவுள்ள புதுப்பிப்பு படிக்காத அத்தியாயம் (கள்) உடன் உள்ளீடுகளைத் தவிர்க்கவும் \"நிறைவு செய்யப்பட்ட\" நிலையுடன் உள்ளீடுகளைத் தவிர்க்கவும் சிக்கலற்ற உள்ளீடுகளைத் தவிர்க்கவும் அடுத்த வெளியீட்டு நேரத்தை கணிக்கவும் புதுப்பிப்புகள் ஐகானில் படிக்காத எண்ணிக்கையைக் காட்டுங்கள் மெட்டாடேட்டாவை தானாக புதுப்பிக்கவும் நூலகத்தைப் புதுப்பிக்கும்போது புதிய கவர் மற்றும் விவரங்களைச் சரிபார்க்கவும் இயல்புநிலை வகை எப்போதும் கேளுங்கள் வரிசைக்கான ஒரு வகை அமைப்புகள் விலக்கப்பட்ட வகைகளில் உள்ளீடுகள் சேர்க்கப்பட்ட வகைகளில் இருந்தாலும் அவை புதுப்பிக்கப்படாது. அனைத்தும் எதுவுமில்லை அடங்கும்: %s விலக்கு: %s ச்விப் டு ரைட் பற்றிய அத்தியாயம் இடதுபுறமாக ச்வைப் பற்றிய அத்தியாயம் பல புதுப்பிப்புகள் நிலுவையில் உள்ளன புதுப்பிப்பு அனைத்தையும் புதுப்பிக்கவும் வழக்கற்றுப்போன நிறுவவும் நிலுவையில் உள்ளது பதிவிறக்குகிறது நிறுவுகிறது நிறுவப்பட்டது நம்பிக்கை நம்பத்தகாதது நிறுவல் நீக்க அகற்று நீட்டிப்பை அகற்றவா? பயன்பாட்டு செய்தி நம்பத்தகாத நீட்டிப்பு இந்த நீட்டிப்பு இனி கிடைக்காது. இது சரியாக செயல்படாது மற்றும் பயன்பாட்டில் சிக்கல்களை ஏற்படுத்தக்கூடும். அதை நிறுவல் நீக்க பரிந்துரைக்கப்படுகிறது. \"%s\" நீட்டிப்பை அகற்ற விரும்புகிறீர்களா? கிடைக்கக்கூடிய நீட்டிப்புகளைப் பெறத் தவறிவிட்டது பதிப்பு மொழி அகவை மதிப்பீடு 18+ இந்த நீட்டிப்பின் ஆதாரங்களில் NSFW (18+) உள்ளடக்கம் இருக்கலாம் நீட்டிப்புகளை நிறுவ அனுமதிகள் தேவை. வழங்க இங்கே தட்டவும். நீட்டிப்பை நிறுவுதல்… நிறுவி மரபு சிசுகு ஓடவில்லை சிசுகுவை நீட்டிப்பு நிறுவியாகப் பயன்படுத்த சிசுகுவை நிறுவி தொடங்கவும். நம்பகமான அறியப்படாத நீட்டிப்புகளைத் திரும்பப் பெறுங்கள் நீட்டிப்பு களஞ்சியங்கள் உங்களிடம் எந்த களஞ்சியமும் இல்லை. ரெப்போ சேர்க்கவும் முகவரி களஞ்சி தீங்கிழைக்கும் நீட்டிப்புகள் சேமிக்கப்பட்ட உள்நுழைவு நற்சான்றிதழ்களைப் படிக்கலாம் அல்லது தன்னிச்சையான குறியீட்டை இயக்கலாம்.\n\n இந்த நீட்டிப்பை நம்புவதன் மூலம், இந்த அபாயங்களை நீங்கள் ஏற்றுக்கொள்கிறீர்கள். மிஓனில் கூடுதல் களஞ்சியங்களைச் சேர்க்கவும். இது \"index.min.json\" உடன் முடிவடையும் முகவரி ஆக இருக்க வேண்டும். இந்த ரெப்போ ஏற்கனவே உள்ளது! ரெப்போவை நீக்கு தவறான ரெப்போ முகவரி ரெப்போ \"%s\" ஐ நீக்க விரும்புகிறீர்களா? ரெப்போ \"%s\" சேர்க்க விரும்புகிறீர்களா? திறந்த மூல ரெப்போ மாற்றவும் முக்கிய கைரேகை கையொப்பமிடுவது ஏற்கனவே உள்ளது பரந்த பக்கங்களைப் பிரிக்கவும் பிளவு பக்க வேலைவாய்ப்பு தலைகீழ் பிளவு அகலமான பக்கங்களின் இடம் வாசிப்பு திசையுடன் பொருந்தவில்லை என்றால் பொருத்தமாக பரந்த பக்கங்களை சுழற்றுங்கள் சுழற்றப்பட்ட அகலமான பக்கங்களின் புரட்டல் நோக்குநிலை பெரிதாக்க இரட்டை தட்டவும் கட்அவுட் பகுதியில் உள்ளடக்கத்தைக் காட்டு பக்க மாற்றங்களை உயிரூட்டவும் பக்க மாற்றத்தில் ஃபிளாச் ஈ-மை காட்சிகளில் பேயைக் குறைக்கிறது ஃபிளாச் காலம் களஞ்சியம் %1$s %2$s போன்ற கையொப்பமிடும் விசை கைரேகையைக் கொண்டுள்ளது.\n இது எதிர்பார்க்கப்பட்டால், %2$s மாற்றப்படும், இல்லையெனில் உங்கள் ரெப்போ பராமரிப்பாளரைத் தொடர்பு கொள்ளுங்கள். முழு திரை குழாய் மண்டலங்கள் மேலடுக்கைக் காட்டு வாசகர் திறக்கப்படும்போது சுருக்கமாகக் காட்டுங்கள் %1$s MS ஒவ்வொரு ஃபிளாச் உடன் ஃபிளாச் செயல்திறனை பாதிக்கிறது. பிட்மேப் வாசலைக் குறைப்பது வெற்று பட சிக்கல்களை சரிசெய்யவில்லை என்றால் மட்டுமே இயக்கவும் கருப்பு வெள்ளை வெள்ளை மற்றும் கருப்பு அனிமேசன் விரைவு இரட்டை தட்டவும் பக்க எண்ணைக் காட்டு வாசிப்பு பயன்முறையைக் காட்டு வாசகர் திறக்கப்படும்போது தற்போதைய பயன்முறையை சுருக்கமாகக் காட்டு தனிப்பயன் வன்பொருள் பிட்மேப் வாசல் இயல்புநிலை (%d) வாசகர் ஒரு வெற்று படத்தை ஏற்றினால், வாசலைக் குறைக்கும்.\n தேர்ந்தெடுக்கப்பட்டது: %s தனிப்பயன் காட்சி சுயவிவரம் மேலடுக்கு பயிர் எல்லைகள் தனிப்பயன் ஒளி கிரேச்கேல் தலைகீழ் பெருக்கவும் திரை டாட்ச் / லைட் எரிக்க / இருட்டாக தனிப்பயன் வண்ண வடிகட்டி வண்ண வடிகட்டி கலப்பு முறை திரையை தொடர்ந்து வைத்திருங்கள் வாசிப்பு குறிக்கப்பட்ட அத்தியாயங்களைத் தவிர்க்கவும் வடிகட்டப்பட்ட அத்தியாயங்களைத் தவிர்க்கவும் நகல் அத்தியாயங்களைத் தவிர்க்கவும் வானோடல் தொகுதி விசைகள் தொகுதி விசைகள் தலைகீழ் தட்டல் மண்டலங்களைத் தலைகீழ் எதுவுமில்லை கிடைமட்டமாக செங்குத்து இரண்டும் செயல்கள் நீண்ட தட்டில் செயல்களைக் காட்டு பக்கங்களை தனி கோப்புறைகளில் சேமிக்கவும் பின்னணி நிறம் வெள்ளை சாம்பல் கருப்பு தானி இயல்புநிலை வாசிப்பு முறை எல் வடிவ கின்டெல்-இச் விளிம்பு வலது மற்றும் இடது முடக்கப்பட்டது முந்தைய அடுத்தது இடது வலது பேச் (இடமிருந்து வலமாக) பேச் (வலமிருந்து இடமாக) பேச் செய்யப்பட்ட (செங்குத்து) நீண்ட துண்டு இடைவெளிகளுடன் நீண்ட துண்டு பேச் மண்டலங்களைத் தட்டவும் அளவிலான வகை திரை பொருத்தம் நீட்டிக்க பொருந்தக்கூடிய அகலம் பொருத்தமான உயரத்திற்கு அசல் அளவு அறிவுள்ள பொருத்தம் பரந்த படங்களை பான் தானாகவே பரந்த படங்களாக பெரிதாக்கவும் சூம் தொடக்க நிலை தானியங்கி இடது வலது நடுவண் அனிமேசன் இல்லை சாதாரண வேகமாக இயல்புநிலை சுழற்சி சுழற்சி இலவசம் உருவப்படம் தலைகீழ் உருவப்படம் நிலப்பரப்பு பூட்டப்பட்ட உருவப்படம் கைமுறையாக வாசிக்கப்பட்ட பிறகு குறிக்கப்பட்ட பிறகு படித்த பிறகு தானாக நீக்கவும் நான்காவது முதல் கடைசியாக படிக்க அத்தியாயம் ஐந்தாவது முதல் கடைசியாக படிக்க அத்தியாயம் ஆட்டோ-டவுன்லோட் புதிய அத்தியாயங்களைப் பதிவிறக்கவும் நகல் வாசிப்பு அத்தியாயங்களைப் பதிவிறக்குவதைத் தவிர்க்கவும் பூட்டப்பட்ட நிலப்பரப்பு சிவப்பு பச்சை நீலம் அகர எப்போதும் அத்தியாய மாற்றத்தைக் காட்டுங்கள் படித்தல் பயன்முறை படித்தல் பக்க திணிப்பு சுருளில் மெனுவை மறைப்பதற்கான உணர்திறன் அதிகபட்சம் உயர்ந்த குறைந்த மிகக் குறைந்த சூம் அவுட் முடக்கு அத்தியாயங்களை நீக்கு சிபிஇசட் காப்பகமாக சேமிக்கவும் உயரமான படங்களை பிரிக்கவும் வாசகர் செயல்திறனை மேம்படுத்துகிறது கண்காணிப்பு வழிகாட்டி படித்த பிறகு முன்னேற்றத்தைப் புதுப்பிக்கவும் படிக்கும்போது முன்னேற்றத்தைப் புதுப்பிக்கவும் டிராக்கர்கள் வெளிப்புற டிராக்கர் சேவைகளில் அத்தியாய முன்னேற்றத்தைப் புதுப்பிக்க ஒரு வழி ஒத்திசைவு. அவற்றின் கண்காணிப்பு பொத்தானிலிருந்து தனிப்பட்ட உள்ளீடுகளுக்கான கண்காணிப்பை அமைக்கவும். மேம்படுத்தப்பட்ட டிராக்கர்கள் கிடைக்கிறது ஆனால் சான்று நிறுவப்படவில்லை: %s விலக்கப்பட்ட வகைகளில் உள்ளீடுகள் சேர்க்கப்பட்ட வகைகளில் இருந்தாலும் பதிவிறக்கம் செய்யப்படாது. மேலே பதிவிறக்கவும் படிக்கும் போது தானாக பதிவிறக்கம் தற்போதைய அத்தியாயம் + அடுத்தது ஏற்கனவே பதிவிறக்கம் செய்யப்பட்டால் மட்டுமே செயல்படும். குறிப்பிட்ட மூலங்களுக்கான மேம்பட்ட அம்சங்களை வழங்குகிறது. உங்கள் நூலகத்தில் சேர்க்கும்போது உள்ளீடுகள் தானாகவே கண்காணிக்கப்படும். மின்தடம் டிராக்கர் உள்நுழைவு ஏற்கனவே நூலகத்தில் உள்ளீடுகளை மறைக்கவும் சேமிப்பக இடம் தானியங்கி காப்புப்பிரதிகள், அத்தியாயம் பதிவிறக்கங்கள் மற்றும் உள்ளக மூலங்களுக்குப் பயன்படுத்தப்படுகிறது. காப்புப்பிரதியை உருவாக்கவும் தற்போதைய நூலகத்தை மீட்டெடுக்க பயன்படுத்தலாம் காப்புப்பிரதியை மீட்டமைக்கவும் காப்புப்பிரதி கோப்பிலிருந்து நூலகத்தை மீட்டெடுக்கவும் தானியங்கி காப்பு அதிர்வெண் உருவாக்கு காப்புப்பிரதி உருவாக்கப்பட்டது தவறான காப்புப்பிரதி கோப்பு: முழு பிழை: காப்புப்பிரதியில் எந்த நூலக உள்ளீடுகளும் இல்லை. சாதொபொகு காப்புப்பிரதி ஆதரிக்கப்படவில்லை காப்பு கோப்பு சிதைந்துள்ளது ஆதாரங்களைக் காணவில்லை: டிராக்கர்கள் உள்நுழையவில்லை: நீங்கள் காணாமல் போன நீட்டிப்புகளை நிறுவ வேண்டும், பின்னர் அவற்றைப் பயன்படுத்த கண்காணிப்பு சேவைகளில் உள்நுழைய வேண்டும். மீட்டமை முடிந்தது %1$02d மணித்துளி, %2$02d நொடி காப்புப்பிரதி ஏற்கனவே நடந்து வருகிறது நீங்கள் என்ன காப்புப் பிரதி எடுக்க விரும்புகிறீர்கள்? பயன்பாட்டு அமைப்புகள் மூல அமைப்புகள் சேமிப்பக அனுமதிகள் வழங்கப்படவில்லை காப்புப் பிரதி எடுக்க நூலக உள்ளீடுகள் இல்லை காப்புப்பிரதி கோப்பை உருவாக்க முடியவில்லை MIUI உகப்பாக்கம் முடக்கப்பட்டிருந்தால் காப்புப்பிரதி/மீட்டமை சரியாக செயல்படாது. குக்கீகளை அழிக்கவும் Https (doh) க்கு மேல் dns இயல்புநிலை பயனர் முகவர் சரம் பயனர் முகவர் சரம் காலியாக இருக்க முடியாது தவறான பயனர் முகவர் சரம் இயல்புநிலை பயனர் முகவர் சரத்தை மீட்டமைக்கவும் நடைமுறைக்கு வர பயன்பாட்டு மறுதொடக்கம் தேவை குக்கீகள் அகற்றப்பட்டன மீட்டமை ஏற்கனவே நடந்து வருகிறது காப்புப்பிரதியை மீட்டமைத்தல் காப்புப்பிரதியை மீட்டெடுப்பது தோல்வியடைந்தது ரத்து செய்யப்பட்ட மீட்டமை கிடைக்கிறது: %1$s / மொத்தம்: %2$s பயன்படுத்தப்பட்டது: %1$s கேச் அழிக்கப்பட்டது, %1$d கோப்புகள் நீக்கப்பட்டன அழிக்கும்போது பிழை ஏற்பட்டது பயன்பாட்டு வெளியீட்டில் அத்தியாயம் கேச் அழிக்கவும் நூலகம் ஒத்திசைத்தல் நூலக ஒத்திசைவு முடிந்தது நெட்வொர்க்கிங் REINDEX பதிவிறக்கங்கள் பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்களை மறுபரிசீலனை செய்ய பயன்பாடு பதிவிறக்கங்கள் அட்டவணை செல்லாதது தரவுத்தளத்தை அழிக்கவும் உங்கள் நூலகத்தில் சேமிக்கப்படாத உள்ளீடுகளுக்கான வரலாற்றை நீக்கவும் தரவுத்தளத்தில் %1$d நூலகமற்ற உள்ளீடுகள் உள்ளீடுகள் நீக்கப்பட்டன அழிக்க எதுவும் இல்லை வெப்வியூ தரவை அழிக்கவும் வெப்வியூ தரவு அழிக்கப்பட்டது நூலக அட்டைகளைப் புதுப்பிக்கவும் ஒவ்வொரு தொடர் வாசகர் அமைப்புகளையும் மீட்டமைக்கவும் அனைத்து தொடர்களின் வாசிப்பு முறை மற்றும் நோக்குநிலையை மீட்டமைக்கிறது அனைத்து வாசகர் அமைப்புகளும் மீட்டமைக்கப்படுகின்றன வாசகர் அமைப்புகளை மீட்டமைக்க முடியவில்லை செயலிழப்பு பதிவுகளைப் பகிரவும் டெவலப்பர்களுடன் பகிர்வதற்காக பிழை பதிவுகளை ஒரு கோப்பில் சேமிக்கிறது பின்னணி செயல்பாடு பேட்டரி தேர்வுமுறை முடக்கு பின்னணி நூலக புதுப்பிப்புகள் மற்றும் காப்புப்பிரதிகளுக்கு உதவுகிறது பேட்டரி தேர்வுமுறை ஏற்கனவே முடக்கப்பட்டுள்ளது சாதன அமைப்புகளைத் திறக்க முடியவில்லை சில உற்பத்தியாளர்களுக்கு பின்னணி சேவைகளைக் கொல்லும் கூடுதல் பயன்பாட்டு கட்டுப்பாடுகள் உள்ளன. இந்த வலைத்தளத்தை எவ்வாறு சரிசெய்வது என்பது பற்றிய கூடுதல் தகவல்கள் உள்ளன. டேப்லெட் இடைமுகம் சொற்களஞ்சியம் பதிவு கணினி பதிவுக்கு வாய்மொழி பதிவுகளை அச்சிடுக (பயன்பாட்டு செயல்திறனைக் குறைக்கிறது) தனியுரிமைக் கொள்கை புதுப்பிப்புகளை சரிபார்க்கவும் V%1$s க்கு புதுப்பிக்கப்பட்டது செயலிழப்பு அறிக்கைகளை அனுப்பவும் எந்த பிழைகளையும் சரிசெய்ய உதவுகிறது. முக்கியமான தரவு எதுவும் அனுப்பப்படாது எஃப்-டிராய்டு கட்டடங்கள் அதிகாரப்பூர்வமாக ஆதரிக்கப்படவில்லை.\n மேலும் அறிய தட்டவும். பதிவிறக்கம் மட்டுமே மறைநிலை பயன்முறை வரலாற்றைப் படிப்பதை இடைநிறுத்துகிறது நீட்டிப்புக்கு படித்தல் வரலாற்றை இடைநிறுத்துங்கள் மறைநிலை பயன்முறையை முடக்கு உங்கள் நூலகத்தில் உள்ள அனைத்து உள்ளீடுகளையும் வடிகட்டுகிறது %1$s இல் உள்நுழைக பயனர்பெயர் மின்னஞ்சல் முகவரி கடவுச்சொல் புகுபதிவு உள்நுழைந்தது %1$s இலிருந்து வெளியேறவா? விடுபதிகை நீங்கள் இப்போது வெளியேறிவிட்டீர்கள் தெரியாத பிழை வகை புதுப்பித்தல் நூலகத்திலிருந்து பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்கள் இடைவெளிகள் மேலடுக்கு தாவல்கள் இனி முடிவுகள் இல்லை முடிவுகள் எதுவும் கிடைக்கவில்லை உள்ளக மூல மற்றொன்று கடைசியாக பயன்படுத்தப்பட்டது பின் முடிவுகள் உள்ளன உள்ளக மூல வழிகாட்டி உங்களிடம் பின் ஆதாரங்கள் இல்லை அத்தியாயம் காணப்படவில்லை தவறான அத்தியாயம் வடிவம் வழங்கியவர் திகதி நடந்து கொண்டிருக்கிறது தெரியவில்லை தெரியாத ஆசிரியர் தெரியாத நிலை உரிமம் வெளியீடு முடிந்தது தெரியாத தலைப்பு நூலகத்தில் சேர்க்கப்பட்டது ரத்து செய்யப்பட்டது இடைவெளியில் நூலகத்தில் சேர்க்கவும் நூலகத்தில் நூலகத்திலிருந்து அகற்று இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது:\n %1$s இடைநிலைப்பலகைக்கு நகலெடுப்பதில் தோல்வி சான்று நிறுவப்படவில்லை: %1$s நூலகத்தில் சேர்க்கவா? விளக்கம் இல்லை அத்தியாயம் %1$s ஒவ்வொன்றையும் மதிப்பிடுங்கள் ஒவ்வொன்றையும் புதுப்பிக்க அமைக்கவும் புதிய அத்தியாயங்கள் சுமார் %1$s இல் வெளியிடப்படும் என்று கணிக்கப்பட்டுள்ளது, ஒவ்வொரு %2$s ஐச் சுற்றி உள்ளது. இந்த மங்கா முடிந்தது, அல்லது கணிக்கப்பட்ட வெளியீட்டு தேதி இல்லை. விரைவில் தனிப்பயன் புதுப்பிப்பு அதிர்வெண்: பதிவிறக்குதல் (%1$d/%2$d) பிழை இடைநிறுத்தப்பட்டது மூல தலைப்பு அத்தியாயம் எண் மூலத்தால் அத்தியாய எண் மூலம் பதிவேற்றுவதன் மூலம் பதிவிறக்கம் படிக்காதது தனிப்பயன் கவர் கவர் கவர் சேமிக்கப்பட்டது கவர் சேமிக்கும் பிழை பிழை பகிர்வு கவர் தேர்ந்தெடுக்கப்பட்ட அத்தியாயங்களை நீக்க விரும்புகிறீர்களா? அத்தியாயம் அமைப்புகள் இந்த அமைப்புகளை இயல்புநிலையாக சேமிக்க விரும்புகிறீர்களா? எனது நூலகத்தில் உள்ள அனைத்து உள்ளீடுகளுக்கும் பொருந்தும் இயல்புநிலையாக அமைக்கவும் அத்தியாயங்கள் எதுவும் கிடைக்கவில்லை நீங்கள் உறுதியாக இருக்கிறீர்களா? ச்கேன்லேட்டர்களை விலக்கு ச்கேன்லேட்டர்கள் எதுவும் கிடைக்கவில்லை முடிந்தது கைவிடப்பட்டது நிறுத்தி இடைநிறுத்தப்பட்டது படிக்க திட்டமிடுங்கள் அத்தியாயம் %d க்கு டிராக்கர்களைப் புதுப்பிக்கவா? டிராக்கர்கள் அத்தியாயம் %d க்கு புதுப்பிக்கப்பட்டன கண்காணிப்பு கண்காணிப்பைச் சேர்க்கவும் படிக்காதது படித்தல் மீண்டும் படிக்க படித்தல் பட்டியல் விருப்பப்பட்டியல் முழுமையான பட்டியல் வைத்திருக்கும் பட்டியலில் கெலிப்பெண் தலைப்பு நிலை நிலை தொடக்க தேதி தேதியை முடிக்க வகை தயவுசெய்து மீண்டும் மால் இல் உள்நுழைக சான்று ஆதரிக்கப்படவில்லை முடிக்கப்படாத பட்டியல் போட்டி எதுவும் கிடைக்கவில்லை %1$s பிழை: %2$s தேதியை அகற்றவா? இது நீங்கள் முன்னர் தேர்ந்தெடுக்கப்பட்ட தொடக்க தேதியை %s இலிருந்து அகற்றும் இது நீங்கள் முன்னர் தேர்ந்தெடுக்கப்பட்ட பூச்சு தேதியை %s இலிருந்து அகற்றும் %s கண்காணிப்பை அகற்றவா? %s இலிருந்து அகற்றவும் இந்த பெயருடன் ஒரு வகை ஏற்கனவே உள்ளது! வகைகள் நீக்கப்பட்டன இது இந்த அத்தியாயத்தின் வாசிப்பு தேதியை அகற்றும். நீங்கள் உறுதியாக இருக்கிறீர்களா? இந்த நுழைவுக்கான அனைத்து அத்தியாயங்களையும் மீட்டமைக்கவும் இது உள்நாட்டில் கண்காணிப்பை அகற்றும். படம் சேமிக்கப்பட்டது படம் சேமிப்பதில் பிழை தனிப்பயன் வடிகட்டி கவர் அமைக்கவும் கவர் புதுப்பிக்கப்பட்டது %1$s: %2$s, பக்கம் %3$d பக்கம்: %1$d அடுத்த அத்தியாயம் காணப்படவில்லை படத்தை ஏற்ற முடியவில்லை இந்த படத்தை கவர் கலையாகப் பயன்படுத்தவா? இந்த தொடருக்கு படித்தல் பயன்முறை முடிந்தது: நடப்பு: அடுத்து: முந்தைய: அடுத்த அத்தியாயம் இல்லை முந்தைய அத்தியாயம் எதுவும் இல்லை பக்கங்களை ஏற்றுகிறது… பக்கங்களை ஏற்றுவதில் தோல்வி: %1$s பக்கங்கள் எதுவும் கிடைக்கவில்லை சான்று கிடைக்கவில்லை கடைசி வாசிப்பு அத்தியாயத்தைத் திறக்க முடியவில்லை வரலாறு நீக்கப்பட்டது நூலகம் புதுப்பித்தல் ஒரு புதுப்பிப்பு ஏற்கனவே இயங்குகிறது நீங்கள் உறுதியாக இருக்கிறீர்களா? எல்லா வரலாற்றும் இழக்கப்படும். எந்த மூலமும் கிடைக்கவில்லை அச்சச்சோ! %s எதிர்பாராத பிழையில் ஓடியது. மோதல் பதிவுகளை எங்கள் உதவி சேனலில் டிச்கார்டில் பகிர்ந்து கொள்ள பரிந்துரைக்கிறோம். விண்ணப்பத்தை மறுதொடக்கம் செய்யுங்கள் கண்ணோட்டம் நிறுவப்பட்ட மூலமும் கிடைக்கவில்லை மூல இடம்பெயர்வு வழிகாட்டி சேர்க்க தரவைத் தேர்ந்தெடுக்கவும் இடம்பெயர ஒரு மூலத்தைத் தேர்ந்தெடுக்கவும் நிறைவு செய்யப்பட்ட உள்ளீடுகள் காலத்தைப் படியுங்கள் உள்ளீடுகள் உலகளாவிய புதுப்பிப்பில் குடியேறவும் நகலெடு சரி, இது மோசமானது நிறுவப்படவில்லை மொத்தம் படிக்க டிராக்கர்கள் கண்காணிக்கப்பட்ட உள்ளீடுகள் சராசரி மதிப்பெண் பயன்படுத்தப்பட்டது குறைந்த சேமிப்பு இடம் காரணமாக அத்தியாயங்களை பதிவிறக்கம் செய்ய முடியவில்லை எச்சரிக்கை: பெரிய மொத்த பதிவிறக்கங்கள் ஆதாரங்கள் மெதுவாகவும்/அல்லது மிஓனைத் தடுக்கவும் வழிவகுக்கும். மேலும் அறிய தட்டவும். இதற்கில்லை %d.டி. நூலகத்தைப் புதுப்பித்தல்… (%s) %d.எச் %d.எம் %d.எச் அத்தியாயங்களை பதிவிறக்கம் செய்ய முடியவில்லை. பதிவிறக்கங்கள் பிரிவில் நீங்கள் மீண்டும் முயற்சி செய்யலாம் பெரிய புதுப்பிப்புகள் ஆதாரங்களுக்கு தீங்கு விளைவிக்கும் மற்றும் மெதுவான புதுப்பிப்புகளுக்கு வழிவகுக்கும் மற்றும் பேட்டரி பயன்பாட்டையும் அதிகரிக்கும். மேலும் அறிய தட்டவும். புதிய அத்தியாயங்கள் காணப்பட்டன அத்தியாயம் %1$s அத்தியாயம் %1$s மற்றும் %2$d மேலும் அத்தியாயங்கள் %1$s %1$d புதுப்பிப்பு (கள்) தோல்வியடைந்தது மேலும் அறிய தட்டவும் அட்டையைப் புதுப்பிக்கத் தவறிவிட்டது இதைச் செய்வதற்கு முன் உங்கள் நூலகத்தில் உள்ளீட்டைச் சேர்க்கவும் நூலக புதுப்பிப்பு பிழைகளை எவ்வாறு சரிசெய்வது என்பதற்கான உதவிக்கு, %1$s ஐப் பார்க்கவும் தொடர் முடிந்ததால் தவிர்க்கப்பட்டது படிக்காத அத்தியாயங்கள் இருப்பதால் தவிர்க்கப்பட்டது அத்தியாயங்கள் எதுவும் படிக்காததால் தவிர்க்கப்பட்டது தொடருக்கு புதுப்பிப்புகள் தேவையில்லை என்பதால் தவிர்க்கப்பட்டது இன்று எந்த வெளியீடும் எதிர்பார்க்கப்படவில்லை என்பதால் தவிர்க்கப்பட்டது கவர் படத்தைத் தேர்ந்தெடுக்கவும் காப்புப்பிரதி கோப்பைத் தேர்ந்தெடுக்கவும் கோப்பு பிக்கர் பயன்பாடு எதுவும் கிடைக்கவில்லை தொடர்ச்சியான கோப்புறை அணுகலைப் பெறுவதில் தோல்வி. பயன்பாடு எதிர்பாராத விதமாக நடந்து கொள்ளலாம். எந்த கோப்பும் தேர்ந்தெடுக்கப்படவில்லை பதிவிறக்கம் கிட்அப்பில் திறந்திருக்கும் இந்த ஆண்ட்ராய்டு பதிப்பு இனி ஆதரிக்கப்படாது புதிய புதுப்பிப்புகள் எதுவும் கிடைக்கவில்லை பதிவிறக்கம்… புதுப்பிப்பை நிறுவ தட்டவும் பிழையைப் பதிவிறக்கவும் புதிய பதிப்பு கிடைக்கிறது! பதிவிறக்கங்கள் இல்லை அண்மைக் கால புதுப்பிப்புகள் இல்லை அண்மைக் காலத்தில் எதுவும் படிக்கவில்லை உங்கள் நூலகம் காலியாக உள்ளது வகை காலியாக உள்ளது இந்த பிரிவில் உள்ளீடுகள் எதுவும் காணப்படவில்லை தொடங்குதல் வழிகாட்டி உங்களிடம் வகைகள் இல்லை. உங்கள் நூலகத்தை ஒழுங்கமைக்க ஒன்றை உருவாக்க பிளச் பொத்தானைத் தட்டவும். உங்களிடம் இதுவரை எந்த வகைகளும் இல்லை. கிளவுட்ஃப்ளேரைத் தவிர்ப்பதில் தோல்வி கிளவுட்ஃப்ளேர் உதவிக்கு இங்கே தட்டவும் *தேவை பயன்பாடு செயல்பட வெப்வியூ தேவை சிறந்த இணக்கத்தன்மைக்கு வெப்வியூ பயன்பாட்டைப் புதுப்பிக்கவும் புதுப்பிக்கப்பட்ட இயல்புநிலை அத்தியாய அமைப்புகள் பதிவிறக்குபவர் பிழை எதிர்பாராத பிழை காரணமாக அத்தியாயத்தைப் பதிவிறக்க முடியவில்லை வைஃபை இணைப்பு எதுவும் கிடைக்கவில்லை பிணைய இணைப்பு எதுவும் கிடைக்கவில்லை பதிவிறக்கங்கள் இடைநிறுத்தப்பட்டன பக்கம் %d பிரிக்கும் போது காணப்படவில்லை பக்கம் %d இன் கோப்பு பாதையை கண்டுபிடிக்க முடியவில்லை பதிவிறக்கங்களை சரிபார்க்கிறது பொது முன்னேற்றம் முழுமையானது பிழைகள் அத்தியாயம் புதுப்பிப்புகள் பயன்பாட்டு புதுப்பிப்புகள் நீட்டிப்பு புதுப்பிப்புகள் முந்தைய பக்கம் அடுத்த பக்கம் அண்மைக் காலத்தில் புதுப்பிக்கப்பட்ட நூலக உள்ளீடுகளைப் பார்க்கவும் தானி நூலக பட்டியல் இடம்பெயர்வுக்குப் பிறகு தற்போதைய நுழைவின் பதிவிறக்கங்களை நீக்கு புதிய அத்தியாயங்கள் இல்லாமல் உள்ளீடுகளை மறைக்கவும் போட்டியில் கூடுதல் அத்தியாயங்கள் இருந்தால் மட்டுமே நுழைவைக் காட்டு இந்த விருப்பங்கள் மெதுவான மற்றும் ஆபத்தானவை மற்றும் மூலங்களிலிருந்து கட்டுப்பாடுகளுக்கு வழிவகுக்கும் மேம்பட்ட தேடல் முறை கேட்ப்புச்சின் மார்க் டூப்ளிகேட் வாசிப்பு அத்தியாயத்தைப் படிக்க நடத்தை ஒரு அத்தியாயத்தைப் படித்த பிறகு புதிய அத்தியாயத்தைப் பெற்ற பிறகு லாங் உரி ரீடருக்கு மரபு டிகோடரைப் பயன்படுத்தவும் எச்சரிக்கை: ஒரு மங்கா மறுபெயரிடப்பட்டால், அது பதிவிறக்க வரிசையில் இருந்து அகற்றப்படும் (இருந்தால்). தேர்ந்தெடுக்கப்பட்டது கிடைக்கிறது அனைத்தையும் தெரிவுசெய் எதுவுமில்லை என்பதைத் தேர்ந்தெடுக்கவும் இயக்கப்பட்ட ஆதாரங்களைத் தேர்ந்தெடுக்கவும் தொடரவும் குறிப்புகள் குறிப்புகளைத் திருத்து ஒரே வண்ணமுடைய காணாமல் போன அத்தியாயம் குறிகாட்டிகளை மறைக்கவும் நூலகம் ஏற்றுமதி செய்யப்பட்டது வாசிப்பு அத்தியாயங்களுடன் உள்ளீடுகளை வைத்திருங்கள் மூலத்துடன் பொருந்தக்கூடிய நூலக மங்கா தலைப்புகளைப் புதுப்பிக்கவும் கூடுதல் முக்கிய வார்த்தைகள் (விரும்பினால்) கூடுதல் சொற்களைச் சேர்ப்பதன் மூலம் தேடல் முடிவுகளை குறைக்க உதவுகிறது இடம்பெயர்வு மாற்று வழிகள் எதுவும் கிடைக்கவில்லை குடியேற வேண்டாம் இப்போது குடியேறவும் இப்போது நகலெடுக்கவும் குடியேறுவதை நிறுத்தவா? நிறுத்து ரத்துசெய் இடம்பெயர்வு ரத்துசெய் ரத்துசெய் தனிப்பட்ட முறையில் கண்காணிக்கப்பட்டது தனிப்பட்ட முறையில் கண்காணிக்கவும் கலைஞர் படிக்காத அத்தியாயங்கள் ஏற்றுமதி தரவுத்தளத்திலிருந்து உள்ளீடுகளை அகற்றப் போகிறீர்கள் அத்தியாயங்கள் மற்றும் நூலகமற்ற உள்ளீடுகளின் முன்னேற்றம் இழக்கப்படும் இதேபோன்ற பெயருடன் உங்கள் நூலகத்தில் உள்ளீடுகள் உள்ளன. \n\nஇடம்பெயர ஒரு உள்ளீட்டைத் தேர்ந்தெடுக்கவும் அல்லது எப்படியும் சேர்க்கவும். பகிரங்கமாக கண்காணிக்கவும் பின் செய்யப்பட்ட ஆதாரங்களைத் தேர்ந்தெடுக்கவும் இயக்கப்பட்டால், போட்டியை மிக முன்னால் தேர்வுசெய்கிறது. இல்லையெனில், மூல முன்னுரிமையால் முதல் போட்டியைத் தேர்ந்தெடுக்கிறது. குடிபெயர்வு இடம்பெயர்வு (%1$d/%2$d) நகலெடு சமீபத்திய: %1$s தெரியவில்லை கைமுறையாக தேடுங்கள் நகலெடு அத்தியாயங்கள் எதுவும் கிடைக்கவில்லை, இந்த உள்ளீட்டை இடம்பெயர்வுக்கு பயன்படுத்த முடியாது இடம்பெயர தரவு போட்டி இல்லாமல் உள்ளீடுகளை மறைக்கவும் பரந்த தேடலுக்கான தலைப்பை முக்கிய வார்த்தைகளாக உடைக்கிறது அத்தியாய எண்ணின் அடிப்படையில் பொருந்தவும் சாத்தியமான நகல்கள் எங்கே பகுதியை அனுபவித்தேன்… உள்நுழைவு… நூலாசிரியர் கோப்பகத்தை உருவாக்குவதில் தோல்வி: %s பதிவிறக்க கோப்பகத்தை உருவாக்குவதில் தோல்வி ================================================ FILE: i18n/src/commonMain/moko-resources/te/plurals.xml ================================================ ఒక నిమిషము తరువాత %1$s నిమిషముల తరువాత ================================================ FILE: i18n/src/commonMain/moko-resources/te/strings.xml ================================================ దిగుమతులు ఏమి లేవు సహాయము పొడిగింపు యొక్క సమాచారము పొడిగింపులు వలస భద్రపరచడము మరియు పునరుద్ధారణ మూలాలు చరిత్ర నవీకరణలు గ్రంథాలయము దిగుమతి వరుస అమరికలు మరింత పేరు విభాగ పేరును మార్చుము విభాగములను సవరించుము విభాగమును జోడించుము జోడించుము సవరించుము అన్నిటిని అచైతన్న పరుచుము అన్నిటిని చైతన్న పరుచుము గ్రంథాలయాన్ని నవీకరించుము తొలగించుము అధ్యాయ గుర్తు చిహ్నాన్ని తొలగించుము అధ్యాయమును గుర్తు పెట్టుకొనుము దిగుమతి దీని మునుపటివాటికి చదివినట్లు గుర్తును పెట్టుము చదవనట్లు గుర్తును పెట్టుము చదివినట్లు గుర్తును పెట్టుము ఎంపికలను విపరీతమును చేయుము అన్నిటినీ ఎంచుకోండి ప్రాపంచిక శోధన శోధన అమరికలు వెతకండి జోడించబడిన తేదీ నూతన అధ్యాయము చివరిగా చదివినది సమస్త అధ్యాయములు అక్షరక్రమములో ఫిల్టర్ను తొలగించుము చదవనివి గుర్తు ఉంచబడినవి శోధకము వివరాలపట్టిక అమరికలు చరిత్ర కంట కనిపెట్టుట అధ్యాయాలు లైబ్రరీ ఎంట్రీలు విభాగములు మీ దగ్గర ఏ విభాగములు లేవు। మీ గ్రంథాలయాన్ని సరికూర్చుకోడానికి ప్లస్ చిహ్నాన్ని నొక్కి కొత్త దాన్ని సృష్టించుకోండి॥ మీ గ్రంథాలయము ఖాళీగా ఉన్నది ఈ మధ్య మీరు ఏమి చదవలేదు కొత్త నవీకరణలు లేవు తొలగించుము మళ్ళీ ప్రయత్నించుము తదుపరి అధ్యాయము మునుపటి అధ్యాయము తాత్కాలికముగా నిలిపి వేయుము అధ్యాయాములను చూడుము ముఖచిత్రమును సవరించుము విభాగములను క్రమీకరించుము పొందబడిన తేదీ కంట కనిపెట్టబడ్డవి ప్రమాణము మొత్తం ఎంట్రీలు హెచ్చరిక మార్పును నిర్ధారించడానికి ప్రమాణీకరించండి జాలసంచారకములో తెరువుము నూతనమైనది నవీకరించుము పాఠకము దిగుమతిని ఇప్పుడు ప్రారంభించుము జాడ కనిపెట్టుట తేలికపాటి వరుస ఇమిడ్చిన వరుస వలస ప్రదర్శన ప్రణాలికము స్థానిక సోర్స్ మొదలు పెట్టుము పునఃప్రారంభించుము \"వెబ్ వ్యూ\" లో తెరుము ప్రదర్శన జాబితా విభాగ మీటలను చూపుము వస్తు సంఖ్యను చూపుము అశక్త పరుచుము పిన్ పిన్నును తీయుము రద్దు చెయ్యుము అన్నిటి రద్దు చెయ్యుము ఈ ధారావాహిక కొరకు అన్నిటిని రద్దు చెయ్యుము సర్దుము అధ్యాయము సంఖ్యను బట్టి అన్నిటికన్నా పురాతనమైనది ఆరోహికము అగ్రమ స్థానానికి జరుపుము చిట్ట చివరకు జరుపుము పంచుకొనుము భద్రపరుచుము పునః స్థాపించుము విషయ చిట్టాను తెరువుము పునఃస్థాపనను చేయుము వెనుకకు ముందుకు లోడ్ అవుతుంది… అనువర్తనము అందుబాటులో లేదు సామాన్యము రూపము గ్రంథాలయము దిగుమతులు ఆధునికము దిగుమతి చేసిన అధ్యాయములు భాష గురించి వీక్షణము పరికరమును అనుసరించుము ఆపుము ప్రారంభించుము అనువర్తన వీక్షణము ఎగుమతి తారీఖును బట్టి అవరోహికము ప్రతిష్ఠాపించుము పూర్వ స్థితికి వెళ్ళుము క్రియాశీలము తప్పిద వివరములను చూచుటకై నొక్కుము ఆకుపచ్చ సేవఫలము యిన్ మరియు యాంగ్ ఎప్పుడూ వద్దు సందెచీకటి తెరను సంరక్షించుము అనువర్తనములను మారునపుడు వర్తక విషయములను దాయుము మరియు తెర యొక్క చిత్రములను తీయుటను నిరోధించుము సూచన విషయములను దాయుము పెద్దలకు మాత్రమే (+18) మూలాలు మూలాలు మరియు పొడిగింపుల జాబితాలలో చూపుము తుప్పపండు టాకో టీల్ మరియు మణి యోట్సూబ స్వచ్ఛమైన నలుపు వీక్షణ భద్రత తాళమును తెరుచుట ఆవశ్యకము కార్యచరణము లేనిచో తాళమును వేయుము ఎల్లప్పుడు తారీఖు స్వరూపము సూచనలను నిర్వహించుము గణాంకాలు ప్రారంభించారు బంజేయండి చదవడం కొనసాగించే బటన్ చూపియండి లోకల్ డౌన్లోడ్ అయినవి ఓన్ ఎంట్రీ చూపియండి ఆఫ్ చదవని లెక్క చివరి అప్డేట్ తనిఖీ మొత్తం తీసేయండి మీరు \"%s\" క్యాటగిరీ తీసివేయాలి అనుకుంటున్నారా? క్యాటగిరీ తీసేయండి సిరీస్ పైన పెట్టండి అన్వేషించండి… ఇప్పుడు కాదు ఏదైనా తెరవండి అంతర్గత లోపం: మరింత సమాచారం కోసం క్రాష్ లాగ్‌లను తనిఖీ చేయండి థీమ్, తేదీ మరియు సమయ ఆకృతి లోపాలూ జాలగూడు వాడుకరి పేరు పూర్తయింది అశక్తమైనది లైసెన్స్ పొందింది విహరించండి నిలువు సేవలు గుప్తపదం అన్ని అంచు తాజా చదువుతున్నారు శీర్షిక గణన కిండల్ మాదిరి కొనసాగుతున్నది స్థితి తెలియదు ఏమిలేదు సంస్కరణ విడిచెను చిత్తరువు ప్రకృతి దృశ్యం నిలిపివేయబడింది ================================================ FILE: i18n/src/commonMain/moko-resources/th/plurals.xml ================================================ หมวดหมู่ %d หลังจาก %1$s นาที ข้ามตอนที่ %d อาจเป็นเพราะหายมาจากแหล่งที่มาหรือถูกกรองออก %d ตัวติดตาม %1$s ตอน เหลืออีก %1$s รายการ ใช้เวลาไป %1$s โดยมีข้อผิดพลาด %2$s รายการ ตอนที่ %1$s และอีก %2$d ตอน %1$d ตอนใหม่ มี %d รายการ มีการอัปเดตส่วนขยาย %d รายการพร้อมใช้งาน %1$d วันที่ผ่านมา %d ตอนที่ยังไม่ได้อ่านถัดไป %d ตอนถัดไป ไม่พบ %1$s ตอน %d วัน %d รีโพ ================================================ FILE: i18n/src/commonMain/moko-resources/th/strings.xml ================================================ ชื่อ หมวดหมู่ รายการคลัง ตอน ติดตาม ประวัติ ตั้งค่า คิวดาวน์โหลด คลัง สำรองข้อมูลและการเรียกคืน ส่วนขยาย ข้อมูลส่วนขยาย ตั้งค่า ตัวกรอง อัปเดต ยังไม่ได้อ่าน นำตัวกรองออก ตามตัวอักษร จำนวนตอน อ่านล่าสุด ค้นหา เลือกทั้งหมด ทำเครื่องหมายว่าอ่านแล้ว ทำเครื่องหมายว่ายังไม่ได้อ่าน ดาวน์โหลด ลบ อัปเดตคลัง แก้ไข เพิ่ม เพิ่มหมวดหมู่ แก้ไขหมวดหมู่ เปลี่ยนชื่อหมวดหมู่ แก้ไขปก ตอนก่อนหน้า ตอนถัดไป ลองอีกครั้ง เปิดในเบราว์เซอร์ ตารางแบบกระชับ รายการ ยกเลิก ติดตั้ง บันทึก รีเซ็ต กำลังโหลด… ทั่วไป ตัวอ่าน ขั้นสูง เกี่ยวกับ ทุก 6 ชั่วโมง ทุก 12 ชั่วโมง ทุกวัน ทุก 2 วัน ทุกสัปดาห์ ทั้งหมด ขณะกำลังชาร์จ ถามทุกครั้ง อัปเดต ติดตั้ง รอดำเนินการ กำลังดาวน์โหลด กำลังติดตั้ง ติดตั้งแล้ว การนำทาง สีพื้นหลัง ขาว ดำ ประวัติ ค้นหาทั้งหมด ตั้งก่อนหน้านี้เป็นอ่านแล้ว ช่วยเหลือ โยกย้าย บุ๊คมาร์ค บุ๊คมาร์คตอน ยกเลิกบุ๊คมาร์คตอน ตั้งหมวดหมู่ หยุดชั่วคราว นำออก ดำเนินการต่อ โหมดการแสดงผล การแสดงผล ตอนที่ดาวน์โหลดแล้ว การจัดเรียง แบ่งปัน เลิกทำ เปิดบันทึก เรียกคืน แอพไม่พร้อมใช้งาน การดาวน์โหลด การติดตาม รายการต่อแถว แนวตั้ง แนวนอน การอัปเดตอัตโนมัติ ปิด อัปเดตข้อจำกัดของอุปกรณ์โดยอัตโนมัติ ข้ามรายการที่มีสถานะ \"จบแล้ว\" อัปเดตความคืบหน้าหลังอ่าน หมวดหมู่เริ่มต้น เชื่อถือได้ ไม่น่าเชื่อถือ ถอนการติดตั้ง ส่วนขยายที่ไม่น่าเชื่อถือ ส่วนขยายที่เป็นอันตรายสามารถอ่านข้อมูลการเข้าสู่ระบบที่จัดเก็บไว้ หรือเรียกใช้โค้ดโดยอำเภอใจ \n \nการเชื่อถือส่วนขยายนี้แสดงว่าคุณยอมรับความเสี่ยงเหล่านี้ เต็มหน้าจอ แสดงแอนิเมชั่นเมื่อเปลี่ยนหน้า ความเร็วแอนิเมชั่นเมื่อแตะ 2 ครั้ง แสดงหมายเลขหน้า ตัดขอบ ความสว่างแบบกำหนดเอง ตัวกรองสีแบบกำหนดเอง เปิดหน้าจอไว้ตลอด ปุ่มปรับระดับเสียง สลับด้านปุ่มปรับระดับเสียง โหมดการอ่านเริ่มต้น แสดงเป็นหน้า (จากซ้ายไปขวา) แสดงเป็นหน้า (จากขวาไปซ้าย) แสดงเป็นหน้า (แนวตั้ง) หน้ายาว แสดงเป็นหน้า ชนิดมาตราส่วน พอดีกับหน้าจอ ยืด พอดีกับความกว้าง พอดีกับความสูง ขนาดดั้งเดิม พอดีอัตโนมัติ ตำแหน่งเริ่มซูม อัตโนมัติ ซ้าย ขวา ตรงกลาง ไม่มีแอนิเมชั่น ปกติ เร็ว การหมุนเริ่มต้น อิสระ ล็อกแนวตั้ง ล็อกแนวนอน แดง เขียว น้ำเงิน โปร่งใส หลังจากทําเครื่องหมายว่าอ่านแล้วด้วยตนเอง ลบอัตโนมัติหลังจากที่อ่านแล้ว ปิดการใช้งาน ตอนที่อ่านล่าสุด ตอนรองก่อนตอนที่อ่านล่าสุด ตอนที่สามก่อนตอนที่อ่านล่าสุด ตอนที่สี่ก่อนตอนที่อ่านล่าสุด ตอนที่ห้าก่อนตอนที่อ่านล่าสุด ดาวน์โหลดตอนใหม่ ตัวติดตาม สำรองข้อมูล สามารถใช้ในการเรียกคืนค่าคลังปัจจุบัน เรียกคืนค่าการสำรองข้อมูล เรียกคืนค่าคลังจากแฟ้มข้อมูลสำรอง ความถี่ในการสำรองข้อมูลอัตโนมัติ สร้างการสำรองข้อมูลแล้ว คืนค่าเสร็จสมบูรณ์ ต้องการสำรองข้อมูลใดบ้าง? กำลังคืนค่าการสำรองข้อมูล กำลังสร้างการสำรองข้อมูล ล้างแคชตอน ใช้ไปแล้ว: %1$s ล้างแคชแล้ว %1$d แฟ้มถูกลบ เกิดข้อผิดพลาดขณะกำลังล้าง ล้างคุกกี้ ล้างคุกกี้แล้ว ล้างฐานข้อมูล ลบประวัติรายการที่ไม่ได้บันทึกไว้ในคลัง ลบรายการแล้ว เวอร์ชัน ส่งรายงานความผิดพลาด ช่วยแก้ไขจุดบกพร่องต่างๆ จะไม่มีการส่งข้อมูลที่สำคัญ ลงชื่อเข้าใช้ %1$s ชื่อผู้ใช้ รหัสผ่าน ลงชื่อเข้าใช้ ลงชื่อเข้าใช้แล้ว ข้อผิดพลาดที่ไม่รู้จัก กำลังอัปเดตหมวดหมู่ ไม่มีผลลัพธ์เพิ่มเติม แหล่งที่มาภายในเครื่อง อื่น ๆ ค้นหาทั้งหมด… ล่าสุด เรียกดู ยังไม่จบ ไม่ระบุ มีลิขสิทธิ์แล้ว นำออกจากคลัง เพิ่มไปยังคลังแล้ว นำออกจากคลังแล้ว ลบตอนที่ดาวน์โหลดแล้วหรือไม่? คัดลอกไปยังคลิปบอร์ดแล้ว: \n%1$s ไม่ได้ติดตั้งแหลงที่มา: %1$s ตอนที่ %1$s กำลังดาวน์โหลด (%1$d/%2$d) เกิดข้อผิดพลาด หยุดชั่วคราว ชื่อตามแหล่งที่มา หมายเลขตอน ตามแหล่งที่มา ตามหมายเลขตอน ดาวน์โหลด ที่ยังไม่ได้อ่าน แน่ใจหรือไม่ว่าต้องการลบตอนที่เลือก? การติดตาม กำลังอ่าน จบแล้ว ดรอป พักไว้ วางแผนที่จะอ่าน อ่านอีกครั้ง คะแนน แสดงการกระทำเมื่อแตะค้าง เปิดใน WebView ข้ามตอนที่ทำเครื่องหมายว่าอ่านแล้ว โหมดผสมตัวกรองสี ซ้อนทับ สกรีน ดอดจ์ / สว่างขึ้น ไม่พบผลลัพธ์ ชื่อเรื่อง สถานะ สถานะ ประเภท หมวดหมู่ที่มีชื่อนี้มีอยู่แล้ว! หมวดหมู่ถูกลบแล้ว การดำเนินการนี้จะลบวันที่อ่านของตอนนี้ คุณแน่ใจไหม? รีเซ็ตตอนทั้งหมดสำหรับรายการนี้ เพิ่มไปยังคลัง? บันทึกรูปภาพแล้ว ตัวกรอง ตั้งเป็นปก อัปเดตปกแล้ว หน้า: %1$d ไม่พบตอนถัดไป ไม่สามารถโหลดภาพนี้ได้ ใช้ภาพนี้เป็นรูปปก? อ่านจบแล้ว: ปัจจุบัน: ตอนถัดไป: ก่อนหน้า: ไม่มีตอนต่อไป ไม่มีตอนก่อนหน้านี้ กำลังโหลดหน้า … ไม่สามารถโหลดหน้า: %1$s เลือกข้อมูลที่จะรวมไว้ โยกย้าย คัดลอก ไม่สามารถดาวน์โหลดตอน สามารถลองอีกครั้งได้ในส่วนการดาวน์โหลด พบตอนใหม่ อัปเดตหน้าปกล้มเหลว เพิ่มรายการไปยังในคลังก่อนที่จะดำเนินการนี้ เลือกภาพหน้าปก เลือกแฟ้มข้อมูลสำรอง ดาวน์โหลด ไม่มีการอัปเดตใหม่ กำลังดาวน์โหลด… แตะเพื่อติดตั้งการอัปเดต เกิดข้อผิดพลาดในการดาวน์โหลด มีเวอร์ชั่นใหม่! ไม่มีการดาวน์โหลด ไม่มีอัปเดตล่าสุด ไม่มีอะไรที่อ่านเมื่อเร็ว ๆ นี้ คลังว่างเปล่า ไม่มีหมวดหมู่ แตะปุ่มบวกเพื่อสร้างปุ่มสำหรับจัดระเบียบคลัง ตัวดาวน์โหลด เกิดข้อผิดพลาด ไม่สามารถดาวน์โหลดตอนได้เนื่องจากข้อผิดพลาดที่ไม่คาดคิด ไม่มีการเชื่อมต่อ Wi-Fi ไม่มีการเชื่อมต่อเครือข่าย การดาวน์โหลดหยุดชั่วคราว ทั่วไป หลากหลาย เบิร์น / มืดขึ้น เลือกแหล่งที่มาที่จะย้ายจาก อนุญาตให้ลบตอนที่บุ๊คมาร์คไว้ การลบตอน แสดงการเปลี่ยนผ่านตอนเสมอ แนวนอน แนวตั้ง ซ้าย ก่อนหน้า ขวาและซ้าย เหมือน Kindle รูปตัว L อัตโนมัติ เทา สร้างโฟลเดอร์ตามชื่อเรื่องของรายการ บันทึกแต่ละหน้าลงในโฟลเดอร์ที่แยกต่างหาก การกระทำ ทั้งสอง แนวตั้ง แนวนอน ไม่มี กลับด้านโซนการแตะ ข้ามตอนที่กรองไว้ โทนสีเทา แสดงโหมดปัจจุบันสั้น ๆ เมื่อตัวอ่านเปิดขั้นมา แสดงโหมดการอ่าน แสดงเนื้อหาในพื้นที่ตัดออก หากการจัดวางการแยกหน้ากว้างไม่ตรงกับทิศทางการอ่าน แยกส่วนหน้ากว้างแบบสลับตำแหน่ง แยกส่วนหน้ากว้าง แสดงครู่หนึ่งเมื่อเปิดตัวอ่าน แสดงตำแหน่งโซนการแตะ แหล่งที่มาจากส่วนขยายนี้อาจมีเนื้อหา NSFW (18+) 18+ ส่วนขยายนี้ไม่สามารถใช้ได้อีกต่อไป แอปอาจทำงานไม่ถูกต้องและอาจทำให้เกิดปัญหากับแอปได้ ขอแนะนำให้ถอนการติดตั้งออก ล้าสมัย อัปเดตที่รอดำเนินการ ที่ยกเว้นไว้: %s ที่รวมไว้: %s ไม่มี รายการในหมวดหมู่ที่ยกเว้นจะไม่ได้รับการอัปเดตแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม ตรวจสอบหน้าปกและรายละเอียดใหม่เมื่ออัปเดตคลัง โหลดข้อมูลเมตาใหม่โดยอัตโนมัติ อัปเดตทั้งหมด การแสดงผล นี่ไม่ได้เป็นการป้องกันไม่ให้ส่วนขยายที่ไม่เป็นทางการ หรือที่อาจถูกตั้งค่าสถานะไม่ถูกต้อง ให้แสดงเนื้อหา NSFW (18+) ภายในแอป แสดงในรายการแหล่งข้อมูลและส่วนขยาย แหล่งที่มา NSFW (18+) ซ่อนเนื้อหาการแจ้งเตือน หน้าจอปลอดภัยจะซ่อนเนื้อหาของแอปเมื่อสลับแอปและกันไม่ให้ถ่ายภาพหน้าจอ หน้าจอความปลอดภัย ไม่เลย ตลอด ล็อกเมื่อไม่ได้ใช้งาน จำเป็นต้องปลดล็อก ความปลอดภัยและความเป็นส่วนตัว จัดการการแจ้งเตือน รูปแบบวันที่ มืด สว่าง ระบบ ธีม คลัง โหลดซ้ำ ไปข้างหน้า กลับ แตะเพื่อดูรายละเอียด ย้ายไปด้านล่าง ย้ายไปด้านบน มากไปน้อย น้อยไปมาก เก่าสุด ล่าสุด ตามเลขตอน ตามวันที่อัปโหลด ยกเลิกทั้งหมดสำหรับเรื่องนี้ ยกเลิกทั้งหมด ยกเลิกการตรึง ตรึง ปิดการใช้งาน แสดงจำนวน แสดงแท็บหมวดหมู่ ตารางแบบเต็มที โยกย้าย เริ่ม ดูตอน ปิดใช้งานทั้งหมด เปิดใช้งานทั้งหมด สลับการเลือก ตั้งค่าการค้นหา วันที่เพิ่ม วันที่ดึงข้อมูลตอน ตอนล่าสุด ติดตามแล้ว เมนู แหล่งที่มา เพิ่มเติม ช่องว่างด้านข้าง การอ่าน โหมดการอ่าน การหมุน โซนการแตะ หน้ายาวแยกช่องว่าง ขวา ถัดไป ขอบ คู่มือการโยกย้ายแหล่งที่มา แน่ใจไหม? ประวัติทั้งหมดจะหายไป ลบประวัติแล้ว ล้างประวัติ ตอน %1$s - %2$s กำลังอัปเดตคลัง ไม่พบแหล่งที่มา ไม่พบหน้า โหมดการอ่าน สำหรับเรื่องนี้ %1$s: %2$s, หน้า %3$d กรุณาเข้าสู่ระบบ MAL อีกครั้ง วันที่อ่านจบ วันที่เริ่มอ่าน หยุดชั่วคราว เพิ่มการติดตาม ไม่พบตอน ตั้งเป็นค่าเริ่มต้น นําไปใช้กับรายการทั้งหมดในคลังด้วย แน่ใจหรือไม่ว่าต้องการบันทึกการตั้งค่าเหล่านี้เป็นค่าเริ่มต้น? การตั้งค่าตอน ตามวันที่อัปโหลด ไม่สามารถคัดลอกไปยังคลิปบอร์ด น้อยลง เพิ่มเติม อยู่ในคลัง เพิ่มไปยังคลัง ไม่ระบุสถานะ ไม่ทราบผู้แต่ง ไม่มีแหล่งที่มาที่ตรึงไว้ คู่มือแหล่งที่มาภายในเครื่อง ค้นหา \"%1$s\" ในทั้งหมด ที่ตรึงไว้ ใช้ล่าสุด แท็บ ตอนที่ดาวน์โหลดแล้ว จากคลัง ออกจากระบบแล้ว ออกจากระบบ ออกจากระบบจาก %1$s? ที่อยู่อีเมล กรองรายการทั้งหมดในคลังของคุณ ปิดใช้งานโหมดไม่ระบุตัวตน หยุดประวัติการอ่านชั่วคราว โหมดไม่ระบุตัวตน ดาวน์โหลดแล้วเท่านั้น อัปเดตเป็น v%1$s แล้ว ตรวจสอบการอัปเดต ใบอนุญาตโอเพ่นซอร์ส มีอะไรใหม่ เว็บไซต์ ไม่สามารถเปิดการตั้งค่าอุปกรณ์ การเพิ่มประสิทธิภาพแบตเตอรี่ถูกปิดใช้งานอยู่แล้ว ช่วยในการอัปเดตและสำรองข้อมูลคลังในพื้นหลัง ปิดการใช้งานการเพิ่มประสิทธิภาพแบตเตอรี่ บันทึกบันทึกข้อผิดพลาดลงในแฟ้มเพื่อแบ่งปันกับผู้พัฒนา แบ่งปันบันทึกข้อขัดข้อง โหลดปกในคลังใหม่ ข้อมูล ต้องรีสตาร์ทแอปจึงจะมีผล DNS ผ่าน HTTPS (DoH) เครือข่าย ยกเลิกการคืนค่า การคืนค่าข้อมูลสำรองล้มเหลว การคืนค่ากําลังดําเนินการอยู่แล้ว การสำรองข้อมูลล้มเหลว การสำรองข้อมูลกําลังดําเนินการอยู่แล้ว %1$02d นาที %2$02d วินาที คุณจะต้องติดตั้งส่วนขยายที่ขาดหายไปและลงชื่อเข้าใช้บริการติดตามจึงจะสามารถใช้งานได้ ตัวติดตามไม่ได้เข้าสู่ระบบ: แหล่งที่มาที่หายไป: แฟ้มสํารองข้อมูลไม่มีรายการคลังใด ๆ ข้อมูลสำรองไม่ถูกต้อง: ซิงค์ทางเดียวเพื่ออัปเดตความคืบหน้าของตอนกับตัวติดตามภายนอก ตั้งค่าการติดตามรายการในแต่ละรายการได้จากปุ่มติดตาม รายการในหมวดหมู่ที่ยกเว้นไว้จะไม่ถูกดาวน์โหลดแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม ดาวน์โหลดอัตโนมัติ ไม่สามารถดาวน์โหลดตอนได้เนื่องจากพื้นที่จัดเก็บเหลือน้อย ไม่รองรับ Android เวอร์ชันนี้อีกต่อไป ไม่พบแอปเลือกแฟ้ม ตอนที่ %1$s ตอนที่ %1$s และอีก %2$d ตอน ตอนที่ %1$s หน้าก่อน การอัปเดตส่วนขยาย อัปเดตตอน ข้อผิดพลาด เสร็จสมบูรณ์ ความคืบหน้า อัปเดตการตั้งค่าตอนเริ่มต้นแล้ว โปรดอัปเดตแอพ WebView เพื่อความเข้ากันได้ที่ดีขึ้น แอปจำเป็นต้องใช้ WebView เพื่อให้ทำงานได้ ไม่สามารถเลี่ยงผ่าน Cloudflare ได้ คุณยังไม่มีหมวดหมู่ ยืนยันการเปลี่ยนแปลง วันนี้ ข้ามรายการที่มีตอนที่ยังไม่ได้อ่าน ปิด เปิด บันทึกเป็นแฟ้ม CBZ นโยบายความเป็นส่วนตัว สำหรับความช่วยเหลือเกี่ยวกับวิธีการแก้ไขข้อผิดพลาดในการอัปเดตคลัง ไปยัง %1$s เรียงตาม วันที่ การตั้งค่าการจัดเรียงตามหมวดหมู่ กำลังติดตั้งส่วนขยาย… ความเร็วในการซ่อนเมนูบนเมื่อเลื่อน การสำรอง/กู้คืนอาจทำงานไม่ถูกต้องหากปิดใช้งานการเพิ่มประสิทธิภาพ MIUI กิจกรรมเบื้องหลัง ไม่พบรายการที่ตรงกัน คู่มือเริ่มต้นใช้งาน หน้าถัดไป อัปเดตทั้งหมด ตัวติดตั้ง แบบเก่า Shizuku ไม่ทำงาน ติดตั้งและเริ่ม Shizuku เพื่อใช้ Shizuku เป็นตัวติดตั้งส่วนขยาย ติดตาม ไม่พบตอน บันทึกปกแล้ว ผิดพลาดในการบันทึกปก ไม่รองรับแหล่งที่มานี้ แอพอัปเดต ค่าเริ่มต้น ผิดพลาดในการแบ่งปันปก เริ่มดาวน์โหลดเลย ตัวติดตามขั้นสูง ควรเก็บสำเนาของข้อมูลสำรองไว้ที่อื่นด้วยเช่นกัน การสำรองข้อมูลอาจมีข้อมูลที่ละเอียดอ่อนรวมถึงรหัสผ่านที่เก็บไว้ ควรระวังหากแบ่งปันสำเนา บันทึกบันทึกอย่างละเอียดไปยังบันทึกของระบบ (ลดประสิทธิภาพของแอป) แปลเป็นภาษาไทยโดย altqx รูปแบบตอนไม่ถูกต้อง ปก ยังไม่ได้อ่าน สลับสี รายการทั้งหมด UI แท็บเล็ต มี %1$d รายการ ที่ไม่ได้อยู่ในคลังในฐานข้อมูล ไม่มีอะไรให้ต้องล้าง ผู้ผลิตบางรายมีข้อจำกัดเพิ่มเติมของแอปที่ปิดบริการพื้นหลัง เว็บไซต์นี้มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไข การบันทึกอย่างละเอียด ลักษณะ ธีมแอพ ไดนามิก กรีนแอปเปิ้ล มิดไนท์ดัสก์ ช้า ช้ามาก เร็วที่สุด เร็ว คู่มือการติดตาม หมวดหมู่ที่ยกเว้นไว้ ใช้สำหรับเฉพาะบางแหล่งที่มา รายการจะถูกติดตามโดยอัตโนมัติเมื่อเพิ่มลงในคลัง ข้อมูลแอพ เกิดข้อผิดพลาดในการดึงรายการส่วนขยายที่พร้อมใช้งาน ล้างแคชตอนในเมื่อเปิดแอพ คำเตือน แหล่งที่มาในเครื่อง ภาษา สตรอว์เบอร์รีแด๊กเคอรี่ ทาโกะ ทีลและเทอร์ควอยซ์ หยินหยาง โยทซึบะ โหมดมืดดำสนิท ทุก 3 วัน ข้อจำกัด: %s เฉพาะขณะเชื่อมต่อ Wi-Fi คำเตือน: การดาวน์โหลดจำนวนมากอาจทำให้แหล่งที่มาทำงานช้าลงและ/หรือปิดกั้น %s แตะเพื่อเรียนรู้เพิ่มเติม การอัปเดตจำนวนมากเป็นอันตรายต่อแหล่งที่มาและอาจทำให้การอัปเดตช้าลงและใช้งานแบตเตอรี่เพิ่มขึ้น แตะเพื่อเรียนรู้เพิ่มเติม เผยแพร่จบแล้ว ถูกยกเลิก อยู่ระหว่างพัก แพนหน้ากว้าง ตารางแสดงแค่หน้าปก ซูมภาพกว้างโดยอัตโนมัติ ถูกข้ามเนื่องจากมีตอนที่ยังไม่ได้อ่าน ถูกข้ามเนื่องจากยังไม่มีตอนใด ๆ ถูกอ่าน แสดงรายการ ข้ามรายการที่ยังไม่ได้เริ่มอ่าน ถูกข้ามเนื่องจากเรื่องนี้จบแล้ว แตะเพื่อเรียนรู้เพิ่มเติม อัปเดตผิดพลาด %1$d รายการ แนวตั้งแบบกลับด้าน ย้ายเรื่องไปด้านบน ปิดใช้งาน ผิดพลาดในการบันทึกรูปภาพ เปิดใน GithHub ไม่มีรายการคลังถูกสำรองข้อมูลไว้ ปิด ล้างข้อมูล WebView ล้างข้อมูล WebView แล้ว ไม่พบแหล่งที่มาที่ติดตั้งแล้ว ไม่พบแหล่งที่มาใด ๆ จำนวนตอนที่ยังไม่ได้อ่าน เช็กอัปเดตล่าสุด ไม่พบหน้า %d ขณะกำลังแยกหน้า เพิ่มประสิทธิภาพตัวอ่าน ไม่พบตำแหน่งไฟล์ของหน้า %d รีเซ็ตค่ากำหนดตัวอ่านตามเรื่อง รีเซ็ตโหมดการอ่านและการจัดวางของทุกเรื่อง รีเซ็ตค่ากำหนดตัวอ่านทั้งหมดแล้ว ไม่สามารถรีเซ็ตค่ากำหนดตัวอ่าน เอ่อ นี้มันงี่เง่าชะมัด เวอร์ชัน ภาษา ระดับความเหมาะสม รายการที่อยากอ่าน รายการที่พักอ่านไว้ รายการที่ยังไม่จบ รายการที่กำลังอ่าน รายการที่จบแล้ว เฉพาะบนเครือข่ายที่ไม่ได้ตรวจสอบ ไม่สามารถเปิดตอนที่อ่านล่าสุดได้ กำหนดปกเอง ยังไม่ถูกติดตั้ง ภาษาของแอพ ไม่มีคำอธิบาย ลาเวนเดอร์ ต้องการจะลบหมวดหมู่ \"%s\" ไหม? ลบหมวดหมู่ InternalError: ตรวจสอบบันทึกการแครชสำหรับข้อมูลเพิ่มเติม ตัวแทนผู้ใช้เริ่มต้น รีเซ็ตตัวแทนผู้ใช้ นำทุกอย่างออก แสดงรายการในคลังที่อัปเดตล่าสุดของคุณ วิดเจ็ตไม่พร้อมใช้งานขณะการล็อกแอปเปิดไว้ สตริงตัวแทนผู้ใช้ไม่สามารถทิ้งว่างเปล่าไว้ได้ กำลังอัปเดตอยู่แล้ว ไทเดลเวฟ ดาวน์โหลดล่วงหน้า ดาวน์โหลดอัตโนมัติขณะกำลังอ่าน ใช้ได้เฉพาะกับตอนปัจจุบัน + ตอนถัด ๆ ไปดาวน์โหลดไว้อยู่แล้ว แน่ใจแล้วใช่หรือไม่? หลายภาษา อัปเดตคลังล่าสุด: %s คุณกำลังจะนำ \"%s\" ออกจากคลัง ยอดนิยม ไม่ได้รับการอนุญาตให้ใช้งานที่จัดเก็บ ค้นหา… ถูกข้ามเนื่องจากเรื่องไม่จำเป็นต้องถูกอัปเดต ธีม, รูปแบบวันที่และเวลา หมวดหมู่, การอัปเดตคลัง, การปัดรายการตอน โหมดการอ่าน, การแสดงผล, การนำทาง การดาวน์โหลดอัตโนมัติ, การดาวน์โหลดล่วงหน้า การอัพเดทความคืบหน้าหลังอ่าน, การซิงค์กับแหล่งที่มาภายนอก แหล่งที่มา, ส่วนขยาย, การค้นหาทั้งหมด การสำรองข้อมูลและพื้นที่เก็บข้อมูลด้วยตนเองและอัตโนมัติ การล็อกแอป, หน้าจอความปลอดภัย ดัมพ์บันทึกข้อขัดข้อง, การเพิ่มประสิทธิภาพแบตเตอรี่ เกิดความผิดพลาด! %s เกิดข้อผิดพลาดอย่างไม่คาดคิด ขอแนะนำให้คุณแบ่งปันบันทึกข้อขัดข้อง แล้วส่งลงไปในช่องสนับสนุนของเราใน Discord ตำแหน่งไม่ถูกต้อง: %s ไม่ทราบชื่อเรื่อง เริ่มแอปพลิเคชันใหม่ เมื่อสักครู่ สตริงตัวแทนผู้ใช้ไม่ถูกต้อง สุ่มเปิดรายการ บิลด์ F-Droid ไม่ได้ถูกรองรับอย่างเป็นทางการ \nแตะเพื่อเรียนรู้เพิ่มเติม ไม่พบรายการใด ๆ ในหมวดหมู่นี้ กำลังตรวจสอบการดาวน์โหลด ปุ่มอ่านต่อ ทำดัชนีการดาวน์โหลดใหม่ การกระทำนี้จะเป็นการนำวันที่เริ่มอ่านของรายการที่เลือกไว้ก่อนหน้าจาก %s ออก การกระทำนี้จะเป็นการนำวันที่อ่านจบของรายการที่เลือกไว้ก่อนหน้าจาก %s ออก นำวันที่ออก? บังคับให้ตรวจสอบบทที่ดาวน์โหลดไว้ เริ่มต้น ดาวน์โหลดไว้แล้ว ระยะเวลาการอ่าน รายการ รวม ตัวติดตาม คะแนนเฉลี่ย %d น. สถิติ ภายในเครื่อง ไม่ทราบ รายการที่ติดตาม ใช้แล้ว ภาพรวม รายการที่อ่านจบแล้ว ในการอัปเดตทั้งหมด %d วัน อ่านแล้ว %d ชม. %d วิ. ไม่ใช่ตอนนี้ แสดงจำนวนที่ยังไม่ได้อ่านบนไอคอนการอัปเดต หมวดหมู่ว่างเปล่า คัดลอกไปยังคลิปบอร์ดแล้ว ข้ามตอนที่ซ้ำกัน พร้อมใช้งานแต่ไม่ได้ติดตั้งแหล่งที่มา: %s %1$s ข้อผิดพลาด: %2$s *จำเป็น ซ่อนรายการที่มีอยู่ในคลังอยู่แล้ว คัดลอกไปยังคลิปบอร์ด อัปเดตหมวดหมู่ แยกภาพสูงยาว โอเวอร์เลย์ หมุนหน้ากว้างให้พอดี พลิกการวางแนวของหน้ากว้างที่หมุน ข้อมูลดีบัก เปิดตอนเมื่อปัดไปทางขวา เปิดตอนเมื่อปัดไปทางซ้าย แตะสองครั้งเพื่อซูม กำหนดช่วงเวลา กำหนดความถี่ในการอัปเดต การอัปเดตที่คาดไว้ต่อไป คาดการณ์เวลาออกครั้งต่อไป ข้ามไปเนื่องจากคาดว่าจะไม่มีการออกในวันนี้ ประมาณทุกๆ ตั้งค่าให้อัพเดตทุกๆ ช่วงเวลา ตกลง นำการติดตามของ %s ออกไหม? การกระทำนี้จะเป็นการลบการติดตามภายในเครื่อง และลบออกจาก %s เช่นกัน ซิงค์คลังเสร็จสมบูรณ์ มีผลลัพธ์ กำลังซิงค์คลัง ลบการดาวน์โหลด ดัชนีการดาวน์โหลดไม่ถูกต้อง แตะที่นี่เพื่อขอความช่วยเหลือเกี่ยวกับ Cloudflare ไม่สามารถสร้างไฟล์สำรองข้อมูล เข้าสู่ระบบตัวติดตาม ปลดล็อก %s ไม่มีการเชื่อมต่ออินเทอร์เน็ต HTTP %d, ดูเว็บไซต์ใน WebView ไม่สามารถเข้าถึง %s ได้ ย้ายเรื่องไปด้านล่าง ประทับเวลาแบบสัมพันธ์กัน แสดง \"%1$s\" แทน \"%2$s\" กำลังอัปเดตคลัง... (%s) การตั้งค่าแหล่งที่มา การตั้งค่าแอป ไม่มีไฟล์ถูกเลือกไว้ ไม่เลย ลดภาพซ้อนบนจอแสดงผล E-Ink สำรองข้อมูลอัตโนมัติครั้งล่าสุด: %s แฟลชเมื่อเปลี่ยนหน้า การใช้พื้นที่เก็บข้อมูล ข้อมูลและการจัดเก็บข้อมูล สร้าง นำไปใช้ ย้อนกลับไปเป็นค่าเริ่มต้น ไม่พบผู้แปล ผู้แปล คะแนนจากตัวติดตาม ผู้แปลที่เว้นไว้ ตำแหน่งที่จัดเก็บ ใช้สำหรับการสำรองข้อมูลอัตโนมัติ การดาวน์โหลดตอน และแหล่งที่มาในเครื่อง ตัวเลือกเพิ่มเติม เลือกแล้ว ยังไม่ได้เลือก ขึ้นไปข้างบน เลือกโฟลเดอร์ คู่มือการเริ่มต้นใช้งาน เพิ่งรู้จัก %s? เราขอแนะนำให้ดูคู่มือการเริ่มต้นใช้งาน เริ่มต้น ตอนใหม่คาดว่าจะออกในอีกประมาณ %1$s จะตรวจสอบทุก ๆ %2$s จำเป็นต้องเลือกโฟลเดอร์ สิทธิ์ในการแจ้งเตือน สิทธิ์ในการติดตั้งแอป พร้อมใช้งาน: %1$s / ทั้งหมด: %2$s ยินดีต้อนรับ! กลับมาติดตั้ง %s ใหม่? ข้อผิดพลาดเต็ม: ข้าม เพื่อหลีกเลี่ยงการหยุดชะงักใน การอัปเดตไลบรารี ดาวน์โหลด และการสำรองข้อมูลที่ใช้เวลานาน ถัดไป การใช้แบตเตอรี่ในพื้นหลัง ในการติดตั้งส่วนขยายแหล่งที่มา มาตั้งค่าอะไรสักอย่างกันก่อน คุณสามารถเปลี่ยนสิ่งเหล่านี้ในการตั้งค่าในภายหลังได้ ไม่มีการกำหนดตำแหน่งจัดเก็บ รับการแจ้งเตือนการอัปเดตคลังและอื่น ๆ จำเป็นต้องมีสิทธิ์ในการติดตั้งส่วนขยาย แตะที่นี่เพื่อให้สิทธิ์ รวมการตั้งค่าที่ละเอียดอ่อน (เช่น โทเค็นการเข้าสู่ระบบตัวติดตาม) อนุญาต เลือกโฟลเดอร์ที่ %1$s จะจัดเก็บการดาวน์โหลดบท การสำรองข้อมูล และอื่นๆ \n \nแนะนำให้ใช้โฟลเดอร์เฉพาะ \n \nโฟลเดอร์ที่เลือก: %2$s อัปเดตอัจฉริยะ รีโพส่วนขยาย มีรีโพนี้อยู่แล้ว! เพิ่มรีโพเพิ่มเติมให้กับ %s - ควรเป็น URL ที่ลงท้ายด้วย \"index.min.json\" ความถี่ในการอัปเดตกำหนดเอง: คุณไม่มีรีโพที่ตั้งค่าไว้ คู่มือการจัดเก็บข้อมูล เพิกถอนส่วนขยายที่ไม่รู้จักที่เชื่อถือไว้ เพิ่มรีโพ ลบรีโพ URL ของรีโพไม่ถูกต้อง เร็ว ๆ นี้ กำลังอัปเดตจากเวอร์ชันเก่าและไม่แน่ใจว่าจะเลือกอะไรใช่ไหม? โปรดดูคู่มือการจัดเก็บข้อมูลสำหรับข้อมูลเพิ่มเติม นอร์ด URL รีโพ ต้องการจะลบรีโพ \"%s\" หรือไม่? เปิดที่มาของรีโพ คัดลอกลิงก์ สุ่ม อนุญาตให้เก็บข้อมูลไปวิเคราะห์ ความปลอดภัย การวิเคราะห์และบันทึกข้อผิดพลาด ส่งบันทึกข้อผิดพลาดแบบไม่เปิดเผยตัวตนให้กับนักพัฒนา ส่งบันทึกข้อผิดพลาด ส่งข้อมูลการใช้งานที่ไม่ระบุตัวตนเพื่อปรับปรุงคุณสมบัติของแอป การส่งบันทึกข้อผิดพลาดและการวิเคราะห์จะช่วยให้เราระบุและแก้ไขปัญหา ปรับปรุงประสิทธิภาพ และทำให้การอัปเดตในอนาคตมีความเกี่ยวข้องกับความต้องการของคุณมากขึ้น นำออก ต้องการนำส่วนขยายออกหรือไม่? ต้องการนำส่วนขยาย \"%s\" ออกหรือไม่? ที่กำลังจะมีขึ้น เพิ่มอยู่ดี อัปเดตความคืบหน้าเมื่อทำเครื่องหมายว่าอ่านแล้ว ไฟล์สำรองข้อมูลเสียหาย รายการที่อ่านทั้งหมด ตัวติดตามของบท %d ได้รับการอัปเดตแล้ว ไกด์ที่กำลังจะมีขึ้น เดือนถัดไป สีขาว ระยะเวลากระพริบ กระพริบทุก กระพิบเป็น สีดำ เดือนก่อนหน้า ไม่รองรับการสำรองข้อมูลเป็น JSON รีโพส่วนขยาย มังงะเรื่องนี้เสร็จแล้ว หรือไม่มีกำหนดวางจำหน่ายที่แน่ชัด ไม่สามารถรับสิทธิ์การเข้าถึงโฟลเดอร์ถาวรได้ แอปอาจทำงานผิดปกติ %1$s ms สีขาวและสีดำ ข้ามการดาวน์โหลดบทที่ซ้ำ กุญแจลายเซ็นระบุตัวตนนี้มีอยู่แล้ว โปรไฟล์การแสดงผลแบบกำหนดเอง แทนที่ ปิดการใช้งานการซูมออก ดูการอัปเดตที่กำลังจะมีขึ้น รีโพสิทอรี %1$s มีกุญแจลายเซ็นระบุตัวตนเดียวกันกับ %2$s\nหากต้องการ %2$s จะถูกแทนที่ มิฉะนั้น โปรดติดต่อผู้ดูแลรีโพนี้ คุณต้องการเพิ่มรีโพ \"%s\" หรือไม่? อัปเดตตัวติดตามของบท %d หรือไม่? อัตโนมัติ ตอนที่ยังไม่ได้อ่าน โน้ต แก้ไขโน้ต แคทปุชชิน โมโนโครม พฤติกรรม ทำเครื่องหมายตอนซ้ำที่อ่านแล้วว่าอ่านแล้ว หลังจากอ่านตอน หลังจากเรียกข้อมูลตอนใหม่ ซ่อนตัวแสดงตอนที่หายไป เกณฑ์บิตแมปฮาร์ดแวร์กำหนดเอง ค่าเริ่มต้น (%d) หากตัวอ่านโหลดภาพเปล่า ให้ลดเกณฑ์ลงทีละน้อย\nเลือกแล้ว: %s ใช้ตัวถอดรหัสแบบเก่าสำหรับตัวอ่านภาพยาว มีผลต่อประสิทธิภาพ เปิดใช้งานเฉพาะเมื่อการลดเกณฑ์บิตแมปไม่สามารถแก้ไขปัญหาภาพเปล่าได้ เกิดข้อผิดพลาดในการสร้างไดเรกเทอรี่ดาวน์โหลด เกิดข้อผิดพลาดในการสร้างไดเรกเทอรี่: %s ส่งออก รายการคลัง ส่งออกคลังแล้ว คุณกำลังจะลบรายการออกจากฐานข้อมูล บริจาค เรนเดอร์รูปภาพในคำอธิบายเรื่อง ไม่อนุญาตชื่อไฟล์ที่ไม่ใช่ ASCII ================================================ FILE: i18n/src/commonMain/moko-resources/tr/plurals.xml ================================================ %1$s dakika sonra %1$s dakika sonra %1$d yeni bölüm %1$d yeni bölüm Bölüm %1$s ve 1 daha Bölüm %1$s ve %2$d daha %d girdi için %d girdi için Uzantı güncellemesi var %d uzantı güncellemesi var %1$s kaldı %1$s kaldı %d Kategori %d Kategoriler %1$s içinde %2$s hatayla tamamlandı %1$s içinde %2$s hatayla tamamlandı %1$s bölüm %1$s bölüm %d izleyici %d izleyici %d bölüm atlandı, kaynak mevcut değil veya filtrelendi %d bölüm atlandı, kaynak mevcut değil veya filtrelendi Dün %1$d gün önce Sonraki okunmayan bölüm Sonraki %d okunmayan bölüm Sonraki bölüm Sonraki %d bölüm %1$s bölüm eksik %1$s bölüm eksik 1 gün %d gün %d depo %d depo Yarın %1$d gün içinde 1 sayfa %1$s sayfa %1$d girdiyi taşı? %1$d girdiyi taşı? %1$d girdiyi kopyala? %1$d girdiyi kopyala? Bir girdi atlandı %1$d girdi atlandı ================================================ FILE: i18n/src/commonMain/moko-resources/tr/strings.xml ================================================ Ad Kategoriler Kitaplık girdileri Bölümler İzleme Geçmiş Ayarlar İndirme kuyruğu Kitaplık Geçmiş Güncellemeler Yedekle ve geri yükle Taşı Uzantılar Uzantı bilgisi Ayarlar Filtrele Yer imli Okunmamış Filtreyi kaldır Alfabetik Toplam bölüm Son okunan Ara Genel arama Tümünü seç Okundu olarak işaretle Okunmadı olarak işaretle Öncekileri okundu olarak imle İndir Bölüme yer imi ekle Bölümün yer imini kaldır Sil Kitaplığı güncelle Düzenle Ekle Kategori ekle Kategorileri düzenle Kategoriyi yeniden adlandır Kategorileri ayarla Kapağı düzenle Duraklat Önceki bölüm Sonraki bölüm Tekrar dene Kaldır Devam Et Tarayıcıda aç Görüntüleme modu Görüntüleme Sıkışık ızgara Liste İndirilen bölümler İptal et Sırala Yükle Paylaş Kaydet Sıfırla Geri al Günlüğü aç Geri yükle Yükleniyor… Uygulama kullanılamıyor Genel Okuyucu İndirmeler İzleme Gelişmiş Hakkında Bir satırdaki öge sayısı Portre Manzara Otomatik güncellemeler Kapalı 6 saatte bir 12 saatte bir Günlük 2 günde bir Haftalık Tümü Otomatik güncelleme cihaz kısıtlamaları Şarj olurken \"Tamamlanmış\" durumda olan girdileri atla Okuduktan sonra ilerlemeyi güncelle Varsayılan kategori Her zaman sor Güncelle Yükle Beklemede İndiriliyor Yükleniyor Yüklendi Güven Güvenilmeyen Kaldır Güvenilmeyen uzantı Kötü niyetli uzantılar, oturum açma bilgilerini okuyabilir veya güvenilmeyen kodlar çalıştırabilir. \n \nBu uzantıya güvenerek bu riskleri kabul etmiş olursunuz. Tam ekran Sayfa geçişlerini animasyonla yap Çift dokunma animasyon hızı Sayfa numarası göster Kenarları kırp Özel parlaklık Özel renk filtresi Ekranı açık tut Gezinme Ses tuşları Ses tuşlarını ters çevir Arka plan rengi Beyaz Siyah Varsayılan okuma modu Sayfalı (soldan sağa) Sayfalı (sağdan sola) Sayfalı (dikey) Uzun şerit Sayfalı Boyutlandırma şekli Ekrana sığdır Uzat Genişliğe sığdır Yüksekliğe sığdır Orijinal boyut Akıllı sığdırma Yakınlaştırma başlangıç konumu Otomatik Sol Sağ Orta Animasyon yok Normal Hızlı Varsayılan yön Serbest Kilitli portre Kilitli manzara Kırmızı Yeşil Mavi Alfa Elle okundu olarak işaretlenince Okuduktan sonra otomatik sil Devre dışı Son okunan bölüm Okunan sondan ikinci bölüm Okunan sondan üçüncü bölüm Okunan sondan dördüncü bölüm Okunan sondan beşinci bölüm Yeni bölümleri indir İzleyiciler Yedek oluştur Şu anki kitaplığı geri yüklemek için kullanılabilir Yedeği geri yükle Kitaplığı yedek dosyasından geri yükle Otomatik yedekleme sıklığı Yedek oluşturuldu Geri yükleme tamamlandı Neyi yedeklemek istiyorsunuz? Yedek geri yükleniyor Yedek oluşturuluyor Bölüm önbelleğini temizle Kullanılan: %1$s Önbellek temizlendi, %1$d dosya silindi Temizlenirken sorun oluştu Çerezleri temizle Çerezler temizlendi Veritabanını temizle Kitaplığa kaydedilmeyen girdilerin geçmiş bilgisini sil Girdiler silindi Sürüm Çökme günlüklerini gönder Hataların düzeltilmesine yardımcı olur. Kişisel bilgi gönderilmeyecektir %1$s \'e giriş yap Kullanıcı adı Parola Giriş Giriş yapıldı Bilinmeyen sorun Kategori güncelleniyor Başka sonuç yok Yerel kaynak Diğer Genel arama… En son Göz At Devam ediyor Bilinmeyen Lisanslı Kitaplıktan kaldır Kitaplığa eklendi Kitaplıktan kaldırıldı İndirilen bölümler silinsin mi? Panoya kopyalandı: \n%1$s Kaynak yüklenmedi: %1$s Bölüm %1$s İndiriliyor (%1$d/%2$d) Hata Duraklatıldı Kaynak başlığı Bölüm numarası Kaynağa göre Bölüm numarasına göre İndir Okunmamış Seçilen bölümleri silmek istediğinize emin misiniz? İzleme Okunuyor Tamamlandı Bırakıldı Beklemede Planlanıyor Yeniden okunuyor Puan Başlık Durum Durum Tür Bu adda bir kategori zaten var! Kategoriler silindi Bu, bu bölümün okunma tarihini kaldıracak. Emin misiniz? Bu girdi için tüm bölümleri sıfırla Kitaplığa ekle? Görsel kaydedildi Özel filtre Kapak olarak ayarla Kapak güncellendi Sayfa: %1$d Sonraki bölüm bulunamadı Bu görsel yüklenemedi Bu görsel kapak resmi olarak kullanılsın mı? Dahil edilecek veri seç Taşı Kopyala Bölümler indirilemedi. İndirmeler bölümünden yeniden deneyebilirsiniz Yeni bölümler bulundu Kapak güncellenemedi Lütfen bunu yapmadan önce girdiyi kitaplığınıza ekleyin Kapak görselini seç Yedek dosyasını seç İndir Yeni güncelleme yok İndiriliyor… Güncellemeyi yüklemek için dokunun İndirme hatası Yeni sürüm var! İndirme yok Yeni güncelleme yok Yakında okunan yok Kitaplığınız boş Kategoriniz yok. Kitaplığınızı düzenlemek için artı düğmesine basarak bir tane oluşturun. İndirici Hata Bölüm, beklenmeyen hata sonucu indirilemedi Kablosuz ağ bağlantısı yok Ağ bağlantısı yok İndirmeler duraklatıldı Genel Tamamlandı: Şimdiki: Sıradaki: Önceki: Sonraki bölüm yok Önceki bölüm yok Sayfalar yükleniyor… Sayfalar yüklenemedi: %1$s Uzun dokununca eylemleri göster WebView ile aç Okundu olarak işaretlenmiş bölümleri atla Renk filtresi karışım modu Kaplama Çoğalt Ekran Soldurma / Açıklaştırma Yanma / Koyulaştırma Yardım Sonuç bulunmadı Taşımak için bir kaynak seçin Geri İleri Yenile Kitaplık Geçersiz Bu uzantı artık kullanılamıyor. Düzgün çalışmayabilir ve uygulamada sorunlara neden olabilir. Kaldırılması önerilir. Tarih biçimi Genel güncelleme %1$s \'den çıkılsın mı? Çıkış yap Çıkış yaptınız Duraklatıldı Daha Çok Son bölüm Bölümleri görüntüle Tümünü iptal et Açık Koyu Sistem Bildirimleri yönet Güvenlik ve gizlilik Kilit açma gerektir Boştayken kilitle Her zaman Asla Güvenli ekran Bekleyen güncellemeler Ekran kesimi bölgesinde içerik göster Cloudflare geçilemedi Daha iyi uyumluluk için lütfen WebView uygulamasını güncelleyin Bölüm güncellemeleri Güvenli ekran, uygulamalar arasında geçiş yaparken uygulama içeriğini gizler ve ekran görüntüsü alınmasını engeller Ekran Bölüm %1$s Bölüm %1$s ve %2$d daha Bölüm %1$s Bildirim içeriğini gizle Pil iyileştirmesini devre dışı bırak Arka plan kitaplık güncellemelerine ve yedeklemelere yardım eder Pil iyileştirmesi zaten devre dışı E-posta adresi Bölüm geçişini her zaman göster Menü En yeni En eski En üste taşı En alta taşı Uzantı güncellemeleri Kitaplık güncelleniyor Okuma Filtrelenmiş bölümleri atla Kaynaklar Tersini seç Aralıklı uzun şerit Kenar boşluğu Sabitlenmiş Sabitlemeyi kaldır Sabitle İzleyici ekle Kitaplıkta Kitaplığa ekle Daha az Daha fazla Web sitesi Uygulamanın çalışabilmesi için WebView gereklidir Açık kaynak lisansları Yalnızca indirilen Böl. %1$s - %2$s Yedek geri yüklenemedi Yedekleme başarısız Geri yükleme iptal edildi Geri yükleme zaten devam ediyor Yedekleme zaten devam ediyor Güncellemeleri kontrol et Son kullanılan Yerel kaynak kılavuzu %1$02d dk, %2$02d sn Kitaplığınızdaki tüm girdileri filtreler Gri Okuma modu Bu seri için Cihaz ayarları açılamadı Bölüm ilerlemesini harici izleyici hizmetlerine güncellemek için tek yönlü eşitleme. Her girdinin izleme düğmesinden izlemeyi ayarlayın. Kitaplıktakilerin kapaklarını yenile Yükleme tarihine göre Veri Eksik kaynaklar: Yedek, bir kitaplık girdisi içermiyor. Geçersiz yedekleme dosyası: Kitaplığı güncellerken yeni kapak ve ayrıntılar için kontrol et Üst veriyi otomatik yenile Taşı Rahat ızgara Sekmeler Kategori sekmelerini göster Sayfa bulunamadı Tümünü devre dışı bırak Tümünü etkinleştir Okuyucu açılınca kısaca okuma modunu göster Okuma modunu göster Başla Kaynak bulunamadı Devre dışı bırak Etkili olması için uygulamanın yeniden başlatılmasını gerektirir Hiçbiri Dokunma bölgelerini ters çevir İkisi de Dikey Yatay Bilinmeyen durum Bilinmeyen yazar v%1$s sürümüne güncellendi Yenilikler Depolama alanı az olduğu için bölümler indirilemedi Eklendiği tarih \"%1$s\" için genel arama Okuma modu Tema Sabitlenmiş kaynağınız yok Tamamlandı İlerleme Hatalar Giriş yapılmamış izleyiciler: Yer imi eklenmiş bölümleri silmeye izin ver Bölümleri sil Bu uzantıdaki kaynaklar yetişkin içerik (18+) içerebilir 18+ Bu, resmî olmayan veya yanlış işaretlenmiş uzantıların uygulama içinde yetişkin içeriği (18+) göstermesini engellemez. Bölüm bulunamadı Varsayılan bölüm ayarları güncellendi Varsayılan olarak ayarla Ayrıca kitaplığımdaki tüm girdilere uygula Bu ayarları varsayılan olarak kaydetmek istediğinizden emin misiniz? Bölüm ayarları %1$s: %2$s, sayfa %3$d Ayarlarda ara İndirilen bölümler Kitaplıktan Okuma geçmişini duraklatır Gizli mod Geçmişi temizle Emin misiniz? Tüm geçmiş kaybolacak. Geçmiş temizlendi Sonraki sayfa Önceki sayfa Kaynak taşıma kılavuzu Yetişkin içerik (18+) kaynakları Kaynaklar ve uzantılar listelerinde göster Dosya seçme uygulaması bulunamadı Lütfen MAL\'a tekrar giriş yapın Dokunma bölgeleri Kenar Kindle gibi L şeklinde Bitirme tarihi Başlama tarihi Geliştiricilerle paylaşmak için hata günlüklerini bir dosyaya kaydeder Çökme günlüklerini paylaş Azalan Artan Bölüm numarasına göre Yükleme tarihine göre İzleniyor Öge sayısını göster Sağ ve Sol Geniş sayfaları böl Bölünmüş geniş sayfaların sırası okuma yönüyle uyuşmuyorsa Bölünmüş sayfa sırasını ters çevir Daha sonra kullanmak için eksik uzantıları yüklemeniz ve izleyici hizmetlerinde oturum açmanız gerekebilir. Sağ Sol Sonraki Önceki Okuyucu açıldığında kısaca göster Dokunma bölgelerini göster HTTPS üzerinden DNS (DoH) Hariç tut: %s Dahil et: %s Hiçbiri Bölümün alındığı tarih Hariç tutulan kategorilerdeki girdiler, dahil edilen kategorilerde olsa bile indirilmeyecektir. Otomatik indir Hariç tutulan kategorilerdeki girdiler, dahil edilen kategorilerde de olsa bile güncellenmeyecektir. Ayrıntıları görmek için dokun Bu Android sürümü artık desteklenmiyor Panoya kopyalanamadı Manzara Portre Yön Girdilerin başlığına göre klasör oluşturur Sayfaları ayrı klasörlere kaydet Eylemler Gri tonlama Gizli modu devre dışı bırak Otomatik Bu seri için tümünü iptal et Eşleşme bulunamadı Kaynak desteklenmiyor Okunmamış Tarih Sıralama ölçütü Geçersiz bölüm biçimi Bölüm bulunamadı Kısıtlamalar: %s Yerel kaynak Açık Kapalı Kapak paylaşılamadı Kapak kaydedilemedi Kapak kaydedildi Kapak Her kategori için ayrı sıralama ayarları İzleyici kılavuzu Henüz bir kategoriniz yok. Şimdi indirmeye başla Bazı üreticilerin arka plan hizmetlerini durduran ek uygulama kısıtlamaları vardır. Bu web sitesi bu durumun nasıl düzeltileceği hakkında daha fazla bilgi verir. MIUI iyileştirmesi devre dışıysa yedekleme/geri yükleme düzgün çalışmayabilir. Belirli kaynaklar için gelişmiş özellikler sağlar. Girdiler, kitaplığınıza eklendiğinde otomatik olarak izlenir. Gelişmiş izleyiciler Tamamen karanlık koyu mod Yotsuba Yin & Yang Tako Çilekli Kokteyl Alacakaranlık Yeşil Elma Dinamik Uygulama teması Arka plan etkinliği En düşük Düşük Yüksek En yüksek Kaydırmada menüyü gizleme duyarlılığı Ters Çevrilmiş Bugün Ördekbaşı & Turkuaz Değişikliği onaylamak için kimlik doğrula Varsayılan Görünüm İzle Başlangıç kılavuzu Tablet arayüzü Hariç tutulan kategoriler Çeviriye yardım edin Uygulama bilgisi Uzantı yükleyicisi olarak Shizuku\'yu kullanmak için Shizuku\'yu yükleyin ve başlatın. Shizuku çalışmıyor Eski Yükleyici Uzantı yükleniyor… Toplam girdi Uyarı Dil Yedeklerin kopyalarını başka yerlerde de tutmalısınız. Yedekler, şifreler dahil olmak üzere hassas verileri içerebilirler; paylaşıyorsanız dikkat edin. Büyük güncellemeler kaynaklara zarar verir ve daha yavaş güncellemelere ve ayrıca pil kullanımının artmasına neden olabilir. Daha fazla bilgi için dokunun. Ayrıntılı günlük kaydı Ayrıntılı günlükleri sistem günlüğüne yaz (uygulama performansını düşürür) Yalnızca kablosuz ağda Uyarı: Büyük toplu indirmeler kaynakların yavaşlamasına ve/veya %s\'u engellemesine neden olabilir. Daha fazla bilgi için dokunun. 3 günde bir Tümünü güncelle Uygulama güncellemeleri Uygulama başlatıldığında bölüm önbelleğini temizle Veri tabanında %1$d kitaplık dışı girdi Temizlenecek bir şey yok Kullanılabilir uzantılar alınamadı CBZ arşivi olarak kaydet Yayımı tamamlandı Gizlilik politikası İptal edildi Molada Girdiyi göster Kitaplık güncelleme hatalarının nasıl düzeltileceği konusunda yardım için bkz. %1$s Izgara (Yalnızca kapak) Okunmamış bölümü olan girdileri atla Başlanmamış girdileri atla Seri tamamlandığı için atlandı Okunmamış bölümler olduğu için atlandı Hiçbir bölüm okunmadığı için atlandı Geniş görselleri kaydır Geniş görsellere otomatik yakınlaştır %1$d güncelleme başarısız oldu Daha fazla bilgi için dokunun Ters portre Seriyi en üste taşı Devre dışı Görsel kaydedilirken hata oluştu Yedeklenecek kitaplık girdisi yok GitHub\'da aç WebView verileri temizlendi WebView verilerini temizle Kapat Yüklü kaynak bulunamadı Kaynak bulunamadı Son güncelleme kontrolü Okunmamış sayısı Okuyucu performansını iyileştirir Bölünürken %d. sayfa bulunamadı %d. sayfa için dosya yolu bulunamadı Her seri için okuyucu ayarlarını sıfırla Tüm serilerin okuma modunu ve yönünü sıfırlar Tüm okuyucu ayarları sıfırlandı Okuyucu ayarları sıfırlanamadı Peki, bu garip Sürüm Dil Yaş derecelendirmesi İstek Listesi Beklemede Listesi Bitirilmemiş Listesi Tamamlanmış Listesi Okuma Listesi Yalnızca tarifesiz ağda Son okunan bölüm açılamıyor Özel kapak Yüklü değil Uygulama dili Açıklama yok Lavanta Kategoriyi sil \"%s\" kategorisini silmek istiyor musunuz? İç Hata: Daha çok bilgi için çökme günlüklerine bakın Varsayılan kullanıcı aracısı Varsayılan kullanıcı aracısını sıfırla Her şeyi kaldır Uygulama kilidi etkinleştirildiğinde widget kullanılamıyor Son güncellenen kitaplık girdilerinizi görün Bir güncelleme zaten çalışıyor Kullanıcı aracısı boş olamaz Gelgit Dalgası Önceden indir Okurken otomatik indir Yalnızca geçerli bölüm ile bir sonraki bölüm zaten indirildiyse çalışır. Emin misiniz? \"%s\" girdisini kitaplığınızdan kaldırmak üzeresiniz Son kitaplık güncelleme: %s Çoklu Popüler Depolama izinleri verilmedi Seri güncelleme gerektirmediği için atlandı Ara… Elle ve otomatik yedeklemeler, depolama alanı Uygulama kilidi, güvenli ekran Çökme günlükleri dökümü, pil iyileştirmeleri Kategoriler, genel güncelleme, kaydırma kontrolleri Kaynaklar, uzantılar, genel arama Otomatik indirme, önceden indirme Okuma modu, görüntüleme, gezinme Tema, tarih ve saat biçimi Tek yönlü ilerleme eşitlemesi, gelişmiş eşitleme Uygulamayı yeniden başlat Tüh! %s beklenmeyen bir hatayla karşılaştı. Çökme günlüklerini Discord\'daki destek kanalımızda paylaşmanızı öneririz. Bilinmeyen başlık Geçersiz konum: %s Geçersiz kullanıcı aracısı Şimdi İndirilenler kontrol ediliyor Rastgele girdi aç Bu kategoride girdi bulunamadı F-Droid derlemeleri desteklenmemektedir. \nDaha fazla bilgi için dokunun. Okumaya devam et butonu Tarih kaldırılsın mı? Bu, daha önce seçtiğiniz başlangıç tarihini şuradan kaldıracak: %s Bu, daha önce seçtiğiniz bitirme tarihini şuradan kaldıracak: %s İndirmeleri tekrar kontrol et Uygulamayı indirilen bölümleri yeniden kontrol etmeye zorla İstatistikler Başlandı İndirilen Toplam Kullanılan Yok %dg %dsa Yerel Tamamlanan girdiler Genel görünüm İzleyiciler Girdiler Okundu Okuma süresi Genel güncellemede İzlenen girdiler Ortalama puan %ddak %dsn Şimdi değil Kategori boş Güncellemeler simgesinde okunmayan sayısını göster Panoya kopyalandı Kullanılabilir ancak kaynak yüklü değil: %s Yinelenen bölümleri atla %1$s hatası: %2$s *gerekli Zaten kitaplıkta bulunan girdileri gizle Panoya kopyala Kategoriyi güncelle Uzun görselleri böl Üstünde göster Geniş sayfaları sığdırmak için döndür Döndürülen geniş sayfaların yönünü ters çevir Hata ayıklama bilgisi Bölümü sağa kaydırma Bölümü sola kaydırma Yakınlaştırmak için iki kez dokun Sıklığı ayarla Özel güncelleme sıklığı Zaman aralıkları Sonraki beklenen güncelleme Bir sonraki yayınlama zamanını tahmin et TAMAM Şu sıklıkla tahmin et: %s izlemesi kaldırılsın mı? Bugün bir yayın beklenmedigi için atlandı Bu, izlemeyi yerel olarak kaldıracak. Ayrıca şuradan da kaldır: %s Şu sıklıkla güncellemeye ayarla: Sonuç var İndirilenleri sil Yedekleme dosyası oluşturulamadı İndirme dizini tekrar oluşturuluyor Cloudflare ile ilgili yardım için buraya dokunun %s verisine erişilemedi İzleyici girişi Kitaplık eşitlemesi tamamlandı HTTP %d, siteyi WebView\'de kontrol et Ağ bağlantısı yok Kitaplık eşitleniyor %s Kilidini Aç Seriyi en alta taşı Kitaplık güncelleniyor… (%s) Dosya seçilmedi Kaynak ayarları Uygulama ayarları Göreli zaman damgaları \"%2$s\" yerine \"%1$s\" Asla E-ink ekranlarda gölgelenmeyi azaltır Uygula Varsayılana dön Son otomatik yedekleme: %s Çeviren bulunamadı Çeviren Sayfa değişiminde ışık çak Depolama kullanımı İzleyici puanı Veri ve depolama Çevirenleri hariç tut Oluştur Seçilmedi Daha fazla seçenek Seçili Depolama konumu Otomatik yedeklemeler, bölüm indirmeleri ve yerel kaynak için kullanılır. Yukarı git Klasör seç Başlangıç rehberi %s\'da yeni misiniz? Başlangıç rehberine göz atmanızı tavsiye ederiz. Başlayın Bir klasör seçilmelidir Hoş geldiniz! %s\'u yeniden mi yüklüyorsunuz? Atla Sonraki Hadi bazı şeyleri ayarlayalım. Bunları daha sonra ayarlardan da değiştirebilirsiniz. Depolama konumu ayarlanmadı %1$s\'un bölüm indirmelerini, yedeklemeleri ve daha fazlasını kaydedeceği bir klasör seçin. \n \nYalnızca buna ait bir klasör tavsiye edilir. \n \nSeçilen klasör: %2$s Bildirim izni Uygulama yükleme izni Uzun süren kitaplık güncellemelerinin, indirmelerin, yedeklemelerin ve geri yüklemelerinin kesintiye uğramasını önleyin. Arka planda pil kullanımı Kaynak uzantılarını yüklemek için. Kitaplık güncellemeleri ve daha fazlası için bildirim alın. İzin Ver Kullanılabilir: %1$s / Toplam: %2$s Uzantıları yüklemek için izin gerekli. İzin vermek için buraya dokunun. Hassas ayarları dahil et (örn. izleyici oturum açma bilgileri) Sonraki bölümlerin %1$s içinde yayınlanacağı tahmin ediliyor, her %2$s içinde bir kontrol ediliyor. Tüm hata: Hiç depo ayarlamadınız. Depolama kılavuzu Depo ekle Depo bağlantısı %s\'a ek depolar ekleyin. Bu, \"index.min.json\" ile biten bir bağlantı olmalıdır. Bu depo zaten var! Depoyu sil Geçersiz depo bağlantısı \"%s\" deposunu silmek istiyor musunuz? Özel güncelleme sıklığı: Eski bir sürümden güncelleme yapıyorsunuz ve neyi seçeceğinizden emin değil misiniz? Daha fazla bilgi için depolama kılavuzuna bakın. Akıllı güncelleme Uzantı depoları Nord Güvenilmiş bilinmeyen uzantıları geri al Yakında Açık kaynaklı depo Bağlantıyı kopyala Işık rengi Siyah Beyaz ve Siyah Beyaz Işık çakma süresi %1$s ms Işık çakma aralığı Özel görünüm profili %1$s deposunun İmzalama Anahtarı Parmak İzi %2$s deposuyla aynı. \nEğer böyle olması gerekiyorsa %2$s ile değiştirilecek. Aksi takdirde depo yöneticinize ulaşın. Uzaklaştırmayı devre dışı bırak JSON yedekleri desteklenmiyor Yedek dosyası bozuk Bu manga ya tamamlanmış ya da tahmin edilen yayımlanma tarihi yok. Yine de ekle Değiştir İmzalama Anahtarı Parmak İzi Zaten Var Eklenti depoları Stabil klasör erişimi sağlanamadı. Uygulama belirsiz çalışabilir. Takvim Gelecek Güncellemeleri Görüntüle Yakında Gelecek Rehberi Gelecek Ay Önceki Ay Yinelenen okunmuş bölümlerin indirilmesini atla \"%s\" deposunu eklemek istiyor musunuz? İzleyicileri %d. bölüme güncelle? Çökme kayıtlarını gönder Güvenlik Geliştiricilere anonimleştirilmiş çökme kayıtlarını gönder. Çökme kayıtlarını ve kullanım istatistiklerini göndermek sorunları tanımlamamıza ve düzeltmemize imkân verir, performansı iyileştirmemizi sağlar ve gelecek güncellemeleri ihtiyaçlarınızla uyumlu yapmamıza olanak tanır Kullanım istatistiklerine izin ver Uygulama özelliklerini geliştirmek için anonimleştirilmiş kullanım verileri gönder. Kullanım İstatistikleri ve Çökme Kayıtları Rastgele Kaldır \"%s\" eklentisini kaldırmak istediğinize emin misiniz? Eklentiyi Kaldır? Tüm okunmuş girdiler Okundu olarak işaretlendiğinde ilerlemeyi güncelle İzleyiciler %d. bölüme güncellendi Özel bitmap donanım sınırı Varsayılan (%d) Eğer okuyucu boş bir görsel yüklerse bu sınırı kademeli olarak azaltın.\nSeçili: %s Performansı etkiler. Yalnızca bitmap sınırını düşürmek boş görsel sorunlarını çözmediğinde kullanın Eklenti için okuma geçmişini duraklat Otomatik Monokrom Gizli olarak izlendi Kitaplık Dışa Aktarıldı Yazar Sanatçı Gizli olarak izle Kitaplık Listesi Dışa Aktar Herkese açık olarak izle Uzun şerit okuyucusu için eski çözümleyiciyi kullan Yinelenen okunmuş bölümleri okundu olarak işaretle Okunmamış bölümler Davranış Bölümü okuduktan sonra Yeni bir bölüm geldiğinde Notları düzenle Notlar …olduğu kısmı beğendim. Muhtemel yinelenenler Kitaplığınızda benzer isimli girdiler var.\n\nTaşımak için bir girdi seçin veya yine de ekleyin. Kitaplıkta olmayan girdilerin okunmuş bölümleri ve ilerlemeleri kaybolacaktır Girdileri veri tabanından kaldırmak üzeresiniz Okunmuş bölümleri olan girdileri koru İndirme dosya konumu oluşturulamadı Dosya konumu oluşturulamadı: %s Giriş yapılıyor… Kitaplıktaki mangaların başlıklarını kaynakla eşleşecek şekilde güncelle Uyarı: Eğer bir manga yeniden adlandırılırsa (eğer mevcutsa) indirme sırasından kaldırılacaktır. Catppuccin Mevcut Etkin kaynakları seç Sabitlenmiş kaynakları seç Devam Et Tümünü seç Seçimleri kaldır Seçilen Daha geniş bir arama için başlığı anahtar kelimelere ayırır Taşıdıktan sonra şu anki girdi için indirilenleri sil Aşağıdaki ayarlar yavaş ve tehlikelidirler ve kaynaklardan gelen kısıtlamalara neden olabilirler Gelişmiş arama modu Taşınacak veriler Ek anahter kelimeler (isteğe bağlı) Arama sorgusunu anahtar kelimeler ekleyerek daraltmaya yardımcı olur Eşleşmeyen girdileri gizle Daha yeni bölümleri olmayan girdileri gizle Girdiyi yalnızca eşleşen içerikte daha fazla bölüm varsa göster Bölüm numarasına göre eşleştir Eğer etkinleştirilirse en ileride olan içeriği seçer. Yoksa kaynağın önceliğine göre ilk eşleşen içeriği seçer. Taşıma Taşıma (%1$d/%2$d) Kopyala Taşı Alternatif bulunamadı En son: %1$s Bilinmeyen Manuel olarak ara Taşıma Şimdi taşı Şimdi kopyala İptal Et Kopyala Taşı İptal Et İptal Et Bölüm bulunamadı, bu girdi taşıma için kullanılamıyor Taşımayı durdur? Durdur Eksik bölüm göstergelerini gizle Manga açıklamalarında bulunan görselleri göster Bağış ASCII olmayan dosya isimlerine izin verme Unicode desteklemeyen bazı depolama sistemleri için uyumluluk sağlar. Etkinleştirildiğinde kaynak ve manga klasörlerini manuel olarak yeniden adlandırıp ASCII olmayan karakterleri küçük UTF-8 heksadesimal karşılıklarıyla değiştirmeniz gerekir. Bölüm dosyalarının yeniden adlandırılması gerekli değildir. Tek seferde indirilen sayfa sayısı Her kaynak için aynı anda indirilen sayfa sayısı Tek seferde indirilen kaynak sayısı Sekmeyi kapat Hariç tutulan Çevirenleri filtrele Hesaplanıyor… Yer imli ================================================ FILE: i18n/src/commonMain/moko-resources/tt/strings.xml ================================================ ================================================ FILE: i18n/src/commonMain/moko-resources/uk/plurals.xml ================================================ Після %1$s хвилини Після %1$s хвилин Після %1$s хвилин Після %1$s хвилин %1$d новий розділ %1$d нових розділів %1$d нових розділів %1$d нових розділів Розділи %1$s та ще 1 розділ Розділи %1$s та ще %2$d розділи Розділи %1$s та ще %2$d розділів Розділи %1$s та ще %2$d розділів Для %d запису Для %d записів Для %d записів Для %d записів %d розширення має оновлення %d розширення мають оновлення %d розширень мають оновлення %d розширень мають оновлення %d категорія %d категорії %d категорій %d категорій %1$s залишився %1$s залишились %1$s залишилось %1$s залишилось Зроблено за %1$s з %2$s помилкою Зроблено за %1$s з %2$s помилками Зроблено за %1$s з %2$s помилками Зроблено за %1$s з %2$s помилками %1$s розділ %1$s розділів %1$s розділів %1$s розділів %d трекер %d трекери %d трекерів %d трекерів Пропускається %d розділ, тому що джерело не має його, або він був відфільтрований Пропускаються %d розділи, тому що джерело не має їх, або вони були відфільтровані Пропускаються %d розділів, тому що джерело не має їх, або вони були відфільтровані Пропускаються %d розділів, тому що джерело не має їх, або вони були відфільтровані Учора %1$d дні тому %1$d днів тому %1$d днів тому Наступний непрочитаний розділ Наступні %d непрочитані розділи Наступні %d непрочитаних розділів Наступні %d непрочитаних розділів Наступний розділ Наступних %d розділи Наступних %d розділів Наступних %d розділів Відсутній %1$s розділ Відсутні %1$s розділи Відсутні %1$s розділів Відсутні %1$s розділів %d день %d дні %d днів %d днів %d репозиторій %d репозиторії %d репозиторіїв %d репозиторіїв %1$s сторінка %1$s сторінки %1$s сторінок %1$s сторінок Завтра Через %1$d дні Через %1$d днів Через %1$d днів ================================================ FILE: i18n/src/commonMain/moko-resources/uk/strings.xml ================================================ Назва Категорії Записи бібліотеки Розділи Відстеження Історія Налаштування Черга завантажень Бібліотека Історія Нове Резервування та відновлення Міграція Розширення Інформація про розширення Налаштування Фільтр В закладках Непрочитане Видалити фільтр В алфавітному порядку За кількістю розділів Остання прочитана Пошук Глобальний пошук Обрати все Позначити як прочитане Позначити як непрочитане Позначити попередні як прочитані Завантажити Закладка розділу Видалити закладку розділу Видалити Оновити бібліотеку Редагувати Додати Додати категорію Редагувати категорію Перейменувати категорію Помістити в категорію Змінити обкладинку Пауза Попередній розділ Наступний розділ Повторити Видалити Продовжити Відкрити в браузері Режим відображення Вигляд Компактна сітка Список Завантажені розділи Скасувати Сортувати Встановити Поділитись Зберегти Скинути Скасувати Відкрити лог Відновити Завантаження… Застосунок не відповідає Головні Читалка Завантаження Відстеження Додатково Інформація Елементів у рядку Портретна Альбомна Автоматичне оновлення Вимкнути Кожні 6 годин Кожні 12 годин Щодня Що 2 дні Щонеділі Всі Обмеження пристрою для автоматичних оновлень Коли заряджається Пропустити глави з статусом \"Завершено\" Оновлювати прогрес після прочитання Типова категорія Завжди запитувати Оновлення Встановити Очікується Завантажується Встановлюється Встановлено Довірений Ненадійне Видалити Ненадійне розширення Шкідливе розширення може зчитувати будь-які збережені облікові дані для входу або виконати довільний код. \n \nДовіряючи цьому розширенню, ви приймаєте ці ризики. Повноекранний режим Анімація переходів сторінки Швидкість анімації при подвійному натиснені Показувати номер сторінки Обрізати поля Користувацька яскравість Користувацький кольоровий фільтр Тримати екран ввімкненим Навігація Клавіші гучності Інвертувати клавіші гучності Колір фону Білий Чорний Типовий напрямок читання Посторінково (зліва направо) Посторінково (справа наліво) Посторінковий (вертикальний) Довга смуга Посторінково Масштабування По екрану Розтягнута По ширині По висоті Оригінальний розмір Розумна Стартова позиція збільшення Автоматична Зліва Справа Центральна Без анімації Нормальна Швидка Орієнтація за замовчуванням Вільна Заблокована портретна Заблокована альбомна Червоний Зелений Синій Прозорість Після того, як було відмічено прочитаним вручну Автоматично видаляти після прочитання Вимкнено Останній прочитаний розділ Передостанній прочитаний розділ Третій від останнього прочитаного розділу Четвертий від останнього прочитаного розділу П\'ятий від останнього прочитаного розділу Завантажувати нові розділи Трекери Створити резервну копію Можна використовувати для відновлення поточної бібліотеки Відновити резервну копію Відновити бібліотеку з резервної копії Частота автоматичних бекапів Резервна копія створена Відновлення завершено Що ви хочете зберегти до резервної копії? Відновлення резервної копії Створення резервної копії Очистити кеш розділів Використано: %1$s Кеш очищено, %1$d файлів видалено Виникла помилка при видаленні кешу Очистити куки Куки очищено Очистити базу даних Видалити історію для записів, котрі не знаходяться в вашій бібліотеці Дані видалено Версія Надсилати звіти про падіння Допомагає виправляти будь-які баги. Особисті дані не передаються Авторизація до %1$s Ім\'я користувача Пароль Логін Вхід успішний Невідома помилка Оновлення категорії Більше немає результатів Локальне джерело Інші Глобальний пошук… Новинки Огляд Онгоінг Невідомо Ліцензовано Видалити з бібліотеки Додати до бібліотеки Видалено з бібліотеки Видаляти завантажені розділи? Скопійовано до буферу \n%1$s Джерело не встановлено: %1$s Розділ %1$s Завантажується (%1$d/%2$d) Помилка Призупинено Назва джерела Номер розділу За каталогом За номером розділу Завантажити Непрочитані Ви впевнені, що бажаєте видалити вибрані розділи? Стежити В процесі читання Завершене Кинуто Заморожено Планую почитати Перечитую Оцінка Заголовок Статус Статус Тип Категорія з таким іменем вже існує! Категорію видалено Ця дія видалить дату прочитання розділу. Ви впевнені? Скинути всіх розділи для цього запису Додати до бібліотеки? Картинку збережено Користувацький фільтр Встановити як обкладинку Обкладинку оновлено Сторінка %1$d Наступний розділ не знайдено Зображення не вдалося завантажити Ви бажаєте встановити цю картинку як обкладинку? Завершено: Поточна: Наступна: Попередня: Наступної частини немає Попередньої частини немає Завантаження сторінок… Не вдалось завантажити сторінки %1$s Виберіть включені дані Мігрувати Копіювати Не вдалося завантажити розділи. Ви можете повторити спробу в розділі завантажень Знайдено нові розділи Не вдалось оновити обкладинку Будь ласка, додайте запис до своєї бібліотеки перед тим як робити це Вибрати обкладинку Виберіть файл резервної копії Завантажити Оновлень не виявлено Завантаження в процесі… Тицьніть для встановлення оновлень Помилка завантаження Доступна нова версія! Завантажень немає Без оновлень Останнім часом нічого не прочитано Ваша бібліотека порожня У вас немає категорій. Тицьніть кнопку плюс, для початку облаштування вашої бібліотеки. Завантажувач Помилка Невідома помилка при завантаженні розділу Немає Wi-Fi підключення Немає мережевого з`єднання Завантаження призупинено Звичайний Показувати дії при довгому натисканні Відкрити у WebView Пропускати розділи, відмічені як прочитані Режим накладання кольорового фільтру Оверлей множення Екран Світліше Темніше Допомога Нічого не знайдено Виберіть джерело, з якого потрібно мігрувати Назад Вперед Оновити Бібліотека Застарілий Це розширення більше не доступне. Воно може працювати невірно, а також викликати проблеми із застосунком. Рекомендується його видалити. Формат дати Глобальне оновлення Вихід із %1$s? Вихід Ви вийшли з системи Призупинено Ще Останній розділ Подивитись розділи Скасувати все Світла Темна Системна Керування сповіщеннями Безпека і конфіденційність Потрібно розблокувати Блокувати в режимі очікування Завжди Ніколи Захистити екран додатку Очікуються оновлення Відображати вміст обітнутої області Не вдалось обійти Cloudflare Будь ласка, оновіть WebView для кращої сумісності Оновлення розділів Ховати вміст застосунку при перемиканні застосунків та блокувати скріншоти Відображення Розділ %1$s Розділ %1$s та ще %2$d Розділи %1$s Приховати вміст сповіщень Вимкнути збереження батареї Допомагає фоновому оновленню бібліотеки та резервним копіям Збереження батареї вже вимкнено Електропошта Завжди показувати перехід розділу Меню Найновіші Найстаріші Перемістити догори Перемістити додолу Оновлення розширень Читання Джерела Оновлення бібліотеки Пропускати відфільтровані розділи Бічний відступ Довга смуга з проміжками Інвертувати вибір Додати відстеження Прикріплено Відкріпити Закріпити В бібліотеці Додати до бібліотеки Менше Більше WebView необхідний для роботи застосунку Ліцензії з відкритим кодом Сторінка Тільки завантажені Сірий Перевірити наявність нової обкладинки та подробиць при оновленні бібліотеки Автоматично оновлювати метадані Мігрувати За датою завантаження Посібник місцевого джерела Останній використаний Вкладки Фільтрувати усі записи в вашій бібліотеці Перевірити оновлення Не вдалось відкрити налаштування пристрою Оновити обкладинки в бібліотеці Дані Відновлення відмінено Відновлення бекапу не вдалось Відновлення вже відбувається Помилка резервування Резервне копіювання вже виконується %1$02d хв, %2$02d сек Відсутні джерела: Бекап не містить жодних записів бібліотеки. Невірний файл резервної копії: Одностороння синхронізація для оновлення прогресу розділу у зовнішніх сервісах стеження. Налаштуйте відстеження окремих записів за допомогою кнопки відстеження. Показувати вкладки категорій Зручна сітка Розд. %1$s - %2$s Режим читання Для цієї серії Сторінки не знайдено Вимкнути все Увімкнути все Стисло відобразити поточний режим, коли читалку відкрито Показати режим читання Розпочати Джерело не знайдено Відключити Обоє Вертикально Горизонтально Нічого Інвертувати зони тицяння Невідомий стан Невідомий автор Потрібен перезапуск застосунку, щоб зміни вступили в дію Мережа Оновлено до v%1$s Що новенького Не вдалось завантажити розділи через нестачу місця в сховищі Шукати \"%1$s\" глобально Режим читання Тема Дата додавання У вас немає закріплених джерел Помилки Завершено Прогрес Трекери не авторизовано: Дозволити видалення розділів з закладок Видалити розділи Джерела з цього розширення можуть містити контент NSFW (18+) 18+ Це не заважає неофіційним або потенційно невірним розширенням розміщувати вміст NSFW (18+) у застосунку. Немає розділів Налаштування розділу оновлено %1$s: %2$s, сторінка %3$d Зберегти налаштування Також застосувати для усіх записів в моїй бібліотеці Ви впевнені, що бажаєте зберегти ці налаштування як основні? Налаштування розділу Завантажені розділи З бібліотеки Налаштування пошуку Призупиняє історію читання Режим інкогніто Очистити історію Ви впевнені? Всю історію буде втрачено. Історію видалено Наступна сторінка Попередня сторінка Гайд по міграції джерел Застосунок вибору файлів не знайдено Будь ласка, увійдіть в MAL знову Показувати в списку джерел та розширень NSFW (18+) джерела Дата закінчення Дата початку Зберігає логи помилок до файлу для надсилання розробникам Поділіться журналами збоїв Зони тицяння Межа Kindle-подібна L-подібна За спаданням За зростанням За номером розділу За датою завантаження Відстежуване Показати кількість об\'єктів Праворуч та ліворуч Розділення широких сторінок Якщо розділення широких сторінок, не відповідає напрямку читання Інвертувати розділення широких сторінок Вам потрібно встановити розширення яких бракує та увійти в сервіси відстежування для їх використання. Зправа Зліва Наступний Попередній Короткочасно відобразити, коли читалку відкрито Оверлей зон дотику DNS поверх HTTPS (DoH) Записи в виключених категоріях не буде завантажено, навіть якщо вона також знаходиться у включених категоріях. Автозавантаження Виключати: %s Включати: %s Немає Записи в виключених категоріях не буде оновлено, навіть якщо вони також знаходяться у включених категоріях. Дата отримання розділу Тицьніть для перегляду подробиць Ця версія Android більше не підтримується Не вдалось скопіювати до буферу обміну Альбомна Портретна Орієнтація Створювати теки в відповідності до назви записів Зберігати сторінки до окремих тек Дії Відтінки сірого Вимкнути режим інкогніто Авто Скасувати для усієї серії Збігів не знайдено Джерело не підтримується Не прочитане Помилка відправлення обкладинки Помилка при збереженні обкладинки Обкладинку збережено Обкладинка Дата Сортувати за Невірний формат розділів Розділ не знайдено Гайд відстежування Вимкнено Увімкнено Налаштування сортування для кожної категорії Обмеження %s Локальне джерело У вашій бібліотеці ще немає категорій. У деяких виробників є додаткові обмеження застосунків, котрі вбивають фонові сервіси. На цьому сайті більше інформації з приводу того, як це виправити. Фонова активність Резервування/Відновлення можуть не працювати належним чином, у випадку, якщо вимкнено Оптимізацію MIUI. Надає розширені функції для конкретних джерел. Записи автоматично відстежуються при додаванні до бібліотеки. Розширені трекери Найнижча Низька Висока Найвища Чутливість приховування меню при прокручуванні Чистий чорний темний режим Йоцуба Інь та Янь Тако Полуничний Дайкірі Опівнічні Сутінки Зелене яблуко Динамічна Тема застосунку Розпочати завантаження зараз Інвертовано Сьогодні Бірюзова Виконайте автентифікацію, щоб підтвердити зміну Типово Вигляд Стежити Посібник з початку роботи Планшетний інтерфейс Допомогти з перекладом Встановлювач Shizuku не запущений Виключені категорії Всього записів Встановлюю розширення… Про застосунок Спадок Встановіть і запустіть Shizuku, щоб використовувати Shizuku як інсталятор розширення. Докладне журналювання Записувати докладні журнали до системного журналу (знижує продуктивність застосунку) Попередження: великі оновлення можуть призвести до сповільнення джерел або збільшити використання батареї. Тицьніть задля подробиць. Оновлення застосунку Попередження: великий об\'єм завантажень може призвести до сповільнення роботи джерел та/або блокуванню %s. Оновити все Ви повинні зберігати декілька резервних копій в інших місцях. Резервні копії можуть містити конфіденційні дані, включно зі збереженими паролями; будьте обережні, якщо ділитеся ними. Попередження Мова Що 3 дні Тільки через Wi-Fi Не вдалося отримати список розширень Очищати кеш розділів під час запуску застосунку %1$d небібліотечних записів у базі даних Немає чого очищувати Політика конфіденційності Пропустити непрочитаний(ні) розділ(и) Зберегти архів як CBZ Для допомоги в виправленні помилок оновлення бібліотеки, дивіться %1$s Публікація завершена Відмінено Заморожено Показати запис Сітка тільки з обкладинками Пропустити непочаті глави Перемістити серію на початок Портретна навпаки %1$d оновлення(нь) не вдалось Пропущено, оскільки серія завершена Пропущено через те, що є непрочитані розділи Пропущено, оскільки серія не почата Немає елементів у бібліотеці для резервування Сторінку %d не знайдено, при розділенні Покращує продуктивність читалки Дані WebView очищені Очистити дані WebView Читаю Заплановано Прочитано Відкладено Не закінчено Остання перевірка оновлень Кількість непрочитаного Скидує режим читання та орієнтацію всіх серій Лаванда Без опису Скинути налаштування читалки для кожної серії Скидання всіх налаштувань Користувацька обкладинка Не вдалось скинути налаштування Йой, трапилась халепа Не вдалось зберегти зображення Не встановлено Тільки в безлімітній мережі Встановлених джерел не знайдено Джерел не знайдено Вимкнено Тицьніть задля подробиць Не вдається відкрити останній прочитаний розділ Мова застосунку Версія Мова Вікові обмеження Не вдалось знайти шлях сторінки %d Панорамування широких зображень Автоматичне масштабування широких зображень Закрити Відкрити на GitHub InternalError: Перевірте журнал халеп задля додаткової інформації Чи бажаєте ви видалити категорію \"%s\"? Видалити категорію Переглянути нещодавно оновлені записи бібліотеки Віджет не доступний при ввімкненому блокуванні застосунку Типовий user agent Видалити все Скинути типовий user agent Багатомовне Останнє оновлення бібліотеки: %s Доступ до файлової системи не надано Завантажувати наперед Працює, якщо поточний розділ + наступний вже завантажені. Ви збираєтесь видалити \"%s\" з вашої бібліотеки Приливна Хвиля Ви впевнені? Оновлення вже розпочато Рядок User agent не може бути пустим Популярне Автоматичне завантаження під час читання %s зіткнулися з неочікуваною помилкою. Ми пропонуємо вам поділитися журналами збоїв у нашому каналі підтримки на Discord. Тема, формат дати та часу Категорії, глобальне оновлення, гортання розділів Режим читання, відображення, навігація Автоматичне завантаження, завантаження наперед Одностороння синхронізація прогресу, розширена синхронізація Джерела, розширення, глобальний пошук Ручне та автоматичне резервування, сховище Блокування застосунку, захист екрану Вивантаження журнала з помилками, оптимізація батареї Ой! Перезапустити застосунок Пропущено, оскільки серія не потребує оновлень Шукати… Неприпустиме місцезнаходження %s Невідомий тайтл Тільки що Невірне значення user agent Відкрити випадковий запис В цій категорії немає записів Перевірка завантажень Збірки F-Droid офіційно не підтримуються. \nТицьніть для того, щоб дізнатись більше. Змусити застосунок повторно перевірити завантажені розділи Кнопка \"Продовжити читання\" Видалити дату? Це призведе до видалення вибраної раніше дати початку з %s Це призведе до видалення раніше вибраної дати завершення з %s Переіндексація завантажень Тривалість читання Записи Всього Відстеження Відстежувані записи Н/П %dm Статистика Локально Завантажене Розпочате Огляд У глобальному оновленні Використано Завершені записи Прочитано Середня оцінка %dd %dh %ds Не зараз Відображення кількості непрочитаних на значку \"Нове\" Категорія порожня Скопійовано в буфер обміну Доступно, але джерело не встановлене: %s Пропуск повторюваних розділів %1$s помилка: %2$s *необхідно Приховати записи, які вже є в бібліотеці Копіювати в буфер обміну Оновити категорію Розділяти довгі зображення Оверлей Повернути широкі сторінки за розміром Перевернути орієнтацію обернутих широких сторінок Інформація для відлагодження Розділ при проведені пальцем вправоруч Розділ при проведені пальцем ліворуч Двічі торкніться, щоб збільшити Встановити інтервал Оцініть кожну Налаштувати інтервал оновленнь Передбачити наступний випуск Наступне очікуване оновлення Інтервали Налаштовано на оновлення кожної Пропущено, оскільки сьогодні не очікується жодного релізу ОК Також видалити з %s Видалити відстеження %s? Це видалить відстеження локально. Видалити завантажене Має результати Синхронізацію бібліотеки завершено Синхронізація бібліотеки Логін трекера Індекс завантажень недійсний Натисніть тут, щоб отримати допомогу з Cloudflare Не вдалося створити файл резервної копії Розблокувати %s Перемістити серію вниз Немає Інтернет-з\'єднання Http %d, перевірте вебсайт у WebView Не вдалося досягти %s Відносні позначки часу \"%1$s\" замість \"%2$s\" Налаштування джерела Налаштування застосунку Застосувати Повернути за замовчуванням Сканлейтор Оцінка трекера Дані та сховище Створити Ніколи Зменшує гостинг на e-ink екранах Востаннє автоматично зарезервовано: %s Перекладачів не знайдено Блимати екраном при зміні сторінки Використання сховища Оновлення бібліотеки... (%s) Файл не вибрано Виключити перекладачів Щоб встановити джерело розширеннь. Перевстановлюєте %s? Встановити дозволи додатка Потребуються дозволи для встановлення додатків. Натисніть сюди для отримання. Повна помилка: Включати конфіденційні налаштування (наприклад, токени для входу в трекери) Доступні: %1$s / Усього: %2$s Використання батареї на фоні Потрібно обрати папку Дозвіл на сповіщення Отримувати сповіщення про оновлення бібліотек та інше. Розумні оновлення У вас нема встановлених репозиторіїв. Додати репозиторій Репозиторії розширень Цей репозиторій вже існує! Посилання на репозиторій Додати додаткові репозиторії до %s. Це повинні бути посилання які закінчуються на \"index.min.json\". Нові розділи передбачено будуть випущені приблизно в %1$s, перевіряючи кожні %2$s. Оновлюєтесь з попередньої версії і не впевнені яку обрати? Перегляньте гайд по сховищу для додаткової інформації. Гайд по сховищу Своя частота оновлення: Північ Недійсне посилання на репозиторій Бажаєте видалити репозиторій \"%s\"? Не встановлено місце сховища Місце сховища Отримати Використовується для автоматичних бекапів, завантажень розділів, та локальних джерел. Незабаром Скинути довірені невідомі розширення Видалити репозиторій Репозиторій з відкритим початковим кодом Обрано Не обрано Більше опцій Навігація вгору Новачки у %s? Ми рекомендуємо переглянути стартовий гайд. Уникати переривань для довготривалих оновлень бібліотек, завантажень, та бекапів. Оберіть папку Вітаємо! Далі Пропустити Оберіть папку де %1$s буде зберігати збережені розділи, бекапи, та інше. \n \nРекомендуємо обрати окрему папку. \n \nОбрана папка: %2$s Почнемо Давайте для початку налаштуємо дещо. Ви завжди зможете змінити ці налаштування потім. Гайд новачка Додати у будь-якому разі Відбиток пальця для підпису ключа вже існує Репозиторій %1$s має такий самий відбиток ключа підпису, як і %2$s. \nЯкщо це очікувано, %2$s буде замінено, в іншому випадку зверніться до вашого обслуговуючого репозиторію. Переглянути майбутні оновлення Попередній місяць Замінити Власний профіль відображення Вимкнути зменшення масштабу Незабаром Наступний місяць Оновити прогрес коли главу помічено прочитаною Ця манґа завершена, або не має приблизної дати релізу. Випадково Надіслати анонімний звіт про помилку. Надіслати звіт про помилку Дозволити аналітику %1$s мс Аналітика та Звіти про помилки Копіювати посилання Надсилати анонімну інформацію про використання для покращення застосунку. Безпека Надсилання звітів про помилки та аналітику дозволить нам ідентифікувати та виправити недоліки, покращити працездатність та зробити майбутні оновлення більш актуальними для ваших потреб Видалити Розширення? Видалити Дійсно видалити \"%s\"? Пропустити завантаження копій прочитаних розділів Дійсно додати репозиторій \"%s\"? Автоматичний Монохромний режим Поведінка Примітки Редагувати примітки Непрочитані розділи Білий Білий і чорний Тривалість спалаху Блимайти кожну Блимайти з Позначати дублікат прочитаного розділу теж як прочитаний Після прочитання розділу Після отримання нового розділу Використовуйте застарілий декодер для читалки довгих сторінок Впливає на продуктивність. Увімкніть, якщо зменшення порогу растрового зображення не розв\'язує проблему з порожніми зображеннями Користувацький поріг апаратного растра Якщо читалка завантажує порожнє зображення, поступово зменшувати поріг.\nВибрано: %s Чорний За замовчуванням (%d) Резервне копіювання JSON не підтримується Файл резервної копії пошкоджено Трекери оновлено до розділу %d Оновити трекери до розділу %d? Бібліотеку експортовано Можливі копії Призупинити історію читання для розширення Відстежувати приватно Не вдалося отримати постійний доступ до теки. Програма може поводитися непередбачувано. Сподобалась частина, де… Репозиторії розширень Інструкції до наступних розділів Всі прочитані записи Відстежується приватно Відстежувати публічно Експортувати Художник Автор Список бібліотеки У вашій бібліотеці є записи зі схожою назвою.\n\nВиберіть запис для перенесення або просто додайте. Зберегти записи з прочитаними розділами ================================================ FILE: i18n/src/commonMain/moko-resources/uz/plurals.xml ================================================ %d toifa %d toifa Kecha %1$d kun oldin %1$s daqiqadan so\'ng %1$s daqiqadan so\'ng ================================================ FILE: i18n/src/commonMain/moko-resources/uz/strings.xml ================================================ Bõlimlarni kõrish Muqovani õzgartirish Kategoriyalar õrnatish Kategoriyani qayta nomlash Kategoriyalarni õzgartirish Kategoriya qõshish Kutubxonada toifalar yo\'q. Toifalar yaratish uchun «Qo\'shish» tugmasini bosing. Qõshish Õzgartirish Hammasini õchirish Hammasini yoqish Bibliotekani yangilash Õchirish Belgini olib tashlash Xatchõp Yuklash Oldingisini õqilgan deb belgilash Õqilmagan deb belgilash Õqilgan deb belgilash Teskari tanlov Hammasini tanlash Global qidirish Qidirish sozlamalari Qidirish Qõshilgan sana Eng oxirgi bõlim Oxirgi õqilgan Umumiy bõlimlar Alifbo ko\'rinishida Filtrni o\'chirish O\'qilmagan Xatchopda Filtr Menyu Sozlamalar Tarix Kuzatish Boblar Kutubxona yozuvlari Toifalar Sizning kutubxonangiz bo\'sh Yaqin vaqtda hech narsa o\'qilmagan Yangilanishlar yo\'q Yuklamalar yo\'q Yordam Qo\'shimchalar haqida ma\'lumot Qo\'shimchalar Kõchish Saqlash Manbalar Tarix Yangilanishlar Kutubxona Yuklash navbati Sozlamalar Kõproq Name Statistika Standart Boshlangan Foydalanuvchi Yuklangan Oʻchiq Jami qismlar Yoniq Oxirgi yangilanish tekshiruvi Ogohlantirish O\'zgartirishni tasdiqlash uchun autentifikatsiya qiling Kuzatilayotgan Qismlar sonini ko\'rsatish «Davom ettirish» tugmasi Pin Yuklab olish sanasi Eng eski Ko\'tarilish Pasayish O\'rnatish Saqlash Hozir ilovaga kirish iloji yo\'q Asosiy Rider Mavzu, sana va vaqt formati O\'qish rejimi, ko\'rinish, navigatsiya Bir tomonlama sinxronlash, kengaytirilgan sinxronlash Tizimdagidek Lavanda \"%s\" toifasini o\'chirishni hohlaysizmi? Oldingi bob Keyingi bob Ko\'chirish Foydalanuvchi manbaasi Til O\'chirish Saralash Eng yangi Yuklanmoqda… InternalError: Qo\'shimcha ma\'lumot uchun xatolar ro\'yhatini ko\'ring O\'chiq Yashil olma Mavzu Ilova qulflanishi, ekran himoyasi Bildirishnomalarni boshqarish Toifani o\'chirish O\'chirish Boshlash Brauzerda ochish WebView\'da ochish Orqaga Oldinga Manbaalar, kengaytmalar, global qidiruv Qo\'lbola va avtomatik zaxira nusxalar Sana formati Toshgan to\'lqin Yuklashni boshlash Qulay ko\'rinish O\'zgaruvchan Davom ettirish Oxirgi bob sanasi Ilova tili O\'qilmagan boblar Ko\'rsatish rejimi Barchasini bekor qilish Barchasini o\'chirish Ko\'rsatish Ixcham ko\'rinish Bekor qilish Yoniq Takrorlash Toifa yorliqlarini ko\'rish Yangilash Avto yuklash, oldindan yuklash Xatolar ro\'yhatini yuklash, quvvat sarfini optimizatsiyalash Pauza Qidirish… Bo\'shatish Ushbu qism uchun barchasini bekor qilish Bob soni Boshiga Qismni boshiga ko\'chirish Ko\'rsatish Yuklamalar Kuzatilayotgan Ma\'lumot Ilova mavzusi Yarim tungi oqshom Qulupnayli Daikiri In va Yang Yotsuba Kutubxona Yopish Qismni ko\'rsatish Hozir emas Firuz Biometrik qulflash Tiklash Oxiriga Ulashish Tashlash Bekor qilish Xavfsizlik Qop-qora qorong\'u rejim Tasodifiy qismni ochish Ro\'yhat Nomsiz ko\'rinish Yuklab olingan boblar Logni ochish Tafsilotlarni ko\'rish uchun bosing Tako Qo\'shimcha Toifalar, global yangilanish Ishlamayotganda qulflash Doim Bildirishnoma mazmunini yashirish Ilova ekrani himoyasi Manbaa va kengaytmalar ro\'yhatida ko\'rsatish Bu, ilovada norasmiy yoki noto\'g\'ri belgilangan kengaytmalardan NSFW (18+) kontent paydo bo\'lishini oldini olmaydi. Bugun Ko\'rsatish Qismlar soni Qism boshlanmagan Kutubxona yangilanishida yangi muqova va ma\'lumotlarni tekshirish Doim so\'rash Har toifa o\'z sozlamasiga ega Cheklangan toifalardagi qismlar yangilanmaydi, yoniq toifalarga kirsaham. Yo\'q Ko\'p tilli Yangilanishlar mavjud Ishonchsiz kengaytma Ishonchsiz Bu kengaytma ishonchsiz sertifikat tomonidan imzolangan va faollashtirilmagan. \n \nZararli kengaytma Mihonda saqlanadigan barcha hisobga kirish ma\'lumotlarini o\'qishi, yoki ixtiyoriy kodni bajarishi mumkin. \n \nBu sertifikatga ishonish orqali, ushbu xavflarni qabul qilasiz. Agar keng sahifalarning bo\'linishi o\'qish yo\'nalishiga mos kelmasa To\'liq ekran rejimi Keng sahifalarni bo\'lish Keng sahifalarni teskarisiga ajratish Chetlarini kesish Rang filtri rejimi Barchasi O\'qilmagan boblar soni «Yangilanishlar» ikonida Kutilmoqda Yuklanmoqda O\'rnatilmoqda Bu kangaytma boshqa mavjud emas. U noto\'g\'ri ishlashi, va ilovada muammolar keltirib chiqarishi mumkin. Kengaytmalar ro\'yhatini olib bo\'lmadi NSFW (18+) manbaalari Ilova himoyasi dasturlar orasida almashishda ilova ekranini yashiradi, va skrinshot qilish imkonini cheklaydi O\'qilmagan bob(lar) bor Yangilash 18+ Sahifa raqamini ko\'rsatish Har 6 soatda Navigatsiya Landshaft Har 2 kunda O\'chirish Cheklovlar: %s Har 12 soatda Shizukudan kengaytma o\'rnatishda foydalanish uchun, Shizukuni o\'rnating va ishga tushuring. Ishonchli Har hafta HAr 3 kunda Quvvatlanayotganda Shizuku ishlamayapti Filtrlangan boblarni o\'tkazib yuborish O\'qilgan boblarni o\'tkazib yuborish Qoraytirish Foydalanuvchi rang filtri Hech qachon O\'qish boshlanganida o\'qish rejimini birozga ko\'rsatish Qism yakunlangan Kengaytma o\'rnatilmoqda… Global yangilanish Metama\'lumotlarni yangilash Istisno qilish: %s Standart O\'qish boshlanishida birozga ko\'rsatish Teginish hududlari O\'rnatuvchi Sahifalar o\'tishini animatsiyalash Asosiy toifalar Barchasini yangilash Eskirgan O\'rnatish Ilova haqida Teskari ranglar Ushbu kengaytma manbaalarida NSFW (18+) bo\'lishi mumkin Faqat Wi-Fi orqali Til Portret Har kun Avtomatik yangilanish O\'chiq Kulrang Yoritish Ekranni o\'chirmaslik O\'rnatildi Versiya Ikki marta bosilganda animatsiya tezligi Foydalanuvchi tanlagan yoruqlik Yosh cheklovi Faqat cheksiz tarmoq orqali O\'z ichiga oladi: %s Kesilgan maydondagi ma\'lumotni ko\'rsatish O\'qish rejimini ko\'rsatish Qoplama Ko\'paytirish Ekran Uskuna uchun avtomatik yangilanishlarni cheklash Takrorlanuvchi boblarni o\'tkazib yuborish Sahifalarni alohida papkalarga saqlash Gorizontal Vertikal Ikkala taraf Amallar Uzoq teginishda ko\'rsatiladigan variantlar Vebtun Tegish qismlari Chap O\'ng O\'ngdan chapga Vertikal L-simon Orqa fon rangi Teskari ovoz tugmalari Qora Avtomatik O\'chirilgan Oldingi Uzluksiz vertikal Sahifabay Oq Yo\'q Qism nomiga asoslanib papka yaratish Keyingi Chapdan o\'ngga Ovoz tugmalari Kulrang O\'qish rejimi Kindle-simon Chekkalar O\'ng va chap Ekranga sig\'dirish Cho\'zish Eniga Animatsiyasiz Normal Tez Standart aylanish Eng baland Baland K A O\'qilgan bobdan to\'rtinchisi O\'qilgan bobdan beshinchisi Avto-yuklash Yangi boblarni yuklash Aylanish turi Tizim Q Eng past Landshaft Teskari portret Boblarni o\'chirish Noto\'g\'ri joylashuv: %s Past «O\'qilgan» deb belgilangandan so\'ng o\'chirish Avtomatik Portret O\'zgarmas portret Aylantirish vaqtida menyu yashirish sezuvchanligi O\'zgarmas landshaft Kattalashtirish O\'qib bo\'lingandan so\'ng o\'chirish Oxirgi o\'qilgan bob Oxiridan oldingi o\'qilgan bob Tasvirni gorizontal kattalashtirish Y O\'chirilgan Chapdan Istisno qilingan toifalar Keng rasmlarga teginishda panoramalash Original o\'lcham Kattalashtirishning boshlang\'ich pozitsiyasi Aqlli O\'ngdan Markazda Boblar aro o\'tish O\'qish rejimi O\'qish Uzunasiga Yon bo\'shliq Xatchopli boblarni o\'chirish O\'qilgan bobdan uchinchisi ================================================ FILE: i18n/src/commonMain/moko-resources/vi/plurals.xml ================================================ Có %d bản cập nhật cho các tiện ích mở rộng sẵn sàng %1$d chương mới có Cho %d chương Sau %1$s phút %d danh mục Chương %1$s và %2$d Đã bỏ qua %d chương, vì nguồn đang bị thiếu hoặc đã bị lọc ra %d bộ theo dõi %1$s chương Còn lại %1$s Hoàn tất trong %1$s với %2$s lỗi %1$d ngày trước %d chương chưa đọc tiếp %d Chương tiếp theo Đang thiếu %1$s chương %d ngày %d kho Trong %1$d ngày %1$s trang Di chuyển %1$d mục? Sao chép %1$d mục? %1$d mục được bỏ qua ================================================ FILE: i18n/src/commonMain/moko-resources/vi/strings.xml ================================================ Tên Cài đặt Hàng chờ tải xuống Thư viện Lịch sử Cập nhật Sao lưu và khôi phục Cài đặt Bộ lọc Đã đánh dấu Chưa đọc Bỏ bộ lọc Theo bảng chữ cái Đã đọc gần nhất Tìm kiếm Chọn tất cả Đánh dấu là đã đọc Đánh dấu là chưa đọc Đánh dấu các chương trước là đã đọc Tải xuống Đánh dấu chương Bỏ đánh dấu chương Xóa Cập nhật thư viện Sửa Thêm Thêm danh mục Chỉnh sửa danh mục Đổi tên danh mục Đặt danh mục Sửa ảnh bìa Tạm dừng Chương trước Chương sau Thử lại Gỡ bỏ Tiếp tục Mở trong trình duyệt Chế độ hiển thị Hiển thị Lưới thu gọn Danh sách Hủy Sắp xếp Cài đặt Chia sẻ Lưu lại Làm mới Hoàn tác Đang tải… Chung Trình đọc Tải xuống Theo dõi Nâng cao Giới thiệu Số mục trên mỗi hàng Dọc Ngang Tự động cập nhật Tắt Mỗi 6 tiếng Mỗi 12 tiếng Mỗi ngày Mỗi 2 ngày Tất cả Những hạn chế cập nhật thiết bị tự động Khi đang sạc Có trạng thái \"Đã hoàn thành\" Cập nhật tiến triển sau khi đọc Toàn màn hình Hoạt ảnh chuyển trang Hiện số trang Độ sáng tùy chỉnh Bộ lọc màu tùy chỉnh Giữ màn hình bật Điều hướng Phím âm lượng Màu nền Trắng Đen Kiểu đọc mặc định Phân trang (trái sang phải) Phân trang (phải sang trái) Phân trang (chiều dọc) Cuộc dọc Kiểu tỉ lệ Vừa màn hình Kéo dãn Vừa chiều ngang Vừa chiều dọc Kích thước gốc Tùy chỉnh thông minh Phóng to vị trí bắt đầu Tự động Trái Phải Giữa Kiểu xoay mặc định Tự do Khoá theo chiều dọc Khoá theo chiều ngang Đỏ Xanh lá Xanh lam Độ mờ đục Sau khi đánh dấu thủ công là đã đọc Tự động xóa sau khi đọc Vô hiệu hóa Chương đã đọc gần nhất Hai chương đã đọc gần nhất Ba chương đã đọc gần nhất Bốn chương đã đọc gần nhất Năm chương đã đọc gần nhất Tải chương mới Dịch vụ Dọn dẹp bộ nhớ đệm Đã sử dụng: %1$s Bộ nhớ đệm đã được dọn dẹp, đã xoá %1$d tập tin Lỗi xảy ra trong khi xóa Dọn dẹp thông tin lưu trữ Thông tin lưu trữ đã được xóa Dọn dẹp cơ sở dữ liệu Xóa lịch sử đọc truyện và các chương không nằm trong thư viện Các mục đã bị xóa Phiên bản Gửi báo cáo lỗi Giúp đỡ sửa lỗi. Sẽ không có thông tin nhạy cảm nào được gửi đi Đăng nhập vào %1$s Tên đăng nhập Mật khẩu Đăng nhập Đăng nhập thành công Lỗi không xác định Cập nhật danh mục Không có thêm kết quả nào Đang tiến hành Không rõ Đã được mua bản quyền Gỡ bỏ khỏi thư viện Chương %1$s Đang tải xuống (%1$d/%2$d) Lỗi Đã tạm dừng Tiêu đề nguồn Số chương Theo nguồn truyện Theo số chương Tải xuống Chưa đọc Bạn có chắc muốn xóa các chương đã chọn? Theo dõi Đang đọc Đã hoàn thành Đã dừng Đang đọc Dự định sẽ đọc Điểm số Tiêu đề Trạng thái Các chương Tên danh mục này đã tồn tại! Danh mục đã bị xóa Sẽ xóa ngày đọc các chương. Bạn chắc chứ? Làm mới mọi chương của truyện này Thêm truyện vào thư viện? Đã lưu ảnh Bộ lọc tùy chỉnh Đặt làm ảnh bìa Đã cập nhật ảnh bìa Trang: %1$d Không tìm thấy chương kế tiếp Hình ảnh không thể hiển thị được Bạn có chắc muốn đặt ảnh này làm ảnh bìa? Có lỗi đã xảy ra khi đang tải các chương. Bạn có thể thử lại trong phần Tải xuống Đã tìm thấy chương mới Cập nhật ảnh bìa thất bại Hãy thêm truyện vào thư viện trước khi thực hiện Chọn ảnh bìa Chọn file sao lưu Tải xuống Không có cập nhật mới Đang tải xuống… Nhấn để cập nhật Lỗi khi tải xuống Có cập nhật mới! Không có Không có cập nhật mới Không có truyện đã đọc gần đây Thư viện trống Trình tải xuống Lỗi Đã xảy ra lỗi khi tải xuống chương này Không có kết nối Wi-fi Không có kết nối mạng Tải xuống đã tạm dừng Hạng mục Truyện trong thư viện Theo dõi Lịch sử Di chuyển Phần mở rộng Thông tin chi tiết Tổng số chương Tìm kiếm toàn bộ Tải các chương Nhật ký mở Khôi phục Ứng dụng không có sẵn Mỗi tuần Danh mục mặc định Luôn hỏi Cập nhật Cài đặt Đang chờ xử lý Đang tải Đang cài đặt Đã cài đặt Đáng tin cậy Không đáng tin cậy Gỡ cài đặt Tiện ích mở rộng không đáng tin cậy Các tiện ích mở rộng độc hại có thể đọc mọi thông tin đăng nhập được lưu trữ hoặc thực thi mã tùy ý. \n \nBạn sẽ chấp nhận những rủi ro khi tin tưởng tiện ích mở rộng này. Tốc độ nhấn đúp hình ảnh động Cắt viền Đảo ngược phím âm lượng Trang Không có hiệu ứng Bình thường Nhanh Tạo bản sao lưu Có thể sử dụng để khôi phục thư viện hiện tại Khôi phục sao lưu Khôi phục thư viện từ tập tin sao lưu Lịch sao lưu Sao lưu đã được tạo Khôi phục hoàn tất Bạn có muốn sao lưu không? Khôi phục sao lưu Đang tạo bản sao lưu Nguồn cục bộ Khác Tìm kiếm toàn bộ… Mới nhất Duyệt Đã thêm vào thư viện Đã xóa khỏi thư viện Muốn xóa các chương đã tải? Đã sao chép vào bảng tạm: \n%1$s Nguồn truyện không thể cài đặt: %1$s Đọc lại Trạng thái Loại Đã đọc xong: Đang đọc: Chương kế: Chương trước: Không có chương tiếp theo Không có chương trước đó Đang tải trang… Tải trang thất bại: %1$s Chọn dữ liệu bao gồm Di chuyển Sao chép Không có danh mục. Nhấn vào dấu cộng để tạo một nhóm từ thư viện. Thường gặp Nhấn giữ để mở mục hành động Mở bằng WebView Bỏ qua chap đã đọc Chế độ hòa trộn bộ lọc màu Phủ lên Nhân Trợ giúp Không tìm thấy kết quả nào Chọn 1 nguồn để di chuyển từ Cập nhật tiện ích mở rộng Vui lòng cập nhật WebView để tương thích tốt hơn Bỏ qua Cloudflare thất bại Chương %1$s Đang cập nhật thư viện Đã tạm ngưng Bạn đã đăng xuất Đăng xuất tài khoản Đăng xuất khỏi %1$s? Địa chỉ email Tối ưu pin đã được tắt Giúp cập nhật và sao lưu thư viện nền Tắt tối ưu pin Đang đọc Luôn hiển thị chuyển tiếp chương Bỏ qua các chương đã lọc Màn hình Hiển thị nội dung ở phần rìa Phần mở rộng này không khả dụng. Nó có thể không chạy và có thể gây ra lỗi với Mihon. Kiến nghị nên Gỡ cài đặt. Lỗi thời Đang chờ cập nhật Cập nhật toàn bộ Hiển thị Ẩn nội dung thông báo Bảo vệ màn hình sẽ ẩn nội dung khi chuyển đổi ứng dụng và chặn chụp màn hình Bảo vệ màn hình Không bao giờ Luôn luôn Khóa khi chạy nền Khóa ứng dụng Bảo mật và quyền riêng tư Quản lý thông báo Định dạng ngày Hệ thống Tối Sáng Thư viện Làm mới Chuyển tới trước Trở lại Di chuyển xuống cuối Di chuyển lên đầu Cũ nhất Mới nhất Huỷ bỏ tất cả Xem các chương Đảo ngược lựa chọn Chương mới nhất Mục chính Nguồn Thêm Đồng bộ một chiều để cập nhật tiến trình chương trong các dịch vụ theo dõi. Thiết lập theo dõi cho các truyện riêng lẻ từ nút theo dõi. Kiểu đọc Cuộc dọc có khoảng cách Hiển thị ngắn gọn chế độ hiện tại khi mở trang đọc truyện Hiển thị chế độ đọc Kiểm tra ảnh bìa và chi tiết khi cập nhật thư viện Chủ đề Bỏ ghim Ghim Tắt Hiện các thẻ danh mục Lưới Chuyển Bắt đầu Tắt tất cả Bật tất cả Ngày thêm Bản sao lưu không chứa truyện nào. Tệp sao lưu không hợp lệ: Thêm vào thư viện Nguồn truyền từ tiện ích mở rộng này có thể chứa nội dung NSFW 18+ 18+ Tự động làm mới bộ siêu dữ liệu Điều này không ngăn các tiện ích mở rộng không chính thức hoặc có khả năng bị gắn cờ không chính xác hiển thị nội dung NSFW (18+) trong ứng dụng. Chỉ hiện truyện đã tải Hướng dẫn di chuyển nguồn Cài đặt tìm kiếm Sao lưu đang trong quá trình thực hiện Bạn có chắc không? Tất cả lịch sử sẽ bị xoá. Truyện trong danh mục bị loại trừ sẽ không được cập nhật. Ngày kết thúc Chế độ làm sáng lên Chế độ làm tối đi Từ thư viện Các chương đã tải Yêu cầu khởi động lại ứng dụng để có hiệu lực Dạng góc cạnh Dạng giống Kindle Dạng chữ L Khu vực nhấn Lịch sử đã được xoá Xoá lịch sử Xin hãy đăng nhập lại MAL Ngày bắt đầu Chế độ ẩn danh Làm mới ảnh bìa trong thư viện Chia sẻ tệp báo lỗi tạm Lưu thông tin lỗi và gửi về nhà phát triển Dừng lưu giữ lịch sử đọc Không tìm thấy ứng dụng chọn tệp Trang trước Trang tiếp theo Cập nhật chương Đã cập nhật tuỳ chỉnh mặc định cho chương Lỗi Hoàn thành Quá trình Mihon yêu cầu phải có WebView Phiên bản Android này không còn được hỗ trợ Chương %1$s Chương %1$s và thêm %2$d Không thể tãi chương vì dung lượng bộ nhớ xuống thấp Ch.%1$s-%2$s Nguồn không tìm thấy Trang không tìm thấy Chế độ đọc Dành cho phần truyện này %1$s:%2$s,trang %3$d Thêm theo dõi Không tìm thấy chương Đặt mặc định Ngoài ra có hiệu lực với tất cả truyện trong thư viện Bạn có chắc chắn muốn lưu lại tuỳ chỉnh này hay không? Tuỳ chỉnh chương Bởi ngày đăng Sao chép vào bảng tạm thất bại Hiện bớt Xem thêm Trong thư viện Không rõ trạng thái Không rõ tác giả Đã ghim Sử dụng lần cuối Bạn không có nguồn được đánh dấu Hướng dẫn nguồn cục bộ Tìm kiếm \"%1$s\" toàn bộ Mục Lọc tất cả truyện trong thư viện Tắt chế độ ẩn danh Được cập nhật đến phiên bản v%1$s Kiểm tra cập nhật Mở giấy phép nguồn mở Có gì mới Trang chủ Không thể mở tuỳ chỉnh thiết bị Dữ liệu DNS qua HTTPS (DoH) Mạng Quá trình khôi phục đã bị ngắt Khôi phục thất bại Đang trong quá trình phục hồi Lưu trữ thất bại %1$02d phút, %2$02d giây Bạn sẽ cần cài đặt bất kỳ tiện ích mở rộng nào bị thiếu rồi đăng nhập vào các dịch vụ theo dõi để sử dụng chúng. Bộ theo dõi chưa được đăng nhập vào : Nguồn không tìm thấy : Truyện trong các danh mục bị loại trừ sẽ không được tải xuống. Tự động tải xuống Cho phép xóa các chương đã đánh dấu Xoá chương Kích cỡ hai bên Chế độ nằm ngang Chế độ dọc Kiểu xoay Phải Trái Tiếp theo Trước Phải và trái Tự động Xám Tạo thư mục dựa theo tên truyện Lưu lại trang trong thư mục riêng Hành động Cả hai Dọc Ngang Không Đảo ngược khu vực nhấn Ảnh đen trắng Nếu vị trí của phần tách trang rộng không khớp với hướng đọc Đảo ngược vị trí tách trang Chia các trang đôi Hiển thị ngắn gọn các vùng chạm khi trình đọc được mở Hiển thị lớp phủ khu vực nhấn Loại trừ:%s Bao gồm: %s Không có Hiện số truyện Nguồn NSFW (18+) Hiển thị trong các danh sách nguồn và tiện ích mở rộng Chạm để xem toàn bộ chi tiết Giảm dần Tăng dần Theo số chương Theo ngày đăng Ngày nhập chương Đã theo dõi Hủy bỏ tất cả cho phần truyền này Truyện cục bộ Không tìm thấy chính sác Nguồn không còn được hỗ trợ Chưa đọc Lỗi khi chia sẻ ảnh bìa Lỗi khi lưu ảnh bìa Đã lưu ảnh bìa Ảnh bìa Ngày Xếp theo Định dạng chương hợp lệ Không tìm thấy chương Bật Tắt Hạn chế: %s Người dùng chưa có danh mục. Tính năng tối ưu hóa của MIUI phải được bật lên để việc sao lưu/khôi phục hoạt động tốt. Chủ đề: Táo Xanh Chủ đề: Động Chủ đề ứng dụng Bắt đầu tải xuống ngay Chủ đề: Hoàng Hôn Giữa Đêm Chủ đề: Daiquiri Dâu Tây Chủ đề: Tako Chủ đề: Âm & Dương Chủ đề: Yotsuba Chế độ đen tuyền Tùy chỉnh mỗi danh mục cho sắp xếp Hướng dẫn theo dõi Dịch vụ nâng cao Dịch vụ cung cấp các tính năng nâng cao cho các nguồn cụ thể. Truyện sẽ tự động theo dõi khi được thêm vào thư viện của bạn. Một vài nhà sản xuất có các hạn chế về việc chạy ngầm của ứng dụng có thể gây dừng hiện thị dịch vụ nền. Xem thêm ở địa chỉ này để sửa chữa chúng. Chủ đề: Xanh lam & Xanh ngọc Giao diện Xác nhận thay đổi Mặc định Theo dõi Các thể loại bị loại trừ Độ nhạy cho phần tự ẩn mục chính khi kéo cuộn Hướng dẫn sử dụng khởi đầu Giao diện máy tính bảng Hoạt động nền Thấp nhất Thấp Cao Cao nhất Đảo màu Hôm nay Hỗ trợ dịch thuật Thông tin ứng dụng Cài và chạy Shizuku để sử dụng Shizuku như một trình cài đặt tiện ích mở rộng. Tổng số truyện Cảnh báo Trình cài đặt Shizuku đang không chạy Ghi nhật ký chi tiết Ngôn ngữ Bạn nên giữ lại bản sao của sao lưu ở các nơi khác nữa. In các ghi chép tường tận đến cả ghi chép hệ thống ( giảm hiệu suất ứng dụng ) Các bản cập nhật lớn sẽ gây hại cho các nguồn và có thể dẫn đến các bản cập nhật chậm hơn và cũng làm tăng mức sử dụng pin. Nhấn vào để tìm hiểu thêm. Đang cài đặt tiện ích mở rộng… 3 ngày một lần Chỉ qua Wi-Fi Cảnh báo: các tải xuống hàng loạt lớn có thể dẫn đến các nguồn trở nên chậm hơn và / hoặc chặn %s. Nhấn vào để tìm hiểu thêm. Cập nhật ứng dụng Cập nhật tất cả Xóa bộ nhớ đệm các chương khi tắt ứng dụng %1$d truyện ngoài thư viện có trong cơ sở dữ liệu Không có gì để dọn Không tải được danh sách tiện ích mở rộng Chính sách quyền riêng tư Có chương chưa đọc Đã hoàn thành xuất bản Đã ngưng Đang tạm ngưng Để được trợ giúp về cách sửa lỗi cập nhật thư viện, hãy xem %1$s Lưu dưới dạng lưu trữ CBZ Chưa bắt đầu đọc Nhấn để tìm hiểu thêm Phóng ảnh phong cảnh tự động Hiển thị truyện Xoay ảnh rộng Lưới chỉ mỗi bìa Đảo ngược chân dung %1$d cập nhật thất bại Đã bỏ qua vì bộ truyện đã hoàn thành Đã bỏ qua vì vẫn còn chương chưa đọc Đã bỏ qua vì chưa chương được đọc Di chuyển bộ truyện lên đầu Tắt Lỗi khi lưu ảnh Đóng Không có nguồn đã cài tìm thấy Không có nguồn nào được tìm thấy Mở trên GitHub Không có mục thư viện nào để sao lưu Dữ liệu WebView đã được xóa Xóa dữ liệu WebView Chỉ trên mạng lưới không hạn định Truyện cập nhật gần đây Số lượng chưa đọc Cải thiện khả năng đọc bằng việc cắt nhỏ các ảnh quá dài Tất cả cài đặt đọc đã được cài lại Không thể cài lại cài đặt đọc Chuỗi đại diện người dùng mặc định Danh sách chưa hoàn thành Không thể mở lại chương truyện trước Xóa thể loại Lỗi nội bộ: Kiểm tra nhật ký bị ngắt ứng dụng để biết thêm thông tin Oải Hương Ngôn ngữ ứng dụng Phiên bản Ngôn ngữ Cài lại chế độ đọc và điều hướng của tất cả các bộ truyện Cài lại cài đặt đọc từng bộ truyện Ờ thì, nó lạ lắm Chưa được cài Danh sách đang đọc Danh sách hoàn thành Danh sách đang chờ Danh sách muốn đọc Trang %d không thể được tìm thấy khi chia cắt Phân loại độ tuổi Không thể tìm thấy đường dẫn của trang %d Cài lại chuỗi đại diện người dùng mặc định Không có mô tả Bạn có muốn xóa thể loại \"%s\"? Tùy chỉnh ảnh bìa Tiện ích không còn khả dụng khi khóa ứng dụng đang bật Xem các bộ truyện được cập nhật gần đây Loại bỏ tất cả mọi thứ Có một cập nhật đang chạy sẵn Sóng Thủy Triều Chuỗi đại diện người dùng không thể bỏ trống Tự động tải khi đang đọc Quyền truy cập lưu trữ không được thông qua Nổi Tiếng Bạn chắc chứ? Bạn sẽ xóa bỏ \"%s\" này ra khỏi thư viện của bạn Thư viện lần cuối được cập nhật:%s Tải Trước Tải trước chỉ áp dụng cho các mục ở trong thư viện và nếu chương cuối cùng đã được tải rồi. Đa Ngôn Ngữ Bỏ qua vì loạt truyện không cần cập nhật Tìm kiếm… Chủ đề, kiểu hiển thị ngày & giờ Danh mục, cập nhật toàn bộ, vuốt chương Dạng đọc, hiển thị, điều hướng Tự động tải xuống, tải xuống trước Sao lưu thủ công & tự động Khoá ứng dụng, bảo vệ màn hình Tệp báo lỗi tạm, tối ưu hoá pin Đồng bộ tiến trình đọc, đồng bộ nâng cao Nguồn, tiện ích, tìm kiếm toàn bộ Nút tiếp tục đọc Mở một truyện ngẫu nhiên Vị trí không hợp lệ: %s Thống kê Đã tải xuống Nội bộ Tổng số chương Đã đọc Không có gì trong danh mục này Tổng quát Truyện đã đọc Truyện Thời gian đọc Đang tiến hành Điểm trung bình Ngay bây giờ Buộc ứng dụng kiểm tra lại các chương đã tải xuống Tổng cập nhật Đã theo dõi Theo dõi Tổng theo dõi Khởi động lại ứng dụng Hiển thị số chương chưa đọc Chuỗi tác nhân người dùng không hợp lệ Tiêu đề không xác định Thao tác này sẽ xóa ngày bắt đầu đã chọn trước đó của bạn khỏi %s Ôi trời! Thao tác này sẽ xóa ngày kết thúc đã chọn trước đó của bạn khỏi %s Hạng mục trống Lập chỉ mục tải xuống Lúc khác Bản dựng F-Droid không được hỗ trợ chính thức. \nNhấn để tìm hiểu thêm. Bỏ qua chương đúp Có sẵn nhưng nguồn không được cài đặt: %s Ngày %d Tách ra những hình ảnh dài Giấu những truyện đã có trong thư viện %d phút Đang kiểm tra những truyện đã tải xuống %s đã có lỗi. Bạn nên chia sẻ tệp báo lỗi tạm ở trong kênh hỗ trợ của chúng tôi trên Discord. Cập nhật danh mục Đã sao chép vào bảng tạm Sao chép vào bảng tạm %d giây %d giờ Quay những trang rộng để vừa màn hình Lật hướng của các trang rộng đã xoay Phủ lên Loại bỏ ngày? %1$s Lỗi: %2$s N/A *bắt buộc Nhấn đúp để phóng to Chương khi vuốt sang phải Chương khi vuốt sang trái Thông tin gỡ lỗi Không thể tạo tệp sao lưu Đặt khoảng thời gian OK Đồng bộ thư viện Hoàn tất đồng bộ hóa thư viện Xóa các chương đã tải xuống Khoảng thời gian cập nhật tùy chỉnh Cập nhật dự kiến tiếp theo Nhấn vào đây để được trợ giúp về Cloudflare Chưa công bố Mở khoá %s Cài đặt nguồn Cài đặt ứng dụng Vị trí kho chứa Tạo Không bao giờ Chọn một thư mục Giảm tình trạng bóng ma trên màn hình e-ink Hướng dẫn làm quen Được sử dụng để sao lưu tự động, tải chương và nguồn cục bộ. Mới với %s sao? Chúng tôi khuyên bạn nên xem hướng dẫn bắt đầu. Bắt đầu Áp dụng Đặt để cập nhật mỗi Phải chọn một thư mục Quyền thông báo Đoạn thời gian Chỉnh về mặc định Cài đặt quyền ứng dụng Xin chào! Thêm tùy chọn Lần cuối cùng tự động lưu: %s Đã sử dụng %s từ trước rồi sao? Được chọn Không tìm thấy nhóm dịch nào Chưa chọn Di chuyển bộ truyện xuống cuối Nhóm dịch Bỏ qua Làm mới màn hình khi đổi trang Tránh gián đoạn quá trình cập nhật thư viện, tải xuống và khôi phục bản sao lưu trong thời gian dài. Mất kết nối mạng Kho chứa chiếm dụng Tiếp Sử dụng pin nền Để cài đặt nguồn mở rộng. Đang cập nhật thư viện… (%s) Tái tạo chỉ mục tải xuống Điều hướng trên Trước tiên hãy thiết lập một số thứ nhé. Bạn có thể tùy ý chỉnh lại những cài đặt này lại sau. Điểm bộ theo dõi Chưa đặt vị trí kho chứa Dữ liệu và kho chứa Bỏ qua vì dự kiến hôm nay không có bản phát hành nào Gửi thông báo khi thư viện cấp nhật và nhiều hơn thế. Không có tập tin được chọn Xóa bộ theo dõi %s? Đồng thời xóa khỏi %s Có kết quả Ước tính mỗi Điều này sẽ loại bỏ bộ theo dõi cục bộ. Đăng nhập bộ theo dõi Cho phép Chọn thư mục nơi mà %1$s sẽ chứa chương truyện tải xuống, sao lưu, và những thứ khác. \n \nKhuyến khích sử dụng một thư mục chuyên dụng. \n \nThư mục được chọn: %2$s Mốc thời gian liên quan HTTP %d, kiểm tra trang web trong WebView \"%1$s\" thay vì là \"%2$s\" Không thể truy cập %s Loại trừ nhóm dịch Các chương mới được dự đoán sẽ phát hành trong khoảng %1$s, kiểm tra vào khoảng %2$s. Hiện có: %1$s / Tổng cộng: %2$s Mã lỗi đầy đủ: Cần phải cấp phép để cài đặt tiện ích mở rộng. Bấm đây để cấp. Bao gồm những cài đặt nhạy cảm (ví dụ như token đăng nhập tracker) Luôn luôn thêm Phương bắc Tùy chọn bỏ qua cập nhật Sắp tới Cập nhật từ phiên bản cũ hơn và không biết nên chọn gì? Tham khảo hướng dẫn để biết thêm thông tin. Thêm nguồn bổ sung vào %s. Địa chỉ URL này cần phải kết thúc với \"index.min.json\". Kho lưu trữ %1$s có Dấu vân tay Khóa ký giống hệt như %2$s. \nNếu điều này là dự kiến, %2$s sẽ bị thay thế. Nếu không, vui lòng liên hệ với người quản lý kho lưu trữ của bạn. Bạn chưa có nguồn nào. Thu hồi quyền truy cập của tiện ích không xác định Thêm nguồn Nguồn đã có rồi! Xóa nguồn Hướng dẫn Quản lý nguồn URL nguồn không hợp lệ URL nguồn Bạn có muốn xóa nguồn \"%s\"? Mở nguồn Sớm Tần suất cập nhật tùy chỉnh: Tùy chỉnh hồ sơ màn hình Tắt thu nhỏ Xem các cập nhật sắp tới Hướng dẫn sắp tới Tháng tiếp theo Tháng trước Thay thế Dấu vân tay cho khóa ký đã được tạo trước đó Sao chép liên kết Manga này đã hoàn thành hoặc chưa có ngày phát hành dự kiến. %1$s ms Làm mới sau Làm mới bằng Nền đen Nền trắng Nền trắng và Nền đen Kho lưu tiện ích mở rộng (repo) Bạn có muốn thêm repo \"%s\" không? Độ dài làm mới Bỏ qua tải xuống các chương đã đọc bị trùng Sao lưu JSON không được hỗ trợ Tệp sao lưu bị hỏng Cập nhật theo dõi từ chương %d? Không thể liên tục truy cập thư mục. Ứng dụng có thể hoạt động bất thường. Ngẫu nhiên Gửi nhật ký sự cố (crash log) Cho phép phân tích dữ liệu Gửi dữ liệu sử dụng ẩn danh để cải thiện các tính năng của ứng dụng. Bảo mật Phân tích và Nhật ký sự cố Gửi nhật ký sự cố và phân tích, giúp nhà phát triển xác định và khắc phục sự cố, cải thiện hiệu suất và thực hiện các bản cập nhật trong tương lai phù hợp hơn với nhu cầu của bạn Gửi nhật ký sự cố ẩn danh tới nhà phát triển để giúp phát triển ứng dụng tốt hơn. Gỡ tiện ích mở rộng? Tất cả các mục đã đọc Gỡ Bạn có thật sự muốn gỡ tiện ích mở rộng \"%s\"? Cập nhật tiến trình khi được đánh dấu là đã đọc Trình theo dõi được cập nhật đến chương %d Tùy chỉnh ngưỡng phần cứng bitmap Mặc định (%d) Nếu người đọc tải một hình ảnh trống thì hãy giảm dần ngưỡng\nĐã chọn: %s Ảnh hưởng đến hiệu suất. Chỉ bật nếu việc giảm ngưỡng bitmap không khắc phục được sự cố hình ảnh trống Tạm dừng lịch sử đọc của phần mở rộng Tùy chỉnh ưu tiên Sau khi đọc một chương Sau khi tìm nạp chương mới Tiêu đề các mục có thể trùng lặp Tự động Đánh dấu chương trùng lặp đã đọc là đã đọc Sửa Chủ đề Đơn sắc Ghi chú Chương chưa đọc Không tạo được thư mục tải xuống Cập nhật các tiêu đề truyện trong thư viện để khớp với nguồn Chọn tất cả Chủ đềL Catppuccin Không tạo được thư mục: %s Danh sách thư viện Đã Xuất Thư viện Đọc các chương và tiến trình của các mục không phải thư viện sẽ bị mất Bạn có các mục trong thư viện của bạn với một tên tương tự.\n\nChọn một mục để di chuyển hoặc luôn thêm vào. Đã chọn Có sẵn Bỏ chọn Chọn Nguồn được kích hoạt Chọn các nguồn được ghim Tiếp tục Sử dụng bộ giải mã cũ cho cuộc dọc Xuất Theo dõi riêng tư Theo dõi công khai Theo dõi riêng tư Tác giả Bạn sắp xóa các mục khỏi cơ sở dữ liệu Rất thích phần mà… Cảnh báo: nếu một truyện được đổi tên, nó sẽ bị xóa khỏi hàng đợi tải xuống (nếu có). Họa sĩ Giữ các mục có chương đã đọc Đang đăng nhập… Ẩn các chỉ báo chương bị thiếu Dữ liệu để di chuyển Xóa các mục tải xuống của mục hiện tại sau khi di chuyển Từ khóa bổ sung (tùy chọn) Giúp thu hẹp kết quả tìm kiếm bằng cách thêm các từ khóa bổ sung Ẩn các mục không khớp Ẩn các mục không có chương mới hơn Chỉ hiển thị mục nhập nếu mục có thêm chương Các tùy chọn này chậm và nguy hiểm và có thể dẫn đến các hạn chế từ các nguồn Tìm kiếm nâng cao Chia nhỏ tiêu đề thành các từ khóa để tìm kiếm rộng hơn Phù hợp dựa trên số chương Nếu được bật, sẽ chọn kết quả khớp xa nhất. Nếu không, sẽ chọn kết quả khớp đầu tiên theo thứ tự ưu tiên nguồn. Di chuyển Di chuyển (%1$d/%2$d) Sao chép Di chuyển Không tìm thấy lựa chọn thay thế Mới nhất: %1$s Không rõ Tìm kiếm thủ công Không di chuyển Di chuyển ngay Sao chép ngay Dừng di chuyển? Dừng lại Hủy bỏ Sao chép Di chuyển Hủy bỏ Hủy bỏ Không tìm thấy chương nào, mục này không thể được sử dụng để di chuyển Quyên góp Hiển thị hình ảnh trong mô tả manga Không cho phép tên tệp không phải định dạng ASCII Đảm bảo khả năng tương thích với một số phương tiện lưu trữ nhất định không hỗ trợ Unicode. Khi tính năng này được bật, bạn sẽ cần đổi tên thủ công các thư mục nguồn và manga bằng cách thay thế các ký tự không phải ASCII bằng cách biểu diễn thập lục phân UTF-8 chữ thường của chúng. Các tập tin chương không cần phải đổi tên. Tải xuống nguồn đồng thời Tải xuống trang đồng thời Các trang được tải xuống đồng thời theo từng nguồn Đóng thẻ Lọc nhóm dịch bị loại trừ Đang tính… Đã đánh dấu ================================================ FILE: i18n/src/commonMain/moko-resources/zh-rCN/plurals.xml ================================================ %1$s 分钟后 %1$d 个新章节 第 %1$s 章及另外 %2$d 章 共 %d 部作品 %d 个插件可更新 剩余 %1$s 章 %d 个分类 耗时 %1$s,出现 %2$s 个错误 共 %1$s 章 %d 个记录平台 跳过了 %d 章,可能是图源没有这些章节,或者被筛选规则排除了 %1$d 天前 后续 %d 个未读章节 后续 %d 章 缺少 %1$s 章 %d 天 %d 个仓库 %1$d 天后 第 %1$s 页 迁移 %1$d 个作品? 复制 %1$d 作品? %1$d 个作品已跳过 ================================================ FILE: i18n/src/commonMain/moko-resources/zh-rCN/strings.xml ================================================ 名称 分类 书架中的作品 章节 历史 设置 下载队列 书架 历史 更新 备份与还原 插件 插件信息 设置 筛选 已添加书签 未读 取消筛选 名称 章节数 最近阅读 搜索 全局搜索 全选 标记为已读 标记为未读 下载 为章节添加书签 为章节删除书签 删除 更新书架 编辑 添加 添加分类 编辑分类 重命名分类 设置分类 编辑封面 暂停 上一章 下一章 重试 删除 继续 在浏览器中打开 显示模式 显示 紧凑网格 列表 取消 排序 安装 分享 保存 重置 撤销 进度记录 迁移 标记之前章节为已读 打开日志 还原 正在加载… 已下载的章节数 应用无法使用 常规 阅读 下载 进度记录 高级 关于 每行数目 竖屏 横屏 自动更新 关闭 每 6 小时 每 12 小时 每天 每 2 天 每周 全部 自动更新的系统限制 充电时 跳过已完结的作品 阅读后更新进度 默认归入分类 每次都询问 更新 安装 等待中 下载中 安装中 已安装 信任 未信任 卸载 插件未受信任 恶意插件可能会读取所有登录的账号或执行任意代码。 \n \n信任此插件即代表你愿意承担上述风险。 全屏 翻页动画 双击动画速度 显示页码 裁剪边缘 自定义亮度 色彩滤镜 保持屏幕常亮 翻页 音量键翻页 反转音量键 背景颜色 白色 黑色 默认阅读模式 单页式(从左到右) 单页式(从右到左) 单页式(从上到下) 条漫 单页式 缩放模式 适应屏幕 拉伸 适应宽度 适应高度 原始大小 智能填充 缩放位置 自动 左边 右边 中间 无动画 正常 快速 默认屏幕方向 跟随系统 锁定竖屏 锁定横屏 R G B A 手动标记为已读后 读完自动删除 关闭 刚才读完的章节 倒数第二个已读章节 倒数第三个已读章节 倒数第四个已读章节 倒数第五个已读章节 自动下载新章节 平台 创建备份 可以用来还原当前书架内容 还原备份 从备份文件中还原书架内容 自动备份频率 已创建备份 还原完毕 想要备份什么? 正在还原备份 正在创建备份 清除章节缓存 已使用:%1$s 已清除缓存,删除了 %1$d 个文件 清除时发生错误 清除 Cookie Cookie 已清除 清理数据库 删除未添加到书架的作品记录 数据已删除 版本 发送错误报告 协助我们修复错误;不会发送敏感数据 登录 %1$s 用户名 密码 登录 已登录 未知错误 正在更新分类 没有更多结果 本地图源 其他 全局搜索… 最近更新 浏览 连载中 未知 版权屏蔽 移出书架 已添加到书架 已移出书架 要删除已下载的章节吗? 已复制到剪贴板: \n「%1$s」 未安装图源:%1$s 第 %1$s 章 正在下载 (%1$d/%2$d) 出错 已暂停 图源标题 章节编号 按图源 按章节编号 下载 未读 确定要删除所选章节吗? 进度记录 在读 已完结 抛弃 搁置 想读 重温 评分 标题 状态 状态 类型 已存在同名分类! 分类已删除 将会清除此章节的阅读日期,你确定吗? 重置此作品的所有章节 要添加到书架吗? 图片已保存 滤镜 设为封面 封面已更新 第 %1$d 页 后面没有啦 加载图片失败 要将此页设为封面吗? 已读完: 本章: 下一章: 上一章: 后面没有啦 前面没有啦 正在加载页面… 图片加载失败:%1$s 选择需要迁移的数据 迁移 共存 下载章节失败,可以在下载页面中重试 发现新章节 封面更新失败 请先将作品添加到书架 选择封面图片 选择备份文件 下载 没有新版本 正在下载… 点击安装更新 下载失败 有新版本! 无下载任务 最近没有更新 最近没有阅读 书架为空 尚无分类,点击加号按钮创建分类用来管理书架。 下载 出错 下载时发生意外错误 未连接 Wi-Fi 未连接网络 下载已暂停 通用 长按显示操作菜单 在 WebView 中打开 跳过已读章节 滤镜混合模式 帮助 叠加 正片叠底 滤色 变亮 变暗 没有结果 选择需要迁移的图源 后退 前进 刷新 书架 废弃 此插件已被废弃,可能无法正常运行或导致应用发生故障,建议卸载。 日期格式 全局更新 要退出 %1$s 吗? 退出 已退出 已暂停 更多 作品更新时间 查看章节 全部取消 浅色 深色 跟随系统 通知管理 隐私 切后台时锁定 始终开启 关闭 隐私界面 待更新 无法绕过 Cloudflare 请更新 WebView 应用提高兼容性 阻止截屏,并在切换后台时隐藏预览图 显示 章节更新 隐藏通知内容 应用锁 在屏幕刘海区域显示内容 第 %1$s 章 第 %1$s 章及另外 %2$d 章 第 %1$s 章 关闭电池优化 有助于后台更新书架和备份 电池优化已经关闭 邮箱地址 始终显示章节间的过渡页面 菜单 从新到旧 从旧到新 移到顶部 移到底部 插件更新 图源 正在更新书架 阅读 跳过筛选掉的章节 已置顶 取消置顶 置顶 侧边留白 条漫(页间有空隙) 反选 添加进度记录 本应用需要 WebView 才能运行 收起 展开 开源许可证 官网 添加到书架 在书架中 仅限已下载内容 备份失败 已取消还原 还原备份失败 还原已在进行 备份已在进行 第 %1$s 章 - %2$s 本地图源指南 最近使用 筛选书架里的全部作品 检查更新 %1$02d 分, %2$02d 秒 灰色 本作品 阅读模式 打开系统设置失败 刷新书架封面 将阅读进度上传到第三方进度记录平台。在作品页面点击“进度记录”按钮即可设置。 按上传日期 数据 图源缺失: 备份未包含任何作品。 备份文件无效: 更新书架时一并检查封面和简介的变动 自动刷新作品信息 迁移 松散网格 标签 显示分类标签 没有图片 全部关闭 全部开启 开始阅读时,短暂显示当前阅读模式 阅读模式提示 开始 未找到图源 关闭 需要重启应用才能生效 网络 全部 上下 左右 未知状态 未知作者 已更新至 v%1$s 更新日志 存储空间不足,无法下载章节 全局搜索 \"%1$s\" 阅读模式 主题 收藏日期 反转点按区域 没有置顶图源 完成 进度 错误 尚未登录进度记录平台: 允许删除添加了书签的章节 删除章节 来自此插件的图源可能包含 NSFW (18+) 内容 18+ 如果有插件标记错误,这项设置无法阻止它们展示 NSFW (18+) 内容。 没有章节 已更新默认章节设置 设为默认 同时应用到书架里的所有作品 确定要将当前设置保存为默认吗? 章节设置 《%1$s》%2$s,第 %3$d 页 搜索设置 已下载的章节 书架中的作品 暂停记录阅读历史 无痕模式 清除历史记录 你确定吗?所有历史记录都会丢失。 历史记录已删除 下一页 上一页 图源迁移指南 NSFW (18+) 图源 没有文件管理器 请重新登录 MAL 在图源和插件列表中显示 点按区域 两侧 Kindle L 形 阅读完毕日期 开始阅读日期 将错误日志保存到文件中,以便提供给开发者 导出崩溃日志 降序 升序 按章节编号 按上传日期 已记录进度 显示作品数 左右 拆分双页 拆分双页时交换顺序 拆分双页的顺序与阅读方向不符时可以开启 可能需要安装缺失的插件并重新登录进度记录平台。 往右 往左 下一页 上一页 开始阅读时,短暂显示点按区域 点按区域提示 DNS over HTTPS (DoH) 排除:%s 包含:%s 章节获取时间 排除优先于包含,同时属于包含和排除分类的作品不会自动更新。 排除优先于包含,同时属于包含和排除分类的作品不会自动下载。 自动下载 点击查看详情 应用不再支持此 Android 版本 复制到剪贴板失败 横屏 竖屏 根据作品标题创建文件夹 将图片保存到单独文件夹 操作菜单 屏幕方向 灰度 关闭无痕模式 自动 取消此作品 没有匹配项 图源不受支持 未读 日期 排序依据 章节格式无效 未找到章节 限制:%s 本地图源 关闭 开启 分享封面时出错 保存封面时出错 封面已保存 封面 单独设置各个分类的排序 进度记录指南 还没有创建分类。 立即开始下载 部分厂商杀掉后台服务的现象比较严重,此网站提供了一些解决方法。 如果关闭 MIUI 优化,备份与还原可能会出现问题。 纯黑深色模式 四叶草 阴阳 Tako 草莓黛绮莉 午夜幽暗 青苹果 应用主题 为特定图源提供增强功能。作品在添加到书架时会自动同步进度。 增强平台 动态 后台活动 最低 最高 滑动时隐藏菜单的灵敏度 反色 今天 青绿 验证后完成修改 默认 外观 记录进度 入门指南 平板界面 排除的分类 协助翻译 应用信息 旧式安装程序 安装程序 安装并启动 Shizuku 后才能设置 Shizuku 为插件安装程序。 Shizuku 未在运行 正在安装插件… 作品总数 将详细日志打印到系统日志(会降低应用性能) 详细日志记录 警告 语言 你应该将备份数据保存到多个地方。备份可能含有敏感数据(例如储存的密码),分享时请留意。 大量更新会损害图源,并可能导致更新变慢、耗电增加。点击了解详情。 仅连接 Wi-Fi 时 每 3 天 警告:批量下载可能导致图源变慢,甚至会使得它们屏蔽 %s 。点击了解详情。 全部更新 应用更新 启动时清除章节缓存 无需清理 数据库中有 %1$d 部作品未添加到书架 获取插件列表失败 隐私声明 跳过有未读章节的作品 关于书架更新出错的解决方法,请参阅 %1$s 保存为 CBZ 压缩包 出版完毕 已中止 休刊中 显示作品 封面网格 自动放大横向图片 图片放大时先平移再翻页 跳过尚未开始阅读的作品 已跳过,因为作品已完结 已跳过,因为有未读章节 已跳过,因为尚未开始阅读 点击了解详情 %1$d 个更新失败了 反向竖屏 将作品移到顶部 关闭 保存图片出错 书架没有可备份的作品 打开 GitHub 页面 已清除 WebView 数据 清除 WebView 数据 关闭 没有已安装的图源 没有图源 检查更新时间 未读章数 可以改善阅读器的性能 分割时未找到第 %d 页 未找到第 %d 页的文件路径 重置各作品阅读器独立设置 重置所有作品的阅读模式和屏幕方向 已重置所有阅读器设置 重置阅读器设置失败 呃…尴尬了 分级 版本 语言 在读 想读 读过 抛弃 搁置 仅通过不按流量计费的网络 无法打开上次阅读的章节 自定义封面 未安装 应用语言 薰衣草 无简介 确定要删除 \"%s\" 分类吗? 删除分类 InternalError: 内部错误,详情请见崩溃日志 默认 User Agent 字符串 恢复默认 User Agent 字符串 全部删除 应用锁开启时,小部件不能使用 查看最近更新的作品 有其他更新尚未完成 User Agent 字符串不能为空 浪潮 预先下载 阅读时自动下载 要求当前章节和下一章节都已下载。 你确定吗? 多语言 书架更新时间:%s 即将从书架中删除 \"%s\" 热门 未授予存储权限 已跳过,因为作品无需更新 搜索… 哦豁! %s 发生了意外错误。建议你反馈时提供崩溃日志。 重启应用 主题 • 日期格式 分类 • 全局更新 • 目录左右滑动 自动下载 • 预先下载 阅读进度上传 • 增强同步 导出崩溃日志 • 电池优化 手动备份 • 自动备份 • 存储空间 应用锁 • 隐私界面 图源 • 插件 • 全局搜索 阅读模式 • 显示 • 翻页 未知标题 无效位置:%s User Agent 字符串无效 刚才 正在扫描已下载章节 随机打开作品 此分类没有作品 F-Droid 渠道不受官方支持。 \n点击了解详情。 继续阅读按钮 重建下载索引 要删除日期吗? 将会删除之前在 %s 中标记的开始日期 将会删除之前在 %s 中标记的结束日期 强制重新扫描已下载的章节 统计 本地 已下载 总览 阅读时长 作品 读完的作品数 总数 在全局更新范围 进度记录 记录的作品数 已读 平均评分 阅读过 以后再说 平台数 %d 分 %d 秒 %d 天 %d 时 在“更新”图标上显示未读章数 分类为空 已复制到剪贴板 支持以下平台但图源尚未安装:%s 跳过重复章节 %1$s 发生错误:%2$s *必填 隐藏已添加到书架的作品 复制到剪贴板 更新分类 分割长图 标记和按钮 旋转横向图片 旋转横向图片时反转方向 调试信息 向右滑动章节 向左滑动章节 双击放大 预测下次更新时间 确定 要删除 %s 的记录吗? 同时删除 %s 上的数据 将会在本地删除进度记录的关联。 删除已下载章节 自定义更新频率 设置间隔 预计更新时间 间隔 估计每个 设定更新为每 已跳过,因为预计今天没有更新 有结果 正在同步书架 书架同步完成 点击这里查看 Cloudflare 帮助 重建下载索引 登录进度记录平台 创建备份文件失败 未连接网络 HTTP %d,请在 WebView 中检查网站 无法连接到 %s 图源设置 应用设置 解锁 %s 将作品移到底部 正在更新书架… (%s) 未选择文件 相对时间戳 显示 \"%1$s\" 而不是 \"%2$s\" 尚未 减轻墨水屏上的残影 上次自动备份时间:%s 翻页时闪烁 数据与存储 存储占用 创建 应用 恢复默认 没有翻译组 翻译组 记录平台评分 排除翻译组 更多选项 已选中 未选中 首次启动引导 开始使用 欢迎! 跳过 下一步 返回 首先调整一些设置。稍后也可以在设置中修改。 避免需要长时间运行的书架更新、下载、备份恢复任务受到中断。 允许 未设置存储位置 完整错误信息: 后台运行权限 需要安装插件的权限,点击此处授权。 添加仓库 包含敏感设置(例如进度记录平台的账号信息) 确定要删除仓库 \"%s\" 吗? 此仓库已存在! 删除仓库 仓库网址无效 用于自动备份、章节下载、本地图源。 预计 %1$s后更新,每 %2$s检查一次。 自定义更新频率: 应用安装权限 用来安装图源插件。 通知权限 如果你是第一次使用 %s,推荐查看入门指南。 如果你是重新安装了 %s,可以使用以下功能。 智能更新 用来发送书架更新等通知。 插件仓库 尚未设置仓库 仓库网址 在 %s 中添加仓库,输入的网址结尾应为 \"index.min.json\" 。 如果你是从旧版更新而来,可以查看存储指南了解详情。 存储指南 存储位置 选择文件夹 选择一个文件夹供 %1$s 存放下载章节、备份文件等。 \n \n推荐使用一个专门的文件夹。 \n \n已选文件夹:%2$s 必须选择一个文件夹 %1$s / %2$s Nord 即将更新 撤销已信任的未知插件 打开图源仓库 禁用缩小 依然添加 替换 自定义校色文件 %1$s 仓库已经存在和 %2$s 仓库相同的签名密钥指纹。 \n若继续,%2$s 将被替换,否则请联系你的仓库维护员。 签名密钥指纹已存在 显示即将推出的更新 即将推出的指南 即将推出 下个月 上个月 此漫画或已完结,或无发行日期。 %1$s 毫秒 闪烁时间 闪烁于 黑白 获取永久文件存储权限失败,应用程序可能会出现异常。 闪烁时间间隔 不支持 JSON 备份 备份文件已损坏 复制链接 插件仓库 您想添加仓库 \"%s\" 吗? 跳过下载重复阅读的章节 将进度更新到第 %d 章? 发送崩溃日志 向开发者发送匿名的崩溃日志 数据分析 安全 发送匿名的应用数据以提升用户体验 数据分析与崩溃日志 允许发送崩溃日志和数据分析帮助开发者辨别并修复问题,提高应用体验,以期更新符合你需要的功能 随机 删除 确定删除? 确定要删除 \"%s\" 插件吗? 所有已读作品 标记为已读时更新章节进度 进度记录平台已更新到 %d 章 默认 (%d) 如果阅读器加载空白图像,请逐步降低阈值。\n已选择: %s 自定义硬件位图阈值 会影响性能。仅当降低位图阈值无法解决空白图像问题时才启用 暂停记录插件的阅读历史 自动 单色 在长条阅读模式中使用旧版解码器 将重复的已读章节都标记为已读 作者 公开记录 画师 导出 书架列表 已导出列表 私下记录 私下记录 获取新章节后 操作 未读章节 读完一个章节后 添加注释 编辑注释 标注你喜欢的部分… 在你的书架中有一些名称相似的作品。\n\n请选择其中一个作品进行迁移或仍然新增。 可能重复的作品 你即将从数据库中删除这些作品 已读章节和不在书架中的作品的进度将会丢失 保留有已读章节的作品 创建下载目录失败 创建目录失败: %s 正在登录… 更新书架中的漫画标题以匹配图源 警告:如果漫画被重命名,将会从下载队列中移除(如果存在)。 选中 全不选 全选 选择已启用的图源 选择已置顶图源 继续 Catppuccin 可选 需要迁移的数据 高级搜索模式 迁移后删除当前作品的下载项 这些选项运行缓慢且危险,并可能导致图源限制 将标题拆解为关键词以进行更宽泛的搜索 附加关键字(可选) 通过添加其他关键字帮助缩小搜索结果范围 隐藏无匹配的作品 隐藏没有新章节的作品 仅当匹配项有额外章节时才显示作品 根据章节号进行匹配 如果启用,则选择最前面的匹配项。否则按图源优先级选择第一个匹配项。 迁移 (%1$d/%2$d) 迁移 未找到替代项 最新: %1$s 手动搜索 不要迁移 立即迁移 停止迁移? 停止 取消 复制 迁移 取消 取消 未找到章节,此作品无法迁移 复制 立即复制 未知 迁移 隐藏缺失章节提示符 在漫画注释中显示图片 捐赠 禁用非ASCII文件名 确保与某些不支持 Unicode 的存储介质相兼容。启用此功能后,你需要手动重命名图源和漫画文件夹,将非 ASCII 字符改为对应的 UTF-8 小写十六进制表示形式。章节文件无需重命名。 同时下载的图源数量 同时下载的页数 每个图源同时下载的页数 关闭标签 筛选排除翻译组 计算中… 已添加书签 ================================================ FILE: i18n/src/commonMain/moko-resources/zh-rTW/plurals.xml ================================================ %1$s 分鐘後 %d 個擴充套件可更新 剩餘 %1$s 項 共 %1$s 章 %d 個類別 歷時 %1$s,出現 %2$s 個錯誤 %1$d 篇新章節 第 %1$s 章以及另外 %2$d 章 %d 個平臺 略過了 %d 章,也許是來源沒有這些章節,或其已被篩選規則排除 共 %d 部作品 %1$d 天前 接下來未讀的 %d 章 後續 %d 章 缺漏 %1$s 章 %d 天 %d 處儲存庫 %1$d 天後 %1$s pages 遷移 %1$d 個項目? 複製 %1$d 個項目? 已跳過 %1$d 個項目 ================================================ FILE: i18n/src/commonMain/moko-resources/zh-rTW/strings.xml ================================================ 類別 藏書 章節 記錄 設定 下載佇列 書櫃 記錄 更新 備份與還原 遷移 擴充套件 擴充套件資訊 說明 設定 篩選 已新增書籤 未讀 清除篩選器 名稱 總章節數 最近閱讀 搜尋 全域搜尋 全選 標示為已讀 標示為未讀 標示過往章節為已讀 下載 將章節加上書籤 將章節移除書籤 刪除 更新書櫃 編輯 新增 新增類別 編輯類別 重新命名類別 設定類別 編輯封面 暫停 上一章 下一章 重試 移除 繼續 在瀏覽器中開啟 在 WebView 中開啟 檢視模式 檢視 密集格狀 清單 已下載章數 取消 排序 安裝 分享 儲存 重設 復原 還原 正在載入… 應用程式無法使用 一般 閱讀 下載 進階 關於 直向 橫向 自動更新 關閉 每 6 小時 每 12 小時 每天 每 2 天 每週 全部 自動更新的裝置限制 僅充電時 略過已完結的作品 預設類別 總是詢問 更新 安裝 等待中 下載中 安裝中 已安裝 解除安裝 全螢幕 輕觸兩下動畫速度 顯示頁碼 自訂亮度 色彩濾鏡 保持螢幕恆亮 停用動畫 正常 快速 預設螢幕方向 自動 鎖定直向 鎖定橫向 紅色 綠色 藍色 阿爾法 手動標示為已讀後 已停用 自動下載新章節 歷程平臺 建立備份 還原備份 自動備份頻率 已建立備份 還原成功 哪些項目需要備份? 正在還原 正在建立備份 清除章節快取 清除 Cookie 清除資料庫 版本 傳送錯誤報告 密碼 登入 已登入 已收藏至書櫃 已從書櫃中移除 已複製到剪貼簿: \n「%1$s」 來源未安裝:%1$s 錯誤 已暫停 下載 已刪除類別 圖片已儲存 設為封面 已更新封面 副本 下載 沒有可用的更新 正在下載更新… 輕觸即可更新 更新下載失敗 有可用的更新! 尚無下載作業 錯誤 沒有可用的 Wi-Fi 連線 尚未連接至網路 下載已暫停 每列數目 翻頁轉場動畫 邊緣裁剪 濾鏡融合機制 覆蓋 色彩增值 濾色 減淡/變亮 加深/變暗 導覽 音量按鈕 反轉音量按鈕 長按時彈出快顯選單 背景顏色 白色 黑色 預設閱讀模式 單頁(左至右) 單頁(右至左) 單頁(上至下) 捲動(連續) 單頁 縮放模式 符合螢幕 延展 符合頁寬 符合頁高 原始大小 智慧填充 縮放原點 自動 左邊 右邊 中間 由備份檔還原書櫃內容 已使用:%1$s 已清除快取,刪除了 %1$d 個檔案 清除時發生錯誤 已清除 Cookie 協助我們修復錯誤,傳送的資料將不包含個人敏感資訊 登入 %1$s 使用者名稱 正在更新類別 全域搜尋… 將作品收藏至書櫃? 選擇封面圖片 無近期閱讀 一般 可用來儲存目前書櫃內容 將未加入書櫃的作品的紀錄刪除 已刪除項目 不明的錯誤 沒有更多結果 本機來源 其他 探索 連載中 不明 已授權 移出書櫃 刪除下載的章節? 第 %1$s 章 正在下載 (%1$d/%2$d) 來源標題 章節編號 遵循來源 章節編號 已完結 評分 標題 狀態 狀態 圖片無法載入 請先將作品收藏至書櫃 選擇備份檔 尚無任何類別,輕觸新增按鈕即可建立類別以組織你的書櫃 下載管理 未讀 要將該圖片設為封面嗎? 正在載入頁面… 尚未收藏任何作品 重設此作品所有章節 濾鏡 遷移 封面更新失敗 確定要刪除所選的章節嗎? 已有名稱相同的類別! 第 %1$d 頁 找不到下一章 已閱畢: 接下來: 發現新章節 略過已讀的章節 翻閱過後自動刪除 以下空白 已達盡頭 頁面載入失敗:%1$s 最近無更新 名稱 歷程 檢視記錄檔 歷程 閱後自動更新章節進度 信任 未信任 未受信任的擴充套件 惡意的擴充套件可能會讀取任何已儲存的登入認證或執行任意的程式碼\n\n若選擇信任該擴充套件,即表示你願意承擔上述風險 最後閱畢的章節 最新 歷程 閱讀中 準備中 重溫中 類型 此章節的閱讀日期將被清除,你確定嗎? 這一章: 上一章: 選擇欲處理的項目 該章節無法下載,請再試一次 下載時發生不可預期的錯誤 倒數第二閱畢的章節 倒數第三閱畢的章節 倒數第四閱畢的章節 倒數第五閱畢的章節 已拋棄 擱置中 找不到結果 請選擇檔案來源 上一頁 下一頁 重新整理 書櫃 過舊 這個擴充套件已無法使用,其可能無法正確運作或導致本程式發生問題,建議解除安裝 淺色 系統 深色 日期格式 將套用至你書櫃中的作品 僅限下載內容 開放原始碼授權 網站 檢查更新 其他 更多 永不 立即 閒置時鎖定 上鎖應用程式 在切換應用程式時隱藏預覽,並禁止擷取螢幕畫面 防窺畫面 隱私 隱藏通知內容 管理通知設定 擴充套件更新 類別索引 頁籤 灰色 檢視 鬆散格狀 套用於這部作品 翻閱 全域更新 已停用電池效能最佳化 無法前往裝置設定 停用電池效能最佳化 較少 正在更新書櫃 加入書櫃 你已登出 登出 最近使用 本機來源指南 請更新 WebView 以獲得更佳的相容性 應用程式運作需要 WebView 反向選擇 自動重新整理中繼資料 更新書櫃時一併檢查封面與簡介是否有更動 重新整理書櫃中的封面 等待更新中 有助於背景更新書櫃與自動備份 已釘選 取消釘選 釘選 檢視章節 全部停用 全部啟用 選單 無法繞過 Cloudflare 開始 一律顯示章節間的隔頁 使用螢幕凹口區域 電子郵件地址 略過已篩選的章節 開始閱讀時,快顯闡明目前的模式 閱讀模式提示 來源 頁緣留白 新增閱讀歷程 章節更新 在書櫃中 閱讀模式 停用 遷移 擱置中 由新到舊 由舊到新 排至最後 排至最前 全部取消 上傳日期 最新章節 無效的備份檔: 備份已在進行 還原已在進行 資料 已取消還原 還原失敗 備份失敗 登出 %1$s? 將閱讀進度單向同步至外部歷程平臺,請逕行前往個別作品的「歷程」專區以設定 需要重新啟動應用程式以套用 網路 全部 垂直 水平 反轉輕觸區域 捲動(留空) %1$02d 分, %2$02d 秒 第 %1$s 章 - %2$s 第 %1$s 章 第 %1$s 章 第 %1$s 章以及另外 %2$d 章 更新日誌 連載狀態不明 佚名 在所有範圍內搜尋「%1$s」 由於儲存空間不足,無法下載章節 已更新至 v%1$s 閱讀模式 主題 收藏日期 找不到來源 你尚未釘選任何來源 沒有任何頁面 未安裝擴充套件: 未登入歷程平臺: 進度 錯誤 作業完成 18+ 即使啟用監護限制,還是可能有漏網之魚,使用者仍可藉由第三方或未正確標幟的擴充套件在本應用程式中瀏覽 NSFW(18+) 內容 來自此擴充套件的來源可能包含未滿十八歲之人不宜觀賞的內容 備份檔並未包含任何書櫃中的作品 允許刪除有書籤的章節 刪除章節 已更新章節設定預設值 搜尋設定 章節設定 同時套用至其餘在書櫃中的作品 確定要將目前的選項儲存為預設值嗎? 沒有章節 儲存為預設值 已刪除記錄 你確定嗎?所有的閱讀記錄將會遺失 清除閱讀記錄 暫停閱讀記錄 無痕模式 找不到檔案選擇器 《%1$s》:%2$s,第 %3$d 頁 來源遷移指南 下一頁 上一頁 請重新登入 MAL 未滿十八歲之人不宜瀏覽的來源 在來源和擴充套件清單中顯示 閱讀完畢日期 開始閱讀日期 邊緣式 Kindle 式 L 式 已登錄歷程 產生錯誤記錄檔以便分享予開發人員 分享當機記錄 輕觸區域 左右式 依上傳日期 遞減 遞增 依章節編號 顯示藏書數目 書櫃上的作品 已下載的章節 分割寬頁 若分割後的排版方向與翻閱順序不符 調換分割寬頁排版 DNS over HTTPS (DoH) 自動下載 直向 螢幕方向 左邊 上一頁 下一頁 章節擷取日期 右邊 橫向 快顯選單 排除:%s 包含:%s 輕觸以檢視詳細資訊 不再支援此 Android 版本 無法複製到剪貼簿 你可能需要安裝任何缺少的擴充套件並重新登入各歷程平臺以開始使用 類別同時屬於「排除」及「包含」的作品,將不會自動下載 儲存頁面至個別資料夾 根據作品標題建立資料夾 開始閱讀時,短暫浮現輕觸區域 輕觸區域提示 類別同時屬於「排除」及「包含」的作品將不會自動更新 取消此作品 自動 灰階 停用無痕模式 未找到匹配項 不支援的來源 未讀 日期 未找到章節 關閉 開啟 限制:%s 排序 無效的章節格式 本機來源 你目前沒有任何類別 分享封面時發生錯誤 儲存封面時發生錯誤 已儲存封面 封面 立刻開始下載 部分裝置製造商設有額外的應用程式限制來終止背景服務,此網站提供了修復這項問題的詳細資訊 背景活動 若停用 MIUI 最佳化,備份與還原可能無法正確執行 為特定來源提供增強功能,當作品被加入書櫃時,將自動登錄閱讀歷程 增強式歷程平臺 歷程平臺指南 獨立各類別的排序方式 純黑深色模式 四葉 陰陽 章魚 草莓黛綺莉 黃昏 青蘋果 動態 應用程式主題 最低 最高 捲動時隱藏選單的靈敏度 反轉 綠松色 驗證以確認變更 外觀 今天 預設 平板電腦介面 入門指南 新增 協助翻譯 排除的類別 程式資訊 若要使用 Shizuku 來安裝擴充套件,請先安裝 Shizuku 並開啟 傳統 Shizuku 未執行 套件安裝程式 正在安裝擴充套件… 作品總數 語言 警告 大量更新會損害來源,並可能導致更新速度緩慢、電池用量增加,輕觸以瞭解詳情 錄製詳細記錄 你應該在多處儲存備份副本,備份檔可能含有敏感資料 (包括任何已儲存的密碼),分享時請留意 傾印詳細記錄至系統日誌 (將降低應用程式效能) 僅透過 Wi-Fi 每 3 天 警告:大量批次下載可能壅塞來源,甚至使其封鎖 %s,輕觸以瞭解詳情 全部更新 應用程式更新 啟動應用程式時清除章節快取 資料庫中有 %1$d 部作品未加入書櫃 無須清理 無法取得可用的擴充套件 隱私權政策 略過有未讀章節的作品 如欲瞭解如何修復書櫃更新失敗,請參閱 %1$s 以 CBZ 封存檔格式儲存 休刊中 已取消 出版完畢 顯示作品 自動縮放寬頁 導覽寬頁時先平移後翻頁 純封面格狀 略過無已讀章節的作品 由於連載已完結,因此略過 由於有未讀章節,因此略過 由於無已讀章節,因此略過 顛倒直向 瞭解詳情 %1$d 項更新失敗 置頂此作品 停用 書櫃中尚無作品可供備份 在 GitHub 上檢視 儲存圖片錯誤 清除 WebView 資料 已清除 WebView 資料 關閉 找不到來源 找不到已安裝的來源 上次檢查更新 未讀章數 分割時找不到第 %d 頁 用以改善閱讀器效能 找不到第 %d 頁的檔案路徑 重設個別閱讀器設定 將所有作品的閱讀模式和螢幕方向還原為預設值 已重設所有閱讀器設定 無法重設閱讀器設定 呃…尷尬了 版本 語言 分級 已拋棄 擱置中 已完結 準備中 閱讀中 僅透過吃到飽網路 無法開啟上次閱讀章節 自訂封面 未安裝 應用程式語言 薰衣草 沒有簡介 確定要刪除「%s」類別嗎? InternalError:請檢視當機記錄以瞭解詳情 刪除類別 重設預設使用者代理字串 預設使用者代理字串 全部清除 當需要解鎖才能存取應用程式時,無法使用小工具 查看書櫃中近期更新的作品 已在進行更新 使用者代理字串不得為空 潮浪 預先下載 閱讀時自動下載 僅於目前章節及下一章節皆已下載時生效 你確定嗎? 多語 即將從書櫃中移除《%s》 書櫃更新於:%s 熱門 未被授予儲存空間權限 由於作品無須更新,因此略過 搜尋… 閱讀模式、檢視、導覽 主題、日期格式 自動下載、預先下載 單向進度同步、增強式同步 手動與自動備份、儲存空間 上鎖應用程式、防窺畫面 傾印當機記錄、電池效能最佳化 重新啟動應用程式 哎呀! 「%s」發生了未預期的錯誤,我們建議你將崩潰日誌分享至我們位於 Discord 上的頻道 類別、全域更新、目錄滑動動作 來源、擴充套件、全域搜尋 無效的位置:%s 未知的標題 無效的使用者代理字串 剛剛 正在檢查下載 開啟隨機作品 類別沒有作品 F-Droid 的組建未被正式支援\n輕觸以瞭解詳情 繼續閱讀按鈕 移除日期? 從「%s」移除你先前輸入的閱讀完畢日期 從「%s」移除你先前輸入的開始閱讀日期 重新索引下載 強制重新檢查已下載的章節 已下載 閱畢作品 作品 總數 已讀 平均評分 平臺 %d天 統計資料 本機 總覽 開始日 適用全域更新 閱讀歷時 歷程平臺 不適用 登錄作品 %d時 %d 分鐘 %d 秒鐘 暫時不要 類別尚無作品 在「更新」導覽圖示上標記未讀章數 已複製到剪貼簿 略過重複的章節 可供使用但來源尚未安裝:%s %1$s 發生錯誤:%2$s *必填 隱藏已在書櫃的作品 複製 更新類別 分割過高的圖片 封面附加元素 旋轉寬頁以符合螢幕 調換旋轉寬頁方向 偵錯資訊 向左滑動章節 輕觸兩下以縮放 向右滑動章節 確定 刪除舊有下載章節 移除「%s」歷程平臺? 這將在本機上解除登錄該歷程平臺 同時移除「%s」上的資料 已自訂更新頻率 設定間隔 下次預期更新 刊期 預計每個 預估下次更新時間 設定為每個 由於未臨更新日,因此略過 有結果 正在同步書櫃 書櫃同步完成 正在重新建立下載索引 查看 Cloudflare 相關說明 登入歷程平臺 無法建立備份檔 HTTP %d,請在 WebView 中檢查網站 沒有網路連線 無法連上 %s 解鎖 %s 置底此作品 相對時間戳記 以「%1$s」表示「%2$s」 應用程式設定 正在更新書櫃… (%s) 來源設定 未選擇檔案 永不 減少電子紙顯示器上的殘影 上次自動備份於:%s 翻頁時閃爍畫面 資料與儲存空間 儲存空間使用情形 歷程平臺評分 套用 還原為預設值 沒有掃譯者 掃譯者 排除掃譯者 建立 更多選項 已勾選 尚未勾選 向上瀏覽 儲存位置 供自動備份、章節下載和本機來源使用 選擇資料夾 新手上路精靈 初探 %s?我們建議你查看入門指南 開始使用 必須選擇一個資料夾 歡迎! 重新安裝 %s? 略過 下一步 讓我們先設定一些東西,隨後你隨時可至設定中變更這些選項 未設定儲存位置 選擇供 %1$s 存放下載的章節、備份檔等內容的資料夾 \n \n建議使用專屬的資料夾 \n \n選擇的資料夾:%2$s 通知權限 安裝應用程式權限 避免中斷書櫃更新、章節下載和還原備份等較為費時的作業 背景耗電量 用以安裝來源擴充套件 用以傳送書櫃更新等通知 授予 可用:%1$s / 總計:%2$s 缺少安裝擴充套件所需的權限,輕觸此處以授予 包含敏感設定 (如:歷程平臺登入權杖) 預計 %1$s後更新,每 %2$s檢查一次 完整錯誤訊息: 自訂更新頻率: 儲存庫網址 已有該儲存庫! 智慧更新 無效的儲存庫網址 將額外的擴充套件儲存庫新增至 %s,此處應填入一個結尾為「index.min.json」的網址 確定要刪除「%s」儲存庫嗎? 刪除儲存庫 新增儲存庫 尚未新增任何儲存庫 擴充套件儲存庫 儲存空間指南 從舊版升級而不確定該如何選擇嗎?請參閱儲存空間指南以取得更多資訊 北風 復原對不明擴充套件的信任 即將 開啟來源儲存庫 停用縮小 自訂顯示設定檔 仍要新增 取代 已有相同的簽署金鑰指紋 「%1$s」儲存庫的簽署金鑰指紋與「%2$s」相同\n若此為預期現象,則「%2$s」將被取代,否則請聯絡該儲存庫的維護者 即將推出的指南 下個月 上個月 即將推出 檢視即將推出的更新 無法取得永久性資料夾存取權,應用程式可能會表現異常 黑白 此漫畫已完結,又或尚無預發佈日 閃爍時間 %1$s 毫秒 閃爍間隔 閃爍於 備份檔案已損壞 不支援 JSON 備份 擴充套件儲存庫 複製連結 您想新增儲存庫\"%s\"嗎? 略過下載重複閱讀的章節 將進度更新到第 %d 章? 允許資料分析 傳送匿名使用資料來改進應用程式功能 安全 資料分析和崩潰日誌 傳送崩潰日誌 向開發人員傳送匿名崩潰日誌 傳送崩潰日誌及資料分析有助於我們識別並解決問題和提升效能,並使未來的更新更貼近您的需求 隨機 解除安裝 解除安裝擴充套件? 您真的要解除安裝「%s」擴充套件嗎? 所有已閱讀的作品 標記為已讀時更新章節進度 已更新歷程到第%d章 自訂硬體點陣圖的閾值設定 如果閱讀時載入的是空白影像,請逐步降低閾值\n已選擇:%s %d (預設) 影響效能。 僅當降低點陣圖閾值無法解決空白影象問題時才啟用 停止紀錄擴充的閱讀歷史 自動 單色 私下紀錄 私下紀錄 公開紀錄 書櫃清單 已匯出清單 匯出 作者 畫家 對長條閱讀模式使用舊版解碼器 將重複的已讀章節標記為已讀 未讀章節 操作 閱讀完一章後 獲取新章節後 新增筆記 編輯筆記 我喜歡這段⋯ 您的書櫃有相似名稱的作品\n\n請選擇一個作品進行遷移或仍然新增 可能重複的作品 您即將從資料庫中刪除作品 已讀章節和非書櫃裡的作品進度將會遺失 保留有已讀章節的作品 無法建立下載目錄 無法建立目錄:%s 登入中⋯ 更新書櫃中的漫畫標題以符合來源 警告:如果漫畫被重新命名,將會從下載佇列中移除(如果有的話) 可選 全選 Catppuccin 已選 全不選 選擇已啟用的來源 選擇已釘選的來源 繼续 遷移日期 隱藏缺少章節指示器 遷移後刪除目前項目的下載 額外關鍵字 (可選) 新增額外關鍵字以縮小搜尋結果範圍 隱藏不符的項目 隱藏沒有較新章節的項目 僅在符合項目有額外章節時顯示 這些選項速度緩慢且具危險性,可能導致來源方的限制 進階搜尋模式 將標題分解為關鍵字以進行更廣泛的搜尋 依章節數比對 若啟用,將選擇進度最超前的符合項目。否則,將依來源優先順序選擇第一個符合項目。 遷移 遷移 (%1$d/%2$d) 複製 遷移 找不到替代項目 最新:%1$s 未知 手動搜尋 不要遷移 立即遷移 立即複製 停止遷移? 停止 取消 取消 取消 複製 遷移 找不到章節,此項目無法用於遷移 在漫畫描述中顯示圖片 捐贈 禁止使用非 ASCII 檔名 確保與不支援 Unicode 的某些儲存媒體相容,啟用此選項後,你需要手動將來源與漫畫資料夾中的非 ASCII 字元改成對應的小寫 UTF-8 十六進位表示方式,章節檔案則不需要重新命名。 同時下載的來源數目 同時下載的頁數 每個來源同時下載的頁數 關閉頁籤 篩選排除掃譯者 計算中… 已新增書籤 ================================================ FILE: macrobenchmark/README.md ================================================ # Baseline profiles The baseline profile for this app is located at [`app/src/main/baseline-prof.txt`](../app/src/main/baseline-prof.txt). It contains rules that enable AOT compilation of the critical user path taken during app launch. For more information on baseline profiles, read [this document](https://developer.android.com/studio/profile/baselineprofiles). > Note: The baseline profile needs to be re-generated for release builds that touch code which changes app startup. To generate the baseline profile, select the `devBenchmark` build variant and run the `BaselineProfileGenerator` benchmark test on an AOSP Android Emulator. Then copy the resulting baseline profile from the emulator to [`app/src/main/baseline-prof.txt`](../app/src/main/baseline-prof.txt). ================================================ FILE: macrobenchmark/build.gradle.kts ================================================ plugins { id("mihon.benchmark") } android { namespace = "tachiyomi.macrobenchmark" defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments["androidx.benchmark.enabledRules"] = "BaselineProfile" } buildTypes { // This benchmark buildType is used for benchmarking, and should function like your // release build (for example, with minification on). It's signed with a debug key // for easy local/CI testing. create("benchmark") { isDebuggable = true signingConfig = getByName("debug").signingConfig matchingFallbacks.add("release") } } targetProjectPath = ":app" experimentalProperties["android.experimental.self-instrumenting"] = true } dependencies { implementation(androidx.test.ext) implementation(androidx.test.espresso.core) implementation(androidx.test.uiautomator) implementation(androidx.benchmark.macro) } androidComponents { beforeVariants(selector().all()) { it.enable = it.buildType == "benchmark" } } ================================================ FILE: macrobenchmark/src/main/AndroidManifest.xml ================================================ ================================================ FILE: macrobenchmark/src/main/java/tachiyomi/macrobenchmark/BaselineProfileGenerator.kt ================================================ package tachiyomi.macrobenchmark import androidx.benchmark.macro.junit4.BaselineProfileRule import androidx.test.uiautomator.By import org.junit.Rule import org.junit.Test class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun generate() = baselineProfileRule.collect( packageName = "eu.kanade.tachiyomi.benchmark", profileBlock = { pressHome() startActivityAndWait() device.findObject(By.text("Updates")).click() device.findObject(By.text("History")).click() // TODO: automate storage permissions and possibly open manga details screen too? // device.findObject(By.text("Browse")).click() // device.findObject(By.text("Extensions")).click() // device.swipe(150, 150, 50, 150, 1) device.findObject(By.text("More")).click() device.findObject(By.text("Settings")).click() }, ) } ================================================ FILE: macrobenchmark/src/main/java/tachiyomi/macrobenchmark/StartupBenchmark.kt ================================================ /* * Copyright 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package tachiyomi.macrobenchmark import androidx.benchmark.macro.BaselineProfileMode import androidx.benchmark.macro.CompilationMode import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.StartupTimingMetric import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith /** * Run this benchmark from Studio to see startup measurements, and captured system traces * for investigating your app's performance from a cold state. */ @RunWith(AndroidJUnit4ClassRunner::class) class ColdStartupBenchmark : AbstractStartupBenchmark(StartupMode.COLD) /** * Run this benchmark from Studio to see startup measurements, and captured system traces * for investigating your app's performance from a warm state. */ @RunWith(AndroidJUnit4ClassRunner::class) class WarmStartupBenchmark : AbstractStartupBenchmark(StartupMode.WARM) /** * Run this benchmark from Studio to see startup measurements, and captured system traces * for investigating your app's performance from a hot state. */ @RunWith(AndroidJUnit4ClassRunner::class) class HotStartupBenchmark : AbstractStartupBenchmark(StartupMode.HOT) /** * Base class for benchmarks with different startup modes. * Enables app startups from various states of baseline profile or [CompilationMode]s. */ abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { @get:Rule val benchmarkRule = MacrobenchmarkRule() @Test fun startupNoCompilation() = startup(CompilationMode.None()) @Test fun startupBaselineProfileDisabled() = startup( CompilationMode.Partial( baselineProfileMode = BaselineProfileMode.Disable, warmupIterations = 1, ), ) @Test fun startupBaselineProfile() = startup( CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require), ) @Test fun startupFullCompilation() = startup(CompilationMode.Full()) private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated( packageName = "eu.kanade.tachiyomi.benchmark", metrics = listOf(StartupTimingMetric()), compilationMode = compilationMode, iterations = 10, startupMode = startupMode, setupBlock = { pressHome() }, ) { startActivityAndWait() } } ================================================ FILE: presentation-core/build.gradle.kts ================================================ plugins { id("mihon.library") id("mihon.library.compose") kotlin("android") } android { namespace = "tachiyomi.presentation.core" defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } } kotlin { compilerOptions { freeCompilerArgs.addAll( "-opt-in=androidx.compose.animation.ExperimentalAnimationApi", "-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi", "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi", "-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi", "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api", "-opt-in=androidx.compose.ui.ExperimentalComposeUiApi", "-opt-in=kotlinx.coroutines.FlowPreview", ) } } dependencies { api(projects.core.common) api(projects.i18n) // Compose implementation(compose.activity) implementation(compose.foundation) implementation(compose.material3.core) implementation(compose.material.icons) implementation(compose.animation) implementation(compose.animation.graphics) debugImplementation(compose.ui.tooling) implementation(compose.ui.tooling.preview) implementation(compose.ui.util) implementation(androidx.paging.runtime) implementation(androidx.paging.compose) implementation(kotlinx.immutables) } ================================================ FILE: presentation-core/consumer-rules.pro ================================================ ================================================ FILE: presentation-core/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: presentation-core/src/main/AndroidManifest.xml ================================================ ================================================ FILE: presentation-core/src/main/java/mihon/presentation/core/util/PagingDataUtil.kt ================================================ package mihon.presentation.core.util import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.paging.PagingData import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow @Composable fun StateFlow>>.collectAsLazyPagingItems(): LazyPagingItems { val flow by collectAsState() return flow.collectAsLazyPagingItems() } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/ActionButton.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.style.TextAlign import tachiyomi.presentation.core.components.material.padding @Composable fun ActionButton( title: String, icon: ImageVector, onClick: () -> Unit, modifier: Modifier = Modifier, ) { TextButton( modifier = modifier, onClick = onClick, ) { Column( verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), horizontalAlignment = Alignment.CenterHorizontally, ) { Icon( imageVector = icon, contentDescription = null, ) Text( text = title, textAlign = TextAlign.Center, ) } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/AdaptiveSheet.kt ================================================ package tachiyomi.presentation.core.components import androidx.activity.compose.BackHandler import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.AnchoredDraggableDefaults import androidx.compose.foundation.gestures.AnchoredDraggableState import androidx.compose.foundation.gestures.DraggableAnchors import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.anchoredDraggable import androidx.compose.foundation.gestures.animateTo import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredWidthIn import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.widthIn import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.dp import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch import kotlin.math.roundToInt @Composable fun AdaptiveSheet( isTabletUi: Boolean, enableSwipeDismiss: Boolean, onDismissRequest: () -> Unit, modifier: Modifier = Modifier, content: @Composable () -> Unit, ) { val density = LocalDensity.current val scope = rememberCoroutineScope() if (isTabletUi) { var targetAlpha by remember { mutableFloatStateOf(0f) } val alpha by animateFloatAsState( targetValue = targetAlpha, animationSpec = sheetAnimationSpec, label = "alpha", ) val internalOnDismissRequest: () -> Unit = { scope.launch { targetAlpha = 0f onDismissRequest() } } Box( modifier = Modifier .clickable( interactionSource = null, indication = null, onClick = internalOnDismissRequest, ) .fillMaxSize() .alpha(alpha), contentAlignment = Alignment.Center, ) { Surface( modifier = Modifier .requiredWidthIn(max = 460.dp) .clickable( interactionSource = null, indication = null, onClick = {}, ) .systemBarsPadding() .padding(vertical = 16.dp) .then(modifier), shape = MaterialTheme.shapes.extraLarge, color = MaterialTheme.colorScheme.surfaceContainerHigh, content = { BackHandler( enabled = remember { derivedStateOf { alpha > 0f } }.value, onBack = internalOnDismissRequest, ) content() }, ) LaunchedEffect(Unit) { targetAlpha = 1f } } } else { val anchoredDraggableState = rememberSaveable(saver = AnchoredDraggableState.Saver()) { AnchoredDraggableState(initialValue = 1) } val flingBehavior = AnchoredDraggableDefaults.flingBehavior( state = anchoredDraggableState, positionalThreshold = { _: Float -> with(density) { 56.dp.toPx() } }, animationSpec = sheetAnimationSpec, ) val internalOnDismissRequest = { if (anchoredDraggableState.settledValue == 0) { scope.launch { anchoredDraggableState.animateTo(1) } } } Box( modifier = Modifier .clickable( interactionSource = null, indication = null, onClick = internalOnDismissRequest, ) .fillMaxSize() .onSizeChanged { val anchors = DraggableAnchors { 0 at 0f 1 at it.height.toFloat() } anchoredDraggableState.updateAnchors(anchors) }, contentAlignment = Alignment.BottomCenter, ) { Surface( modifier = Modifier .widthIn(max = 460.dp) .clickable( interactionSource = null, indication = null, onClick = {}, ) .then( if (enableSwipeDismiss) { Modifier.nestedScroll( remember(anchoredDraggableState) { anchoredDraggableState.preUpPostDownNestedScrollConnection { scope.launch { anchoredDraggableState.settle(sheetAnimationSpec) } } }, ) } else { Modifier }, ) .then(modifier) .offset { IntOffset( 0, anchoredDraggableState.offset .takeIf { it.isFinite() } ?.roundToInt() ?: 0, ) } .anchoredDraggable( state = anchoredDraggableState, orientation = Orientation.Vertical, enabled = enableSwipeDismiss, flingBehavior = flingBehavior, ) .navigationBarsPadding() .statusBarsPadding(), shape = MaterialTheme.shapes.extraLarge, color = MaterialTheme.colorScheme.surfaceContainerHigh, content = { BackHandler( enabled = anchoredDraggableState.targetValue == 0, onBack = internalOnDismissRequest, ) content() }, ) LaunchedEffect(anchoredDraggableState) { scope.launch { anchoredDraggableState.animateTo(0) } snapshotFlow { anchoredDraggableState.settledValue } .drop(1) .filter { it == 1 } .collectLatest { onDismissRequest() } } } } } private fun AnchoredDraggableState.preUpPostDownNestedScrollConnection( onFling: (velocity: Float) -> Unit, ) = object : NestedScrollConnection { override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { val delta = available.toFloat() return if (delta < 0 && source == NestedScrollSource.UserInput) { dispatchRawDelta(delta).toOffset() } else { Offset.Zero } } override fun onPostScroll( consumed: Offset, available: Offset, source: NestedScrollSource, ): Offset { return if (source == NestedScrollSource.UserInput) { dispatchRawDelta(available.toFloat()).toOffset() } else { Offset.Zero } } override suspend fun onPreFling(available: Velocity): Velocity { val toFling = available.toFloat() return if (toFling < 0 && offset > anchors.minPosition()) { onFling(toFling) // since we go to the anchor with tween settling, consume all for the best UX available } else { Velocity.Zero } } override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity { onFling(available.toFloat()) return if (targetValue != settledValue) { available } else { Velocity.Zero } } private fun Float.toOffset(): Offset = Offset(0f, this) @JvmName("velocityToFloat") private fun Velocity.toFloat() = this.y @JvmName("offsetToFloat") private fun Offset.toFloat(): Float = this.y } private val sheetAnimationSpec = tween(durationMillis = 350) ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/Badges.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.Placeholder import androidx.compose.ui.text.PlaceholderVerticalAlign import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import kotlinx.collections.immutable.persistentMapOf @Composable fun BadgeGroup( modifier: Modifier = Modifier, shape: Shape = MaterialTheme.shapes.extraSmall, content: @Composable RowScope.() -> Unit, ) { Row(modifier = modifier.clip(shape)) { content() } } @Composable fun Badge( text: String, modifier: Modifier = Modifier, color: Color = MaterialTheme.colorScheme.secondary, textColor: Color = MaterialTheme.colorScheme.onSecondary, shape: Shape = RectangleShape, ) { Text( text = text, modifier = modifier .clip(shape) .background(color) .padding(horizontal = 3.dp, vertical = 1.dp), color = textColor, fontWeight = FontWeight.Medium, maxLines = 1, style = MaterialTheme.typography.bodySmall, ) } @Composable fun Badge( imageVector: ImageVector, modifier: Modifier = Modifier, color: Color = MaterialTheme.colorScheme.secondary, iconColor: Color = MaterialTheme.colorScheme.onSecondary, shape: Shape = RectangleShape, ) { val iconContentPlaceholder = "[icon]" val text = buildAnnotatedString { appendInlineContent(iconContentPlaceholder) } val inlineContent = persistentMapOf( Pair( iconContentPlaceholder, InlineTextContent( Placeholder( width = MaterialTheme.typography.bodySmall.fontSize, height = MaterialTheme.typography.bodySmall.fontSize, placeholderVerticalAlign = PlaceholderVerticalAlign.Center, ), ) { Icon( imageVector = imageVector, tint = iconColor, contentDescription = null, ) }, ), ) Text( text = text, inlineContent = inlineContent, modifier = modifier .clip(shape) .background(color) .padding(horizontal = 3.dp, vertical = 1.dp), color = iconColor, fontWeight = FontWeight.Medium, maxLines = 1, style = MaterialTheme.typography.bodySmall, ) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/CircularProgressIndicator.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.animation.AnimatedContent import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.RepeatMode import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.rememberInfiniteTransition import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProgressIndicatorDefaults import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.rotate import androidx.compose.ui.tooling.preview.Preview /** * A combined [CircularProgressIndicator] that always rotates. * * By always rotating we give the feedback to the user that the application isn't 'stuck'. */ @Composable fun CombinedCircularProgressIndicator( progress: () -> Float, modifier: Modifier = Modifier, ) { AnimatedContent( targetState = progress() == 0f, transitionSpec = { fadeIn() togetherWith fadeOut() }, label = "progressState", modifier = modifier, ) { indeterminate -> if (indeterminate) { // Indeterminate CircularProgressIndicator() } else { // Determinate val infiniteTransition = rememberInfiniteTransition(label = "infiniteRotation") val rotation by infiniteTransition.animateFloat( initialValue = 0f, targetValue = 360f, animationSpec = infiniteRepeatable( animation = tween(2000, easing = LinearEasing), repeatMode = RepeatMode.Restart, ), label = "rotation", ) val animatedProgress by animateFloatAsState( targetValue = progress(), animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec, label = "progress", ) CircularProgressIndicator( progress = { animatedProgress }, modifier = Modifier.rotate(rotation), ) } } } @Preview @Composable private fun CombinedCircularProgressIndicatorPreview() { var progress by remember { mutableFloatStateOf(0f) } MaterialTheme { Scaffold( bottomBar = { Button( modifier = Modifier.fillMaxWidth(), onClick = { progress = when (progress) { 0f -> 0.15f 0.15f -> 0.25f 0.25f -> 0.5f 0.5f -> 0.75f 0.75f -> 0.95f else -> 0f } }, ) { Text("change") } }, ) { Box( contentAlignment = Alignment.Center, modifier = Modifier .fillMaxSize() .padding(it), ) { CombinedCircularProgressIndicator(progress = { progress }) } } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/CollapsibleBox.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ExpandLess import androidx.compose.material.icons.filled.ExpandMore import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import tachiyomi.presentation.core.theme.header @Composable fun CollapsibleBox( heading: String, content: @Composable () -> Unit, ) { var expanded by remember { mutableStateOf(false) } Column { Row( modifier = Modifier .fillMaxWidth() .clickable { expanded = !expanded } .padding(horizontal = 24.dp, vertical = 12.dp), ) { Text( text = heading, style = MaterialTheme.typography.header, ) Spacer(modifier = Modifier.weight(1f)) Icon( imageVector = if (expanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore, contentDescription = null, ) } AnimatedVisibility(visible = expanded) { content() } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/LabeledCheckbox.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.material3.Checkbox import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp import tachiyomi.presentation.core.components.material.padding @Composable fun LabeledCheckbox( label: String, checked: Boolean, onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, ) { Row( modifier = modifier .clip(MaterialTheme.shapes.small) .fillMaxWidth() .heightIn(min = 48.dp) .clickable( role = Role.Checkbox, onClick = { if (enabled) { onCheckedChange(!checked) } }, ), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Checkbox( checked = checked, onCheckedChange = null, enabled = enabled, ) Text(text = label) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/LazyColumnWithAction.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @Composable fun LazyColumnWithAction( contentPadding: PaddingValues, actionLabel: String, onClickAction: () -> Unit, modifier: Modifier = Modifier, actionEnabled: Boolean = true, content: LazyListScope.() -> Unit, ) { Column( modifier = modifier .padding(contentPadding) .fillMaxSize(), ) { LazyColumn( modifier = Modifier.weight(1f), content = content, ) HorizontalDivider() Button( modifier = Modifier .padding(horizontal = 16.dp, vertical = 8.dp) .fillMaxWidth(), enabled = actionEnabled, onClick = onClickAction, ) { Text( text = actionLabel, color = MaterialTheme.colorScheme.onPrimary, ) } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/LazyGrid.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @Composable fun FastScrollLazyVerticalGrid( columns: GridCells, modifier: Modifier = Modifier, state: LazyGridState = rememberLazyGridState(), thumbAllowed: () -> Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, contentPadding: PaddingValues = PaddingValues(0.dp), topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, reverseLayout: Boolean = false, verticalArrangement: Arrangement.Vertical = if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, horizontalArrangement: Arrangement.Horizontal = Arrangement.Start, userScrollEnabled: Boolean = true, content: LazyGridScope.() -> Unit, ) { VerticalGridFastScroller( state = state, columns = columns, arrangement = horizontalArrangement, contentPadding = contentPadding, modifier = modifier, thumbAllowed = thumbAllowed, thumbColor = thumbColor, topContentPadding = topContentPadding, bottomContentPadding = bottomContentPadding, endContentPadding = endContentPadding, ) { LazyVerticalGrid( columns = columns, state = state, contentPadding = contentPadding, reverseLayout = reverseLayout, verticalArrangement = verticalArrangement, horizontalArrangement = horizontalArrangement, userScrollEnabled = userScrollEnabled, content = content, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/LazyList.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp import tachiyomi.presentation.core.util.drawVerticalScrollbar /** * LazyColumn with scrollbar. */ @Composable fun ScrollbarLazyColumn( modifier: Modifier = Modifier, state: LazyListState = rememberLazyListState(), contentPadding: PaddingValues = PaddingValues(0.dp), reverseLayout: Boolean = false, verticalArrangement: Arrangement.Vertical = if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, horizontalAlignment: Alignment.Horizontal = Alignment.Start, userScrollEnabled: Boolean = true, content: LazyListScope.() -> Unit, ) { val direction = LocalLayoutDirection.current val density = LocalDensity.current val positionOffset = remember(contentPadding) { with(density) { contentPadding.calculateEndPadding(direction).toPx() } } LazyColumn( modifier = modifier .drawVerticalScrollbar( state = state, reverseScrolling = reverseLayout, positionOffsetPx = positionOffset, ), state = state, contentPadding = contentPadding, reverseLayout = reverseLayout, verticalArrangement = verticalArrangement, horizontalAlignment = horizontalAlignment, userScrollEnabled = userScrollEnabled, content = content, ) } /** * LazyColumn with fast scroller. */ @Composable fun FastScrollLazyColumn( modifier: Modifier = Modifier, state: LazyListState = rememberLazyListState(), contentPadding: PaddingValues = PaddingValues(0.dp), reverseLayout: Boolean = false, verticalArrangement: Arrangement.Vertical = if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, horizontalAlignment: Alignment.Horizontal = Alignment.Start, userScrollEnabled: Boolean = true, content: LazyListScope.() -> Unit, ) { VerticalFastScroller( listState = state, modifier = modifier, topContentPadding = contentPadding.calculateTopPadding(), endContentPadding = contentPadding.calculateEndPadding(LocalLayoutDirection.current), ) { LazyColumn( state = state, contentPadding = contentPadding, reverseLayout = reverseLayout, verticalArrangement = verticalArrangement, horizontalAlignment = horizontalAlignment, userScrollEnabled = userScrollEnabled, content = content, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/LinkIcon.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.padding import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.dp @Composable fun LinkIcon( label: String, icon: ImageVector, url: String, modifier: Modifier = Modifier, ) { val uriHandler = LocalUriHandler.current IconButton( modifier = modifier.padding(4.dp), onClick = { uriHandler.openUri(url) }, ) { Icon( imageVector = icon, tint = MaterialTheme.colorScheme.primary, contentDescription = label, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/ListGroupHeader.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import tachiyomi.presentation.core.components.material.padding @Composable fun ListGroupHeader( text: String, modifier: Modifier = Modifier, ) { Text( text = text, modifier = modifier .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.SemiBold, style = MaterialTheme.typography.bodyMedium, ) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/Pill.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp @Composable fun Pill( text: String, modifier: Modifier = Modifier, color: Color = MaterialTheme.colorScheme.surfaceContainerHigh, contentColor: Color = MaterialTheme.colorScheme.onSurface, style: TextStyle = LocalTextStyle.current, ) { Surface( modifier = modifier .padding(start = 4.dp), shape = MaterialTheme.shapes.extraLarge, color = color, contentColor = contentColor, ) { Box( modifier = Modifier .padding(6.dp, 1.dp), contentAlignment = Alignment.Center, ) { Text( text = text, maxLines = 1, style = style, ) } } } @Composable fun Pill( text: String, modifier: Modifier = Modifier, color: Color = MaterialTheme.colorScheme.surfaceContainerHigh, contentColor: Color = MaterialTheme.colorScheme.onSurface, fontSize: TextUnit = LocalTextStyle.current.fontSize, ) { Pill( text = text, modifier = modifier, color = color, contentColor = contentColor, style = LocalTextStyle.current.merge(fontSize = fontSize), ) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/SectionCard.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.material3.ElevatedCard import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import dev.icerock.moko.resources.StringResource import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @Composable fun LazyItemScope.SectionCard( titleRes: StringResource? = null, content: @Composable ColumnScope.() -> Unit, ) { if (titleRes != null) { Text( modifier = Modifier.padding(horizontal = MaterialTheme.padding.extraLarge), text = stringResource(titleRes), style = MaterialTheme.typography.titleSmall, ) } ElevatedCard( modifier = Modifier .fillMaxWidth() .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), shape = MaterialTheme.shapes.extraLarge, ) { Column(modifier = Modifier.padding(MaterialTheme.padding.medium)) { content() } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.clickable import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.FlowRowScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowDownward import androidx.compose.material.icons.filled.ArrowUpward import androidx.compose.material.icons.rounded.CheckBox import androidx.compose.material.icons.rounded.CheckBoxOutlineBlank import androidx.compose.material.icons.rounded.DisabledByDefault import androidx.compose.material3.Checkbox import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.RadioButton import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.text.TextStyle import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.toggle import tachiyomi.presentation.core.components.material.DISABLED_ALPHA import tachiyomi.presentation.core.components.material.Slider import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.collectAsState import tachiyomi.presentation.core.util.secondaryItemAlpha object SettingsItemsPaddings { val Horizontal = 24.dp val Vertical = 10.dp } @Composable fun HeadingItem(labelRes: StringResource) { HeadingItem(stringResource(labelRes)) } @Composable fun HeadingItem(text: String) { Text( text = text, style = MaterialTheme.typography.header, modifier = Modifier .fillMaxWidth() .padding( horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical, ), ) } @Composable fun IconItem(label: String, icon: ImageVector, onClick: () -> Unit) { BaseSettingsItem( label = label, widget = { Icon( imageVector = icon, contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) }, onClick = onClick, ) } @Composable fun SortItem(label: String, sortDescending: Boolean?, onClick: () -> Unit) { val arrowIcon = when (sortDescending) { true -> Icons.Default.ArrowDownward false -> Icons.Default.ArrowUpward null -> null } BaseSortItem( label = label, icon = arrowIcon, onClick = onClick, ) } @Composable fun BaseSortItem(label: String, icon: ImageVector?, onClick: () -> Unit) { BaseSettingsItem( label = label, widget = { if (icon != null) { Icon( imageVector = icon, contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) } else { Spacer(modifier = Modifier.size(24.dp)) } }, onClick = onClick, ) } @Composable fun CheckboxItem(label: String, pref: Preference) { val checked by pref.collectAsState() CheckboxItem( label = label, checked = checked, onClick = { pref.toggle() }, ) } @Composable fun CheckboxItem(label: String, checked: Boolean, onClick: () -> Unit) { BaseSettingsItem( label = label, widget = { Checkbox( checked = checked, onCheckedChange = null, ) }, onClick = onClick, ) } @Composable fun RadioItem(label: String, selected: Boolean, onClick: () -> Unit) { BaseSettingsItem( label = label, widget = { RadioButton( selected = selected, onClick = null, ) }, onClick = onClick, ) } @Composable fun SliderItem( value: Int, valueRange: IntProgression, label: String, onChange: (Int) -> Unit, steps: Int = with(valueRange) { (last - first) - 1 }, valueString: String = value.toString(), labelStyle: TextStyle = MaterialTheme.typography.bodyMedium, pillColor: Color = MaterialTheme.colorScheme.surfaceContainerHigh, ) { BaseSliderItem( value = value, valueRange = valueRange, steps = steps, title = label, valueString = valueString, onChange = onChange, titleStyle = labelStyle, pillColor = pillColor, modifier = Modifier.padding( horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical, ), ) } @Composable fun BaseSliderItem( value: Int, valueRange: IntProgression, title: String, onChange: (Int) -> Unit, modifier: Modifier = Modifier, subtitle: String? = null, steps: Int = with(valueRange) { (last - first) - 1 }, valueString: String = value.toString(), titleStyle: TextStyle = MaterialTheme.typography.titleLarge, subtitleStyle: TextStyle = MaterialTheme.typography.bodySmall, pillColor: Color = MaterialTheme.colorScheme.surfaceContainerHigh, ) { val haptic = LocalHapticFeedback.current Column( modifier = Modifier .fillMaxWidth() .then(modifier), verticalArrangement = Arrangement.spacedBy(2.dp), ) { Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { Column(modifier = Modifier.weight(1f)) { Text( text = title, style = titleStyle, ) if (subtitle != null) { Text( text = subtitle, style = subtitleStyle, modifier = Modifier.secondaryItemAlpha(), ) } } Pill( text = valueString, style = MaterialTheme.typography.bodyMedium, color = pillColor, ) } Slider( value = value, onValueChange = f@{ if (it == value) return@f onChange(it) haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove) }, valueRange = valueRange, steps = steps, ) } } @Composable @PreviewLightDark fun SliderItemPreview() { MaterialTheme(if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()) { var value by remember { mutableIntStateOf(0) } Surface { BaseSliderItem( value = value, valueRange = 0..10, title = "Item per row", valueString = if (value == 0) "Auto" else value.toString(), onChange = { value = it }, modifier = Modifier.padding( horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical, ), ) } } } @Composable fun SelectItem( label: String, options: Array, selectedIndex: Int, onSelect: (Int) -> Unit, ) { var expanded by remember { mutableStateOf(false) } ExposedDropdownMenuBox( expanded = expanded, onExpandedChange = { expanded = !expanded }, ) { OutlinedTextField( modifier = Modifier .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryNotEditable) .fillMaxWidth() .padding( horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical, ), label = { Text(text = label) }, value = options[selectedIndex].toString(), onValueChange = {}, readOnly = true, singleLine = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon( expanded = expanded, ) }, colors = ExposedDropdownMenuDefaults.textFieldColors(), ) ExposedDropdownMenu( modifier = Modifier.exposedDropdownSize(), expanded = expanded, onDismissRequest = { expanded = false }, ) { options.forEachIndexed { index, text -> DropdownMenuItem( text = { Text(text.toString()) }, onClick = { onSelect(index) expanded = false }, contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding, ) } } } } @Composable fun TriStateItem( label: String, state: TriState, enabled: Boolean = true, onClick: ((TriState) -> Unit)?, ) { Row( modifier = Modifier .clickable( enabled = enabled && onClick != null, onClick = { when (state) { TriState.DISABLED -> onClick?.invoke(TriState.ENABLED_IS) TriState.ENABLED_IS -> onClick?.invoke(TriState.ENABLED_NOT) TriState.ENABLED_NOT -> onClick?.invoke(TriState.DISABLED) } }, ) .fillMaxWidth() .padding( horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical, ), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large), ) { val stateAlpha = if (enabled && onClick != null) 1f else DISABLED_ALPHA Icon( imageVector = when (state) { TriState.DISABLED -> Icons.Rounded.CheckBoxOutlineBlank TriState.ENABLED_IS -> Icons.Rounded.CheckBox TriState.ENABLED_NOT -> Icons.Rounded.DisabledByDefault }, contentDescription = null, tint = if (!enabled || state == TriState.DISABLED) { MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = stateAlpha) } else { when (onClick) { null -> MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA) else -> MaterialTheme.colorScheme.primary } }, ) Text( text = label, color = MaterialTheme.colorScheme.onSurface.copy(alpha = stateAlpha), style = MaterialTheme.typography.bodyMedium, ) } } @Composable fun TextItem(label: String, value: String, onChange: (String) -> Unit) { OutlinedTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = SettingsItemsPaddings.Horizontal, vertical = 4.dp), label = { Text(text = label) }, value = value, onValueChange = onChange, singleLine = true, ) } @Composable fun SettingsChipRow(labelRes: StringResource, content: @Composable FlowRowScope.() -> Unit) { Column { HeadingItem(labelRes) FlowRow( modifier = Modifier.padding( start = SettingsItemsPaddings.Horizontal, top = 0.dp, end = SettingsItemsPaddings.Horizontal, bottom = SettingsItemsPaddings.Vertical, ), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), content = content, ) } } @Composable fun SettingsIconGrid(labelRes: StringResource, content: LazyGridScope.() -> Unit) { Column { HeadingItem(labelRes) LazyVerticalGrid( columns = GridCells.Adaptive(128.dp), modifier = Modifier.padding( start = SettingsItemsPaddings.Horizontal, end = SettingsItemsPaddings.Horizontal, bottom = SettingsItemsPaddings.Vertical, ), verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), content = content, ) } } @Composable private fun BaseSettingsItem( label: String, widget: @Composable RowScope.() -> Unit, onClick: () -> Unit, ) { Row( modifier = Modifier .clickable(onClick = onClick) .fillMaxWidth() .padding( horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical, ), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(24.dp), ) { widget(this) Text( text = label, style = MaterialTheme.typography.bodyMedium, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/TwoPanelBox.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp @Composable fun TwoPanelBox( startContent: @Composable BoxScope.() -> Unit, endContent: @Composable BoxScope.() -> Unit, modifier: Modifier = Modifier, contentWindowInsets: WindowInsets = WindowInsets(0), ) { val direction = LocalLayoutDirection.current val padding = contentWindowInsets.asPaddingValues() val startPadding = padding.calculateStartPadding(direction) val endPadding = padding.calculateEndPadding(direction) BoxWithConstraints(modifier = modifier.fillMaxSize()) { val width = maxWidth - startPadding - endPadding val firstWidth = (width / 2).coerceAtMost(450.dp) val secondWidth = width - firstWidth Box( modifier = Modifier .align(Alignment.TopStart) .width(firstWidth + startPadding), content = startContent, ) Box( modifier = Modifier .align(Alignment.TopEnd) .width(secondWidth + endPadding), content = endContent, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/VerticalFastScroller.kt ================================================ package tachiyomi.presentation.core.components import android.view.ViewConfiguration import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.draggable import androidx.compose.foundation.gestures.rememberDraggableState import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsDraggedAsState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.systemGestureExclusion import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.SubcomposeLayout import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastFirstOrNull import androidx.compose.ui.util.fastForEach import androidx.compose.ui.util.fastLastOrNull import androidx.compose.ui.util.fastMaxBy import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.sample import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX import kotlin.math.abs import kotlin.math.max import kotlin.math.min import kotlin.math.roundToInt /** * Draws vertical fast scroller to a lazy list * * Set key with [STICKY_HEADER_KEY_PREFIX] prefix to any sticky header item in the list. */ @Composable fun VerticalFastScroller( listState: LazyListState, modifier: Modifier = Modifier, thumbAllowed: () -> Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, content: @Composable () -> Unit, ) { SubcomposeLayout(modifier = modifier) { constraints -> val contentPlaceable = subcompose("content", content).map { it.measure(constraints) } val contentHeight = contentPlaceable.fastMaxBy { it.height }?.height ?: 0 val contentWidth = contentPlaceable.fastMaxBy { it.width }?.width ?: 0 val scrollerConstraints = constraints.copy(minWidth = 0, minHeight = 0) val scrollerPlaceable = subcompose("scroller") { val layoutInfo = listState.layoutInfo if (layoutInfo.visibleItemsInfo.isEmpty() || layoutInfo.totalItemsCount == 0) return@subcompose val thumbTopPadding = with(LocalDensity.current) { topContentPadding.toPx() } var thumbOffsetY by remember(thumbTopPadding) { mutableFloatStateOf(thumbTopPadding) } val dragInteractionSource = remember { MutableInteractionSource() } val isThumbDragged by dragInteractionSource.collectIsDraggedAsState() val scrolled = remember { MutableSharedFlow( extraBufferCapacity = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST, ) } // listState.isScrollInProgress occasionally flickers val scrollStateTracker = remember { MutableData(listState.isScrollInProgress) } val stableScrollInProgress = scrollStateTracker.value || listState.isScrollInProgress scrollStateTracker.value = listState.isScrollInProgress val anyScrollInProgress = stableScrollInProgress || isThumbDragged val thumbBottomPadding = with(LocalDensity.current) { bottomContentPadding.toPx() } val heightPx = contentHeight.toFloat() - thumbTopPadding - thumbBottomPadding - listState.layoutInfo.afterContentPadding val thumbHeightPx = with(LocalDensity.current) { ThumbLength.toPx() } val trackHeightPx = heightPx - thumbHeightPx val scrollHeightPx = contentHeight.toFloat() - listState.layoutInfo.beforeContentPadding - listState.layoutInfo.afterContentPadding - thumbBottomPadding val visibleItems = layoutInfo.visibleItemsInfo val topItem = visibleItems.fastFirstOrNull { it.bottom >= 0 && (it.key as? String)?.startsWith(STICKY_HEADER_KEY_PREFIX)?.not() ?: true } ?: visibleItems.first() val bottomItem = visibleItems.fastLastOrNull { it.top <= scrollHeightPx && (it.key as? String)?.startsWith(STICKY_HEADER_KEY_PREFIX)?.not() ?: true } ?: visibleItems.last() val topHiddenProportion = -1f * topItem.top / topItem.size.coerceAtLeast(1) val bottomHiddenProportion = (bottomItem.bottom - scrollHeightPx) / bottomItem.size.coerceAtLeast(1) val previousSections = topHiddenProportion + topItem.index val remainingSections = bottomHiddenProportion + (layoutInfo.totalItemsCount - (bottomItem.index + 1)) val scrollableSections = previousSections + remainingSections val layoutChangeTracker = remember { MutableData(scrollableSections) } val layoutChanged = !anyScrollInProgress && abs(layoutChangeTracker.value - scrollableSections) > 0.1 layoutChangeTracker.value = scrollableSections val estimateConfidence = remember { MutableData(remainingSections) } if (layoutChanged) estimateConfidence.value = remainingSections val maxRemainingSections = remember(estimateConfidence.value) { scrollableSections } estimateConfidence.value = max(estimateConfidence.value, remainingSections) if (maxRemainingSections < 0.5) return@subcompose // When thumb dragged LaunchedEffect(thumbOffsetY) { if (layoutInfo.totalItemsCount == 0 || !isThumbDragged) return@LaunchedEffect val thumbProportion = (thumbOffsetY - thumbTopPadding) / trackHeightPx if (thumbProportion <= 0.001f) { estimateConfidence.value = -1f listState.scrollToItem(index = 0, scrollOffset = 0) scrolled.tryEmit(Unit) return@LaunchedEffect } val scrollRemainingSections = (1f - thumbProportion) * maxRemainingSections val currentSection = layoutInfo.totalItemsCount - scrollRemainingSections val scrollSectionIndex = currentSection.toInt().coerceAtMost(layoutInfo.totalItemsCount) val expectedScrollItem = visibleItems.find { it.index == scrollSectionIndex } ?: visibleItems.first() val scrollRelativeOffset = expectedScrollItem.size * (currentSection - scrollSectionIndex) val scrollSectionOffset = (scrollRelativeOffset - scrollHeightPx).roundToInt() val scrollItemIndex = scrollSectionIndex.coerceIn(0, layoutInfo.totalItemsCount - 1) val scrollItemOffset = scrollSectionOffset + (scrollSectionIndex - scrollItemIndex) * bottomItem.size listState.scrollToItem(index = scrollItemIndex, scrollOffset = scrollItemOffset) scrolled.tryEmit(Unit) } // When list scrolled if (layoutInfo.totalItemsCount != 0 && !isThumbDragged) { val proportion = 1f - remainingSections / maxRemainingSections thumbOffsetY = trackHeightPx * proportion + thumbTopPadding if (stableScrollInProgress) scrolled.tryEmit(Unit) } // Thumb alpha val alpha = remember { Animatable(0f) } val isThumbVisible = alpha.value > 0f LaunchedEffect(scrolled, alpha) { scrolled .sample(100) .collectLatest { if (thumbAllowed()) { alpha.snapTo(1f) delay(ScrollBarVisibilityDurationMillis) alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec) } else { alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec) } } } Box( modifier = Modifier .offset { IntOffset(0, thumbOffsetY.roundToInt()) } .then( // Recompose opts if (isThumbVisible && !listState.isScrollInProgress) { Modifier.draggable( interactionSource = dragInteractionSource, orientation = Orientation.Vertical, state = rememberDraggableState { delta -> val newOffsetY = thumbOffsetY + delta thumbOffsetY = newOffsetY.coerceIn( thumbTopPadding, thumbTopPadding + trackHeightPx, ) }, ) } else { Modifier }, ) .then( // Exclude thumb from gesture area only when needed if (isThumbVisible && !isThumbDragged && !listState.isScrollInProgress) { Modifier.systemGestureExclusion() } else { Modifier }, ) .height(ThumbLength) .padding(horizontal = 8.dp) .padding(end = endContentPadding) .width(ThumbThickness) .alpha(alpha.value) .background(color = thumbColor, shape = ThumbShape), ) }.map { it.measure(scrollerConstraints) } val scrollerWidth = scrollerPlaceable.fastMaxBy { it.width }?.width ?: 0 layout(contentWidth, contentHeight) { contentPlaceable.fastForEach { it.place(0, 0) } scrollerPlaceable.fastForEach { it.placeRelative(contentWidth - scrollerWidth, 0) } } } } @Composable private fun rememberColumnWidthSums( columns: GridCells, horizontalArrangement: Arrangement.Horizontal, contentPadding: PaddingValues, ) = remember List>( columns, horizontalArrangement, contentPadding, ) { { constraints -> require(constraints.maxWidth != Constraints.Infinity) { "LazyVerticalGrid's width should be bound by parent" } val horizontalPadding = contentPadding.calculateStartPadding(LayoutDirection.Ltr) + contentPadding.calculateEndPadding(LayoutDirection.Ltr) val gridWidth = constraints.maxWidth - horizontalPadding.roundToPx() with(columns) { calculateCrossAxisCellSizes( gridWidth, horizontalArrangement.spacing.roundToPx(), ).toMutableList().apply { for (i in 1.. Boolean = { true }, thumbColor: Color = MaterialTheme.colorScheme.primary, topContentPadding: Dp = Dp.Hairline, bottomContentPadding: Dp = Dp.Hairline, endContentPadding: Dp = Dp.Hairline, content: @Composable () -> Unit, ) { val slotSizesSums = rememberColumnWidthSums( columns = columns, horizontalArrangement = arrangement, contentPadding = contentPadding, ) SubcomposeLayout(modifier = modifier) { constraints -> val contentPlaceable = subcompose("content", content).map { it.measure(constraints) } val contentHeight = contentPlaceable.fastMaxBy { it.height }?.height ?: 0 val contentWidth = contentPlaceable.fastMaxBy { it.width }?.width ?: 0 val scrollerConstraints = constraints.copy(minWidth = 0, minHeight = 0) val scrollerPlaceable = subcompose("scroller") { val layoutInfo = state.layoutInfo val showScroller = remember(columns, layoutInfo.totalItemsCount) { layoutInfo.visibleItemsInfo.size < layoutInfo.totalItemsCount } if (!showScroller) return@subcompose val thumbTopPadding = with(LocalDensity.current) { topContentPadding.toPx() } var thumbOffsetY by remember(thumbTopPadding) { mutableFloatStateOf(thumbTopPadding) } val dragInteractionSource = remember { MutableInteractionSource() } val isThumbDragged by dragInteractionSource.collectIsDraggedAsState() val scrolled = remember { MutableSharedFlow( extraBufferCapacity = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST, ) } val thumbBottomPadding = with(LocalDensity.current) { bottomContentPadding.toPx() } val heightPx = contentHeight.toFloat() - thumbTopPadding - thumbBottomPadding - state.layoutInfo.afterContentPadding val thumbHeightPx = with(LocalDensity.current) { ThumbLength.toPx() } val trackHeightPx = heightPx - thumbHeightPx val columnCount = remember(columns) { slotSizesSums(constraints).size.coerceAtLeast(1) } val scrollRange = remember(columns) { computeGridScrollRange(state = state, columnCount = columnCount) } // When thumb dragged LaunchedEffect(thumbOffsetY) { if (layoutInfo.totalItemsCount == 0 || !isThumbDragged) return@LaunchedEffect val visibleItems = state.layoutInfo.visibleItemsInfo val startChild = visibleItems.first() val endChild = visibleItems.last() val laidOutArea = (endChild.offset.y + endChild.size.height) - startChild.offset.y val laidOutRows = 1 + abs(endChild.index - startChild.index) / columnCount val avgSizePerRow = laidOutArea.toFloat() / laidOutRows val scrollRatio = (thumbOffsetY - thumbTopPadding) / trackHeightPx val scrollAmt = scrollRatio * (scrollRange.toFloat() - heightPx).coerceAtLeast(1f) val rowNumber = (scrollAmt / avgSizePerRow).toInt() val rowOffset = scrollAmt - rowNumber * avgSizePerRow state.scrollToItem(index = columnCount * rowNumber, scrollOffset = rowOffset.roundToInt()) scrolled.tryEmit(Unit) } // When list scrolled LaunchedEffect(state.firstVisibleItemScrollOffset) { if (state.layoutInfo.totalItemsCount == 0 || isThumbDragged) return@LaunchedEffect val scrollOffset = computeGridScrollOffset(state = state, columnCount = columnCount) /* LazyGridItemInfo doesn't always give the accurate height of the object, so we clamp the proportion at 1 to ensure that there are no issues due to this -- ideally we would correctly compute the value */ val extraScrollRange = (scrollRange.toFloat() - heightPx).coerceAtLeast(1f) val proportion = (scrollOffset.toFloat() / extraScrollRange).coerceAtMost(1f) thumbOffsetY = trackHeightPx * proportion + thumbTopPadding scrolled.tryEmit(Unit) } // Thumb alpha val alpha = remember { Animatable(0f) } val isThumbVisible = alpha.value > 0f LaunchedEffect(scrolled, alpha) { scrolled .sample(100) .collectLatest { if (thumbAllowed()) { alpha.snapTo(1f) delay(ScrollBarVisibilityDurationMillis) alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec) } else { alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec) } } } Box( modifier = Modifier .offset { IntOffset(0, thumbOffsetY.roundToInt()) } .then( // Recompose opts if (isThumbVisible && !state.isScrollInProgress) { Modifier.draggable( interactionSource = dragInteractionSource, orientation = Orientation.Vertical, state = rememberDraggableState { delta -> val newOffsetY = thumbOffsetY + delta thumbOffsetY = newOffsetY.coerceIn( thumbTopPadding, thumbTopPadding + trackHeightPx, ) }, ) } else { Modifier }, ) .then( // Exclude thumb from gesture area only when needed if (isThumbVisible && !isThumbDragged && !state.isScrollInProgress) { Modifier.systemGestureExclusion() } else { Modifier }, ) .height(ThumbLength) .padding(end = endContentPadding) .width(ThumbThickness) .alpha(alpha.value) .background(color = thumbColor, shape = ThumbShape), ) }.map { it.measure(scrollerConstraints) } val scrollerWidth = scrollerPlaceable.fastMaxBy { it.width }?.width ?: 0 layout(contentWidth, contentHeight) { contentPlaceable.fastForEach { it.place(0, 0) } scrollerPlaceable.fastForEach { it.placeRelative(contentWidth - scrollerWidth, 0) } } } } // TODO: not sure why abs corrections are in the following functions; these can probably be removed private fun computeGridScrollOffset(state: LazyGridState, columnCount: Int): Int { if (state.layoutInfo.totalItemsCount == 0) return 0 val visibleItems = state.layoutInfo.visibleItemsInfo val startChild = visibleItems.first() val endChild = visibleItems.last() val laidOutArea = (endChild.offset.y + endChild.size.height) - startChild.offset.y val laidOutRows = 1 + abs(endChild.index - startChild.index) / columnCount val avgSizePerRow = laidOutArea.toFloat() / laidOutRows val rowsBefore = min(startChild.index, endChild.index).coerceAtLeast(0) / columnCount return (rowsBefore * avgSizePerRow - startChild.offset.y).roundToInt() } private fun computeGridScrollRange(state: LazyGridState, columnCount: Int): Int { if (state.layoutInfo.totalItemsCount == 0) return 0 val visibleItems = state.layoutInfo.visibleItemsInfo val startChild = visibleItems.first() val endChild = visibleItems.last() val laidOutArea = (endChild.offset.y + endChild.size.height) - startChild.offset.y val laidOutRows = 1 + abs(endChild.index - startChild.index) / columnCount val avgSizePerRow = laidOutArea.toFloat() / laidOutRows val totalRows = 1 + (state.layoutInfo.totalItemsCount - 1) / columnCount val endSpacing = avgSizePerRow - endChild.size.height return (endSpacing + (laidOutArea.toFloat() / laidOutRows) * totalRows).roundToInt() } private class MutableData(var value: T) object Scroller { const val STICKY_HEADER_KEY_PREFIX = "sticky:" } private val ThumbLength = 48.dp private val ThumbThickness = 12.dp private val ThumbShape = RoundedCornerShape(ThumbThickness / 2) private val ScrollBarVisibilityDurationMillis = 2000L private val ImmediateFadeOutAnimationSpec = tween( durationMillis = ViewConfiguration.getScrollBarFadeDuration(), ) private val LazyListItemInfo.top: Int get() = offset private val LazyListItemInfo.bottom: Int get() = offset + size ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/WheelPicker.kt ================================================ package tachiyomi.presentation.core.components import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.input.TextFieldLineLimits import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide import tachiyomi.presentation.core.util.clickableNoIndication import tachiyomi.presentation.core.util.showSoftKeyboard import kotlin.math.absoluteValue @Composable fun WheelNumberPicker( items: ImmutableList, modifier: Modifier = Modifier, startIndex: Int = 0, size: DpSize = DpSize(128.dp, 128.dp), onSelectionChanged: (index: Int) -> Unit = {}, backgroundContent: (@Composable (size: DpSize) -> Unit)? = { WheelPickerDefaults.Background(size = it) }, ) { WheelPicker( modifier = modifier, startIndex = startIndex, items = items, size = size, onSelectionChanged = onSelectionChanged, manualInputType = KeyboardType.Number, backgroundContent = backgroundContent, ) { WheelPickerDefaults.Item(text = "$it") } } @Composable fun WheelTextPicker( items: ImmutableList, modifier: Modifier = Modifier, startIndex: Int = 0, size: DpSize = DpSize(128.dp, 128.dp), onSelectionChanged: (index: Int) -> Unit = {}, backgroundContent: (@Composable (size: DpSize) -> Unit)? = { WheelPickerDefaults.Background(size = it) }, ) { WheelPicker( modifier = modifier, startIndex = startIndex, items = items, size = size, onSelectionChanged = onSelectionChanged, backgroundContent = backgroundContent, ) { WheelPickerDefaults.Item(text = it) } } @Composable private fun WheelPicker( items: ImmutableList, modifier: Modifier = Modifier, startIndex: Int = 0, size: DpSize = DpSize(128.dp, 128.dp), onSelectionChanged: (index: Int) -> Unit = {}, manualInputType: KeyboardType? = null, backgroundContent: (@Composable (size: DpSize) -> Unit)? = { WheelPickerDefaults.Background(size = it) }, itemContent: @Composable LazyItemScope.(item: T) -> Unit, ) { val haptic = LocalHapticFeedback.current val lazyListState = rememberLazyListState(startIndex) var internalIndex by remember { mutableIntStateOf(startIndex) } val internalOnSelectionChanged: (Int) -> Unit = { internalIndex = it onSelectionChanged(it) } LaunchedEffect(lazyListState, onSelectionChanged) { snapshotFlow { lazyListState.firstVisibleItemScrollOffset } .map { calculateSnappedItemIndex(lazyListState) } .distinctUntilChanged() .collectLatest { haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove) internalOnSelectionChanged(it) } } Box( modifier = modifier .height(size.height) .width(size.width), contentAlignment = Alignment.Center, ) { backgroundContent?.invoke(size) var showManualInput by remember { mutableStateOf(false) } if (showManualInput) { val value = rememberSaveable(saver = TextFieldState.Saver) { val currentString = items[internalIndex].toString() TextFieldState(initialText = currentString, initialSelection = TextRange(currentString.length)) } val scope = rememberCoroutineScope() val processManualInput: () -> Unit = { scope.launch { items .indexOfFirst { it.toString() == value.text } .takeIf { it >= 0 } ?.apply { internalOnSelectionChanged(this) lazyListState.scrollToItem(this) } showManualInput = false } } BasicTextField( modifier = Modifier .align(Alignment.Center) .showSoftKeyboard(true) .clearFocusOnSoftKeyboardHide(processManualInput), onKeyboardAction = { processManualInput() }, state = value, lineLimits = TextFieldLineLimits.SingleLine, keyboardOptions = KeyboardOptions( keyboardType = manualInputType!!, imeAction = ImeAction.Done, ), textStyle = MaterialTheme.typography.titleMedium + TextStyle( color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, ), cursorBrush = SolidColor(MaterialTheme.colorScheme.primary), ) } else { LazyColumn( modifier = Modifier .let { if (manualInputType != null) { it.clickableNoIndication { showManualInput = true } } else { it } }, state = lazyListState, contentPadding = PaddingValues(vertical = size.height / ROW_COUNT * ((ROW_COUNT - 1) / 2)), flingBehavior = rememberSnapFlingBehavior(lazyListState = lazyListState), ) { itemsIndexed(items) { index, item -> Box( modifier = Modifier .height(size.height / ROW_COUNT) .width(size.width) .alpha( calculateAnimatedAlpha( lazyListState = lazyListState, index = index, ), ), contentAlignment = Alignment.Center, ) { itemContent(item) } } } } } } private fun LazyListState.snapOffsetForItem(itemInfo: LazyListItemInfo): Int { val startScrollOffset = 0 val endScrollOffset = layoutInfo.let { it.viewportEndOffset - it.afterContentPadding } return startScrollOffset + (endScrollOffset - startScrollOffset - itemInfo.size) / 2 } private fun LazyListState.distanceToSnapForIndex(index: Int): Int { val itemInfo = layoutInfo.visibleItemsInfo.firstOrNull { it.index == index } if (itemInfo != null) { return itemInfo.offset - snapOffsetForItem(itemInfo) } return 0 } private fun calculateAnimatedAlpha( lazyListState: LazyListState, index: Int, ): Float { val distanceToIndexSnap = lazyListState.distanceToSnapForIndex(index).absoluteValue val viewPortHeight = lazyListState.layoutInfo.viewportSize.height.toFloat() val singleViewPortHeight = viewPortHeight / ROW_COUNT return if (distanceToIndexSnap in 0..singleViewPortHeight.toInt()) { 1.2f - (distanceToIndexSnap / singleViewPortHeight) } else { 0.2f } } private fun calculateSnappedItemIndex(lazyListState: LazyListState): Int { return lazyListState.layoutInfo.visibleItemsInfo .maxBy { calculateAnimatedAlpha(lazyListState, it.index) } .index } object WheelPickerDefaults { @Composable fun Background(size: DpSize) { androidx.compose.material3.Surface( modifier = Modifier .size(size.width, size.height / ROW_COUNT), shape = RoundedCornerShape(MaterialTheme.padding.medium), color = MaterialTheme.colorScheme.primary.copy(alpha = 0.2f), border = BorderStroke(1.dp, MaterialTheme.colorScheme.primary), content = {}, ) } @Composable fun Item(text: String) { Text( text = text, style = MaterialTheme.typography.titleMedium, maxLines = 1, ) } } private const val ROW_COUNT = 3 ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/AlertDialog.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @Composable fun AlertDialogContent( buttons: @Composable () -> Unit, modifier: Modifier = Modifier, icon: (@Composable () -> Unit)? = null, title: (@Composable () -> Unit)? = null, text: @Composable () -> Unit, ) { AlertDialogContent( modifier = modifier, icon = icon, title = title, content = { Column { CompositionLocalProvider( LocalContentColor provides MaterialTheme.colorScheme.onSurfaceVariant, ) { val textStyle = MaterialTheme.typography.bodyMedium ProvideTextStyle(textStyle) { Box( Modifier .weight(weight = 1f, fill = false) .padding(horizontal = DialogPadding) .padding(TextPadding) .align(Alignment.Start), ) { text() } } } Box( modifier = Modifier .padding( start = DialogPadding, end = DialogPadding, bottom = DialogPadding, ) .align(Alignment.End), ) { CompositionLocalProvider( LocalContentColor provides MaterialTheme.colorScheme.primary, ) { val textStyle = MaterialTheme.typography.labelLarge ProvideTextStyle(value = textStyle, content = buttons) } } } }, ) } @Composable fun AlertDialogContent( modifier: Modifier = Modifier, icon: (@Composable () -> Unit)? = null, title: (@Composable () -> Unit)? = null, content: @Composable (ColumnScope.() -> Unit)? = null, ) { Column( modifier = modifier .sizeIn(minWidth = MinWidth, maxWidth = MaxWidth), ) { if (icon != null || title != null) { Column( modifier = Modifier .padding( start = DialogPadding, top = DialogPadding, end = DialogPadding, ) .fillMaxWidth(), ) { icon?.let { CompositionLocalProvider( LocalContentColor provides MaterialTheme.colorScheme.secondary, ) { Box( Modifier .padding(IconPadding) .align(Alignment.CenterHorizontally), ) { icon() } } } title?.let { CompositionLocalProvider( LocalContentColor provides MaterialTheme.colorScheme.onSurface, ) { val textStyle = MaterialTheme.typography.headlineSmall ProvideTextStyle(textStyle) { Box( // Align the title to the center when an icon is present. Modifier .padding(TitlePadding) .align( if (icon == null) { Alignment.Start } else { Alignment.CenterHorizontally }, ), ) { title() } } } } } } content?.invoke(this) } } // Paddings for each of the dialog's parts. private val DialogPadding = 24.dp private val IconPadding = PaddingValues(bottom = 16.dp) private val TitlePadding = PaddingValues(bottom = 16.dp) private val TextPadding = PaddingValues(bottom = 24.dp) private val MinWidth = 280.dp private val MaxWidth = 560.dp ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Button.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.VectorConverter import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.interaction.FocusInteraction import androidx.compose.foundation.interaction.HoverInteraction import androidx.compose.foundation.interaction.Interaction import androidx.compose.foundation.interaction.InteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.ColorScheme import androidx.compose.material3.ElevatedButton import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.Immutable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.Stable import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import tachiyomi.presentation.core.util.animateElevation import androidx.compose.material3.ButtonDefaults as M3ButtonDefaults /** * TextButton with additional onLongClick functionality. * * @see androidx.compose.material3.TextButton */ @Composable fun TextButton( onClick: () -> Unit, modifier: Modifier = Modifier, onLongClick: (() -> Unit)? = null, enabled: Boolean = true, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, elevation: ButtonElevation? = null, shape: Shape = M3ButtonDefaults.textShape, border: BorderStroke? = null, colors: ButtonColors = ButtonColors( containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.primary, disabledContainerColor = Color.Transparent, disabledContentColor = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA), ), contentPadding: PaddingValues = M3ButtonDefaults.TextButtonContentPadding, content: @Composable RowScope.() -> Unit, ) = Button( onClick = onClick, modifier = modifier, onLongClick = onLongClick, enabled = enabled, interactionSource = interactionSource, elevation = elevation, shape = shape, border = border, colors = colors, contentPadding = contentPadding, content = content, ) /** * Button with additional onLongClick functionality. * * @see androidx.compose.material3.TextButton */ @Composable fun Button( onClick: () -> Unit, modifier: Modifier = Modifier, onLongClick: (() -> Unit)? = null, enabled: Boolean = true, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, elevation: ButtonElevation? = ButtonDefaults.buttonElevation(), shape: Shape = M3ButtonDefaults.textShape, border: BorderStroke? = null, colors: ButtonColors = ButtonDefaults.buttonColors(), contentPadding: PaddingValues = M3ButtonDefaults.ContentPadding, content: @Composable RowScope.() -> Unit, ) { val containerColor = colors.containerColor(enabled).value val contentColor = colors.contentColor(enabled).value val shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp Surface( onClick = onClick, modifier = modifier, onLongClick = onLongClick, shape = shape, color = containerColor, contentColor = contentColor, shadowElevation = shadowElevation, border = border, interactionSource = interactionSource, enabled = enabled, ) { CompositionLocalProvider(LocalContentColor provides contentColor) { ProvideTextStyle(value = MaterialTheme.typography.labelLarge) { Row( Modifier.defaultMinSize( minWidth = M3ButtonDefaults.MinWidth, minHeight = M3ButtonDefaults.MinHeight, ) .padding(contentPadding), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically, content = content, ) } } } } object ButtonDefaults { /** * Creates a [ButtonColors] that represents the default container and content colors used in a * [Button]. * * @param containerColor the container color of this [Button] when enabled. * @param contentColor the content color of this [Button] when enabled. * @param disabledContainerColor the container color of this [Button] when not enabled. * @param disabledContentColor the content color of this [Button] when not enabled. */ @Composable fun buttonColors( containerColor: Color = MaterialTheme.colorScheme.primary, contentColor: Color = MaterialTheme.colorScheme.onPrimary, disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.12f), disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA), ): ButtonColors = ButtonColors( containerColor = containerColor, contentColor = contentColor, disabledContainerColor = disabledContainerColor, disabledContentColor = disabledContentColor, ) /** * Creates a [ButtonElevation] that will animate between the provided values according to the * Material specification for a [Button]. * * @param defaultElevation the elevation used when the [Button] is enabled, and has no other * [Interaction]s. * @param pressedElevation the elevation used when this [Button] is enabled and pressed. * @param focusedElevation the elevation used when the [Button] is enabled and focused. * @param hoveredElevation the elevation used when the [Button] is enabled and hovered. * @param disabledElevation the elevation used when the [Button] is not enabled. */ @Composable fun buttonElevation( defaultElevation: Dp = 0.dp, pressedElevation: Dp = 0.dp, focusedElevation: Dp = 0.dp, hoveredElevation: Dp = 1.dp, disabledElevation: Dp = 0.dp, ): ButtonElevation = ButtonElevation( defaultElevation = defaultElevation, pressedElevation = pressedElevation, focusedElevation = focusedElevation, hoveredElevation = hoveredElevation, disabledElevation = disabledElevation, ) } /** * Represents the elevation for a button in different states. * * - See [M3ButtonDefaults.buttonElevation] for the default elevation used in a [Button]. * - See [M3ButtonDefaults.elevatedButtonElevation] for the default elevation used in a * [ElevatedButton]. */ @Stable class ButtonElevation internal constructor( private val defaultElevation: Dp, private val pressedElevation: Dp, private val focusedElevation: Dp, private val hoveredElevation: Dp, private val disabledElevation: Dp, ) { /** * Represents the tonal elevation used in a button, depending on its [enabled] state and * [interactionSource]. This should typically be the same value as the [shadowElevation]. * * Tonal elevation is used to apply a color shift to the surface to give the it higher emphasis. * When surface's color is [ColorScheme.surface], a higher elevation will result in a darker * color in light theme and lighter color in dark theme. * * See [shadowElevation] which controls the elevation of the shadow drawn around the button. * * @param enabled whether the button is enabled * @param interactionSource the [InteractionSource] for this button */ @Composable internal fun tonalElevation(enabled: Boolean, interactionSource: InteractionSource): State { return animateElevation(enabled = enabled, interactionSource = interactionSource) } /** * Represents the shadow elevation used in a button, depending on its [enabled] state and * [interactionSource]. This should typically be the same value as the [tonalElevation]. * * Shadow elevation is used to apply a shadow around the button to give it higher emphasis. * * See [tonalElevation] which controls the elevation with a color shift to the surface. * * @param enabled whether the button is enabled * @param interactionSource the [InteractionSource] for this button */ @Composable internal fun shadowElevation( enabled: Boolean, interactionSource: InteractionSource, ): State { return animateElevation(enabled = enabled, interactionSource = interactionSource) } @Composable private fun animateElevation( enabled: Boolean, interactionSource: InteractionSource, ): State { val interactions = remember { mutableStateListOf() } LaunchedEffect(interactionSource) { interactionSource.interactions.collect { interaction -> when (interaction) { is HoverInteraction.Enter -> { interactions.add(interaction) } is HoverInteraction.Exit -> { interactions.remove(interaction.enter) } is FocusInteraction.Focus -> { interactions.add(interaction) } is FocusInteraction.Unfocus -> { interactions.remove(interaction.focus) } is PressInteraction.Press -> { interactions.add(interaction) } is PressInteraction.Release -> { interactions.remove(interaction.press) } is PressInteraction.Cancel -> { interactions.remove(interaction.press) } } } } val interaction = interactions.lastOrNull() val target = if (!enabled) { disabledElevation } else { when (interaction) { is PressInteraction.Press -> pressedElevation is HoverInteraction.Enter -> hoveredElevation is FocusInteraction.Focus -> focusedElevation else -> defaultElevation } } val animatable = remember { Animatable(target, Dp.VectorConverter) } if (!enabled) { // No transition when moving to a disabled state LaunchedEffect(target) { animatable.snapTo(target) } } else { LaunchedEffect(target) { val lastInteraction = when (animatable.targetValue) { pressedElevation -> PressInteraction.Press(Offset.Zero) hoveredElevation -> HoverInteraction.Enter() focusedElevation -> FocusInteraction.Focus() else -> null } animatable.animateElevation( from = lastInteraction, to = interaction, target = target, ) } } return animatable.asState() } override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null || other !is ButtonElevation) return false if (defaultElevation != other.defaultElevation) return false if (pressedElevation != other.pressedElevation) return false if (focusedElevation != other.focusedElevation) return false if (hoveredElevation != other.hoveredElevation) return false if (disabledElevation != other.disabledElevation) return false return true } override fun hashCode(): Int { var result = defaultElevation.hashCode() result = 31 * result + pressedElevation.hashCode() result = 31 * result + focusedElevation.hashCode() result = 31 * result + hoveredElevation.hashCode() result = 31 * result + disabledElevation.hashCode() return result } } /** * Represents the container and content colors used in a button in different states. * * - See [M3ButtonDefaults.buttonColors] for the default colors used in a [Button]. * - See [M3ButtonDefaults.elevatedButtonColors] for the default colors used in a [ElevatedButton]. * - See [M3ButtonDefaults.textButtonColors] for the default colors used in a [TextButton]. */ @Immutable class ButtonColors internal constructor( private val containerColor: Color, private val contentColor: Color, private val disabledContainerColor: Color, private val disabledContentColor: Color, ) { /** * Represents the container color for this button, depending on [enabled]. * * @param enabled whether the button is enabled */ @Composable internal fun containerColor(enabled: Boolean): State { return rememberUpdatedState(if (enabled) containerColor else disabledContainerColor) } /** * Represents the content color for this button, depending on [enabled]. * * @param enabled whether the button is enabled */ @Composable internal fun contentColor(enabled: Boolean): State { return rememberUpdatedState(if (enabled) contentColor else disabledContentColor) } override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null || other !is ButtonColors) return false if (containerColor != other.containerColor) return false if (contentColor != other.contentColor) return false if (disabledContainerColor != other.disabledContainerColor) return false if (disabledContentColor != other.disabledContentColor) return false return true } override fun hashCode(): Int { var result = containerColor.hashCode() result = 31 * result + contentColor.hashCode() result = 31 * result + disabledContainerColor.hashCode() result = 31 * result + disabledContentColor.hashCode() return result } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Constants.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.PaddingValues import androidx.compose.material3.MaterialTheme import androidx.compose.ui.unit.dp val topSmallPaddingValues = PaddingValues(top = MaterialTheme.padding.small) const val DISABLED_ALPHA = .38f const val SECONDARY_ALPHA = .78f class Padding { val extraLarge = 32.dp val large = 24.dp val medium = 16.dp val small = 8.dp val extraSmall = 4.dp } val MaterialTheme.padding: Padding get() = Padding() ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/IconButtonTokens.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.ui.unit.dp /** * Exposing some internal tokens. * * @see androidx.compose.material3.tokens.IconButtonTokens */ object IconButtonTokens { val StateLayerSize = 40.0.dp } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/IconToggleButton.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.FilledIconToggleButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @Composable fun IconToggleButton( checked: Boolean, onCheckedChange: (Boolean) -> Unit, imageVector: ImageVector, title: String, modifier: Modifier = Modifier, ) { FilledIconToggleButton( checked = checked, onCheckedChange = onCheckedChange, modifier = modifier .height(48.dp), ) { Row( horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .padding(MaterialTheme.padding.small), ) { Icon( imageVector = imageVector, contentDescription = null, ) Text( text = title, maxLines = 2, overflow = TextOverflow.Ellipsis, ) } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/NavigationBar.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.selection.selectableGroup import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBarDefaults import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp /** * M3 Navbar with no horizontal spacer * * @see [androidx.compose.material3.NavigationBar] */ @Composable fun NavigationBar( modifier: Modifier = Modifier, containerColor: Color = NavigationBarDefaults.containerColor, contentColor: Color = MaterialTheme.colorScheme.contentColorFor(containerColor), tonalElevation: Dp = NavigationBarDefaults.Elevation, windowInsets: WindowInsets = NavigationBarDefaults.windowInsets, content: @Composable RowScope.() -> Unit, ) { androidx.compose.material3.Surface( color = containerColor, contentColor = contentColor, tonalElevation = tonalElevation, modifier = modifier, ) { Row( modifier = Modifier .fillMaxWidth() .windowInsetsPadding(windowInsets) .height(80.dp) .selectableGroup(), content = content, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/NavigationRail.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.selection.selectableGroup import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationRailDefaults import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp /** * Center-aligned M3 Navigation rail * * @see [androidx.compose.material3.NavigationRail] */ @Composable fun NavigationRail( modifier: Modifier = Modifier, containerColor: Color = NavigationRailDefaults.ContainerColor, contentColor: Color = contentColorFor(containerColor), header: @Composable (ColumnScope.() -> Unit)? = null, windowInsets: WindowInsets = NavigationRailDefaults.windowInsets, content: @Composable ColumnScope.() -> Unit, ) { androidx.compose.material3.Surface( color = containerColor, contentColor = contentColor, modifier = modifier, tonalElevation = 3.dp, ) { Column( Modifier .fillMaxHeight() .windowInsetsPadding(windowInsets) .widthIn(min = 80.dp) .padding(vertical = MaterialTheme.padding.extraSmall) .selectableGroup(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy( MaterialTheme.padding.extraSmall, alignment = Alignment.CenterVertically, ), ) { if (header != null) { header() Spacer(Modifier.height(MaterialTheme.padding.small)) } content() } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/PullRefresh.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults import androidx.compose.material3.pulltorefresh.pullToRefresh import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp /** * @param refreshing Whether the layout is currently refreshing * @param onRefresh Lambda which is invoked when a swipe to refresh gesture is completed. * @param enabled Whether the the layout should react to swipe gestures or not. * @param indicatorPadding Content padding for the indicator, to inset the indicator in if required. * @param content The content containing a vertically scrollable composable. */ @Composable fun PullRefresh( refreshing: Boolean, enabled: Boolean, onRefresh: () -> Unit, modifier: Modifier = Modifier, indicatorPadding: PaddingValues = PaddingValues(0.dp), content: @Composable () -> Unit, ) { val state = rememberPullToRefreshState() Box( modifier = modifier .pullToRefresh( isRefreshing = refreshing, state = state, enabled = enabled, onRefresh = onRefresh, ), ) { content() PullToRefreshDefaults.Indicator( modifier = Modifier .align(Alignment.TopCenter) .padding(indicatorPadding), isRefreshing = refreshing, state = state, containerColor = MaterialTheme.colorScheme.surfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant, ) } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Scaffold.kt ================================================ /* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ @file:Suppress("KDocUnresolvedReference") package tachiyomi.presentation.core.components.material import androidx.compose.foundation.layout.MutableWindowInsets import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.exclude import androidx.compose.foundation.layout.onConsumedWindowInsetsChanged import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ScaffoldDefaults import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.contentColorFor import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.SubcomposeLayout import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max import androidx.compose.ui.util.fastForEach import androidx.compose.ui.util.fastMap import androidx.compose.ui.util.fastMaxBy import kotlin.math.max /** * Material Design layout. * * Scaffold implements the basic material design visual layout structure. * * This component provides API to put together several material components to construct your * screen, by ensuring proper layout strategy for them and collecting necessary data so these * components will work together correctly. * * Simple example of a Scaffold with [SmallTopAppBar], [FloatingActionButton]: * * @sample androidx.compose.material3.samples.SimpleScaffoldWithTopBar * * To show a [Snackbar], use [SnackbarHostState.showSnackbar]. * * @sample androidx.compose.material3.samples.ScaffoldWithSimpleSnackbar * * Tachiyomi changes: * * Pass scroll behavior to top bar by default * * Remove height constraint for expanded app bar * * Also take account of fab height when providing inner padding * * Fixes for fab and snackbar horizontal placements when [contentWindowInsets] is used * * Handle consumed window insets * * Add startBar slot for Navigation Rail * * @param modifier the [Modifier] to be applied to this scaffold * @param topBar top app bar of the screen, typically a [SmallTopAppBar] * @param startBar side bar on the start of the screen, typically a [NavigationRail] * @param bottomBar bottom bar of the screen, typically a [NavigationBar] * @param snackbarHost component to host [Snackbar]s that are pushed to be shown via * [SnackbarHostState.showSnackbar], typically a [SnackbarHost] * @param floatingActionButton Main action button of the screen, typically a [FloatingActionButton] * @param floatingActionButtonPosition position of the FAB on the screen. See [FabPosition]. * @param containerColor the color used for the background of this scaffold. Use [Color.Transparent] * to have no color. * @param contentColor the preferred color for content inside this scaffold. Defaults to either the * matching content color for [containerColor], or to the current [LocalContentColor] if * [containerColor] is not a color from the theme. * @param contentWindowInsets window insets to be passed to content slot via PaddingValues params. * Scaffold will take the insets into account from the top/bottom only if the topBar/ bottomBar * are not present, as the scaffold expect topBar/bottomBar to handle insets instead * @param content content of the screen. The lambda receives a [PaddingValues] that should be * applied to the content root via [Modifier.padding] and [Modifier.consumeWindowInsets] to * properly offset top and bottom bars. If using [Modifier.verticalScroll], apply this modifier to * the child of the scroll, and not on the scroll itself. */ @ExperimentalMaterial3Api @Composable fun Scaffold( modifier: Modifier = Modifier, topBarScrollBehavior: TopAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior( rememberTopAppBarState(), ), topBar: @Composable (TopAppBarScrollBehavior) -> Unit = {}, bottomBar: @Composable () -> Unit = {}, startBar: @Composable () -> Unit = {}, snackbarHost: @Composable () -> Unit = {}, floatingActionButton: @Composable () -> Unit = {}, floatingActionButtonPosition: FabPosition = FabPosition.End, containerColor: Color = MaterialTheme.colorScheme.background, contentColor: Color = contentColorFor(containerColor), contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets, content: @Composable (PaddingValues) -> Unit, ) { // Tachiyomi: Handle consumed window insets val remainingWindowInsets = remember { MutableWindowInsets() } androidx.compose.material3.Surface( modifier = Modifier .nestedScroll(topBarScrollBehavior.nestedScrollConnection) .onConsumedWindowInsetsChanged { remainingWindowInsets.insets = contentWindowInsets.exclude( it, ) } .then(modifier), color = containerColor, contentColor = contentColor, ) { ScaffoldLayout( fabPosition = floatingActionButtonPosition, topBar = { topBar(topBarScrollBehavior) }, startBar = startBar, bottomBar = bottomBar, content = content, snackbar = snackbarHost, contentWindowInsets = remainingWindowInsets, fab = floatingActionButton, ) } } /** * Layout for a [Scaffold]'s content. * * @param fabPosition [FabPosition] for the FAB (if present) * @param topBar the content to place at the top of the [Scaffold], typically a [SmallTopAppBar] * @param content the main 'body' of the [Scaffold] * @param snackbar the [Snackbar] displayed on top of the [content] * @param fab the [FloatingActionButton] displayed on top of the [content], below the [snackbar] * and above the [bottomBar] * @param bottomBar the content to place at the bottom of the [Scaffold], on top of the * [content], typically a [NavigationBar]. */ @OptIn(ExperimentalMaterial3Api::class) @Composable private fun ScaffoldLayout( fabPosition: FabPosition, topBar: @Composable () -> Unit, startBar: @Composable () -> Unit, content: @Composable (PaddingValues) -> Unit, snackbar: @Composable () -> Unit, fab: @Composable () -> Unit, contentWindowInsets: WindowInsets, bottomBar: @Composable () -> Unit, ) { SubcomposeLayout { constraints -> val layoutWidth = constraints.maxWidth val layoutHeight = constraints.maxHeight val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0) /** * Tachiyomi: Remove height constraint for expanded app bar */ val topBarConstraints = looseConstraints.copy(maxHeight = Constraints.Infinity) layout(layoutWidth, layoutHeight) { val leftInset = contentWindowInsets.getLeft(this@SubcomposeLayout, layoutDirection) val rightInset = contentWindowInsets.getRight(this@SubcomposeLayout, layoutDirection) val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout) // Tachiyomi: Add startBar slot for Navigation Rail val startBarPlaceables = subcompose(ScaffoldLayoutContent.StartBar, startBar).fastMap { it.measure(looseConstraints) } val startBarWidth = startBarPlaceables.fastMaxBy { it.width }?.width ?: 0 // Tachiyomi: layoutWidth after horizontal insets val insetLayoutWidth = layoutWidth - leftInset - rightInset - startBarWidth val topBarPlaceables = subcompose(ScaffoldLayoutContent.TopBar, topBar).fastMap { it.measure(topBarConstraints) } val topBarHeight = topBarPlaceables.fastMaxBy { it.height }?.height ?: 0 val snackbarPlaceables = subcompose(ScaffoldLayoutContent.Snackbar, snackbar).fastMap { it.measure(looseConstraints) } val snackbarHeight = snackbarPlaceables.fastMaxBy { it.height }?.height ?: 0 val snackbarWidth = snackbarPlaceables.fastMaxBy { it.width }?.width ?: 0 // Tachiyomi: Calculate insets for snackbar placement offset val snackbarLeft = if (snackbarPlaceables.isNotEmpty()) { (insetLayoutWidth - snackbarWidth) / 2 + leftInset } else { 0 } val fabPlaceables = subcompose(ScaffoldLayoutContent.Fab, fab).fastMap { measurable -> measurable.measure(looseConstraints) } val fabWidth = fabPlaceables.fastMaxBy { it.width }?.width ?: 0 val fabHeight = fabPlaceables.fastMaxBy { it.height }?.height ?: 0 val fabPlacement = if (fabPlaceables.isNotEmpty() && fabWidth != 0 && fabHeight != 0) { // FAB distance from the left of the layout, taking into account LTR / RTL // Tachiyomi: Calculate insets for fab placement offset val fabLeftOffset = if (fabPosition == FabPosition.End) { if (layoutDirection == LayoutDirection.Ltr) { layoutWidth - FabSpacing.roundToPx() - fabWidth - rightInset } else { FabSpacing.roundToPx() + leftInset } } else { leftInset + ((insetLayoutWidth - fabWidth) / 2) } FabPlacement( left = fabLeftOffset, width = fabWidth, height = fabHeight, ) } else { null } val bottomBarPlaceables = subcompose(ScaffoldLayoutContent.BottomBar) { bottomBar() }.fastMap { it.measure(looseConstraints) } val bottomBarHeight = bottomBarPlaceables .fastMaxBy { it.height } ?.height ?.takeIf { it != 0 } val fabOffsetFromBottom = fabPlacement?.let { max(bottomBarHeight ?: 0, bottomInset) + it.height + FabSpacing.roundToPx() } val snackbarOffsetFromBottom = if (snackbarHeight != 0) { snackbarHeight + (fabOffsetFromBottom ?: max(bottomBarHeight ?: 0, bottomInset)) } else { 0 } val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) { val insets = contentWindowInsets.asPaddingValues(this@SubcomposeLayout) val fabOffsetDp = fabOffsetFromBottom?.toDp() ?: 0.dp val bottomBarHeightPx = bottomBarHeight ?: 0 val innerPadding = PaddingValues( top = if (topBarPlaceables.isEmpty()) { insets.calculateTopPadding() } else { topBarHeight.toDp() }, // Tachiyomi: Also take account of fab height when providing inner padding bottom = if (bottomBarPlaceables.isEmpty() || bottomBarHeightPx == 0) { max(insets.calculateBottomPadding(), fabOffsetDp) } else { max(bottomBarHeightPx.toDp(), fabOffsetDp) }, start = max( insets.calculateStartPadding((this@SubcomposeLayout).layoutDirection), startBarWidth.toDp(), ), end = insets.calculateEndPadding((this@SubcomposeLayout).layoutDirection), ) content(innerPadding) }.fastMap { it.measure(looseConstraints) } // Placing to control drawing order to match default elevation of each placeable bodyContentPlaceables.fastForEach { it.place(0, 0) } startBarPlaceables.fastForEach { it.placeRelative(0, 0) } topBarPlaceables.fastForEach { it.place(0, 0) } snackbarPlaceables.fastForEach { it.place( snackbarLeft, layoutHeight - snackbarOffsetFromBottom, ) } // The bottom bar is always at the bottom of the layout bottomBarPlaceables.fastForEach { it.place(0, layoutHeight - (bottomBarHeight ?: 0)) } // Explicitly not using placeRelative here as `leftOffset` already accounts for RTL fabPlaceables.fastForEach { it.place(fabPlacement?.left ?: 0, layoutHeight - (fabOffsetFromBottom ?: 0)) } } } } /** * The possible positions for a [FloatingActionButton] attached to a [Scaffold]. */ @ExperimentalMaterial3Api @JvmInline value class FabPosition internal constructor(@Suppress("unused") private val value: Int) { companion object { /** * Position FAB at the bottom of the screen in the center, above the [NavigationBar] (if it * exists) */ val Center = FabPosition(0) /** * Position FAB at the bottom of the screen at the end, above the [NavigationBar] (if it * exists) */ val End = FabPosition(1) } override fun toString(): String { return when (this) { Center -> "FabPosition.Center" else -> "FabPosition.End" } } } /** * Placement information for a [FloatingActionButton] inside a [Scaffold]. * * @property left the FAB's offset from the left edge of the bottom bar, already adjusted for RTL * support * @property width the width of the FAB * @property height the height of the FAB */ @Immutable internal class FabPlacement( val left: Int, val width: Int, val height: Int, ) // FAB spacing above the bottom bar / bottom of the Scaffold private val FabSpacing = 16.dp private enum class ScaffoldLayoutContent { TopBar, MainContent, Snackbar, Fab, BottomBar, StartBar } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Slider.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.annotation.IntRange import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.material3.Slider import androidx.compose.material3.SliderColors import androidx.compose.material3.SliderDefaults import androidx.compose.material3.SliderState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import kotlin.math.roundToInt @Composable fun Slider( value: Int, onValueChange: (Int) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, valueRange: IntProgression = 0..1, @IntRange(from = 0) steps: Int = with(valueRange) { (last - first) - 1 }, onValueChangeFinished: (() -> Unit)? = null, colors: SliderColors = SliderDefaults.colors(), interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, thumb: @Composable (SliderState) -> Unit = { SliderDefaults.Thumb( interactionSource = interactionSource, colors = colors, enabled = enabled, ) }, track: @Composable (SliderState) -> Unit = { sliderState -> SliderDefaults.Track(colors = colors, enabled = enabled, sliderState = sliderState) }, ) { Slider( value = value.toFloat(), onValueChange = { onValueChange(it.roundToInt()) }, modifier = modifier, enabled = enabled, valueRange = with(valueRange) { first.toFloat()..last.toFloat() }, steps = steps, onValueChangeFinished = onValueChangeFinished, colors = colors, interactionSource = interactionSource, thumb = thumb, track = track, ) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Surface.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.material3.ColorScheme import androidx.compose.material3.LocalAbsoluteTonalElevation import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.contentColorFor import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.NonRestartableComposable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import kotlin.math.ln /** * Surface with additional onLongClick functionality. * * @see androidx.compose.material3.Surface */ @Composable @NonRestartableComposable fun Surface( onClick: () -> Unit, modifier: Modifier = Modifier, onLongClick: (() -> Unit)? = null, enabled: Boolean = true, shape: Shape = RectangleShape, color: Color = MaterialTheme.colorScheme.surface, contentColor: Color = contentColorFor(color), tonalElevation: Dp = 0.dp, shadowElevation: Dp = 0.dp, border: BorderStroke? = null, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, content: @Composable () -> Unit, ) { val absoluteElevation = LocalAbsoluteTonalElevation.current + tonalElevation CompositionLocalProvider( LocalContentColor provides contentColor, LocalAbsoluteTonalElevation provides absoluteElevation, ) { Box( modifier = modifier .minimumInteractiveComponentSize() .surface( shape = shape, backgroundColor = surfaceColorAtElevation( color = color, elevation = absoluteElevation, ), border = border, shadowElevation = shadowElevation, ) .combinedClickable( interactionSource = interactionSource, indication = ripple(), enabled = enabled, role = Role.Button, onLongClick = onLongClick, onClick = onClick, ), propagateMinConstraints = true, ) { content() } } } private fun Modifier.surface( shape: Shape, backgroundColor: Color, border: BorderStroke?, shadowElevation: Dp, ) = this .shadow(shadowElevation, shape, clip = false) .then(if (border != null) Modifier.border(border, shape) else Modifier) .background(color = backgroundColor, shape = shape) .clip(shape) @Composable @ReadOnlyComposable private fun surfaceColorAtElevation(color: Color, elevation: Dp): Color { return if (color == MaterialTheme.colorScheme.surface) { MaterialTheme.colorScheme.surfaceColorAtElevation(elevation) } else { color } } private fun ColorScheme.surfaceColorAtElevation(elevation: Dp): Color { if (elevation == 0.dp) return surface val alpha = ((4.5f * ln(elevation.value + 1)) + 2f) / 100f return surfaceTint.copy(alpha = alpha).compositeOver(surface) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Tabs.kt ================================================ package tachiyomi.presentation.core.components.material import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Row import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.sp import tachiyomi.presentation.core.components.Pill @Composable fun TabText(text: String, badgeCount: Int? = null) { val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f Row( verticalAlignment = Alignment.CenterVertically, ) { Text( text = text, maxLines = 1, overflow = TextOverflow.Ellipsis, ) if (badgeCount != null) { Pill( text = "$badgeCount", color = MaterialTheme.colorScheme.onBackground.copy(alpha = pillAlpha), fontSize = 10.sp, ) } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt ================================================ package tachiyomi.presentation.core.i18n import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalContext import dev.icerock.moko.resources.PluralsResource import dev.icerock.moko.resources.StringResource import tachiyomi.core.common.i18n.pluralStringResource import tachiyomi.core.common.i18n.stringResource @Composable @ReadOnlyComposable fun stringResource(resource: StringResource): String { return LocalContext.current.stringResource(resource) } @Composable @ReadOnlyComposable fun stringResource(resource: StringResource, vararg args: Any): String { return LocalContext.current.stringResource(resource, *args) } @Composable @ReadOnlyComposable fun pluralStringResource(resource: PluralsResource, count: Int): String { return LocalContext.current.pluralStringResource(resource, count) } @Composable @ReadOnlyComposable fun pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String { return LocalContext.current.pluralStringResource(resource, count, *args) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/icons/CustomIcons.kt ================================================ package tachiyomi.presentation.core.icons /** * Icons imported from https://simpleicons.org using * https://github.com/DevSrSouza/svg-to-compose */ object CustomIcons ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/icons/Discord.kt ================================================ package tachiyomi.presentation.core.icons import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType.Companion.NonZero import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.StrokeCap.Companion.Butt import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector.Builder import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp @Suppress("UnusedReceiverParameter", "BooleanLiteralArgument") val CustomIcons.Discord: ImageVector get() { if (_discord != null) { return _discord!! } _discord = Builder( name = "Discord", defaultWidth = 24.0.dp, defaultHeight = 24.0.dp, viewportWidth = 24.0f, viewportHeight = 24.0f, ).apply { path( fill = SolidColor(Color(0xFF000000)), stroke = null, strokeLineWidth = 0.0f, strokeLineCap = Butt, strokeLineJoin = Miter, strokeLineMiter = 4.0f, pathFillType = NonZero, ) { moveTo(20.317f, 4.3698f) arcToRelative(19.7913f, 19.7913f, 0.0f, false, false, -4.8851f, -1.5152f) arcToRelative(0.0741f, 0.0741f, 0.0f, false, false, -0.0785f, 0.0371f) curveToRelative(-0.211f, 0.3753f, -0.4447f, 0.8648f, -0.6083f, 1.2495f) curveToRelative(-1.8447f, -0.2762f, -3.68f, -0.2762f, -5.4868f, 0.0f) curveToRelative(-0.1636f, -0.3933f, -0.4058f, -0.8742f, -0.6177f, -1.2495f) arcToRelative(0.077f, 0.077f, 0.0f, false, false, -0.0785f, -0.037f) arcToRelative(19.7363f, 19.7363f, 0.0f, false, false, -4.8852f, 1.515f) arcToRelative(0.0699f, 0.0699f, 0.0f, false, false, -0.0321f, 0.0277f) curveTo(0.5334f, 9.0458f, -0.319f, 13.5799f, 0.0992f, 18.0578f) arcToRelative(0.0824f, 0.0824f, 0.0f, false, false, 0.0312f, 0.0561f) curveToRelative(2.0528f, 1.5076f, 4.0413f, 2.4228f, 5.9929f, 3.0294f) arcToRelative(0.0777f, 0.0777f, 0.0f, false, false, 0.0842f, -0.0276f) curveToRelative(0.4616f, -0.6304f, 0.8731f, -1.2952f, 1.226f, -1.9942f) arcToRelative(0.076f, 0.076f, 0.0f, false, false, -0.0416f, -0.1057f) curveToRelative(-0.6528f, -0.2476f, -1.2743f, -0.5495f, -1.8722f, -0.8923f) arcToRelative(0.077f, 0.077f, 0.0f, false, true, -0.0076f, -0.1277f) curveToRelative(0.1258f, -0.0943f, 0.2517f, -0.1923f, 0.3718f, -0.2914f) arcToRelative(0.0743f, 0.0743f, 0.0f, false, true, 0.0776f, -0.0105f) curveToRelative(3.9278f, 1.7933f, 8.18f, 1.7933f, 12.0614f, 0.0f) arcToRelative(0.0739f, 0.0739f, 0.0f, false, true, 0.0785f, 0.0095f) curveToRelative(0.1202f, 0.099f, 0.246f, 0.1981f, 0.3728f, 0.2924f) arcToRelative(0.077f, 0.077f, 0.0f, false, true, -0.0066f, 0.1276f) arcToRelative(12.2986f, 12.2986f, 0.0f, false, true, -1.873f, 0.8914f) arcToRelative(0.0766f, 0.0766f, 0.0f, false, false, -0.0407f, 0.1067f) curveToRelative(0.3604f, 0.698f, 0.7719f, 1.3628f, 1.225f, 1.9932f) arcToRelative(0.076f, 0.076f, 0.0f, false, false, 0.0842f, 0.0286f) curveToRelative(1.961f, -0.6067f, 3.9495f, -1.5219f, 6.0023f, -3.0294f) arcToRelative(0.077f, 0.077f, 0.0f, false, false, 0.0313f, -0.0552f) curveToRelative(0.5004f, -5.177f, -0.8382f, -9.6739f, -3.5485f, -13.6604f) arcToRelative(0.061f, 0.061f, 0.0f, false, false, -0.0312f, -0.0286f) close() moveTo(8.02f, 15.3312f) curveToRelative(-1.1825f, 0.0f, -2.1569f, -1.0857f, -2.1569f, -2.419f) curveToRelative(0.0f, -1.3332f, 0.9555f, -2.4189f, 2.157f, -2.4189f) curveToRelative(1.2108f, 0.0f, 2.1757f, 1.0952f, 2.1568f, 2.419f) curveToRelative(0.0f, 1.3332f, -0.9555f, 2.4189f, -2.1569f, 2.4189f) close() moveTo(15.9948f, 15.3312f) curveToRelative(-1.1825f, 0.0f, -2.1569f, -1.0857f, -2.1569f, -2.419f) curveToRelative(0.0f, -1.3332f, 0.9554f, -2.4189f, 2.1569f, -2.4189f) curveToRelative(1.2108f, 0.0f, 2.1757f, 1.0952f, 2.1568f, 2.419f) curveToRelative(0.0f, 1.3332f, -0.946f, 2.4189f, -2.1568f, 2.4189f) close() } } .build() return _discord!! } @Suppress("ObjectPropertyName") private var _discord: ImageVector? = null ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/icons/Facebook.kt ================================================ package tachiyomi.presentation.core.icons import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType.Companion.NonZero import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.StrokeCap.Companion.Butt import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector.Builder import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp @Suppress("UnusedReceiverParameter") val CustomIcons.Facebook: ImageVector get() { if (_facebook != null) { return _facebook!! } _facebook = Builder( name = "Facebook", defaultWidth = 24.0.dp, defaultHeight = 24.0.dp, viewportWidth = 24.0f, viewportHeight = 24.0f, ).apply { path( fill = SolidColor(Color(0xFF000000)), stroke = null, strokeLineWidth = 0.0f, strokeLineCap = Butt, strokeLineJoin = Miter, strokeLineMiter = 4.0f, pathFillType = NonZero, ) { moveTo(9.101f, 23.691f) verticalLineToRelative(-7.98f) horizontalLineTo(6.627f) verticalLineToRelative(-3.667f) horizontalLineToRelative(2.474f) verticalLineToRelative(-1.58f) curveToRelative(0.0f, -4.085f, 1.848f, -5.978f, 5.858f, -5.978f) curveToRelative(0.401f, 0.0f, 0.955f, 0.042f, 1.468f, 0.103f) arcToRelative(8.68f, 8.68f, 0.0f, false, true, 1.141f, 0.195f) verticalLineToRelative(3.325f) arcToRelative(8.623f, 8.623f, 0.0f, false, false, -0.653f, -0.036f) arcToRelative(26.805f, 26.805f, 0.0f, false, false, -0.733f, -0.009f) curveToRelative(-0.707f, 0.0f, -1.259f, 0.096f, -1.675f, 0.309f) arcToRelative(1.686f, 1.686f, 0.0f, false, false, -0.679f, 0.622f) curveToRelative(-0.258f, 0.42f, -0.374f, 0.995f, -0.374f, 1.752f) verticalLineToRelative(1.297f) horizontalLineToRelative(3.919f) lineToRelative(-0.386f, 2.103f) lineToRelative(-0.287f, 1.564f) horizontalLineToRelative(-3.246f) verticalLineToRelative(8.245f) curveTo(19.396f, 23.238f, 24.0f, 18.179f, 24.0f, 12.044f) curveToRelative(0.0f, -6.627f, -5.373f, -12.0f, -12.0f, -12.0f) reflectiveCurveToRelative(-12.0f, 5.373f, -12.0f, 12.0f) curveToRelative(0.0f, 5.628f, 3.874f, 10.35f, 9.101f, 11.647f) close() } } .build() return _facebook!! } @Suppress("ObjectPropertyName") private var _facebook: ImageVector? = null ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/icons/Github.kt ================================================ package tachiyomi.presentation.core.icons import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType.Companion.NonZero import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.StrokeCap.Companion.Butt import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector.Builder import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp @Suppress("UnusedReceiverParameter") val CustomIcons.Github: ImageVector get() { if (_github != null) { return _github!! } _github = Builder( name = "Github", defaultWidth = 24.0.dp, defaultHeight = 24.0.dp, viewportWidth = 24.0f, viewportHeight = 24.0f, ).apply { path( fill = SolidColor(Color(0xFF000000)), stroke = null, strokeLineWidth = 0.0f, strokeLineCap = Butt, strokeLineJoin = Miter, strokeLineMiter = 4.0f, pathFillType = NonZero, ) { moveTo(12.0f, 0.297f) curveToRelative(-6.63f, 0.0f, -12.0f, 5.373f, -12.0f, 12.0f) curveToRelative(0.0f, 5.303f, 3.438f, 9.8f, 8.205f, 11.385f) curveToRelative(0.6f, 0.113f, 0.82f, -0.258f, 0.82f, -0.577f) curveToRelative(0.0f, -0.285f, -0.01f, -1.04f, -0.015f, -2.04f) curveToRelative(-3.338f, 0.724f, -4.042f, -1.61f, -4.042f, -1.61f) curveTo(4.422f, 18.07f, 3.633f, 17.7f, 3.633f, 17.7f) curveToRelative(-1.087f, -0.744f, 0.084f, -0.729f, 0.084f, -0.729f) curveToRelative(1.205f, 0.084f, 1.838f, 1.236f, 1.838f, 1.236f) curveToRelative(1.07f, 1.835f, 2.809f, 1.305f, 3.495f, 0.998f) curveToRelative(0.108f, -0.776f, 0.417f, -1.305f, 0.76f, -1.605f) curveToRelative(-2.665f, -0.3f, -5.466f, -1.332f, -5.466f, -5.93f) curveToRelative(0.0f, -1.31f, 0.465f, -2.38f, 1.235f, -3.22f) curveToRelative(-0.135f, -0.303f, -0.54f, -1.523f, 0.105f, -3.176f) curveToRelative(0.0f, 0.0f, 1.005f, -0.322f, 3.3f, 1.23f) curveToRelative(0.96f, -0.267f, 1.98f, -0.399f, 3.0f, -0.405f) curveToRelative(1.02f, 0.006f, 2.04f, 0.138f, 3.0f, 0.405f) curveToRelative(2.28f, -1.552f, 3.285f, -1.23f, 3.285f, -1.23f) curveToRelative(0.645f, 1.653f, 0.24f, 2.873f, 0.12f, 3.176f) curveToRelative(0.765f, 0.84f, 1.23f, 1.91f, 1.23f, 3.22f) curveToRelative(0.0f, 4.61f, -2.805f, 5.625f, -5.475f, 5.92f) curveToRelative(0.42f, 0.36f, 0.81f, 1.096f, 0.81f, 2.22f) curveToRelative(0.0f, 1.606f, -0.015f, 2.896f, -0.015f, 3.286f) curveToRelative(0.0f, 0.315f, 0.21f, 0.69f, 0.825f, 0.57f) curveTo(20.565f, 22.092f, 24.0f, 17.592f, 24.0f, 12.297f) curveToRelative(0.0f, -6.627f, -5.373f, -12.0f, -12.0f, -12.0f) } } .build() return _github!! } @Suppress("ObjectPropertyName") private var _github: ImageVector? = null ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/icons/Reddit.kt ================================================ package tachiyomi.presentation.core.icons import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType.Companion.NonZero import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.StrokeCap.Companion.Butt import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector.Builder import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp @Suppress("UnusedReceiverParameter", "BooleanLiteralArgument") val CustomIcons.Reddit: ImageVector get() { if (_reddit != null) { return _reddit!! } _reddit = Builder( name = "Reddit", defaultWidth = 24.0.dp, defaultHeight = 24.0.dp, viewportWidth = 24.0f, viewportHeight = 24.0f, ).apply { path( fill = SolidColor(Color(0xFF000000)), stroke = null, strokeLineWidth = 0.0f, strokeLineCap = Butt, strokeLineJoin = Miter, strokeLineMiter = 4.0f, pathFillType = NonZero, ) { moveTo(12.0f, 0.0f) curveTo(5.373f, 0.0f, 0.0f, 5.373f, 0.0f, 12.0f) curveToRelative(0.0f, 3.314f, 1.343f, 6.314f, 3.515f, 8.485f) lineToRelative(-2.286f, 2.286f) curveTo(0.775f, 23.225f, 1.097f, 24.0f, 1.738f, 24.0f) lineTo(12.0f, 24.0f) curveToRelative(6.627f, 0.0f, 12.0f, -5.373f, 12.0f, -12.0f) reflectiveCurveTo(18.627f, 0.0f, 12.0f, 0.0f) close() moveTo(16.388f, 3.199f) curveToRelative(1.104f, 0.0f, 1.999f, 0.895f, 1.999f, 1.999f) curveToRelative(0.0f, 1.105f, -0.895f, 2.0f, -1.999f, 2.0f) curveToRelative(-0.946f, 0.0f, -1.739f, -0.657f, -1.947f, -1.539f) verticalLineToRelative(0.002f) curveToRelative(-1.147f, 0.162f, -2.032f, 1.15f, -2.032f, 2.341f) verticalLineToRelative(0.007f) curveToRelative(1.776f, 0.067f, 3.4f, 0.567f, 4.686f, 1.363f) curveToRelative(0.473f, -0.363f, 1.064f, -0.58f, 1.707f, -0.58f) curveToRelative(1.547f, 0.0f, 2.802f, 1.254f, 2.802f, 2.802f) curveToRelative(0.0f, 1.117f, -0.655f, 2.081f, -1.601f, 2.531f) curveToRelative(-0.088f, 3.256f, -3.637f, 5.876f, -7.997f, 5.876f) curveToRelative(-4.361f, 0.0f, -7.905f, -2.617f, -7.998f, -5.87f) curveToRelative(-0.954f, -0.447f, -1.614f, -1.415f, -1.614f, -2.538f) curveToRelative(0.0f, -1.548f, 1.255f, -2.802f, 2.803f, -2.802f) curveToRelative(0.645f, 0.0f, 1.239f, 0.218f, 1.712f, 0.585f) curveToRelative(1.275f, -0.79f, 2.881f, -1.291f, 4.64f, -1.365f) verticalLineToRelative(-0.01f) curveToRelative(0.0f, -1.663f, 1.263f, -3.034f, 2.88f, -3.207f) curveToRelative(0.188f, -0.911f, 0.993f, -1.595f, 1.959f, -1.595f) close() moveTo(8.303f, 11.575f) curveToRelative(-0.784f, 0.0f, -1.459f, 0.78f, -1.506f, 1.797f) curveToRelative(-0.047f, 1.016f, 0.64f, 1.429f, 1.426f, 1.429f) curveToRelative(0.786f, 0.0f, 1.371f, -0.369f, 1.418f, -1.385f) curveToRelative(0.047f, -1.017f, -0.553f, -1.841f, -1.338f, -1.841f) close() moveTo(15.709f, 11.575f) curveToRelative(-0.786f, 0.0f, -1.385f, 0.824f, -1.338f, 1.841f) curveToRelative(0.047f, 1.017f, 0.634f, 1.385f, 1.418f, 1.385f) curveToRelative(0.785f, 0.0f, 1.473f, -0.413f, 1.426f, -1.429f) curveToRelative(-0.046f, -1.017f, -0.721f, -1.797f, -1.506f, -1.797f) close() moveTo(12.006f, 15.588f) curveToRelative(-0.974f, 0.0f, -1.907f, 0.048f, -2.77f, 0.135f) curveToRelative(-0.147f, 0.015f, -0.241f, 0.168f, -0.183f, 0.305f) curveToRelative(0.483f, 1.154f, 1.622f, 1.964f, 2.953f, 1.964f) curveToRelative(1.33f, 0.0f, 2.47f, -0.81f, 2.953f, -1.964f) curveToRelative(0.057f, -0.137f, -0.037f, -0.29f, -0.184f, -0.305f) curveToRelative(-0.863f, -0.087f, -1.795f, -0.135f, -2.769f, -0.135f) close() } } .build() return _reddit!! } @Suppress("ObjectPropertyName") private var _reddit: ImageVector? = null ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/icons/X.kt ================================================ package tachiyomi.presentation.core.icons import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType.Companion.NonZero import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.StrokeCap.Companion.Butt import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector.Builder import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp @Suppress("UnusedReceiverParameter") val CustomIcons.X: ImageVector get() { if (_x != null) { return _x!! } _x = Builder( name = "X", defaultWidth = 24.0.dp, defaultHeight = 24.0.dp, viewportWidth = 24.0f, viewportHeight = 24.0f, ).apply { path( fill = SolidColor(Color(0xFF000000)), stroke = null, strokeLineWidth = 0.0f, strokeLineCap = Butt, strokeLineJoin = Miter, strokeLineMiter = 4.0f, pathFillType = NonZero, ) { moveTo(18.901f, 1.153f) horizontalLineToRelative(3.68f) lineToRelative(-8.04f, 9.19f) lineTo(24.0f, 22.846f) horizontalLineToRelative(-7.406f) lineToRelative(-5.8f, -7.584f) lineToRelative(-6.638f, 7.584f) horizontalLineTo(0.474f) lineToRelative(8.6f, -9.83f) lineTo(0.0f, 1.154f) horizontalLineToRelative(7.594f) lineToRelative(5.243f, 6.932f) close() moveTo(17.61f, 20.644f) horizontalLineToRelative(2.039f) lineTo(6.486f, 3.24f) horizontalLineTo(4.298f) close() } } .build() return _x!! } @Suppress("ObjectPropertyName") private var _x: ImageVector? = null ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt ================================================ package tachiyomi.presentation.core.screens import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.paddingFromBaseline import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEach import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import tachiyomi.presentation.core.components.ActionButton import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha import kotlin.random.Random data class EmptyScreenAction( val stringRes: StringResource, val icon: ImageVector, val onClick: () -> Unit, ) @Composable fun EmptyScreen( stringRes: StringResource, modifier: Modifier = Modifier, actions: ImmutableList? = null, ) { EmptyScreen( message = stringResource(stringRes), modifier = modifier, actions = actions, ) } @Composable fun EmptyScreen( message: String, modifier: Modifier = Modifier, actions: ImmutableList? = null, ) { val face = remember { getRandomErrorFace() } Column( modifier = modifier .fillMaxSize() .verticalScroll(rememberScrollState()) .padding(horizontal = 24.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, ) { CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) { Text( text = face, modifier = Modifier.secondaryItemAlpha(), style = MaterialTheme.typography.displayMedium, ) } Text( text = message, modifier = Modifier .paddingFromBaseline(top = 24.dp) .secondaryItemAlpha(), style = MaterialTheme.typography.bodyMedium, textAlign = TextAlign.Center, ) if (!actions.isNullOrEmpty()) { Row( modifier = Modifier .padding(top = 24.dp), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { actions.fastForEach { ActionButton( modifier = Modifier.weight(1f), title = stringResource(it.stringRes), icon = it.icon, onClick = it.onClick, ) } } } } } private val ErrorFaces = listOf( "(・o・;)", "Σ(ಠ_ಠ)", "ಥ_ಥ", "(˘・_・˘)", "(; ̄Д ̄)", "(・Д・。", "(╬ಠ益ಠ)", "(╥﹏╥)", "(⋟﹏⋞)", "Ò︵Ó", " ˙ᯅ˙)", "(¬_¬)", ) private fun getRandomErrorFace(): String { return ErrorFaces[Random.nextInt(ErrorFaces.size)] } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/screens/InfoScreen.kt ================================================ package tachiyomi.presentation.core.screens import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Newspaper import androidx.compose.material3.Button import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBarDefaults import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable fun InfoScreen( icon: ImageVector, headingText: String, subtitleText: String, acceptText: String, onAcceptClick: () -> Unit, canAccept: Boolean = true, rejectText: String? = null, onRejectClick: (() -> Unit)? = null, content: @Composable ColumnScope.() -> Unit, ) { Scaffold( bottomBar = { val strokeWidth = Dp.Hairline val borderColor = MaterialTheme.colorScheme.outline Column( modifier = Modifier .background(MaterialTheme.colorScheme.background) .drawBehind { drawLine( borderColor, Offset(0f, 0f), Offset(size.width, 0f), strokeWidth.value, ) } .windowInsetsPadding(NavigationBarDefaults.windowInsets) .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), ) { Button( modifier = Modifier.fillMaxWidth(), enabled = canAccept, onClick = onAcceptClick, ) { Text(text = acceptText) } if (rejectText != null && onRejectClick != null) { OutlinedButton( modifier = Modifier.fillMaxWidth(), onClick = onRejectClick, ) { Text(text = rejectText) } } } }, ) { paddingValues -> // Status bar scrim Box( modifier = Modifier .zIndex(2f) .secondaryItemAlpha() .background(MaterialTheme.colorScheme.background) .fillMaxWidth() .height(paddingValues.calculateTopPadding()), ) Column( modifier = Modifier .verticalScroll(rememberScrollState()) .fillMaxWidth() .padding(paddingValues) .padding(top = 48.dp) .padding(horizontal = MaterialTheme.padding.medium), ) { Icon( imageVector = icon, contentDescription = null, modifier = Modifier .padding(bottom = MaterialTheme.padding.small) .size(48.dp), tint = MaterialTheme.colorScheme.primary, ) Text( text = headingText, style = MaterialTheme.typography.headlineLarge, ) Text( text = subtitleText, modifier = Modifier .secondaryItemAlpha() .padding(vertical = MaterialTheme.padding.small), style = MaterialTheme.typography.titleSmall, ) content() } } } @PreviewLightDark @Composable private fun InfoScaffoldPreview() { InfoScreen( icon = Icons.Outlined.Newspaper, headingText = "Heading", subtitleText = "Subtitle", acceptText = "Accept", onAcceptClick = {}, rejectText = "Reject", onRejectClick = {}, ) { Text("Hello world") } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/screens/LoadingScreen.kt ================================================ package tachiyomi.presentation.core.screens import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @Composable fun LoadingScreen(modifier: Modifier = Modifier) { Box( modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center, ) { CircularProgressIndicator() } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/theme/Color.kt ================================================ package tachiyomi.presentation.core.theme import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color val ColorScheme.active: Color @Composable get() { return if (isSystemInDarkTheme()) Color(255, 235, 59) else Color(255, 193, 7) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/theme/Typography.kt ================================================ package tachiyomi.presentation.core.theme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Typography import androidx.compose.runtime.Composable import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight val Typography.header: TextStyle @Composable get() = bodyMedium.copy( color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.SemiBold, ) ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/util/Elevation.kt ================================================ /* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Straight copy from Compose M3 for Button fork */ package tachiyomi.presentation.core.util import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationSpec import androidx.compose.animation.core.CubicBezierEasing import androidx.compose.animation.core.Easing import androidx.compose.animation.core.FastOutSlowInEasing import androidx.compose.animation.core.TweenSpec import androidx.compose.foundation.interaction.DragInteraction import androidx.compose.foundation.interaction.FocusInteraction import androidx.compose.foundation.interaction.HoverInteraction import androidx.compose.foundation.interaction.Interaction import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.ui.unit.Dp /** * Animates the [Dp] value of [this] between [from] and [to] [Interaction]s, to [target]. The * [AnimationSpec] used depends on the values for [from] and [to], see * [ElevationDefaults.incomingAnimationSpecForInteraction] and * [ElevationDefaults.outgoingAnimationSpecForInteraction] for more details. * * @param target the [Dp] target elevation for this component, corresponding to the elevation * desired for the [to] state. * @param from the previous [Interaction] that was used to calculate elevation. `null` if there * was no previous [Interaction], such as when the component is in its default state. * @param to the [Interaction] that this component is moving to, such as [PressInteraction.Press] * when this component is being pressed. `null` if this component is moving back to its default * state. */ suspend fun Animatable.animateElevation( target: Dp, from: Interaction? = null, to: Interaction? = null, ) { val spec = when { // Moving to a new state to != null -> ElevationDefaults.incomingAnimationSpecForInteraction(to) // Moving to default, from a previous state from != null -> ElevationDefaults.outgoingAnimationSpecForInteraction(from) // Loading the initial state, or moving back to the baseline state from a disabled / // unknown state, so just snap to the final value. else -> null } if (spec != null) animateTo(target, spec) else snapTo(target) } /** * Contains default [AnimationSpec]s used for animating elevation between different [Interaction]s. * * Typically you should use [animateElevation] instead, which uses these [AnimationSpec]s * internally. [animateElevation] in turn is used by the defaults for cards and buttons. * * @see animateElevation */ private object ElevationDefaults { /** * Returns the [AnimationSpec]s used when animating elevation to [interaction], either from a * previous [Interaction], or from the default state. If [interaction] is unknown, then * returns `null`. * * @param interaction the [Interaction] that is being animated to */ fun incomingAnimationSpecForInteraction(interaction: Interaction): AnimationSpec? { return when (interaction) { is PressInteraction.Press -> DefaultIncomingSpec is DragInteraction.Start -> DefaultIncomingSpec is HoverInteraction.Enter -> DefaultIncomingSpec is FocusInteraction.Focus -> DefaultIncomingSpec else -> null } } /** * Returns the [AnimationSpec]s used when animating elevation away from [interaction], to the * default state. If [interaction] is unknown, then returns `null`. * * @param interaction the [Interaction] that is being animated away from */ fun outgoingAnimationSpecForInteraction(interaction: Interaction): AnimationSpec? { return when (interaction) { is PressInteraction.Press -> DefaultOutgoingSpec is DragInteraction.Start -> DefaultOutgoingSpec is HoverInteraction.Enter -> HoveredOutgoingSpec is FocusInteraction.Focus -> DefaultOutgoingSpec else -> null } } } private val OutgoingSpecEasing: Easing = CubicBezierEasing(0.40f, 0.00f, 0.60f, 1.00f) private val DefaultIncomingSpec = TweenSpec( durationMillis = 120, easing = FastOutSlowInEasing, ) private val DefaultOutgoingSpec = TweenSpec( durationMillis = 150, easing = OutgoingSpecEasing, ) private val HoveredOutgoingSpec = TweenSpec( durationMillis = 120, easing = OutgoingSpecEasing, ) ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/util/LazyListState.kt ================================================ package tachiyomi.presentation.core.util import androidx.compose.foundation.lazy.LazyListState fun LazyListState.shouldExpandFAB(): Boolean = lastScrolledBackward || !canScrollForward || !canScrollBackward ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/util/Modifier.kt ================================================ package tachiyomi.presentation.core.util import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.isImeVisible import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type import androidx.compose.ui.platform.LocalFocusManager import tachiyomi.presentation.core.components.material.SECONDARY_ALPHA @Composable fun Modifier.selectedBackground(isSelected: Boolean): Modifier { if (!isSelected) return this val alpha = if (isSystemInDarkTheme()) 0.16f else 0.22f val color = MaterialTheme.colorScheme.secondary.copy(alpha = alpha) return this.drawBehind { drawRect(color) } } fun Modifier.secondaryItemAlpha(): Modifier = this.alpha(SECONDARY_ALPHA) fun Modifier.clickableNoIndication( onLongClick: (() -> Unit)? = null, onClick: () -> Unit, ) = this.combinedClickable( interactionSource = null, indication = null, onLongClick = onLongClick, onClick = onClick, ) /** * For TextField, the provided [action] will be invoked when * physical enter key is pressed. * * Naturally, the TextField should be set to single line only. */ fun Modifier.runOnEnterKeyPressed(action: () -> Unit): Modifier = this.onPreviewKeyEvent { when (it.key) { Key.Enter, Key.NumPadEnter -> { // Physical keyboards generate two event types: // - KeyDown when the key is pressed // - KeyUp when the key is released if (it.type == KeyEventType.KeyDown) { action() true } else { false } } else -> false } } /** * For TextField on AppBar, this modifier will request focus * to the element the first time it's composed. */ @Composable fun Modifier.showSoftKeyboard(show: Boolean): Modifier { if (!show) return this val focusRequester = remember { FocusRequester() } var openKeyboard by rememberSaveable { mutableStateOf(show) } LaunchedEffect(focusRequester) { if (openKeyboard) { focusRequester.requestFocus() openKeyboard = false } } return this.focusRequester(focusRequester) } /** * For TextField, this modifier will clear focus when soft * keyboard is hidden. */ @Composable fun Modifier.clearFocusOnSoftKeyboardHide( onFocusCleared: (() -> Unit)? = null, ): Modifier { var isFocused by remember { mutableStateOf(false) } var keyboardShowedSinceFocused by remember { mutableStateOf(false) } if (isFocused) { val imeVisible = WindowInsets.isImeVisible val focusManager = LocalFocusManager.current LaunchedEffect(imeVisible) { if (imeVisible) { keyboardShowedSinceFocused = true } else if (keyboardShowedSinceFocused) { focusManager.clearFocus() onFocusCleared?.invoke() } } } return this.onFocusChanged { if (isFocused != it.isFocused) { if (isFocused) { keyboardShowedSinceFocused = false } isFocused = it.isFocused } } } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/util/PaddingValues.kt ================================================ package tachiyomi.presentation.core.util import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalLayoutDirection @Composable @ReadOnlyComposable operator fun PaddingValues.plus(other: PaddingValues): PaddingValues { val layoutDirection = LocalLayoutDirection.current return PaddingValues( start = calculateStartPadding(layoutDirection) + other.calculateStartPadding(layoutDirection), end = calculateEndPadding(layoutDirection) + other.calculateEndPadding(layoutDirection), top = calculateTopPadding() + other.calculateTopPadding(), bottom = calculateBottomPadding() + other.calculateBottomPadding(), ) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/util/Preference.kt ================================================ package tachiyomi.presentation.core.util import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember import tachiyomi.core.common.preference.Preference @Composable fun Preference.collectAsState(): State { val flow = remember(this) { changes() } return flow.collectAsState(initial = get()) } ================================================ FILE: presentation-core/src/main/java/tachiyomi/presentation/core/util/Scrollbar.kt ================================================ package tachiyomi.presentation.core.util /* * MIT License * * Copyright (c) 2022 Albert Chang * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* * Code taken from https://gist.github.com/mxalbert1996/33a360fcab2105a31e5355af98216f5a * with some modifications to handle contentPadding. * * Modifiers for regular scrollable list is omitted. */ import android.view.ViewConfiguration import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.tween import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.ContentDrawScope import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastFirstOrNull import androidx.compose.ui.util.fastSumBy import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.sample import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX /** * Draws horizontal scrollbar to a LazyList. * * Set key with [STICKY_HEADER_KEY_PREFIX] prefix to any sticky header item in the list. */ @Composable fun Modifier.drawHorizontalScrollbar( state: LazyListState, reverseScrolling: Boolean = false, // The amount of offset the scrollbar position towards the top of the layout positionOffsetPx: Float = 0f, ): Modifier = drawScrollbar(state, Orientation.Horizontal, reverseScrolling, positionOffsetPx) /** * Draws vertical scrollbar to a LazyList. * * Set key with [STICKY_HEADER_KEY_PREFIX] prefix to any sticky header item in the list. */ @Composable fun Modifier.drawVerticalScrollbar( state: LazyListState, reverseScrolling: Boolean = false, // The amount of offset the scrollbar position towards the start of the layout positionOffsetPx: Float = 0f, ): Modifier = drawScrollbar(state, Orientation.Vertical, reverseScrolling, positionOffsetPx) @Composable private fun Modifier.drawScrollbar( state: LazyListState, orientation: Orientation, reverseScrolling: Boolean, positionOffset: Float, ): Modifier = drawScrollbar( orientation, reverseScrolling, ) { reverseDirection, atEnd, thickness, color, alpha -> val layoutInfo = state.layoutInfo val viewportSize = if (orientation == Orientation.Horizontal) { layoutInfo.viewportSize.width } else { layoutInfo.viewportSize.height } - layoutInfo.beforeContentPadding - layoutInfo.afterContentPadding val items = layoutInfo.visibleItemsInfo val itemsSize = items.fastSumBy { it.size } val showScrollbar = items.size < layoutInfo.totalItemsCount || itemsSize > viewportSize val estimatedItemSize = if (items.isEmpty()) 0f else itemsSize.toFloat() / items.size val totalSize = estimatedItemSize * layoutInfo.totalItemsCount val thumbSize = viewportSize / totalSize * viewportSize val startOffset = if (items.isEmpty()) { 0f } else { items .fastFirstOrNull { (it.key as? String)?.startsWith(STICKY_HEADER_KEY_PREFIX)?.not() ?: true } ?.run { val startPadding = if (reverseDirection) { layoutInfo.afterContentPadding } else { layoutInfo.beforeContentPadding } startPadding + ((estimatedItemSize * index - offset) / totalSize * viewportSize) } ?: 0f } val drawScrollbar = onDrawScrollbar( orientation, reverseDirection, atEnd, showScrollbar, thickness, color, alpha, thumbSize, startOffset, positionOffset, ) drawContent() drawScrollbar() } private fun ContentDrawScope.onDrawScrollbar( orientation: Orientation, reverseDirection: Boolean, atEnd: Boolean, showScrollbar: Boolean, thickness: Float, color: Color, alpha: () -> Float, thumbSize: Float, scrollOffset: Float, positionOffset: Float, ): DrawScope.() -> Unit { val topLeft = if (orientation == Orientation.Horizontal) { Offset( if (reverseDirection) size.width - scrollOffset - thumbSize else scrollOffset, if (atEnd) size.height - positionOffset - thickness else positionOffset, ) } else { Offset( if (atEnd) size.width - positionOffset - thickness else positionOffset, if (reverseDirection) size.height - scrollOffset - thumbSize else scrollOffset, ) } val size = if (orientation == Orientation.Horizontal) { Size(thumbSize, thickness) } else { Size(thickness, thumbSize) } return { if (showScrollbar) { drawRect( color = color, topLeft = topLeft, size = size, alpha = alpha(), ) } } } @Composable private fun Modifier.drawScrollbar( orientation: Orientation, reverseScrolling: Boolean, onDraw: ContentDrawScope.( reverseDirection: Boolean, atEnd: Boolean, thickness: Float, color: Color, alpha: () -> Float, ) -> Unit, ): Modifier { val scrolled = remember { MutableSharedFlow( extraBufferCapacity = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST, ) } val nestedScrollConnection = remember(orientation, scrolled) { object : NestedScrollConnection { override fun onPostScroll( consumed: Offset, available: Offset, source: NestedScrollSource, ): Offset { val delta = if (orientation == Orientation.Horizontal) consumed.x else consumed.y if (delta != 0f) scrolled.tryEmit(Unit) return Offset.Zero } } } val alpha = remember { Animatable(0f) } LaunchedEffect(scrolled, alpha) { scrolled .sample(100) .collectLatest { alpha.snapTo(1f) delay(ScrollBarVisibilityDurationMillis) alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec) } } val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr val reverseDirection = if (orientation == Orientation.Horizontal) { if (isLtr) reverseScrolling else !reverseScrolling } else { reverseScrolling } val atEnd = if (orientation == Orientation.Vertical) isLtr else true val context = LocalContext.current val thickness = remember { ViewConfiguration.get(context).scaledScrollBarSize.toFloat() } val color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.364f) return this .nestedScroll(nestedScrollConnection) .drawWithContent { onDraw(reverseDirection, atEnd, thickness, color, alpha::value) } } private val ScrollBarVisibilityDurationMillis = ViewConfiguration.getScrollDefaultDelay().toLong() private val ImmediateFadeOutAnimationSpec = tween( durationMillis = ViewConfiguration.getScrollBarFadeDuration(), ) @Preview(widthDp = 400, heightDp = 400, showBackground = true) @Composable fun LazyListScrollbarPreview() { val state = rememberLazyListState() LazyColumn( modifier = Modifier.drawVerticalScrollbar(state), state = state, ) { items(50) { Text( text = "Item ${it + 1}", modifier = Modifier .fillMaxWidth() .padding(16.dp), ) } } } @Preview(widthDp = 400, showBackground = true) @Composable fun LazyListHorizontalScrollbarPreview() { val state = rememberLazyListState() LazyRow( modifier = Modifier.drawHorizontalScrollbar(state), state = state, ) { items(50) { Text( text = (it + 1).toString(), modifier = Modifier .padding(horizontal = 8.dp, vertical = 16.dp), ) } } } ================================================ FILE: presentation-core/src/main/res/values/colors.xml ================================================ @color/accent_blue #1F888888 @color/md_black_1000_12 #54759E #000000 #FFFFFF #000000 #FFFFFF #0C0C0C #131313 #1B1B1B #1F000000 #1FFFFFFF ================================================ FILE: presentation-core/src/main/res/values/colors_catppuccin.xml ================================================ #8839EF #DCE0E8 #8839EF #DCE0E8 #8839EF #DCE0E8 #CDD0DA #8839EF #8839EF #DCE0E8 #EFF1F5 #CDD6F4 #D20F39 #DCE0E8 #FF68001C #D61C41 #E6E9EF #4C4F69 #E6E9EF #4C4F69 #EFF1F5 #4C4F69 #8839EF #ACB0BE #FFDCE0E8 #1E1E2E #CDD6F4 #CBA6F7 #E6E9EF #CDD0DA #FFE6E9EF #EFF1F5 #EFF1F5 #EFF1F5 #CDD0DA ================================================ FILE: presentation-core/src/main/res/values/colors_greenapple.xml ================================================ #005927 #FFFFFF #188140 #FFFFFF #005927 #FFFFFF #97f7a9 #000000 #9D0012 #FFFFFF #D33131 #FFFFFF #BA1A1A #FFFFFF #FFDAD6 #410002 #F6FBF2 #181D18 #F6FBF2 #181D18 #DAE6D7 #3F493F #6F7A6E #BECABC #000000 #2C322C #EDF2E9 #7ADB8F #D6DCD3 #F6FBF2 #FFFFFF #F0F5EC #EAEFE6 #E4EAE1 #DFE4DB ================================================ FILE: presentation-core/src/main/res/values/colors_lavender.xml ================================================ #6D41C8 #FFFFFF #7B46AF #130038 #7B46AF #EDE2FF #C9B0E6 #7B46AF #EDE2FF #7B46AF #6D3BF0 #FFFFFF #BA1A1A #FFFFFF #FFDAD6 #410002 #EDE2FF #1D1A22 #EDE2FF #1D1A22 #E4D5F8 #4A4453 #7B7485 #CBC3D6 #000000 #322F38 #F5EEFA #A177FF #DED7E3 #EDE2FF #DACCEC #DED0F1 #E4D5F8 #EADCFD #EEE2FF ================================================ FILE: presentation-core/src/main/res/values/colors_midnightdusk.xml ================================================ #BB0054 #FFFFFF #FFD9E1 #3F0017 #FFB1C4 #BB0054 #FFFFFF #EFBAD4 #D1377C #006638 #FFFFFF #00894b #2D1600 #FFFBFF #1C1B1F #FFFBFF #1C1B1F #F9E6F1 #524346 #BB0054 #313033 #F4F0F4 #847376 #DAC0CD #E8D1DD #F9E6F1 #FCF3F8 #FEF9FC ================================================ FILE: presentation-core/src/main/res/values/colors_monochrome.xml ================================================ #000000 #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #888888 #FFFFFF #888888 #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #000000 #000000 #000000 #000000 #000000 #FFFFFF #FFFFFF #000000 #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF #FFFFFF ================================================ FILE: presentation-core/src/main/res/values/colors_nord.xml ================================================ #5E81AC #000000 #5E81AC #000000 #8CA8CD #81A1C1 #2E3440 #91B4D7 #2E3440 #88C0D0 #2E3440 #88C0D0 #2E3440 #ECEFF4 #2E3440 #E5E9F0 #2E3440 #DAE0EA #2E3440 #5E81AC #3B4252 #ECEFF4 #2E3440 #ECEFF4 #BF616A #000000 #D1D7E0 #D6DCE6 #DAE0EA #E9EDF3 #F2F4F8 ================================================ FILE: presentation-core/src/main/res/values/colors_strawberry.xml ================================================ #A10833 #FFFFFF #D53855 #FFFFFF #A10833 #FFFFFF #D53855 #F6EAED #5F441D #FFFFFF #87683D #FFFFFF #BA1A1A #FFFFFF #FFDAD6 #410002 #FAFAFA #261819 #FAFAFA #261819 #F6EAED #594042 #8D7071 #E1BEC0 #000000 #3D2C2D #FFECED #FFB2B8 #EED4D5 #FFF8F7 #F7DCDD #FDE2E3 #F6EAED #FFF0F0 #FFFFFF ================================================ FILE: presentation-core/src/main/res/values/colors_tachiyomi.xml ================================================ #0058CA #FFFFFF #D9E2FF #001945 #B0C6FF #0058CA #FFFFFF #D9E2FF #001945 #006E1B #FFFFFF #95F990 #002203 #FEFBFF #1B1B1F #FEFBFF #1B1B1F #F3EDF7 #44464F #0058CA #303034 #F2F0F4 #BA1A1A #FFFFFF #FFDAD6 #410002 #757780 #C5C6D0 #F5F1F8 #F7F2FA #F3EDF7 #FCF7FF #FCF7FF ================================================ FILE: presentation-core/src/main/res/values/colors_tako.xml ================================================ #66577E #F3B375 #66577E #F3B375 #D6BAFF #66577E #F3B375 #C8BED0 #66577E #F3B375 #574360 #FDD6B0 #221437 #F7F5FF #1B1B22 #F7F5FF #1B1B22 #E8E0EB #49454E #66577E #313033 #F3EFF4 #7A757E #D7D0DA #DFD8E2 #E8E0EB #EEE6F1 #F7EEFA ================================================ FILE: presentation-core/src/main/res/values/colors_tealturqoise.xml ================================================ #008080 #FFFFFF #008080 #FFFFFF #40E0D0 #008080 #FFFFFF #CFE5E4 #008080 #FF7F7F #000000 #2A1616 #FF7F7F #FAFAFA #050505 #FAFAFA #050505 #EBF3F1 #050505 #BFDFDF #050505 #FAFAFA #6F7977 #E1E9E7 #E6EEEC #EBF3F1 #F0F8F6 #F7FFFD ================================================ FILE: presentation-core/src/main/res/values/colors_tidalwave.xml ================================================ #006780 #ffffff #B4D4DF #001f28 #ff987f #006780 #ffffff #9AE1FF #001f28 #92f7bc #001c3b #c3fada #78ffd6 #fdfbff #001c3b #fdfbff #001c3b #e8eff5 #40484c #006780 #020400 #ffe3c4 #70787c #e2e8ec #e5ecf1 #e8eff5 #edf4fA #f5faff ================================================ FILE: presentation-core/src/main/res/values/colors_yinyang.xml ================================================ #000000 #FFFFFF #000000 #FFFFFF #A6A6A6 #000000 #FFFFFF #DDDDDD #0C0C0C #FFFFFF #000000 #D8E2FF #001947 #FDFDFD #222222 #FDFDFD #222222 #E8E8E8 #515151 #000000 #333333 #F4F4F4 #838383 #CFCFCF #DADADA #E8E8E8 #ECECEC #EFEFEF ================================================ FILE: presentation-core/src/main/res/values/colors_yotsuba.xml ================================================ #AE3200 #FFFFFF #FFDBCF #3B0A00 #FFB59D #AE3200 #FFFFFF #EBCDC2 #3B0A00 #6B5E2F #FFFFFF #F5E2A7 #231B00 #FCFCFC #211A18 #FCFCFC #211A18 #F6EBE7 #53433F #AE3200 #362F2D #FBEEEB #85736E #ECE3E0 #F1E7E4 #F6EBE7 #FAF4F2 #FBF6F4 ================================================ FILE: presentation-core/src/main/res/values-night/colors.xml ================================================ #202125 @color/md_white_1000_12 ================================================ FILE: presentation-core/src/main/res/values-night/colors_catppuccin.xml ================================================ #CBA6F7 #11111B #CBA6F7 #11111B #CBA6F7 #11111B #313244 #CBA6F7 #CBA6F7 #11111B #1E1E2E #CDD6F4 #F38BA8 #11111B #FFFF0558 #EF9FB4 #181825 #CDD6F4 #181825 #CDD6F4 #1E1E2E #CDD6F4 #CBA6F7 #585B70 #FF11111B #EFF1F5 #4C4F69 #8839EF #181825 #313244 #FF181825 #1E1E2E #1E1E2E #1E1E2E #313244 ================================================ FILE: presentation-core/src/main/res/values-night/colors_greenapple.xml ================================================ #7ADB8F #003917 #017737 #FFFFFF #7ADB8F #003917 #017737 #FFFFFF #FFB3AC #680008 #C7282A #FFFFFF #FFB4AB #690005 #93000A #FFDAD6 #0F1510 #DFE4DB #0F1510 #DFE4DB #3F493F #BECABC #889487 #3F493F #000000 #DFE4DB #2C322C #006D32 #0F1510 #353B35 #0A0F0B #181D18 #1C211C #262B26 #313630 ================================================ FILE: presentation-core/src/main/res/values-night/colors_lavender.xml ================================================ #A177FF #3D0090 #A177FF #FFFFFF #A177FF #FFFFFF #423271 #A177FF #CDBDFF #360096 #5512D8 #EFE6FF #FFB4AB #690005 #93000A #FFDAD6 #111129 #E7E0EC #111129 #E7E0EC #3D2F6B #CBC3D6 #958E9F #4A4453 #000000 #E7E0EC #322F38 #6D41C8 #111129 #3B3841 #15132d #171531 #1D193B #241f41 #282446 ================================================ FILE: presentation-core/src/main/res/values-night/colors_midnightdusk.xml ================================================ #F02475 #FFFFFF #BD1C5C #FFFFFF #F02475 #F02475 #16151D #66183C #F02475 #55971C #16151D #386412 #E5E1E5 #16151D #E5E1E5 #16151D #E5E1E5 #281624 #D6C1C4 #F02475 #333043 #FFFFFF #9F8C8F #221320 #251522 #281624 #2D1C2A #2F1F2C ================================================ FILE: presentation-core/src/main/res/values-night/colors_monochrome.xml ================================================ #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #000000 #777777 #000000 #777777 #FFFFFF #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #000000 #000000 #FFFFFF #000000 #FFFFFF #000000 #FFFFFF #FFFFFF #FFFFFF #000000 #FFFFFF #000000 #000000 #000000 #FFFFFF #000000 #000000 #000000 #000000 #000000 ================================================ FILE: presentation-core/src/main/res/values-night/colors_nord.xml ================================================ #88C0D0 #2E3440 #88C0D0 #2E3440 #397E91 #81A1C1 #2E3440 #506275 #88C0D0 #5E81AC #000000 #5E81AC #000000 #2E3440 #ECEFF4 #2E3440 #ECEFF4 #414C5C #ECEFF4 #88C0D0 #D8DEE9 #2E3440 #6d717b #90939a #2E3440 #BF616A #000000 #373F4D #3E4756 #414C5C #4E5766 #505968 ================================================ FILE: presentation-core/src/main/res/values-night/colors_strawberry.xml ================================================ #FFB2B8 #67001D #D53855 #FFFFFF #ED4A65 #201A1A #91002A #FFFFFF #E8C08E #201A1A #775930 #FFF7F1 #FFB4AB #690005 #93000A #FFDAD6 #201A1A #F7DCDD #201A1A #F7DCDD #322727 #E1BEC0 #A9898B #594042 #000000 #F7DCDD #3D2C2D #B61F40 #1D1011 #463536 #2C2222 #302525 #322727 #3C2F2F #463737 ================================================ FILE: presentation-core/src/main/res/values-night/colors_tachiyomi.xml ================================================ #B0C6FF #002D6E #00429B #D9E2FF #0058CA #B0C6FF #002D6E #00429B #D9E2FF #7ADC77 #003909 #005312 #95F990 #1B1B1F #E3E2E6 #1B1B1F #E3E2E6 #211F26 #C5C6D0 #B0C6FF #E3E2E6 #1B1B1F #FFB4AB #690005 #93000A #FFDAD6 #8F9099 #44464F #1A181D #1E1C22 #211F26 #292730 #302E38 ================================================ FILE: presentation-core/src/main/res/values-night/colors_tako.xml ================================================ #F3B375 #38294E #F3B375 #38294E #84531E #F3B375 #38294E #5C4D4B #F3B375 #66577E #F3B375 #4E4065 #EDDCFF #21212E #E3E0F2 #21212E #E3E0F2 #2A2A3C #CBC4CE #66577E #E5E1E6 #1B1B1E #958F99 #20202E #262636 #2A2A3C #303044 #36364D ================================================ FILE: presentation-core/src/main/res/values-night/colors_tealturqoise.xml ================================================ #40E0D0 #000000 #40E0D0 #000000 #008080 #40E0D0 #000000 #18544E #40E0D0 #BF1F2F #FFFFFF #200508 #BF1F2F #202125 #DFDEDA #202125 #DFDEDA #233133 #DFDEDA #40E0D0 #DFDEDA #202125 #899391 #202C2E #222F31 #233133 #28383A #2F4244 ================================================ FILE: presentation-core/src/main/res/values-night/colors_tidalwave.xml ================================================ #5ed4fc #003544 #004d61 #b8eaff #a12b03 #5ed4fc #003544 #004d61 #b8eaff #92f7bc #001c3b #c3fada #78ffd6 #001c3b #d5e3ff #001c3b #d5e3ff #082b4b #bfc8cc #5ed4fc #ffe3c4 #001c3b #8a9296 #072642 #072947 #082b4b #093257 #0A3861 ================================================ FILE: presentation-core/src/main/res/values-night/colors_yinyang.xml ================================================ #FFFFFF #5A5A5A #FFFFFF #000000 #CECECE #FFFFFF #5A5A5A #717171 #E4E4E4 #000000 #FFFFFF #00419E #D8E2FF #1E1E1E #E6E6E6 #1E1E1E #E6E6E6 #313131 #D1D1D1 #FFFFFF #E6E6E6 #1E1E1E #999999 #2A2A2A #2D2D2D #313131 #383838 #3F3F3F ================================================ FILE: presentation-core/src/main/res/values-night/colors_yotsuba.xml ================================================ #FFB59D #5F1600 #862200 #FFDBCF #AE3200 #FFB59D #5F1600 #862200 #FFDBCF #D7C68D #3A2F05 #524619 #F5E2A7 #211A18 #EDE0DD #211A18 #EDE0DD #332723 #D8C2BC #FFB59D #EDE0DD #211A18 #A08C87 #2E221F #312521 #332723 #413531 #4C403D ================================================ FILE: presentation-widget/build.gradle.kts ================================================ plugins { id("mihon.library") id("mihon.library.compose") kotlin("android") } android { namespace = "tachiyomi.presentation.widget" defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } } dependencies { implementation(projects.core.common) implementation(projects.domain) implementation(projects.presentationCore) api(projects.i18n) implementation(compose.glance) implementation(libs.material) implementation(kotlinx.immutables) implementation(platform(libs.coil.bom)) implementation(libs.coil.core) api(libs.injekt) } ================================================ FILE: presentation-widget/consumer-rules.pro ================================================ ================================================ FILE: presentation-widget/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: presentation-widget/src/main/AndroidManifest.xml ================================================ ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/BaseUpdatesGridGlanceWidget.kt ================================================ package tachiyomi.presentation.widget import android.app.Application import android.content.Context import android.graphics.Bitmap import android.os.Build import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.unit.Dp import androidx.core.graphics.drawable.toBitmap import androidx.glance.GlanceId import androidx.glance.GlanceModifier import androidx.glance.ImageProvider import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetManager import androidx.glance.appwidget.SizeMode import androidx.glance.appwidget.appWidgetBackground import androidx.glance.appwidget.provideContent import androidx.glance.background import androidx.glance.layout.fillMaxSize import androidx.glance.layout.padding import androidx.glance.unit.ColorProvider import coil3.annotation.ExperimentalCoilApi import coil3.asDrawable import coil3.executeBlocking import coil3.imageLoader import coil3.request.CachePolicy import coil3.request.ImageRequest import coil3.request.transformations import coil3.size.Precision import coil3.size.Scale import coil3.transform.RoundedCornersTransformation import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.util.system.dpToPx import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.map import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.manga.model.MangaCover import tachiyomi.domain.updates.interactor.GetUpdates import tachiyomi.domain.updates.model.UpdatesWithRelations import tachiyomi.presentation.widget.components.CoverHeight import tachiyomi.presentation.widget.components.CoverWidth import tachiyomi.presentation.widget.components.LockedWidget import tachiyomi.presentation.widget.components.UpdatesWidget import tachiyomi.presentation.widget.util.appWidgetBackgroundRadius import tachiyomi.presentation.widget.util.calculateRowAndColumnCount import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant import java.time.ZonedDateTime abstract class BaseUpdatesGridGlanceWidget( private val context: Context = Injekt.get(), private val getUpdates: GetUpdates = Injekt.get(), private val preferences: SecurityPreferences = Injekt.get(), ) : GlanceAppWidget() { override val sizeMode = SizeMode.Exact abstract val foreground: ColorProvider abstract val background: ImageProvider abstract val topPadding: Dp abstract val bottomPadding: Dp override suspend fun provideGlance(context: Context, id: GlanceId) { val locked = preferences.useAuthenticator.get() val containerModifier = GlanceModifier .fillMaxSize() .background(background) .appWidgetBackground() .padding(top = topPadding, bottom = bottomPadding) .appWidgetBackgroundRadius() val manager = GlanceAppWidgetManager(context) val ids = manager.getGlanceIds(javaClass) val (rowCount, columnCount) = ids .flatMap { manager.getAppWidgetSizes(it) } .maxBy { it.height.value * it.width.value } .calculateRowAndColumnCount(topPadding, bottomPadding) provideContent { // If app lock enabled, don't do anything if (locked) { LockedWidget( foreground = foreground, modifier = containerModifier, ) return@provideContent } val flow = remember { getUpdates .subscribe(false, DateLimit.toEpochMilli()) .map { rawData -> rawData.prepareData(rowCount, columnCount) } } val data by flow.collectAsState(initial = null) UpdatesWidget( data = data, contentColor = foreground, topPadding = topPadding, bottomPadding = bottomPadding, modifier = containerModifier, ) } } @OptIn(ExperimentalCoilApi::class) private suspend fun List.prepareData( rowCount: Int, columnCount: Int, ): ImmutableList> { // Resize to cover size val widthPx = CoverWidth.value.toInt().dpToPx val heightPx = CoverHeight.value.toInt().dpToPx val roundPx = context.resources.getDimension(R.dimen.appwidget_inner_radius) return withIOContext { this@prepareData .distinctBy { it.mangaId } .take(rowCount * columnCount) .map { updatesView -> val request = ImageRequest.Builder(context) .data( MangaCover( mangaId = updatesView.mangaId, sourceId = updatesView.sourceId, isMangaFavorite = true, url = updatesView.coverData.url, lastModified = updatesView.coverData.lastModified, ), ) .memoryCachePolicy(CachePolicy.DISABLED) .precision(Precision.EXACT) .size(widthPx, heightPx) .scale(Scale.FILL) .let { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { it.transformations(RoundedCornersTransformation(roundPx)) } else { it // Handled by system } } .build() val bitmap = context.imageLoader.executeBlocking(request) .image ?.asDrawable(context.resources) ?.toBitmap() Pair(updatesView.mangaId, bitmap) } .toImmutableList() } } companion object { val DateLimit: Instant get() = ZonedDateTime.now().minusMonths(3).toInstant() } } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/UpdatesGridCoverScreenGlanceReceiver.kt ================================================ package tachiyomi.presentation.widget import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver class UpdatesGridCoverScreenGlanceReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget: GlanceAppWidget get() = UpdatesGridCoverScreenGlanceWidget() } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/UpdatesGridCoverScreenGlanceWidget.kt ================================================ package tachiyomi.presentation.widget import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.glance.ImageProvider import androidx.glance.unit.ColorProvider class UpdatesGridCoverScreenGlanceWidget : BaseUpdatesGridGlanceWidget() { override val foreground = ColorProvider(Color.White) override val background = ImageProvider(R.drawable.appwidget_coverscreen_background) override val topPadding = 0.dp override val bottomPadding = 24.dp } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/UpdatesGridGlanceReceiver.kt ================================================ package tachiyomi.presentation.widget import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver class UpdatesGridGlanceReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget: GlanceAppWidget get() = UpdatesGridGlanceWidget() } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/UpdatesGridGlanceWidget.kt ================================================ package tachiyomi.presentation.widget import android.annotation.SuppressLint import androidx.compose.ui.unit.dp import androidx.glance.ImageProvider import androidx.glance.unit.ColorProvider class UpdatesGridGlanceWidget : BaseUpdatesGridGlanceWidget() { @SuppressLint("RestrictedApi") override val foreground = ColorProvider(R.color.appwidget_on_secondary_container) override val background = ImageProvider(R.drawable.appwidget_background) override val topPadding = 0.dp override val bottomPadding = 0.dp } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/WidgetManager.kt ================================================ package tachiyomi.presentation.widget import android.content.Context import androidx.glance.appwidget.updateAll import androidx.lifecycle.LifecycleCoroutineScope import eu.kanade.tachiyomi.core.security.SecurityPreferences import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.updates.interactor.GetUpdates class WidgetManager( private val getUpdates: GetUpdates, private val securityPreferences: SecurityPreferences, ) { fun Context.init(scope: LifecycleCoroutineScope) { combine( getUpdates.subscribe(read = false, after = BaseUpdatesGridGlanceWidget.DateLimit.toEpochMilli()), securityPreferences.useAuthenticator.changes(), transform = { a, b -> a to b }, ) .distinctUntilChanged { old, new -> old.second == new.second && old.first.map { it.chapterId }.toSet() == new.first.map { it.chapterId }.toSet() } .onEach { try { UpdatesGridGlanceWidget().updateAll(this) UpdatesGridCoverScreenGlanceWidget().updateAll(this) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to update widget" } } } .flowOn(Dispatchers.Default) .launchIn(scope) } } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/components/LockedWidget.kt ================================================ package tachiyomi.presentation.widget.components import android.content.Intent import androidx.compose.runtime.Composable import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.glance.GlanceModifier import androidx.glance.LocalContext import androidx.glance.action.clickable import androidx.glance.appwidget.action.actionStartActivity import androidx.glance.layout.Alignment import androidx.glance.layout.Box import androidx.glance.layout.padding import androidx.glance.text.Text import androidx.glance.text.TextAlign import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import tachiyomi.core.common.Constants import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @Composable fun LockedWidget( foreground: ColorProvider, modifier: GlanceModifier = GlanceModifier, ) { val intent = Intent(LocalContext.current, Class.forName(Constants.MAIN_ACTIVITY)).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } Box( modifier = modifier .clickable(actionStartActivity(intent)) .padding(8.dp), contentAlignment = Alignment.Center, ) { Text( text = stringResource(MR.strings.appwidget_unavailable_locked), style = TextStyle( color = foreground, fontSize = 12.sp, textAlign = TextAlign.Center, ), ) } } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesMangaCover.kt ================================================ package tachiyomi.presentation.widget.components import android.graphics.Bitmap import androidx.compose.runtime.Composable import androidx.compose.ui.unit.dp import androidx.glance.GlanceModifier import androidx.glance.Image import androidx.glance.ImageProvider import androidx.glance.layout.Box import androidx.glance.layout.ContentScale import androidx.glance.layout.fillMaxSize import androidx.glance.layout.size import tachiyomi.presentation.widget.R import tachiyomi.presentation.widget.util.appWidgetInnerRadius val CoverWidth = 58.dp val CoverHeight = 87.dp @Composable fun UpdatesMangaCover( cover: Bitmap?, modifier: GlanceModifier = GlanceModifier, ) { Box( modifier = modifier .size(width = CoverWidth, height = CoverHeight) .appWidgetInnerRadius(), ) { if (cover != null) { Image( provider = ImageProvider(cover), contentDescription = null, modifier = GlanceModifier .fillMaxSize() .appWidgetInnerRadius(), contentScale = ContentScale.Crop, ) } else { // Enjoy placeholder Image( provider = ImageProvider(R.drawable.appwidget_cover_error), contentDescription = null, modifier = GlanceModifier.fillMaxSize(), contentScale = ContentScale.Crop, ) } } } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt ================================================ package tachiyomi.presentation.widget.components import android.content.Intent import android.graphics.Bitmap import androidx.compose.runtime.Composable import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.glance.GlanceModifier import androidx.glance.LocalContext import androidx.glance.LocalSize import androidx.glance.action.clickable import androidx.glance.appwidget.CircularProgressIndicator import androidx.glance.appwidget.action.actionStartActivity import androidx.glance.layout.Alignment import androidx.glance.layout.Box import androidx.glance.layout.Column import androidx.glance.layout.Row import androidx.glance.layout.fillMaxHeight import androidx.glance.layout.fillMaxWidth import androidx.glance.layout.padding import androidx.glance.text.Text import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import kotlinx.collections.immutable.ImmutableList import tachiyomi.core.common.Constants import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.widget.util.calculateRowAndColumnCount @Composable fun UpdatesWidget( data: ImmutableList>?, contentColor: ColorProvider, topPadding: Dp, bottomPadding: Dp, modifier: GlanceModifier = GlanceModifier, ) { Box( contentAlignment = Alignment.Center, modifier = modifier, ) { if (data == null) { CircularProgressIndicator(color = contentColor) } else if (data.isEmpty()) { Text( text = stringResource(MR.strings.information_no_recent), style = TextStyle(color = contentColor), ) } else { val (rowCount, columnCount) = LocalSize.current.calculateRowAndColumnCount(topPadding, bottomPadding) Column( modifier = GlanceModifier.fillMaxHeight(), verticalAlignment = Alignment.CenterVertically, horizontalAlignment = Alignment.CenterHorizontally, ) { (0.. val coverRow = (0.. data.getOrNull(j + (i * columnCount)) } if (coverRow.isNotEmpty()) { Row( modifier = GlanceModifier .padding(vertical = 4.dp) .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, verticalAlignment = Alignment.CenterVertically, ) { coverRow.forEach { (mangaId, cover) -> Box( modifier = GlanceModifier .padding(horizontal = 3.dp), contentAlignment = Alignment.Center, ) { val intent = Intent( LocalContext.current, Class.forName(Constants.MAIN_ACTIVITY), ).apply { action = Constants.SHORTCUT_MANGA putExtra(Constants.MANGA_EXTRA, mangaId) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) // https://issuetracker.google.com/issues/238793260 addCategory(mangaId.toString()) } UpdatesMangaCover( cover = cover, modifier = GlanceModifier.clickable(actionStartActivity(intent)), ) } } } } } } } } } ================================================ FILE: presentation-widget/src/main/java/tachiyomi/presentation/widget/util/GlanceUtils.kt ================================================ package tachiyomi.presentation.widget.util import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize import androidx.glance.GlanceModifier import androidx.glance.appwidget.cornerRadius import tachiyomi.presentation.widget.R fun GlanceModifier.appWidgetBackgroundRadius(): GlanceModifier { return this.cornerRadius(R.dimen.appwidget_background_radius) } fun GlanceModifier.appWidgetInnerRadius(): GlanceModifier { return this.cornerRadius(R.dimen.appwidget_inner_radius) } /** * Calculates row-column count. * * Row * Numerator: Container height - container vertical padding * Denominator: Cover height + cover vertical padding * * Column * Numerator: Container width - container horizontal padding * Denominator: Cover width + cover horizontal padding * * @return pair of row and column count */ fun DpSize.calculateRowAndColumnCount( topPadding: Dp, bottomPadding: Dp, ): Pair { // Hack: Size provided by Glance manager is not reliable so take at least 1 row and 1 column // Set max to 10 children each direction because of Glance limitation val height = this.height - topPadding - bottomPadding val rowCount = (height.value / 95).toInt().coerceIn(1, 10) val columnCount = (width.value / 64).toInt().coerceIn(1, 10) return Pair(rowCount, columnCount) } ================================================ FILE: presentation-widget/src/main/res/drawable/appwidget_background.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/drawable/appwidget_cover_error.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/drawable/appwidget_coverscreen_background.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/layout/appwidget_coverscreen_loading.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/layout/appwidget_loading.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/values/colors_appwidget.xml ================================================ @color/tachiyomi_surface #00000000 @color/tachiyomi_onSurface @color/tachiyomi_surfaceVariant @color/tachiyomi_onSurfaceVariant @color/tachiyomi_secondaryContainer @color/tachiyomi_onSecondaryContainer ================================================ FILE: presentation-widget/src/main/res/values/dimens.xml ================================================ 16dp 12dp ================================================ FILE: presentation-widget/src/main/res/values-night-v31/colors_appwidget.xml ================================================ @color/m3_sys_color_dynamic_dark_surface @color/m3_sys_color_dynamic_dark_on_surface @color/m3_sys_color_dynamic_dark_surface_variant @color/m3_sys_color_dynamic_dark_on_surface_variant @color/m3_sys_color_dynamic_dark_secondary_container @color/m3_sys_color_dynamic_dark_on_secondary_container ================================================ FILE: presentation-widget/src/main/res/values-v31/colors_appwidget.xml ================================================ @color/m3_sys_color_dynamic_light_surface @color/m3_sys_color_dynamic_light_on_surface @color/m3_sys_color_dynamic_light_surface_variant @color/m3_sys_color_dynamic_light_on_surface_variant @color/m3_sys_color_dynamic_light_secondary_container @color/m3_sys_color_dynamic_light_on_secondary_container ================================================ FILE: presentation-widget/src/main/res/values-v31/dimens.xml ================================================ @android:dimen/system_app_widget_background_radius ================================================ FILE: presentation-widget/src/main/res/xml/updates_grid_homescreen_widget_info.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/xml/updates_grid_lockscreen_widget_info.xml ================================================ ================================================ FILE: presentation-widget/src/main/res/xml/updates_grid_samsung_cover_widget_info.xml ================================================ ================================================ FILE: settings.gradle.kts ================================================ pluginManagement { resolutionStrategy { eachPlugin { val regex = "com.android.(library|application)".toRegex() if (regex matches requested.id.id) { useModule("com.android.tools.build:gradle:${requested.version}") } } } repositories { gradlePluginPortal() google() mavenCentral() maven(url = "https://www.jitpack.io") } } dependencyResolutionManagement { versionCatalogs { create("kotlinx") { from(files("gradle/kotlinx.versions.toml")) } create("androidx") { from(files("gradle/androidx.versions.toml")) } create("compose") { from(files("gradle/compose.versions.toml")) } } repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { mavenCentral() google() maven(url = "https://www.jitpack.io") } } enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") rootProject.name = "Mihon" include(":app") include(":core-metadata") include(":core:archive") include(":core:common") include(":data") include(":domain") include(":i18n") include(":macrobenchmark") include(":presentation-core") include(":presentation-widget") include(":source-api") include(":source-local") include(":telemetry") ================================================ FILE: source-api/build.gradle.kts ================================================ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi plugins { id("mihon.library") kotlin("multiplatform") kotlin("plugin.serialization") } kotlin { androidTarget() sourceSets { val commonMain by getting { dependencies { api(kotlinx.serialization.json) api(libs.injekt) api(libs.rxjava) api(libs.jsoup) implementation(project.dependencies.platform(compose.bom)) implementation(compose.runtime) } } val androidMain by getting { dependencies { implementation(projects.core.common) api(libs.preferencektx) // Workaround for https://youtrack.jetbrains.com/issue/KT-57605 implementation(kotlinx.coroutines.android) implementation(project.dependencies.platform(kotlinx.coroutines.bom)) } } } @OptIn(ExperimentalKotlinGradlePluginApi::class) compilerOptions { freeCompilerArgs.add("-Xexpect-actual-classes") } } android { namespace = "eu.kanade.tachiyomi.source" defaultConfig { consumerProguardFile("consumer-proguard.pro") } } ================================================ FILE: source-api/consumer-proguard.pro ================================================ -keep class eu.kanade.tachiyomi.source.model.** { public protected *; } -keep class eu.kanade.tachiyomi.source.online.** { public protected *; } -keep class eu.kanade.tachiyomi.source.** extends eu.kanade.tachiyomi.source.Source { public protected *; } -keep,allowoptimization class eu.kanade.tachiyomi.util.JsoupExtensionsKt { public protected *; } ================================================ FILE: source-api/src/androidMain/AndroidManifest.xml ================================================ ================================================ FILE: source-api/src/androidMain/kotlin/eu/kanade/tachiyomi/source/PreferenceScreen.kt ================================================ package eu.kanade.tachiyomi.source actual typealias PreferenceScreen = androidx.preference.PreferenceScreen ================================================ FILE: source-api/src/androidMain/kotlin/eu/kanade/tachiyomi/util/RxExtension.kt ================================================ package eu.kanade.tachiyomi.util import rx.Observable import tachiyomi.core.common.util.lang.awaitSingle actual suspend fun Observable.awaitSingle(): T = awaitSingle() ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/CatalogueSource.kt ================================================ package eu.kanade.tachiyomi.source import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import rx.Observable import tachiyomi.core.common.util.lang.awaitSingle interface CatalogueSource : Source { /** * An ISO 639-1 compliant language code (two letters in lower case). */ override val lang: String /** * Whether the source has support for latest updates. */ val supportsLatest: Boolean /** * Get a page with a list of manga. * * @since extensions-lib 1.5 * @param page the page number to retrieve. */ @Suppress("DEPRECATION") suspend fun getPopularManga(page: Int): MangasPage { return fetchPopularManga(page).awaitSingle() } /** * Get a page with a list of manga. * * @since extensions-lib 1.5 * @param page the page number to retrieve. * @param query the search query. * @param filters the list of filters to apply. */ @Suppress("DEPRECATION") suspend fun getSearchManga(page: Int, query: String, filters: FilterList): MangasPage { return fetchSearchManga(page, query, filters).awaitSingle() } /** * Get a page with a list of latest manga updates. * * @since extensions-lib 1.5 * @param page the page number to retrieve. */ @Suppress("DEPRECATION") suspend fun getLatestUpdates(page: Int): MangasPage { return fetchLatestUpdates(page).awaitSingle() } /** * Returns the list of filters for the source. */ fun getFilterList(): FilterList @Deprecated( "Use the non-RxJava API instead", ReplaceWith("getPopularManga"), ) fun fetchPopularManga(page: Int): Observable = throw IllegalStateException("Not used") @Deprecated( "Use the non-RxJava API instead", ReplaceWith("getSearchManga"), ) fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable = throw IllegalStateException("Not used") @Deprecated( "Use the non-RxJava API instead", ReplaceWith("getLatestUpdates"), ) fun fetchLatestUpdates(page: Int): Observable = throw IllegalStateException("Not used") } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/ConfigurableSource.kt ================================================ package eu.kanade.tachiyomi.source import android.app.Application import android.content.Context import android.content.SharedPreferences import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get interface ConfigurableSource : Source { /** * Gets instance of [SharedPreferences] scoped to the specific source. * * @since extensions-lib 1.5 */ fun getSourcePreferences(): SharedPreferences = Injekt.get().getSharedPreferences(preferenceKey(), Context.MODE_PRIVATE) fun setupPreferenceScreen(screen: PreferenceScreen) } fun ConfigurableSource.preferenceKey(): String = "source_$id" // TODO: use getSourcePreferences once all extensions are on ext-lib 1.5 fun ConfigurableSource.sourcePreferences(): SharedPreferences = Injekt.get().getSharedPreferences(preferenceKey(), Context.MODE_PRIVATE) fun sourcePreferences(key: String): SharedPreferences = Injekt.get().getSharedPreferences(key, Context.MODE_PRIVATE) ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/PreferenceScreen.kt ================================================ package eu.kanade.tachiyomi.source expect class PreferenceScreen ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/Source.kt ================================================ package eu.kanade.tachiyomi.source import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.awaitSingle import rx.Observable /** * A basic interface for creating a source. It could be an online source, a local source, etc. */ interface Source { /** * ID for the source. Must be unique. */ val id: Long /** * Name of the source. */ val name: String val lang: String get() = "" /** * Get the updated details for a manga. * * @since extensions-lib 1.5 * @param manga the manga to update. * @return the updated manga. */ @Suppress("DEPRECATION") suspend fun getMangaDetails(manga: SManga): SManga { return fetchMangaDetails(manga).awaitSingle() } /** * Get all the available chapters for a manga. * * @since extensions-lib 1.5 * @param manga the manga to update. * @return the chapters for the manga. */ @Suppress("DEPRECATION") suspend fun getChapterList(manga: SManga): List { return fetchChapterList(manga).awaitSingle() } /** * Get the list of pages a chapter has. Pages should be returned * in the expected order; the index is ignored. * * @since extensions-lib 1.5 * @param chapter the chapter. * @return the pages for the chapter. */ @Suppress("DEPRECATION") suspend fun getPageList(chapter: SChapter): List { return fetchPageList(chapter).awaitSingle() } @Deprecated( "Use the non-RxJava API instead", ReplaceWith("getMangaDetails"), ) fun fetchMangaDetails(manga: SManga): Observable = throw IllegalStateException("Not used") @Deprecated( "Use the non-RxJava API instead", ReplaceWith("getChapterList"), ) fun fetchChapterList(manga: SManga): Observable> = throw IllegalStateException("Not used") @Deprecated( "Use the non-RxJava API instead", ReplaceWith("getPageList"), ) fun fetchPageList(chapter: SChapter): Observable> = throw IllegalStateException("Not used") } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/SourceFactory.kt ================================================ package eu.kanade.tachiyomi.source /** * A factory for creating sources at runtime. */ interface SourceFactory { /** * Create a new copy of the sources * @return The created sources */ fun createSources(): List } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/UnmeteredSource.kt ================================================ package eu.kanade.tachiyomi.source /** * A source that explicitly doesn't require traffic considerations. * * This typically applies for self-hosted sources. */ interface UnmeteredSource ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/Filter.kt ================================================ package eu.kanade.tachiyomi.source.model sealed class Filter(val name: String, var state: T) { open class Header(name: String) : Filter(name, 0) open class Separator(name: String = "") : Filter(name, 0) abstract class Select(name: String, val values: Array, state: Int = 0) : Filter( name, state, ) abstract class Text(name: String, state: String = "") : Filter(name, state) abstract class CheckBox(name: String, state: Boolean = false) : Filter(name, state) abstract class TriState(name: String, state: Int = STATE_IGNORE) : Filter(name, state) { fun isIgnored() = state == STATE_IGNORE fun isIncluded() = state == STATE_INCLUDE fun isExcluded() = state == STATE_EXCLUDE companion object { const val STATE_IGNORE = 0 const val STATE_INCLUDE = 1 const val STATE_EXCLUDE = 2 } } abstract class Group(name: String, state: List) : Filter>(name, state) abstract class Sort(name: String, val values: Array, state: Selection? = null) : Filter(name, state) { data class Selection(val index: Int, val ascending: Boolean) } override fun equals(other: Any?): Boolean { if (this === other) return true if (other !is Filter<*>) return false return name == other.name && state == other.state } override fun hashCode(): Int { var result = name.hashCode() result = 31 * result + (state?.hashCode() ?: 0) return result } } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/FilterList.kt ================================================ package eu.kanade.tachiyomi.source.model import androidx.compose.runtime.Stable @Stable data class FilterList(val list: List>) : List> by list { constructor(vararg fs: Filter<*>) : this(if (fs.isNotEmpty()) fs.asList() else emptyList()) override fun equals(other: Any?): Boolean { return false } override fun hashCode(): Int { return list.hashCode() } } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/MangasPage.kt ================================================ package eu.kanade.tachiyomi.source.model data class MangasPage(val mangas: List, val hasNextPage: Boolean) ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/Page.kt ================================================ package eu.kanade.tachiyomi.source.model import android.net.Uri import eu.kanade.tachiyomi.network.ProgressListener import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.serialization.Serializable import kotlinx.serialization.Transient @Serializable open class Page( val index: Int, val url: String = "", var imageUrl: String? = null, @Transient var uri: Uri? = null, // Deprecated but can't be deleted due to extensions ) : ProgressListener { val number: Int get() = index + 1 @Transient private val _statusFlow = MutableStateFlow(State.Queue) @Transient val statusFlow = _statusFlow.asStateFlow() var status: State get() = _statusFlow.value set(value) { _statusFlow.value = value } @Transient private val _progressFlow = MutableStateFlow(0) @Transient val progressFlow = _progressFlow.asStateFlow() var progress: Int get() = _progressFlow.value set(value) { _progressFlow.value = value } override fun update(bytesRead: Long, contentLength: Long, done: Boolean) { progress = if (contentLength > 0) { (100 * bytesRead / contentLength).toInt() } else { -1 } } sealed interface State { data object Queue : State data object LoadPage : State data object DownloadImage : State data object Ready : State data class Error(val error: Throwable) : State } } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SChapter.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.source.model import java.io.Serializable interface SChapter : Serializable { var url: String var name: String var date_upload: Long var chapter_number: Float var scanlator: String? fun copyFrom(other: SChapter) { name = other.name url = other.url date_upload = other.date_upload chapter_number = other.chapter_number scanlator = other.scanlator } companion object { fun create(): SChapter { return SChapterImpl() } } } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SChapterImpl.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.source.model class SChapterImpl : SChapter { override lateinit var url: String override lateinit var name: String override var date_upload: Long = 0 override var chapter_number: Float = -1f override var scanlator: String? = null } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SManga.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.source.model import java.io.Serializable interface SManga : Serializable { var url: String var title: String var artist: String? var author: String? var description: String? var genre: String? var status: Int var thumbnail_url: String? var update_strategy: UpdateStrategy var initialized: Boolean fun getGenres(): List? { if (genre.isNullOrBlank()) return null return genre?.split(", ")?.map { it.trim() }?.filterNot { it.isBlank() }?.distinct() } fun copy() = create().also { it.url = url it.title = title it.artist = artist it.author = author it.description = description it.genre = genre it.status = status it.thumbnail_url = thumbnail_url it.update_strategy = update_strategy it.initialized = initialized } companion object { const val UNKNOWN = 0 const val ONGOING = 1 const val COMPLETED = 2 const val LICENSED = 3 const val PUBLISHING_FINISHED = 4 const val CANCELLED = 5 const val ON_HIATUS = 6 fun create(): SManga { return SMangaImpl() } } } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SMangaImpl.kt ================================================ @file:Suppress("PropertyName") package eu.kanade.tachiyomi.source.model class SMangaImpl : SManga { override lateinit var url: String override lateinit var title: String override var artist: String? = null override var author: String? = null override var description: String? = null override var genre: String? = null override var status: Int = 0 override var thumbnail_url: String? = null override var update_strategy: UpdateStrategy = UpdateStrategy.ALWAYS_UPDATE override var initialized: Boolean = false } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/UpdateStrategy.kt ================================================ package eu.kanade.tachiyomi.source.model /** * Define the update strategy for a single [SManga]. * The strategy used will only take effect on the library update. * * @since extensions-lib 1.4 */ @Suppress("UNUSED") enum class UpdateStrategy { /** * Series marked as always update will be included in the library * update if they aren't excluded by additional restrictions. */ ALWAYS_UPDATE, /** * Series marked as only fetch once will be automatically skipped * during library updates. Useful for cases where the series is previously * known to be finished and have only a single chapter, for example. */ ONLY_FETCH_ONCE, } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt ================================================ package eu.kanade.tachiyomi.source.online import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.newCachelessCallWithProgress import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import okhttp3.Headers import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import rx.Observable import tachiyomi.core.common.util.lang.awaitSingle import uy.kohesive.injekt.injectLazy import java.net.URI import java.net.URISyntaxException import java.security.MessageDigest /** * A simple implementation for sources from a website. */ @Suppress("unused") abstract class HttpSource : CatalogueSource { /** * Network service. */ protected val network: NetworkHelper by injectLazy() /** * Base url of the website without the trailing slash, like: http://mysite.com */ abstract val baseUrl: String /** * Version id used to generate the source id. If the site completely changes and urls are * incompatible, you may increase this value and it'll be considered as a new source. */ open val versionId = 1 /** * ID of the source. By default it uses a generated id using the first 16 characters (64 bits) * of the MD5 of the string `"${name.lowercase()}/$lang/$versionId"`. * * The ID is generated by the [generateId] function, which can be reused if needed * to generate outdated IDs for cases where the source name or language needs to * be changed but migrations can be avoided. * * Note: the generated ID sets the sign bit to `0`. */ override val id by lazy { generateId(name, lang, versionId) } /** * Headers used for requests. */ val headers: Headers by lazy { headersBuilder().build() } /** * Default network client for doing requests. */ open val client: OkHttpClient get() = network.client /** * Generates a unique ID for the source based on the provided [name], [lang] and * [versionId]. It will use the first 16 characters (64 bits) of the MD5 of the string * `"${name.lowercase()}/$lang/$versionId"`. * * Note: the generated ID sets the sign bit to `0`. * * Can be used to generate outdated IDs, such as when the source name or language * needs to be changed but migrations can be avoided. * * @since extensions-lib 1.5 * @param name [String] the name of the source * @param lang [String] the language of the source * @param versionId [Int] the version ID of the source * @return a unique ID for the source */ @Suppress("MemberVisibilityCanBePrivate") protected fun generateId(name: String, lang: String, versionId: Int): Long { val key = "${name.lowercase()}/$lang/$versionId" val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray()) return (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE } /** * Headers builder for requests. Implementations can override this method for custom headers. */ protected open fun headersBuilder() = Headers.Builder().apply { add("User-Agent", network.defaultUserAgentProvider()) } /** * Visible name of the source. */ override fun toString() = "$name (${lang.uppercase()})" /** * Returns an observable containing a page with a list of manga. Normally it's not needed to * override this method. * * @param page the page number to retrieve. */ @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getPopularManga")) override fun fetchPopularManga(page: Int): Observable { return client.newCall(popularMangaRequest(page)) .asObservableSuccess() .map { response -> popularMangaParse(response) } } /** * Returns the request for the popular manga given the page. * * @param page the page number to retrieve. */ protected abstract fun popularMangaRequest(page: Int): Request /** * Parses the response from the site and returns a [MangasPage] object. * * @param response the response from the site. */ protected abstract fun popularMangaParse(response: Response): MangasPage /** * Returns an observable containing a page with a list of manga. Normally it's not needed to * override this method. * * @param page the page number to retrieve. * @param query the search query. * @param filters the list of filters to apply. */ @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getSearchManga")) override fun fetchSearchManga( page: Int, query: String, filters: FilterList, ): Observable { return Observable.defer { try { client.newCall(searchMangaRequest(page, query, filters)).asObservableSuccess() } catch (e: NoClassDefFoundError) { // RxJava doesn't handle Errors, which tends to happen during global searches // if an old extension using non-existent classes is still around throw RuntimeException(e) } } .map { response -> searchMangaParse(response) } } /** * Returns the request for the search manga given the page. * * @param page the page number to retrieve. * @param query the search query. * @param filters the list of filters to apply. */ protected abstract fun searchMangaRequest( page: Int, query: String, filters: FilterList, ): Request /** * Parses the response from the site and returns a [MangasPage] object. * * @param response the response from the site. */ protected abstract fun searchMangaParse(response: Response): MangasPage /** * Returns an observable containing a page with a list of latest manga updates. * * @param page the page number to retrieve. */ @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getLatestUpdates")) override fun fetchLatestUpdates(page: Int): Observable { return client.newCall(latestUpdatesRequest(page)) .asObservableSuccess() .map { response -> latestUpdatesParse(response) } } /** * Returns the request for latest manga given the page. * * @param page the page number to retrieve. */ protected abstract fun latestUpdatesRequest(page: Int): Request /** * Parses the response from the site and returns a [MangasPage] object. * * @param response the response from the site. */ protected abstract fun latestUpdatesParse(response: Response): MangasPage /** * Get the updated details for a manga. * Normally it's not needed to override this method. * * @param manga the manga to update. * @return the updated manga. */ @Suppress("DEPRECATION") override suspend fun getMangaDetails(manga: SManga): SManga { return fetchMangaDetails(manga).awaitSingle() } @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getMangaDetails")) override fun fetchMangaDetails(manga: SManga): Observable { return client.newCall(mangaDetailsRequest(manga)) .asObservableSuccess() .map { response -> mangaDetailsParse(response).apply { initialized = true } } } /** * Returns the request for the details of a manga. Override only if it's needed to change the * url, send different headers or request method like POST. * * @param manga the manga to be updated. */ open fun mangaDetailsRequest(manga: SManga): Request { return GET(baseUrl + manga.url, headers) } /** * Parses the response from the site and returns the details of a manga. * * @param response the response from the site. */ protected abstract fun mangaDetailsParse(response: Response): SManga /** * Get all the available chapters for a manga. * Normally it's not needed to override this method. * * @param manga the manga to update. * @return the chapters for the manga. */ @Suppress("DEPRECATION") override suspend fun getChapterList(manga: SManga): List { return fetchChapterList(manga).awaitSingle() } @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getChapterList")) override fun fetchChapterList(manga: SManga): Observable> { return client.newCall(chapterListRequest(manga)) .asObservableSuccess() .map { response -> chapterListParse(response) } } /** * Returns the request for updating the chapter list. Override only if it's needed to override * the url, send different headers or request method like POST. * * @param manga the manga to look for chapters. */ protected open fun chapterListRequest(manga: SManga): Request { return GET(baseUrl + manga.url, headers) } /** * Parses the response from the site and returns a list of chapters. * * @param response the response from the site. */ protected abstract fun chapterListParse(response: Response): List /** * Parses the response from the site and returns a SChapter Object. * * @param response the response from the site. */ protected abstract fun chapterPageParse(response: Response): SChapter /** * Get the list of pages a chapter has. Pages should be returned * in the expected order; the index is ignored. * * @param chapter the chapter. * @return the pages for the chapter. */ @Suppress("DEPRECATION") override suspend fun getPageList(chapter: SChapter): List { return fetchPageList(chapter).awaitSingle() } @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getPageList")) override fun fetchPageList(chapter: SChapter): Observable> { return client.newCall(pageListRequest(chapter)) .asObservableSuccess() .map { response -> pageListParse(response) } } /** * Returns the request for getting the page list. Override only if it's needed to override the * url, send different headers or request method like POST. * * @param chapter the chapter whose page list has to be fetched. */ protected open fun pageListRequest(chapter: SChapter): Request { return GET(baseUrl + chapter.url, headers) } /** * Parses the response from the site and returns a list of pages. * * @param response the response from the site. */ protected abstract fun pageListParse(response: Response): List /** * Returns an observable with the page containing the source url of the image. If there's any * error, it will return null instead of throwing an exception. * * @since extensions-lib 1.5 * @param page the page whose source image has to be fetched. */ @Suppress("DEPRECATION") open suspend fun getImageUrl(page: Page): String { return fetchImageUrl(page).awaitSingle() } @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getImageUrl")) open fun fetchImageUrl(page: Page): Observable { return client.newCall(imageUrlRequest(page)) .asObservableSuccess() .map { imageUrlParse(it) } } /** * Returns the request for getting the url to the source image. Override only if it's needed to * override the url, send different headers or request method like POST. * * @param page the chapter whose page list has to be fetched */ protected open fun imageUrlRequest(page: Page): Request { return GET(page.url, headers) } /** * Parses the response from the site and returns the absolute url to the source image. * * @param response the response from the site. */ protected abstract fun imageUrlParse(response: Response): String /** * Returns the response of the source image. * Typically does not need to be overridden. * * @since extensions-lib 1.5 * @param page the page whose source image has to be downloaded. */ open suspend fun getImage(page: Page): Response { return client.newCachelessCallWithProgress(imageRequest(page), page) .awaitSuccess() } /** * Returns the request for getting the source image. Override only if it's needed to override * the url, send different headers or request method like POST. * * @param page the chapter whose page list has to be fetched */ protected open fun imageRequest(page: Page): Request { return GET(page.imageUrl!!, headers) } /** * Assigns the url of the chapter without the scheme and domain. It saves some redundancy from * database and the urls could still work after a domain change. * * @param url the full url to the chapter. */ fun SChapter.setUrlWithoutDomain(url: String) { this.url = getUrlWithoutDomain(url) } /** * Assigns the url of the manga without the scheme and domain. It saves some redundancy from * database and the urls could still work after a domain change. * * @param url the full url to the manga. */ fun SManga.setUrlWithoutDomain(url: String) { this.url = getUrlWithoutDomain(url) } /** * Returns the url of the given string without the scheme and domain. * * @param orig the full url. */ private fun getUrlWithoutDomain(orig: String): String { return try { val uri = URI(orig.replace(" ", "%20")) var out = uri.path if (uri.query != null) { out += "?" + uri.query } if (uri.fragment != null) { out += "#" + uri.fragment } out } catch (e: URISyntaxException) { orig } } /** * Returns the url of the provided manga * * @since extensions-lib 1.4 * @param manga the manga * @return url of the manga */ open fun getMangaUrl(manga: SManga): String { return mangaDetailsRequest(manga).url.toString() } /** * Returns the url of the provided chapter * * @since extensions-lib 1.4 * @param chapter the chapter * @return url of the chapter */ open fun getChapterUrl(chapter: SChapter): String { return pageListRequest(chapter).url.toString() } /** * Called before inserting a new chapter into database. Use it if you need to override chapter * fields, like the title or the chapter number. Do not change anything to [manga]. * * @param chapter the chapter to be added. * @param manga the manga of the chapter. */ open fun prepareNewChapter(chapter: SChapter, manga: SManga) {} /** * Returns the list of filters for the source. */ override fun getFilterList() = FilterList() } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/ParsedHttpSource.kt ================================================ package eu.kanade.tachiyomi.source.online import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.asJsoup import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element /** * A simple implementation for sources from a website using Jsoup, an HTML parser. */ @Suppress("unused") abstract class ParsedHttpSource : HttpSource() { /** * Parses the response from the site and returns a [MangasPage] object. * * @param response the response from the site. */ override fun popularMangaParse(response: Response): MangasPage { val document = response.asJsoup() val mangas = document.select(popularMangaSelector()).map { element -> popularMangaFromElement(element) } val hasNextPage = popularMangaNextPageSelector()?.let { selector -> document.select(selector).first() } != null return MangasPage(mangas, hasNextPage) } /** * Returns the Jsoup selector that returns a list of [Element] corresponding to each manga. */ protected abstract fun popularMangaSelector(): String /** * Returns a manga from the given [element]. Most sites only show the title and the url, it's * totally fine to fill only those two values. * * @param element an element obtained from [popularMangaSelector]. */ protected abstract fun popularMangaFromElement(element: Element): SManga /** * Returns the Jsoup selector that returns the tag linking to the next page, or null if * there's no next page. */ protected abstract fun popularMangaNextPageSelector(): String? /** * Parses the response from the site and returns a [MangasPage] object. * * @param response the response from the site. */ override fun searchMangaParse(response: Response): MangasPage { val document = response.asJsoup() val mangas = document.select(searchMangaSelector()).map { element -> searchMangaFromElement(element) } val hasNextPage = searchMangaNextPageSelector()?.let { selector -> document.select(selector).first() } != null return MangasPage(mangas, hasNextPage) } /** * Returns the Jsoup selector that returns a list of [Element] corresponding to each manga. */ protected abstract fun searchMangaSelector(): String /** * Returns a manga from the given [element]. Most sites only show the title and the url, it's * totally fine to fill only those two values. * * @param element an element obtained from [searchMangaSelector]. */ protected abstract fun searchMangaFromElement(element: Element): SManga /** * Returns the Jsoup selector that returns the tag linking to the next page, or null if * there's no next page. */ protected abstract fun searchMangaNextPageSelector(): String? /** * Parses the response from the site and returns a [MangasPage] object. * * @param response the response from the site. */ override fun latestUpdatesParse(response: Response): MangasPage { val document = response.asJsoup() val mangas = document.select(latestUpdatesSelector()).map { element -> latestUpdatesFromElement(element) } val hasNextPage = latestUpdatesNextPageSelector()?.let { selector -> document.select(selector).first() } != null return MangasPage(mangas, hasNextPage) } /** * Returns the Jsoup selector that returns a list of [Element] corresponding to each manga. */ protected abstract fun latestUpdatesSelector(): String /** * Returns a manga from the given [element]. Most sites only show the title and the url, it's * totally fine to fill only those two values. * * @param element an element obtained from [latestUpdatesSelector]. */ protected abstract fun latestUpdatesFromElement(element: Element): SManga /** * Returns the Jsoup selector that returns the tag linking to the next page, or null if * there's no next page. */ protected abstract fun latestUpdatesNextPageSelector(): String? /** * Parses the response from the site and returns the details of a manga. * * @param response the response from the site. */ override fun mangaDetailsParse(response: Response): SManga { return mangaDetailsParse(response.asJsoup()) } /** * Returns the details of the manga from the given [document]. * * @param document the parsed document. */ protected abstract fun mangaDetailsParse(document: Document): SManga /** * Parses the response from the site and returns a list of chapters. * * @param response the response from the site. */ override fun chapterListParse(response: Response): List { val document = response.asJsoup() return document.select(chapterListSelector()).map { chapterFromElement(it) } } /** * Returns the Jsoup selector that returns a list of [Element] corresponding to each chapter. */ protected abstract fun chapterListSelector(): String /** * Returns a chapter from the given element. * * @param element an element obtained from [chapterListSelector]. */ protected abstract fun chapterFromElement(element: Element): SChapter /** * Parses the response from the site and returns the page list. * * @param response the response from the site. */ override fun pageListParse(response: Response): List { return pageListParse(response.asJsoup()) } /** * Returns a page list from the given document. * * @param document the parsed document. */ protected abstract fun pageListParse(document: Document): List /** * Parse the response from the site and returns the absolute url to the source image. * * @param response the response from the site. */ override fun imageUrlParse(response: Response): String { return imageUrlParse(response.asJsoup()) } /** * Returns the absolute url to the source image from the document. * * @param document the parsed document. */ protected abstract fun imageUrlParse(document: Document): String } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/ResolvableSource.kt ================================================ package eu.kanade.tachiyomi.source.online import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga /** * A source that may handle opening an SManga or SChapter for a given URI. * * @since extensions-lib 1.5 */ interface ResolvableSource : Source { /** * Returns what the given URI may open. * Returns [UriType.Unknown] if the source is not able to resolve the URI. * * @since extensions-lib 1.5 */ fun getUriType(uri: String): UriType /** * Called if [getUriType] is [UriType.Manga]. * Returns the corresponding SManga, if possible. * * @since extensions-lib 1.5 */ suspend fun getManga(uri: String): SManga? /** * Called if [getUriType] is [UriType.Chapter]. * Returns the corresponding SChapter, if possible. * * @since extensions-lib 1.5 */ suspend fun getChapter(uri: String): SChapter? } sealed interface UriType { data object Manga : UriType data object Chapter : UriType data object Unknown : UriType } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/util/JsoupExtensions.kt ================================================ package eu.kanade.tachiyomi.util import okhttp3.Response import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.nodes.Element fun Element.selectText(css: String, defaultValue: String? = null): String? { return select(css).first()?.text() ?: defaultValue } fun Element.selectInt(css: String, defaultValue: Int = 0): Int { return select(css).first()?.text()?.toInt() ?: defaultValue } fun Element.attrOrText(css: String): String { return if (css != "text") attr(css) else text() } /** * Returns a Jsoup document for this response. * @param html the body of the response. Use only if the body was read before calling this method. */ fun Response.asJsoup(html: String? = null): Document { return Jsoup.parse(html ?: body.string(), request.url.toString()) } ================================================ FILE: source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/util/RxExtension.kt ================================================ package eu.kanade.tachiyomi.util import rx.Observable expect suspend fun Observable.awaitSingle(): T ================================================ FILE: source-local/build.gradle.kts ================================================ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi plugins { id("mihon.library") kotlin("multiplatform") } kotlin { androidTarget() sourceSets { val commonMain by getting { dependencies { implementation(projects.sourceApi) api(projects.i18n) implementation(libs.unifile) } } val androidMain by getting { dependencies { implementation(projects.core.archive) implementation(projects.core.common) implementation(projects.coreMetadata) // Move ChapterRecognition to separate module? implementation(projects.domain) implementation(kotlinx.bundles.serialization) } } } @OptIn(ExperimentalKotlinGradlePluginApi::class) compilerOptions { freeCompilerArgs.addAll( "-Xexpect-actual-classes", "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", ) } } android { namespace = "tachiyomi.source.local" defaultConfig { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } } ================================================ FILE: source-local/consumer-rules.pro ================================================ ================================================ FILE: source-local/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: source-local/src/androidMain/AndroidManifest.xml ================================================ ================================================ FILE: source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt ================================================ package tachiyomi.source.local import android.content.Context import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.UnmeteredSource import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream import logcat.LogPriority import mihon.core.archive.archiveReader import mihon.core.archive.epubReader import nl.adaptivity.xmlutil.core.AndroidXmlReader import nl.adaptivity.xmlutil.serialization.XML import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.extension import tachiyomi.core.common.storage.nameWithoutExtension import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.metadata.comicinfo.copyFromComicInfo import tachiyomi.core.metadata.comicinfo.getComicInfo import tachiyomi.core.metadata.tachiyomi.MangaDetails import tachiyomi.domain.chapter.service.ChapterRecognition import tachiyomi.domain.manga.model.Manga import tachiyomi.i18n.MR import tachiyomi.source.local.filter.OrderBy import tachiyomi.source.local.image.LocalCoverManager import tachiyomi.source.local.io.Archive import tachiyomi.source.local.io.Format import tachiyomi.source.local.io.LocalSourceFileSystem import tachiyomi.source.local.metadata.fillMetadata import uy.kohesive.injekt.injectLazy import java.io.InputStream import java.nio.charset.StandardCharsets import kotlin.time.Duration.Companion.days import tachiyomi.domain.source.model.Source as DomainSource actual class LocalSource( private val context: Context, private val fileSystem: LocalSourceFileSystem, private val coverManager: LocalCoverManager, ) : CatalogueSource, UnmeteredSource { private val json: Json by injectLazy() private val xml: XML by injectLazy() @Suppress("PrivatePropertyName") private val PopularFilters = FilterList(OrderBy.Popular(context)) @Suppress("PrivatePropertyName") private val LatestFilters = FilterList(OrderBy.Latest(context)) override val name: String = context.stringResource(MR.strings.local_source) override val id: Long = ID override val lang: String = "other" override fun toString() = name override val supportsLatest: Boolean = true // Browse related override suspend fun getPopularManga(page: Int) = getSearchManga(page, "", PopularFilters) override suspend fun getLatestUpdates(page: Int) = getSearchManga(page, "", LatestFilters) override suspend fun getSearchManga(page: Int, query: String, filters: FilterList): MangasPage = withIOContext { val lastModifiedLimit = if (filters === LatestFilters) { System.currentTimeMillis() - LATEST_THRESHOLD } else { 0L } var mangaDirs = fileSystem.getFilesInBaseDirectory() // Filter out files that are hidden and is not a folder .filter { it.isDirectory && !it.name.orEmpty().startsWith('.') } .distinctBy { it.name } .filter { if (lastModifiedLimit == 0L && query.isBlank()) { true } else if (lastModifiedLimit == 0L) { it.name.orEmpty().contains(query, ignoreCase = true) } else { it.lastModified() >= lastModifiedLimit } } filters.forEach { filter -> when (filter) { is OrderBy.Popular -> { mangaDirs = if (filter.state!!.ascending) { mangaDirs.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name.orEmpty() }) } else { mangaDirs.sortedWith(compareByDescending(String.CASE_INSENSITIVE_ORDER) { it.name.orEmpty() }) } } is OrderBy.Latest -> { mangaDirs = if (filter.state!!.ascending) { mangaDirs.sortedBy(UniFile::lastModified) } else { mangaDirs.sortedByDescending(UniFile::lastModified) } } else -> { /* Do nothing */ } } } val mangas = mangaDirs .map { mangaDir -> async { SManga.create().apply { title = mangaDir.name.orEmpty() url = mangaDir.name.orEmpty() // Try to find the cover coverManager.find(mangaDir.name.orEmpty())?.let { thumbnail_url = it.uri.toString() } } } } .awaitAll() MangasPage(mangas, false) } // Manga details related override suspend fun getMangaDetails(manga: SManga): SManga = withIOContext { coverManager.find(manga.url)?.let { manga.thumbnail_url = it.uri.toString() } // Augment manga details based on metadata files try { val mangaDir = fileSystem.getMangaDirectory(manga.url) ?: error("${manga.url} is not a valid directory") val mangaDirFiles = mangaDir.listFiles().orEmpty() val comicInfoFile = mangaDirFiles .firstOrNull { it.name == COMIC_INFO_FILE } val noXmlFile = mangaDirFiles .firstOrNull { it.name == ".noxml" } val legacyJsonDetailsFile = mangaDirFiles .firstOrNull { it.extension == "json" } when { // Top level ComicInfo.xml comicInfoFile != null -> { noXmlFile?.delete() setMangaDetailsFromComicInfoFile(comicInfoFile.openInputStream(), manga) } // Old custom JSON format // TODO: remove support for this entirely after a while legacyJsonDetailsFile != null -> { json.decodeFromStream(legacyJsonDetailsFile.openInputStream()).run { title?.let { manga.title = it } author?.let { manga.author = it } artist?.let { manga.artist = it } description?.let { manga.description = it } genre?.let { manga.genre = it.joinToString() } status?.let { manga.status = it } } // Replace with ComicInfo.xml file val comicInfo = manga.getComicInfo() mangaDir .createFile(COMIC_INFO_FILE) ?.openOutputStream() ?.use { val comicInfoString = xml.encodeToString(ComicInfo.serializer(), comicInfo) it.write(comicInfoString.toByteArray()) legacyJsonDetailsFile.delete() } } // Copy ComicInfo.xml from chapter archive to top level if found noXmlFile == null -> { val chapterArchives = mangaDirFiles.filter(Archive::isSupported) val copiedFile = copyComicInfoFileFromChapters(chapterArchives, mangaDir) if (copiedFile != null) { setMangaDetailsFromComicInfoFile(copiedFile.openInputStream(), manga) } else { // Avoid re-scanning mangaDir.createFile(".noxml") } } } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Error setting manga details from local metadata for ${manga.title}" } } return@withIOContext manga } private fun getComicInfoForChapter(chapter: UniFile, block: (InputStream) -> T): T? { if (chapter.isDirectory) { return chapter.findFile(COMIC_INFO_FILE)?.let { file -> file.openInputStream().use(block) } } else { return chapter.archiveReader(context).use { reader -> reader.getInputStream(COMIC_INFO_FILE)?.use(block) } } } private fun copyComicInfoFileFromChapters(chapterArchives: List, folder: UniFile): UniFile? { for (chapter in chapterArchives) { val file = getComicInfoForChapter(chapter) f@{ stream -> return@f copyComicInfoFile(stream, folder) } if (file != null) return file } return null } private fun copyComicInfoFile(comicInfoFileStream: InputStream, folder: UniFile): UniFile? { return folder.createFile(COMIC_INFO_FILE)?.apply { openOutputStream().use { outputStream -> comicInfoFileStream.use { it.copyTo(outputStream) } } } } private fun parseComicInfo(stream: InputStream): ComicInfo { return AndroidXmlReader(stream, StandardCharsets.UTF_8.name()).use { xml.decodeFromReader(it) } } private fun setMangaDetailsFromComicInfoFile(stream: InputStream, manga: SManga) { manga.copyFromComicInfo(parseComicInfo(stream)) } private fun setChapterDetailsFromComicInfoFile(stream: InputStream, chapter: SChapter) { val comicInfo = parseComicInfo(stream) comicInfo.title?.let { chapter.name = it.value } comicInfo.number?.value?.toFloatOrNull()?.let { chapter.chapter_number = it } comicInfo.translator?.let { chapter.scanlator = it.value } } // Chapters override suspend fun getChapterList(manga: SManga): List = withIOContext { val chapters = fileSystem.getFilesInMangaDirectory(manga.url) // Only keep supported formats .filterNot { it.name.orEmpty().startsWith('.') } .filter { it.isDirectory || Archive.isSupported(it) || it.extension.equals("epub", true) } .map { chapterFile -> SChapter.create().apply { url = "${manga.url}/${chapterFile.name}" name = if (chapterFile.isDirectory) { chapterFile.name } else { chapterFile.nameWithoutExtension }.orEmpty() date_upload = chapterFile.lastModified() chapter_number = ChapterRecognition .parseChapterNumber(manga.title, this.name, this.chapter_number.toDouble()) .toFloat() val format = Format.valueOf(chapterFile) if (format is Format.Epub) { format.file.epubReader(context).use { epub -> epub.fillMetadata(manga, this) } } else { getComicInfoForChapter(chapterFile) { stream -> setChapterDetailsFromComicInfoFile(stream, this) } } } } .sortedWith { c1, c2 -> c2.name.compareToCaseInsensitiveNaturalOrder(c1.name) } // Copy the cover from the first chapter found if not available if (manga.thumbnail_url.isNullOrBlank()) { chapters.lastOrNull()?.let { chapter -> updateCover(chapter, manga) } } chapters } // Filters override fun getFilterList() = FilterList(OrderBy.Popular(context)) // Unused stuff override suspend fun getPageList(chapter: SChapter): List = throw UnsupportedOperationException("Unused") fun getFormat(chapter: SChapter): Format { try { val (mangaDirName, chapterName) = chapter.url.split('/', limit = 2) return fileSystem.getBaseDirectory() ?.findFile(mangaDirName) ?.findFile(chapterName) ?.let(Format.Companion::valueOf) ?: throw Exception(context.stringResource(MR.strings.chapter_not_found)) } catch (e: Format.UnknownFormatException) { throw Exception(context.stringResource(MR.strings.local_invalid_format)) } catch (e: Exception) { throw e } } private fun updateCover(chapter: SChapter, manga: SManga): UniFile? { return try { when (val format = getFormat(chapter)) { is Format.Directory -> { val entry = format.file.listFiles() ?.sortedWith { f1, f2 -> f1.name.orEmpty().compareToCaseInsensitiveNaturalOrder( f2.name.orEmpty(), ) } ?.find { !it.isDirectory && ImageUtil.isImage(it.name) { it.openInputStream() } } entry?.let { coverManager.update(manga, it.openInputStream()) } } is Format.Archive -> { format.file.archiveReader(context).use { reader -> val entry = reader.useEntries { entries -> entries .sortedWith { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) } .find { it.isFile && ImageUtil.isImage(it.name) { reader.getInputStream(it.name)!! } } } entry?.let { coverManager.update(manga, reader.getInputStream(it.name)!!) } } } is Format.Epub -> { format.file.epubReader(context).use { epub -> val entry = epub.getImagesFromPages().firstOrNull() entry?.let { coverManager.update(manga, epub.getInputStream(it)!!) } } } } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Error updating cover for ${manga.title}" } null } } companion object { const val ID = 0L const val HELP_URL = "https://mihon.app/docs/guides/local-source/" private val LATEST_THRESHOLD = 7.days.inWholeMilliseconds } } fun Manga.isLocal(): Boolean = source == LocalSource.ID fun Source.isLocal(): Boolean = id == LocalSource.ID fun DomainSource.isLocal(): Boolean = id == LocalSource.ID ================================================ FILE: source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/OrderBy.kt ================================================ package tachiyomi.source.local.filter import android.content.Context import eu.kanade.tachiyomi.source.model.Filter import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR sealed class OrderBy(context: Context, selection: Selection) : Filter.Sort( context.stringResource(MR.strings.local_filter_order_by), arrayOf(context.stringResource(MR.strings.title), context.stringResource(MR.strings.date)), selection, ) { class Popular(context: Context) : OrderBy(context, Selection(0, true)) class Latest(context: Context) : OrderBy(context, Selection(1, false)) } ================================================ FILE: source-local/src/androidMain/kotlin/tachiyomi/source/local/image/LocalCoverManager.kt ================================================ package tachiyomi.source.local.image import android.content.Context import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.storage.DiskUtil import tachiyomi.core.common.storage.nameWithoutExtension import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.source.local.io.LocalSourceFileSystem import java.io.InputStream private const val DEFAULT_COVER_NAME = "cover.jpg" actual class LocalCoverManager( private val context: Context, private val fileSystem: LocalSourceFileSystem, ) { actual fun find(mangaUrl: String): UniFile? { return fileSystem.getFilesInMangaDirectory(mangaUrl) // Get all file whose names start with "cover" .filter { it.isFile && it.nameWithoutExtension.equals("cover", ignoreCase = true) } // Get the first actual image .firstOrNull { ImageUtil.isImage(it.name) { it.openInputStream() } } } actual fun update( manga: SManga, inputStream: InputStream, ): UniFile? { val directory = fileSystem.getMangaDirectory(manga.url) if (directory == null) { inputStream.close() return null } val targetFile = find(manga.url) ?: directory.createFile(DEFAULT_COVER_NAME)!! inputStream.use { input -> targetFile.openOutputStream().use { output -> input.copyTo(output) } } DiskUtil.createNoMediaFile(directory, context) manga.thumbnail_url = targetFile.uri.toString() return targetFile } } ================================================ FILE: source-local/src/androidMain/kotlin/tachiyomi/source/local/io/LocalSourceFileSystem.kt ================================================ package tachiyomi.source.local.io import com.hippo.unifile.UniFile import tachiyomi.domain.storage.service.StorageManager actual class LocalSourceFileSystem( private val storageManager: StorageManager, ) { actual fun getBaseDirectory(): UniFile? { return storageManager.getLocalSourceDirectory() } actual fun getFilesInBaseDirectory(): List { return getBaseDirectory()?.listFiles().orEmpty().toList() } actual fun getMangaDirectory(name: String): UniFile? { return getBaseDirectory() ?.findFile(name) ?.takeIf { it.isDirectory } } actual fun getFilesInMangaDirectory(name: String): List { return getMangaDirectory(name)?.listFiles().orEmpty().toList() } } ================================================ FILE: source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubReaderExtensions.kt ================================================ package tachiyomi.source.local.metadata import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import mihon.core.archive.EpubReader import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale /** * Fills manga and chapter metadata using this epub file's metadata. */ fun EpubReader.fillMetadata(manga: SManga, chapter: SChapter) { val ref = getPackageHref() val doc = getPackageDocument(ref) val title = doc.getElementsByTag("dc:title").first() val publisher = doc.getElementsByTag("dc:publisher").first() val creator = doc.getElementsByTag("dc:creator").first() val description = doc.getElementsByTag("dc:description").first() var date = doc.getElementsByTag("dc:date").first() if (date == null) { date = doc.select("meta[property=dcterms:modified]").first() } creator?.text()?.let { manga.author = it } description?.text()?.let { manga.description = it } title?.text()?.let { chapter.name = it } if (publisher != null) { chapter.scanlator = publisher.text() } else if (creator != null) { chapter.scanlator = creator.text() } if (date != null) { val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()) try { val parsedDate = dateFormat.parse(date.text()) if (parsedDate != null) { chapter.date_upload = parsedDate.time } } catch (e: ParseException) { // Empty } } } ================================================ FILE: source-local/src/commonMain/kotlin/tachiyomi/source/local/LocalSource.kt ================================================ package tachiyomi.source.local import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.UnmeteredSource expect class LocalSource : CatalogueSource, UnmeteredSource ================================================ FILE: source-local/src/commonMain/kotlin/tachiyomi/source/local/image/LocalCoverManager.kt ================================================ package tachiyomi.source.local.image import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.source.model.SManga import java.io.InputStream expect class LocalCoverManager { fun find(mangaUrl: String): UniFile? fun update(manga: SManga, inputStream: InputStream): UniFile? } ================================================ FILE: source-local/src/commonMain/kotlin/tachiyomi/source/local/io/Archive.kt ================================================ package tachiyomi.source.local.io import com.hippo.unifile.UniFile import tachiyomi.core.common.storage.extension object Archive { private val SUPPORTED_ARCHIVE_TYPES = listOf("zip", "cbz", "rar", "cbr", "7z", "cb7", "tar", "cbt") fun isSupported(file: UniFile): Boolean { return file.extension?.lowercase() in SUPPORTED_ARCHIVE_TYPES } } ================================================ FILE: source-local/src/commonMain/kotlin/tachiyomi/source/local/io/Format.kt ================================================ package tachiyomi.source.local.io import com.hippo.unifile.UniFile import tachiyomi.core.common.storage.extension import tachiyomi.source.local.io.Archive.isSupported as isArchiveSupported sealed interface Format { data class Directory(val file: UniFile) : Format data class Archive(val file: UniFile) : Format data class Epub(val file: UniFile) : Format class UnknownFormatException : Exception() companion object { fun valueOf(file: UniFile) = when { file.isDirectory -> Directory(file) file.extension.equals("epub", true) -> Epub(file) isArchiveSupported(file) -> Archive(file) else -> throw UnknownFormatException() } } } ================================================ FILE: source-local/src/commonMain/kotlin/tachiyomi/source/local/io/LocalSourceFileSystem.kt ================================================ package tachiyomi.source.local.io import com.hippo.unifile.UniFile expect class LocalSourceFileSystem { fun getBaseDirectory(): UniFile? fun getFilesInBaseDirectory(): List fun getMangaDirectory(name: String): UniFile? fun getFilesInMangaDirectory(name: String): List } ================================================ FILE: telemetry/build.gradle.kts ================================================ import mihon.buildlogic.Config plugins { id("mihon.library") kotlin("android") } android { namespace = "mihon.telemetry" sourceSets { getByName("main") { if (Config.includeTelemetry) { kotlin.srcDirs("src/firebase/kotlin") } else { kotlin.srcDirs("src/noop/kotlin") manifest.srcFile("src/noop/AndroidManifext.xml") } } } } dependencies { if (Config.includeTelemetry) { implementation(platform(libs.firebase.bom)) implementation(libs.firebase.analytics) implementation(libs.firebase.crashlytics) } } ================================================ FILE: telemetry/src/firebase/kotlin/mihon/telemetry/PackageInfo.kt ================================================ package mihon.telemetry import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.content.pm.Signature import android.os.Build import java.security.MessageDigest internal fun PackageInfo.getCertificateFingerprints(): List { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { val signingInfo = signingInfo!! if (signingInfo.hasMultipleSigners()) { signingInfo.apkContentsSigners } else { signingInfo.signingCertificateHistory } } else { @Suppress("DEPRECATION") signatures } ?.map(Signature::getCertificateFingerprint) ?.toList() ?: emptyList() } internal val SignatureFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { PackageManager.GET_SIGNING_CERTIFICATES } else { @Suppress("DEPRECATION") PackageManager.GET_SIGNATURES } @OptIn(ExperimentalStdlibApi::class) private val CertificateFingerprintHexFormat = HexFormat { upperCase = true bytes { byteSeparator = ":" } } @OptIn(ExperimentalStdlibApi::class) private fun Signature.getCertificateFingerprint(): String { return MessageDigest.getInstance("SHA-256") .digest(toByteArray()) .toHexString(CertificateFingerprintHexFormat) } ================================================ FILE: telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt ================================================ package mihon.telemetry import android.content.Context import com.google.firebase.FirebaseApp import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics object TelemetryConfig { private var analytics: FirebaseAnalytics? = null private var crashlytics: FirebaseCrashlytics? = null fun init(context: Context) { // To stop forks/test builds from polluting our data if (!context.isMihonProductionApp()) return analytics = FirebaseAnalytics.getInstance(context) FirebaseApp.initializeApp(context) crashlytics = FirebaseCrashlytics.getInstance() } fun setAnalyticsEnabled(enabled: Boolean) { analytics?.setAnalyticsCollectionEnabled(enabled) } fun setCrashlyticsEnabled(enabled: Boolean) { crashlytics?.isCrashlyticsCollectionEnabled = enabled } private fun Context.isMihonProductionApp(): Boolean { if (packageName !in MIHON_PACKAGES) return false return packageManager.getPackageInfo(packageName, SignatureFlags) .getCertificateFingerprints() .any { it == MIHON_CERTIFICATE_FINGERPRINT } } } private val MIHON_PACKAGES = hashSetOf("app.mihon", "app.mihon.debug") private const val MIHON_CERTIFICATE_FINGERPRINT = "9A:DD:65:5A:78:E9:6C:4E:C7:A5:3E:F8:9D:CC:B5:57:CB:5D:76:74:89:FA:C5:E7:85:D6:71:A5:A7:5D:4D:A2" ================================================ FILE: telemetry/src/main/AndroidManifest.xml ================================================ ================================================ FILE: telemetry/src/noop/AndroidManifest.xml ================================================ ================================================ FILE: telemetry/src/noop/kotlin/mihon/telemetry/TelemetryConfig.kt ================================================ package mihon.telemetry import android.content.Context @Suppress("UNUSED_PARAMETER") object TelemetryConfig { fun init(context: Context) = Unit fun setAnalyticsEnabled(enabled: Boolean) = Unit fun setCrashlyticsEnabled(enabled: Boolean) = Unit }